summaryrefslogtreecommitdiff
path: root/plugins/clone/src/clone.h
diff options
context:
space:
mode:
authorSam Spilsbury <smspillaz@XPS-FEDORA.(none)>2009-08-11 22:20:20 +0800
committerSam Spilsbury <smspillaz@XPS-FEDORA.(none)>2009-08-11 22:20:20 +0800
commit2a4208d57d6c714e618e3abc97481f63e7027188 (patch)
tree6f768ab6219e14541d173a629363c36d2061bfb8 /plugins/clone/src/clone.h
parent7e6d57871799d4aa8d82a6b85d5c142d85d49221 (diff)
downloadcompiz-with-glib-mainloop-2a4208d57d6c714e618e3abc97481f63e7027188.tar.gz
compiz-with-glib-mainloop-2a4208d57d6c714e618e3abc97481f63e7027188.tar.bz2
C++ port of the clone plugin, thanks for Erkin Baceci <erkinbah@gmail.com> for proofreading
Diffstat (limited to 'plugins/clone/src/clone.h')
-rw-r--r--plugins/clone/src/clone.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/plugins/clone/src/clone.h b/plugins/clone/src/clone.h
new file mode 100644
index 0000000..0fb25e3
--- /dev/null
+++ b/plugins/clone/src/clone.h
@@ -0,0 +1,147 @@
+/*
+ * Copyright © 2006 Novell, Inc.
+ *
+ * clone.h
+ *
+ * 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
+ * Novell, Inc. not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior permission.
+ * Novell, Inc. makes no representations about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ *
+ * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+ * NO EVENT SHALL NOVELL, INC. 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.
+ *
+ * Ported to Compiz 0.9 by:
+ * Copyright (c) 2009 Sam Spilsbury <smspillaz@gmail.com>
+ *
+ * Author: David Reveman <davidr@novell.com>
+ */
+
+#include <cmath>
+
+#include <core/core.h>
+#include <core/pluginclasshandler.h>
+
+#include <composite/composite.h>
+#include <opengl/opengl.h>
+
+#include "clone_options.h"
+
+class Clone
+{
+ public:
+ int src;
+ int dst;
+ CompRegion region;
+ Window input;
+};
+
+class CloneScreen :
+ public PluginClassHandler <CloneScreen, CompScreen>,
+ public CloneOptions,
+ public ScreenInterface,
+ public CompositeScreenInterface,
+ public GLScreenInterface
+{
+ public:
+ CloneScreen (CompScreen *);
+ ~CloneScreen ();
+
+ CompositeScreen *cScreen;
+ GLScreen *gScreen;
+
+ CompScreen::GrabHandle grabHandle;
+ bool grab;
+
+ float offset;
+
+ bool transformed;
+
+ std::list <Clone *> clones;
+ int x, y;
+ int grabbedOutput;
+ int src, dst;
+
+ void
+ handleEvent (XEvent *);
+
+ void
+ preparePaint (int);
+
+ bool
+ glPaintOutput (const GLScreenPaintAttrib &,
+ const GLMatrix &,
+ const CompRegion &,
+ CompOutput *,
+ unsigned int);
+
+ void
+ donePaint ();
+
+ void
+ outputChangeNotify ();
+
+ /* Internal class functions */
+
+ void
+ finish ();
+
+ bool
+ initiate (CompAction *action,
+ CompAction::State state,
+ CompOption::Vector options);
+
+ bool
+ terminate (CompAction *action,
+ CompAction::State state,
+ CompOption::Vector options);
+
+ void
+ setStrutsForCloneWindow (Clone *clone);
+
+ void
+ handleMotionEvent (CompPoint &p);
+
+};
+
+class CloneWindow :
+ public PluginClassHandler <CloneWindow, CompWindow>,
+ public GLWindowInterface
+{
+ public:
+ CloneWindow (CompWindow *window);
+
+ CompositeWindow *cWindow;
+ GLWindow *gWindow;
+
+ bool
+ glPaint (const GLWindowPaintAttrib &attrib,
+ const GLMatrix &transform,
+ const CompRegion &region,
+ unsigned int mask);
+};
+
+#define CLONE_SCREEN(s) \
+ CloneScreen *cs = CloneScreen::get (s)
+
+#define CLONE_WINDOW(w) \
+ CloneWindow *cw = CloneWindow::get (w)
+
+class ClonePluginVTable :
+ public CompPlugin::VTableForScreenAndWindow <CloneScreen, CloneWindow>
+{
+ public:
+
+ bool init ();
+};