Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
desktops.c desktops.h ecompmgr.c ecompmgr.h fx.c
Log Message:
Fix ripples/waves on xorg 1.4 when composite is active.
===================================================================
RCS file: /cvs/e/e16/e/src/desktops.c,v
retrieving revision 1.288
retrieving revision 1.289
diff -u -3 -r1.288 -r1.289
--- desktops.c 10 May 2008 23:22:31 -0000 1.288
+++ desktops.c 1 Jun 2008 20:53:11 -0000 1.289
@@ -473,12 +473,10 @@
Efree(dsk);
}
-Win
-DeskGetBackgroundWin(const Desk * dsk)
+EObj *
+DeskGetBackgroundObj(const Desk * dsk)
{
- if (!dsk)
- return VROOT;
- return EobjGetWin(dsk->bg.o);
+ return (dsk) ? dsk->bg.o : NULL;
}
Pixmap
===================================================================
RCS file: /cvs/e/e16/e/src/desktops.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -3 -r1.32 -r1.33
--- desktops.h 10 May 2008 23:22:31 -0000 1.32
+++ desktops.h 1 Jun 2008 20:53:12 -0000 1.33
@@ -69,7 +69,7 @@
void DeskGoto(Desk * dsk);
void DeskGotoNum(unsigned int desk);
void DeskRestack(Desk * dsk);
-Win DeskGetBackgroundWin(const Desk * dsk);
+EObj *DeskGetBackgroundObj(const Desk * dsk);
Pixmap DeskGetBackgroundPixmap(const Desk * dsk);
Background *DeskBackgroundGet(const Desk * dsk);
===================================================================
RCS file: /cvs/e/e16/e/src/ecompmgr.c,v
retrieving revision 1.176
retrieving revision 1.177
diff -u -3 -r1.176 -r1.177
--- ecompmgr.c 10 May 2008 23:15:32 -0000 1.176
+++ ecompmgr.c 1 Jun 2008 20:53:12 -0000 1.177
@@ -49,6 +49,7 @@
#include <X11/Xutil.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xdamage.h>
+#include <X11/extensions/Xfixes.h>
#include <X11/extensions/Xrender.h>
#define ENABLE_SHADOWS 1
@@ -461,6 +462,19 @@
done:
if (pr)
XFree(pr);
+}
+
+void
+ECompMgrWinClipToGC(EObj * eo, GC gc)
+{
+ XserverRegion rgn = rgn_tmp2;
+
+ if (!eo || !eo->cmhook)
+ return;
+
+ ERegionCopy(rgn, Mode_compmgr.rgn_screen);
+ ERegionSubtract(rgn, eo->cmhook->clip);
+ XFixesSetGCClipRegion(disp, gc, 0, 0, rgn);
}
/*
===================================================================
RCS file: /cvs/e/e16/e/src/ecompmgr.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -3 -r1.36 -r1.37
--- ecompmgr.h 29 Mar 2008 17:18:58 -0000 1.36
+++ ecompmgr.h 1 Jun 2008 20:53:12 -0000 1.37
@@ -58,6 +58,7 @@
void ECompMgrWinChangeOpacity(EObj * eo, unsigned int opacity);
void ECompMgrWinChangeShadow(EObj * eo, int shadow);
Pixmap ECompMgrWinGetPixmap(const EObj * eo);
+void ECompMgrWinClipToGC(EObj * eo, GC gc);
void ECompMgrConfigGet(cfg_composite * cfg);
void ECompMgrConfigSet(const cfg_composite * cfg);
===================================================================
RCS file: /cvs/e/e16/e/src/fx.c,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -3 -r1.88 -r1.89
--- fx.c 24 May 2008 18:13:17 -0000 1.88
+++ fx.c 1 Jun 2008 20:53:12 -0000 1.89
@@ -23,6 +23,7 @@
#include "E.h"
#include "desktops.h"
#include "dialog.h"
+#include "ecompmgr.h"
#include "eimage.h"
#include "emodule.h"
#include "settings.h"
@@ -53,6 +54,13 @@
char paused;
} FXHandler;
+#if USE_COMPOSITE
+/* As of composite 0.4 we need to set the clip region */
+#define SET_GC_CLIP(eo, gc) ECompMgrWinClipToGC(eo, gc)
+#else
+#define SET_GC_CLIP(eo, gc)
+#endif
+
/****************************** RIPPLES *************************************/
#define fx_ripple_waterh 64
@@ -67,12 +75,15 @@
static double incv = 0, inch = 0;
static GC gc1 = 0, gc = 0;
int y;
+ EObj *bgeo;
+
+ bgeo = DeskGetBackgroundObj(DesksGetCurrent());
if (fx_ripple_above == None)
{
XGCValues gcv;
- fx_ripple_win = DeskGetBackgroundWin(DesksGetCurrent());
+ fx_ripple_win = EobjGetWin(bgeo);
fx_ripple_above =
ECreatePixmap(fx_ripple_win, WinGetW(VROOT),
@@ -87,23 +98,23 @@
}
if (fx_ripple_count == 0)
- XCopyArea(disp, EoGetXwin(DesksGetCurrent()), fx_ripple_above, gc, 0,
+ XCopyArea(disp, WinGetXwin(fx_ripple_win), fx_ripple_above, gc, 0,
WinGetH(VROOT) - (fx_ripple_waterh * 3), WinGetW(VROOT),
fx_ripple_waterh * 2, 0, 0);
fx_ripple_count++;
if (fx_ripple_count > 32)
fx_ripple_count = 0;
+
incv += 0.40;
if (incv > (M_PI_2 * 4))
- {
- incv = 0;
- }
+ incv = 0;
inch += 0.32;
if (inch > (M_PI_2 * 4))
- {
- inch = 0;
- }
+ inch = 0;
+
+ SET_GC_CLIP(bgeo, gc1);
+
for (y = 0; y < fx_ripple_waterh; y++)
{
double aa, a, p;
@@ -196,6 +207,9 @@
static char first = 1;
static char sintab[256];
static unsigned char disttab[fx_raindrop_size][fx_raindrop_size];
+ EObj *bgeo;
+
+ bgeo = DeskGetBackgroundObj(DesksGetCurrent());
if (fx_raindrops_win == None)
{
@@ -221,7 +235,7 @@
}
}
- fx_raindrops_win = DeskGetBackgroundWin(DesksGetCurrent());
+ fx_raindrops_win = EobjGetWin(bgeo);
if (gc)
EXFreeGC(gc);
@@ -252,6 +266,8 @@
}
}
+ SET_GC_CLIP(bgeo, gc1);
+
for (i = 0; i < fx_raindrops_number; i++)
{
fx_raindrops[i].count++;
@@ -469,13 +485,16 @@
double incx2;
static GC gc1 = 0, gc = 0;
int y;
+ EObj *bgeo;
+
+ bgeo = DeskGetBackgroundObj(DesksGetCurrent());
/* Check to see if we need to create stuff */
if (!fx_wave_above)
{
XGCValues gcv;
- fx_wave_win = DeskGetBackgroundWin(DesksGetCurrent());
+ fx_wave_win = EobjGetWin(bgeo);
fx_wave_above =
ECreatePixmap(fx_wave_win, WinGetW(VROOT), FX_WAVE_WATERH * 2, 0);
@@ -491,7 +510,7 @@
/* On the zero, grab the desktop again. */
if (fx_wave_count == 0)
{
- XCopyArea(disp, EoGetXwin(DesksGetCurrent()), fx_wave_above, gc, 0,
+ XCopyArea(disp, WinGetXwin(fx_wave_win), fx_wave_above, gc, 0,
WinGetH(VROOT) - (FX_WAVE_WATERH * 3), WinGetW(VROOT),
FX_WAVE_WATERH * 2, 0, 0);
}
@@ -514,6 +533,8 @@
if (incx > (M_PI_2 * 4))
incx = 0;
+ SET_GC_CLIP(bgeo, gc1);
+
/* Copy the area to correct bugs */
if (fx_wave_count == 0)
{
@@ -620,10 +641,12 @@
FX_imagespinner_timeout(void *data __UNUSED__)
{
char *string = NULL;
+ EObj *bgeo;
if (fx_imagespinner_win == None)
{
- fx_imagespinner_win = DeskGetBackgroundWin(DesksGetCurrent());
+ bgeo = DeskGetBackgroundObj(DesksGetCurrent());
+ fx_imagespinner_win = EobjGetWin(bgeo);
}
#if 0 /* Don't use getword */
@@ -671,7 +694,10 @@
static void
FX_ImageSpinner_Desk(void)
{
- fx_imagespinner_win = DeskGetBackgroundWin(DesksGetCurrent());
+ EObj *bgeo;
+
+ bgeo = DeskGetBackgroundObj(DesksGetCurrent());
+ fx_imagespinner_win = EobjGetWin(bgeo);
}
static void
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs