diff options
Diffstat (limited to 'lpint.h')
-rw-r--r-- | lpint.h | 127 |
1 files changed, 127 insertions, 0 deletions
@@ -0,0 +1,127 @@ +/* + * $Id$ + * + * Copyright © 2004 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "lightpipe.h" +#include <X11/extensions/Xdamage.h> +#include <X11/extensions/Xcomposite.h> +#include <X11/extensions/XShm.h> +#include <X11/Xresource.h> +#include <X11/Xutil.h> +#include <sys/types.h> +#include <sys/ipc.h> +#include <sys/shm.h> +#include <stdlib.h> + +#define LP_WINDOW_EVENT_MASK (StructureNotifyMask) + +typedef struct _light_pipe_window { + XLightPipeWindow public; + Display *display; + Window window; + Visual *visual; + int depth; + XShmSegmentInfo shm_info; + Pixmap shm_pixmap; + GC shm_gc; + Damage damage; + XserverRegion repair; + struct _light_pipe_window *next_damaged; +} light_pipe_window; + +typedef struct _light_pipe_extension { + int event_base; + int error_base; +} light_pipe_extension; + +typedef struct _light_pipe_display { + Display *display; + light_pipe_window *damaged; + light_pipe_extension xfixes; + light_pipe_extension damage; + light_pipe_extension composite; +} light_pipe_display; + +/* lpdamage.c */ + +/* mark area as damaged */ +void +damage_window (light_pipe_window *lpw, int x, int y, int width, int height); + +/* synchronize local copy of window with remote */ +void +update_window (light_pipe_window *lpw); + +/* mark window as entirely undamaged */ +void +undamage_window (light_pipe_window *lpw); + +light_pipe_window * +find_damaged (Display *display); + +/* lpdisplay.c */ + +light_pipe_display * +find_display (Display *display); + +/* lpevent.c */ + +Bool +await_event (Display *display); + +void +process_events (Display *display); + +/* lptable.c */ + +int +lp_context (void); + +light_pipe_window * +find_window (Display *display, Window window); + +light_pipe_window * +add_window (Display *display, Window window); + +void +remove_window (Display *display, Window window); + +/* lpimage.c */ + +Bool +create_window_image (light_pipe_window *lpw); + +void +destroy_window_image (light_pipe_window *lpw); + +void +update_region (light_pipe_window *lpw, int x, int y, int width, int height); + +/* lpinit.c */ + +Bool +init_window (Display *display, Window window, light_pipe_window *lpw); + +void +fini_window (Display *display, Window window, light_pipe_window *lpw); + |