summaryrefslogtreecommitdiff
path: root/lpint.h
diff options
context:
space:
mode:
Diffstat (limited to 'lpint.h')
-rw-r--r--lpint.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/lpint.h b/lpint.h
new file mode 100644
index 0000000..7386bd3
--- /dev/null
+++ b/lpint.h
@@ -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);
+