Merge lp:~compiz-team/compiz-core/compiz-core.fix_879253 into lp:compiz-core/0.9.5

Proposed by Sam Spilsbury
Status: Merged
Merged at revision: 2890
Proposed branch: lp:~compiz-team/compiz-core/compiz-core.fix_879253
Merge into: lp:compiz-core/0.9.5
Diff against target: 111 lines (+54/-44)
1 file modified
plugins/scale/src/scale.cpp (+54/-44)
To merge this branch: bzr merge lp:~compiz-team/compiz-core/compiz-core.fix_879253
Reviewer Review Type Date Requested Status
Jason Smith (community) Approve
Review via email: mp+80080@code.launchpad.net

Description of the change

Fix bug 879253

The math was also a bit out causing flickering in some cases

To post a comment you must log in.
Revision history for this message
Jason Smith (jassmith) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'plugins/scale/src/scale.cpp'
2--- plugins/scale/src/scale.cpp 2011-10-17 09:57:48 +0000
3+++ plugins/scale/src/scale.cpp 2011-10-21 15:23:24 +0000
4@@ -267,53 +267,63 @@
5 if (window->state () & CompWindowStateHiddenMask)
6 {
7 GLfloat factor = 0;
8+ GLfloat targetX, targetY, targetScale;
9+ GLfloat scaleFactor, xFactor, yFactor, divFactor = 3.0f;
10
11 if (priv->slot)
12 {
13- GLfloat scaleFactor, xFactor, yFactor;
14-
15- /* Don't FDIV0 */
16- if (priv->scale - priv->slot->scale == 0.0f)
17- scaleFactor = 1.0f;
18- else
19- scaleFactor = (1.0f - priv->scale) / (1.0f - priv->slot->scale);
20-
21- if (priv->slot->x () - ((float) window->x () + priv->tx) == 0.0f)
22- xFactor = 1.0f;
23- else
24- xFactor = priv->slot->x () / ((float) window->x () + priv->tx);
25-
26- if (priv->slot->y () - ((float) window->y () + priv->ty) == 0.0f)
27- yFactor = 1.0f;
28- else
29- yFactor = priv->slot->y () / ((float) window->y () + priv->ty);
30-
31- factor = (scaleFactor + xFactor + yFactor) / 3.0f;
32- attrib.opacity *= factor;
33- }
34- else
35- {
36- GLfloat scaleFactor, xFactor, yFactor;
37-
38- /* Don't FDIV0 */
39- if (priv->scale - priv->slot->scale == 0.0f)
40- scaleFactor = 1.0f;
41- else
42- scaleFactor = (1.0f - priv->scale) / (1.0f - priv->slot->scale);
43-
44- if (priv->lastTargetX - ((float) window->x () + priv->tx) == 0.0f)
45- xFactor = 1.0f;
46- else
47- xFactor = priv->lastTargetX / ((float) window->x () + priv->tx);
48-
49- if (priv->lastTargetY - ((float) window->y () + priv->ty) == 0.0f)
50- yFactor = 1.0f;
51- else
52- yFactor = priv->lastTargetY / ((float) window->y () + priv->ty);
53-
54- factor = (scaleFactor + xFactor + yFactor) / 3.0f;
55- attrib.opacity *= factor;
56- }
57+ targetX = priv->slot->x ();
58+ targetY = priv->slot->y ();
59+ targetScale = priv->slot->scale;
60+ }
61+ else
62+ {
63+ targetX = priv->lastTargetX;
64+ targetY = priv->lastTargetY;
65+ targetScale = priv->lastTargetScale;
66+ }
67+
68+ /* Don't FDIV0 */
69+ if (targetScale - priv->scale == 0.0f)
70+ {
71+ divFactor -= 1.0f;
72+ scaleFactor = 1.0f;
73+ }
74+ else
75+ scaleFactor = (1.0f - priv->scale) / (1.0f - targetScale);
76+
77+ if (targetX - ((float) window->x () + priv->tx) == 0.0f)
78+ {
79+ divFactor -= 1.0f;
80+ xFactor = 1.0f;
81+ }
82+ else
83+ {
84+ float distActual = fabsf (window->x () - ((float) window->x () + priv->tx));
85+ float distTarget = fabsf (window->x () - targetX);
86+
87+ xFactor = distActual / distTarget;
88+ }
89+
90+ if (targetY - ((float) window->y () + priv->ty) == 0.0f)
91+ {
92+ divFactor -= 1.0f;
93+ yFactor = 1.0f;
94+ }
95+ else
96+ {
97+ float distActual = fabsf (window->y () - ((float) window->y () + priv->ty));
98+ float distTarget = fabsf (window->y () - targetY);
99+
100+ yFactor = distActual / distTarget;
101+ }
102+
103+ if (divFactor)
104+ factor = (scaleFactor + xFactor + yFactor) / divFactor;
105+ else
106+ factor = 1.0f;
107+
108+ attrib.opacity *= factor;
109 }
110
111 if (priv->adjust || priv->slot)

Subscribers

People subscribed via source and target branches