geometrycompositor.git
4 years agoAdd an early return to reorder_window master
Mikko Rasa [Wed, 23 Dec 2015 06:49:34 +0000 (08:49 +0200)]
Add an early return to reorder_window

This avoids a linear search in case the window is already at the right
position.

4 years agoUpdate the window pointer after reordering
Mikko Rasa [Tue, 22 Dec 2015 20:08:39 +0000 (22:08 +0200)]
Update the window pointer after reordering

Otherwise an incorrect window's map state may be checked.

4 years agoRefresh the screen on property changes
Mikko Rasa [Sun, 20 Dec 2015 13:01:35 +0000 (15:01 +0200)]
Refresh the screen on property changes

There might be no other events if properties are changed
non-interactively, e.g. from a ~/.xsession script.

4 years agoDynamically reconfigure monitors based on XRandR changes
Mikko Rasa [Sun, 20 Dec 2015 00:06:32 +0000 (02:06 +0200)]
Dynamically reconfigure monitors based on XRandR changes

4 years agoDon't try to create a mask out of null rects
Mikko Rasa [Fri, 18 Dec 2015 09:24:27 +0000 (11:24 +0200)]
Don't try to create a mask out of null rects

This may happen if the window is destroyed at just the right moment.

4 years agoRemove event debugging prints
Mikko Rasa [Mon, 14 Dec 2015 22:46:47 +0000 (00:46 +0200)]
Remove event debugging prints

4 years agoAdd a reset key to interactive control mode
Mikko Rasa [Mon, 14 Dec 2015 22:44:55 +0000 (00:44 +0200)]
Add a reset key to interactive control mode

4 years agoApply some extra distance in case of bulging curvature
Mikko Rasa [Mon, 14 Dec 2015 22:39:15 +0000 (00:39 +0200)]
Apply some extra distance in case of bulging curvature

It doesn't work perfectly for spherical curvature, but reasaonably enough
with values that are likely to be of practical use.

4 years agoTweak the view matrix in interactive control mode
Mikko Rasa [Mon, 14 Dec 2015 22:38:07 +0000 (00:38 +0200)]
Tweak the view matrix in interactive control mode

4 years agoRename some variables
Mikko Rasa [Mon, 14 Dec 2015 21:18:47 +0000 (23:18 +0200)]
Rename some variables

It's no longer just cylinder correction, so the variables should be more
generic too.

4 years agoOnly repaint the control interface when necessary
Mikko Rasa [Mon, 14 Dec 2015 21:08:02 +0000 (23:08 +0200)]
Only repaint the control interface when necessary

Rendering after every event can cause key repeat events to pile up in the
event queue and delay processing the selection events.

4 years agoImplement a spherical curvature correction
Mikko Rasa [Mon, 14 Dec 2015 21:02:22 +0000 (23:02 +0200)]
Implement a spherical curvature correction

4 years agoUse 4096 rather than 10000 as the fixed point multiplier
Mikko Rasa [Mon, 14 Dec 2015 20:56:49 +0000 (22:56 +0200)]
Use 4096 rather than 10000 as the fixed point multiplier

It has the advantage of producing values exactly representable as floats,
making various operations more consistently repeatable.

4 years agoInitialize correction values in the control program
Mikko Rasa [Mon, 14 Dec 2015 20:54:59 +0000 (22:54 +0200)]
Initialize correction values in the control program

Defaults are needed in case the interactive mode is started with no
correction defined yet.

4 years agoCorrectly check the length of the correction value property
Mikko Rasa [Mon, 14 Dec 2015 20:51:10 +0000 (22:51 +0200)]
Correctly check the length of the correction value property

4 years agoImplement an interactive adjustment mode to the control program
Mikko Rasa [Mon, 14 Dec 2015 19:46:07 +0000 (21:46 +0200)]
Implement an interactive adjustment mode to the control program

4 years agoFix a small error in calculating projection frustum vertices
Mikko Rasa [Mon, 14 Dec 2015 19:45:51 +0000 (21:45 +0200)]
Fix a small error in calculating projection frustum vertices

4 years agoUse the appropriate GLSL version for OpenGL 3.1
Mikko Rasa [Mon, 14 Dec 2015 17:36:58 +0000 (19:36 +0200)]
Use the appropriate GLSL version for OpenGL 3.1

4 years agoProvide geometry correction data through the X11 selection mechanism
Mikko Rasa [Mon, 14 Dec 2015 17:36:09 +0000 (19:36 +0200)]
Provide geometry correction data through the X11 selection mechanism

This will be the basis of an interactive adjustment mode.

4 years agoName atoms according to ICCCM
Mikko Rasa [Mon, 14 Dec 2015 13:59:15 +0000 (15:59 +0200)]
Name atoms according to ICCCM

Private atoms should be prefixed with an underscore and a vendor
identifier.

4 years agoUse None in place of 0 for XIDs
Mikko Rasa [Mon, 14 Dec 2015 11:19:03 +0000 (13:19 +0200)]
Use None in place of 0 for XIDs

4 years agoCheck that the root pixmap exists before using it
Mikko Rasa [Mon, 14 Dec 2015 11:14:34 +0000 (13:14 +0200)]
Check that the root pixmap exists before using it

4 years agoCleanup root window resources
Mikko Rasa [Mon, 14 Dec 2015 01:23:27 +0000 (03:23 +0200)]
Cleanup root window resources

4 years agoMonitor changes to the root window pixmap
Mikko Rasa [Mon, 14 Dec 2015 01:14:57 +0000 (03:14 +0200)]
Monitor changes to the root window pixmap

4 years agoInitialize some variables
Mikko Rasa [Mon, 14 Dec 2015 00:55:58 +0000 (02:55 +0200)]
Initialize some variables

4 years agoGet rid of the ugly debugging colors
Mikko Rasa [Mon, 14 Dec 2015 00:55:46 +0000 (02:55 +0200)]
Get rid of the ugly debugging colors

4 years agoRender root pixmap if available
Mikko Rasa [Sun, 13 Dec 2015 19:02:31 +0000 (21:02 +0200)]
Render root pixmap if available

4 years agoSynchronize after subtracting damage from windows
Mikko Rasa [Sun, 13 Dec 2015 16:52:19 +0000 (18:52 +0200)]
Synchronize after subtracting damage from windows

The change in 19993ce wasn't enough to completely avoid the race
condition, most likely because of direct rendering.

4 years agoSome tweaks to GL context usage
Mikko Rasa [Sun, 13 Dec 2015 16:32:32 +0000 (18:32 +0200)]
Some tweaks to GL context usage

4 years agoDefer window pixmap and mask updates until rendering time
Mikko Rasa [Sun, 13 Dec 2015 16:24:31 +0000 (18:24 +0200)]
Defer window pixmap and mask updates until rendering time

Interactive operations may result in a large number of changes within a
single frame.  Processing each one separately is a waste of time since
only the last results will be visible.  Additionally it's easier to make
sure the GL context is available.

4 years agoDon't update mask on ConfigureNotify
Mikko Rasa [Sun, 13 Dec 2015 16:19:50 +0000 (18:19 +0200)]
Don't update mask on ConfigureNotify

There's always a separate ShapeNotify event to signal shape changes.

4 years agoImprove event handling
Mikko Rasa [Sun, 13 Dec 2015 16:18:20 +0000 (18:18 +0200)]
Improve event handling

4 years agoMinor cosmetic fixes
Mikko Rasa [Sun, 13 Dec 2015 15:47:20 +0000 (17:47 +0200)]
Minor cosmetic fixes

4 years agoMask out transparent parts of shaped windows
Mikko Rasa [Sun, 13 Dec 2015 15:46:03 +0000 (17:46 +0200)]
Mask out transparent parts of shaped windows

4 years agoBe more efficient when finding the window for a damage event
Mikko Rasa [Sun, 13 Dec 2015 15:26:29 +0000 (17:26 +0200)]
Be more efficient when finding the window for a damage event

4 years agoAdd a helper function for creating textures
Mikko Rasa [Sun, 13 Dec 2015 12:58:58 +0000 (14:58 +0200)]
Add a helper function for creating textures

4 years agoClear damage before rendering the window
Mikko Rasa [Sun, 13 Dec 2015 12:27:12 +0000 (14:27 +0200)]
Clear damage before rendering the window

This avoids a race condition where the application might render to the
window after it has been rendered but before the damage is cleared.

4 years agoSimplify some formulas a bit
Mikko Rasa [Sun, 13 Dec 2015 12:12:44 +0000 (14:12 +0200)]
Simplify some formulas a bit

4 years agoUse a more 3d-y approach for generating the monitor mesh
Mikko Rasa [Sun, 13 Dec 2015 11:53:59 +0000 (13:53 +0200)]
Use a more 3d-y approach for generating the monitor mesh

It's easier to grasp, especially when more corrections are implemented.

The coordinates for cylinder correction are now spaced evenly by angle
rather than X coordinate.  This also fixes incorrect texture coordinates.

4 years agoDon't try to update vertices of disabled monitors
Mikko Rasa [Sat, 12 Dec 2015 18:13:31 +0000 (20:13 +0200)]
Don't try to update vertices of disabled monitors

4 years agoFix correction counting in the control program
Mikko Rasa [Sat, 12 Dec 2015 17:10:48 +0000 (19:10 +0200)]
Fix correction counting in the control program

4 years agoInvert the Y coordinate for monitors as well
Mikko Rasa [Sat, 12 Dec 2015 17:07:18 +0000 (19:07 +0200)]
Invert the Y coordinate for monitors as well

4 years agoImplement a control interface using properties on the root window
Mikko Rasa [Sat, 12 Dec 2015 16:21:48 +0000 (18:21 +0200)]
Implement a control interface using properties on the root window

4 years agoUnbind the vertex array after rendering
Mikko Rasa [Sat, 12 Dec 2015 16:20:42 +0000 (18:20 +0200)]
Unbind the vertex array after rendering

Otherwise buffer updates could inadvertently affect the last used vertex
array.

4 years agoMinor refactoring to initialize_monitor
Mikko Rasa [Sat, 12 Dec 2015 14:53:00 +0000 (16:53 +0200)]
Minor refactoring to initialize_monitor

4 years agoImplement vertical keystone and cylinder corrections
Mikko Rasa [Sat, 12 Dec 2015 14:37:53 +0000 (16:37 +0200)]
Implement vertical keystone and cylinder corrections

There's no configuration interface yet.

4 years agoAvoid unsigned errors when a window goes off the bottom of the screen
Mikko Rasa [Sat, 12 Dec 2015 13:26:09 +0000 (15:26 +0200)]
Avoid unsigned errors when a window goes off the bottom of the screen

4 years agoCleanup fixes
Mikko Rasa [Sat, 12 Dec 2015 12:25:01 +0000 (14:25 +0200)]
Cleanup fixes

4 years agoRender each monitor separately
Mikko Rasa [Sat, 12 Dec 2015 12:14:51 +0000 (14:14 +0200)]
Render each monitor separately

4 years agoSome more refactoring
Mikko Rasa [Sat, 12 Dec 2015 11:26:33 +0000 (13:26 +0200)]
Some more refactoring

4 years agoSome refactoring of OpenGL code
Mikko Rasa [Sat, 12 Dec 2015 11:17:02 +0000 (13:17 +0200)]
Some refactoring of OpenGL code

In preparation for geometry correction

4 years agoMove shader program linking to a separate function
Mikko Rasa [Sat, 12 Dec 2015 11:16:17 +0000 (13:16 +0200)]
Move shader program linking to a separate function

4 years agoMake the code compile cleanly in C90 mode
Mikko Rasa [Sat, 12 Dec 2015 10:42:59 +0000 (12:42 +0200)]
Make the code compile cleanly in C90 mode

4 years agoProcess ConfigureNotify events
Mikko Rasa [Fri, 11 Dec 2015 17:26:09 +0000 (19:26 +0200)]
Process ConfigureNotify events

All of the basic functionality should be done now, and the compositor is
in a usable state.  Rendering of non-rectangular windows is still buggy.

4 years agoDon't refresh non-dirty screens
Mikko Rasa [Fri, 11 Dec 2015 17:25:41 +0000 (19:25 +0200)]
Don't refresh non-dirty screens

4 years agoSet the dirty flags on most events, but only if the window was viewable
Mikko Rasa [Fri, 11 Dec 2015 17:25:04 +0000 (19:25 +0200)]
Set the dirty flags on most events, but only if the window was viewable

4 years agoVery minor refactoring
Mikko Rasa [Fri, 11 Dec 2015 17:24:23 +0000 (19:24 +0200)]
Very minor refactoring

4 years agoReact to ReparentNotify events
Mikko Rasa [Fri, 11 Dec 2015 16:56:04 +0000 (18:56 +0200)]
React to ReparentNotify events

When a reparenting window manager is in use, new windows appear on the
root window first and immediately get reparented.  We must unredirect
them so the contents appear in the window manager frame.

4 years agoProcess DestroyNotify events
Mikko Rasa [Fri, 11 Dec 2015 16:52:31 +0000 (18:52 +0200)]
Process DestroyNotify events

4 years agoFix the shutdown sequence to avoid memory leaks
Mikko Rasa [Fri, 11 Dec 2015 16:47:59 +0000 (18:47 +0200)]
Fix the shutdown sequence to avoid memory leaks

4 years agoFix uninitialized variables
Mikko Rasa [Fri, 11 Dec 2015 16:47:17 +0000 (18:47 +0200)]
Fix uninitialized variables

4 years agoIgnore errors from the X server
Mikko Rasa [Fri, 11 Dec 2015 16:35:20 +0000 (18:35 +0200)]
Ignore errors from the X server

Events don't provide enough information to perform all necessary
operations atomically, so some errors are unavoidable.

4 years agoRemove server grabbing code
Mikko Rasa [Fri, 11 Dec 2015 16:14:02 +0000 (18:14 +0200)]
Remove server grabbing code

It causes significant slowdown with some applications, and I haven't
actually noticed any tearing without it.

4 years agoAccount for border when drawing windows
Mikko Rasa [Fri, 11 Dec 2015 16:12:59 +0000 (18:12 +0200)]
Account for border when drawing windows

4 years agoRefresh the screen only when there's no events to process
Mikko Rasa [Fri, 11 Dec 2015 16:09:12 +0000 (18:09 +0200)]
Refresh the screen only when there's no events to process

4 years agoUse the shape extension to let input events through the overlay window
Mikko Rasa [Fri, 11 Dec 2015 15:32:47 +0000 (17:32 +0200)]
Use the shape extension to let input events through the overlay window

4 years agoInitial, marginally functional version
Mikko Rasa [Fri, 11 Dec 2015 15:17:55 +0000 (17:17 +0200)]
Initial, marginally functional version

Can redirect and display windows, but does not react to configure
events or many other things.