[compiz] Contributor Contributions

Scott Moreau oreaus at gmail.com
Mon Nov 24 06:42:55 PST 2014


Also, a bit of work that was removed, in ezoom. The reason for the removal
of this code is still pending, even though it happened 4 years ago.

http://sprunge.us/GSaU


commit 624ebd62db00d7b9d2273ab8b42d1d4a3269939b
Author: Scott Moreau <oreaus at gmail.com>
Date:   Tue Sep 14 20:20:46 2010 -0600

    Fix uninitialized variable.

diff --git a/src/ezoom.cpp b/src/ezoom.cpp
index fe91e40..f22fbcf 100644
--- a/src/ezoom.cpp
+++ b/src/ezoom.cpp
@@ -826,6 +826,8 @@ EZoomScreen::convertToZoomedTarget (int	  out,
 	*resultY = y;
     }

+    o = &screen->outputDevs ().at (out);
+
     ZoomArea    &za = zooms.at (out);

     x -= o->x1 ();

commit 5cf8515d741880d49e9ce03798f551c2afd79814
Author: Scott Moreau <oreaus at gmail.com>
Date:   Wed Aug 18 05:49:07 2010 -0600

    Add theater mode.

diff --git a/ezoom.xml.in b/ezoom.xml.in
index 3eda311..2f6e5ed 100644
--- a/ezoom.xml.in
+++ b/ezoom.xml.in
@@ -50,6 +50,18 @@
 		    <_long>Zoom in on a boxed area</_long>
 		    <default><Super>Button2</default>
 		</option>
+		<option name="theater_mode" type="bool">
+		    <_short>Theater mode</_short>
+		    <_long>Black out any area not selected by Zoom Box.</_long>
+		    <default>false</default>
+		</option>
+		<option type="int" name="theater_fade_timeout">
+		    <_short>Theater fade timeout</_short>
+		    <_long>Time in ms for fade in/out.</_long>
+		    <default>2000</default>
+		    <min>1</min>
+		    <max>8000</max>
+		</option>
 	    </group>
 	    <group>
 		<_short>Mouse Behaviour</_short>
diff --git a/src/ezoom.cpp b/src/ezoom.cpp
index 07a90d9..a35a4ee 100644
--- a/src/ezoom.cpp
+++ b/src/ezoom.cpp
@@ -136,6 +136,13 @@ isZoomed (int out)
     return false;
 }

+void
+EZoomScreen::terminateTheater ()
+{
+    tFadingIn = false;
+    tFadingOut = true;
+}
+
 /* Returns the distance to the defined edge in zoomed pixels.  */
 int
 EZoomScreen::distanceToEdge (int out, EZoomScreen::ZoomEdge edge)
@@ -304,6 +311,43 @@ EZoomScreen::adjustXYVelocity (int out, float chunk)
 	(zooms.at (out).yVelocity * chunk) / cScreen->redrawTime ();
 }

+void
+EZoomScreen::updateTheater (int ms)
+{
+
+    if (tFadingIn || tFadingOut)
+	tAlpha = (1.0 - ((tDuration - tTimer) / (float) tDuration)) * OPAQUE;
+
+    if (tAlpha < 0)
+	tAlpha = 0;
+
+    if (tTimer >= tDuration || tAlpha > OPAQUE)
+    {
+	tAlpha = OPAQUE;
+	tFadingIn = false;
+	tTimer = tDuration;
+    }
+
+    if (tTimer <= 0)
+    {
+	theaterZoomActive = false;
+	tAlpha = 0;
+	tFadingOut = false;
+	tTimer = 0;
+    }
+    else
+	theaterZoomActive = true;
+
+    if (tFadingIn)
+	tTimer += ms;
+
+    if (tFadingOut)
+	tTimer -= ms;
+
+    if (tAlpha == 0 || tTimer == 0)
+	tFadingOut = false;
+}
+
 /* Animate the movement (if any) in preparation of a paint screen.  */
 void
 EZoomScreen::preparePaint (int	   msSinceLastPaint)
@@ -334,7 +378,7 @@ EZoomScreen::preparePaint (int	   msSinceLastPaint)
 		    zooms.at (out).xVelocity = zooms.at (out).yVelocity =
 			0.0f;
 		    grabbed &= ~(1 << zooms.at (out).output);
-		    if (!grabbed)
+		    if (!grabbed && !tFadingIn && !tFadingOut)
 		    {
 			cScreen->damageScreen ();
 			toggleFunctions (false);
@@ -346,6 +390,9 @@ EZoomScreen::preparePaint (int	   msSinceLastPaint)
 	    syncCenterToMouse ();
     }

+    if (optionGetTheaterMode ())
+	updateTheater (msSinceLastPaint);
+
     cScreen->preparePaint (msSinceLastPaint);
 }

@@ -367,9 +414,12 @@ EZoomScreen::donePaint ()
     }
     else if (grabIndex)
 	cScreen->damageScreen ();
-    else
+    else if (!tFadingIn && !tFadingOut)
         toggleFunctions (false);

+    if (tFadingIn || tFadingOut)
+	cScreen->damageScreen ();
+
     cScreen->donePaint ();
 }
 /* Draws a box from the screen coordinates inx1,iny1 to inx2,iny2 */
@@ -409,6 +459,44 @@ EZoomScreen::drawBox (const GLMatrix &transform,
     glEnableClientState (GL_TEXTURE_COORD_ARRAY);
     glPopMatrix ();
 }
+
+void
+EZoomScreen::drawTheater (const GLScreenPaintAttrib &sAttrib,
+			  const GLMatrix            &transform,
+			  CompOutput                *output)
+{
+    if (!theaterZoomActive || !optionGetTheaterMode ())
+	return;
+
+    /* Creates a list of rects to draw storing them in a region
+     * We want to draw everywhere except for selectedZoomBox */
+    CompRegion outputReg (*output);
+    CompRegion visibleReg (selectedZoomBox);
+    CompRegion blackReg = outputReg - visibleReg;
+
+    GLMatrix sTransform (transform);
+
+    glPushMatrix ();
+
+    sTransform.toScreenSpace (output, -DEFAULT_Z_CAMERA);
+
+    glLoadMatrixf (sTransform.getMatrix ());
+
+    glDisableClientState (GL_TEXTURE_COORD_ARRAY);
+    glEnable (GL_BLEND);
+
+    /* fill rectangles with black */
+    glColor4us (0x0000, 0x0000, 0x0000, tAlpha);
+    foreach (const CompRect &r, blackReg.rects ())
+	glRecti (r.x1 (), r.y2 (), r.x2 (), r.y1 ());
+
+    /* clean up */
+    glColor4usv (defaultColor);
+    glDisable (GL_BLEND);
+    glEnableClientState (GL_TEXTURE_COORD_ARRAY);
+    glPopMatrix ();
+}
+
 /* Apply the zoom if we are grabbed.
  * Make sure to use the correct filter.
  */
@@ -422,7 +510,7 @@ EZoomScreen::glPaintOutput (const
GLScreenPaintAttrib &attrib,
     bool status;
     int	 out = output->id ();

-    if (isActive (out))
+    if ((isActive (out) || theaterZoomActive) && out >= 0)
     {
 	GLScreenPaintAttrib sa = attrib;
 	GLMatrix            zTransform = transform;
@@ -443,12 +531,18 @@ EZoomScreen::glPaintOutput (const
GLScreenPaintAttrib &attrib,

 	drawCursor (output, transform);

+	drawTheater (attrib, zTransform, output);
+
+	/* If all outputs are inactive, we automatically assume fade out */
+	if (zooms.empty ())
+	    terminateTheater ();
     }
     else
     {
 	status = gScreen->glPaintOutput (attrib, transform, region, output,
 									mask);
     }
+
     if (grabIndex)
 	drawBox (transform, output, box);

@@ -1360,6 +1454,14 @@ EZoomScreen::zoomBoxDeactivate (CompAction
   *action,
         width = MAX (box.x1 (), box.x2 ()) - x;
         height = MAX (box.y1 (), box.y2 ()) - y;

+	if (optionGetTheaterMode ())
+	{
+	    selectedZoomBox.setGeometry (box.x (), box.y (),
+					 box.width (), box.height ());
+	    tFadingIn = theaterZoomActive = true;
+	    tFadingOut = false;
+	}
+
         CompWindow::Geometry outGeometry (x, y, width, height, 0);

         out = screen->outputDeviceForGeometry (outGeometry);
@@ -1596,6 +1698,8 @@ EZoomScreen::zoomOut (CompAction         *action,
 	      zooms.at (out).newZoom *
 	      optionGetZoomFactor ());

+    terminateTheater ();
+
     toggleFunctions (true);

     return true;
@@ -1742,6 +1846,17 @@ EZoomScreen::CursorTexture::CursorTexture () :
 }

 void
+EZoomScreen::optionChanged (CompOption	*opt,
+			    Options	num)
+{
+    tDuration = optionGetTheaterFadeTimeout ();
+    terminateTheater ();
+
+    if (!optionGetTheaterMode ())
+	tAlpha = tTimer = 0;
+}
+
+void
 EZoomScreen::postLoad ()
 {
     if (!grabbed)
@@ -1769,6 +1884,13 @@ EZoomScreen::EZoomScreen (CompScreen *screen) :
     PluginStateWriter <EZoomScreen> (this, screen->root ()),
     cScreen (CompositeScreen::get (screen)),
     gScreen (GLScreen::get (screen)),
+    selectedZoomBox (emptyRegion.boundingRect ()),
+    theaterZoomActive (false),
+    tFadingIn (false),
+    tFadingOut (false),
+    tAlpha (0),
+    tTimer (0),
+    tDuration (optionGetTheaterFadeTimeout ()),
     grabbed (0),
     grabIndex (0),
     lastChange (0),
@@ -1857,6 +1979,10 @@ EZoomScreen::EZoomScreen (CompScreen *screen) :
     optionSetEnsureVisibilityInitiate (boost::bind (
 					&EZoomScreen::ensureVisibilityAction, this,
 					_1, _2, _3));
+    optionSetTheaterFadeTimeoutNotify (boost::bind
(&EZoomScreen::optionChanged,
+								this, _1, _2));
+    optionSetTheaterModeNotify (boost::bind (&EZoomScreen::optionChanged,
+								this, _1, _2));

 }

diff --git a/src/ezoom.h b/src/ezoom.h
index c94f920..d5997c5 100644
--- a/src/ezoom.h
+++ b/src/ezoom.h
@@ -192,6 +192,27 @@ class EZoomScreen :

     public:

+	CompRect	selectedZoomBox;
+	bool		theaterZoomActive, tFadingIn, tFadingOut;
+	int		tAlpha, tTimer, tDuration;
+
+	void
+	drawTheater (const GLScreenPaintAttrib	&sAttrib,
+		     const GLMatrix		&transform,
+		     CompOutput			*output);
+
+	void
+	updateTheater (int ms);
+
+	void
+	terminateTheater ();
+
+	void
+	optionChanged (CompOption	*opt,
+		       Options		num);
+
+    public:
+
 	template <class Archive>
 	void serialize (Archive &ar, const unsigned int version)
 	{

commit 187b1a6ebec40beb3e88a6fa980a20bb8adb665e
Author: Scott Moreau <oreaus at gmail.com>
Date:   Sat Jul 3 18:00:52 2010 -0600

    Use better conditional to avoid constant polling and damage after
loading the plugin.

diff --git a/src/ezoom.cpp b/src/ezoom.cpp
index 82cd347..aaf0fe2 100644
--- a/src/ezoom.cpp
+++ b/src/ezoom.cpp
@@ -1789,7 +1789,7 @@ EZoomScreen::CursorTexture::CursorTexture () :
 void
 EZoomScreen::postLoad ()
 {
-    if (zooms.empty ())
+    if (!grabbed)
 	return;

     toggleFunctions (true);
diff --git a/src/ezoom.h b/src/ezoom.h
index 7fc05cf..c94f920 100644
--- a/src/ezoom.h
+++ b/src/ezoom.h
@@ -197,6 +197,7 @@ class EZoomScreen :
 	{
 	    ar & zooms;
 	    ar & lastChange;
+	    ar & grabbed;
 	}

 	std::vector <ZoomArea>   zooms; // list of zooms (different zooms for



- Scott
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/compiz/attachments/20141124/8af86ae4/attachment.html>


More information about the compiz mailing list