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
=== modified file 'plugins/scale/src/scale.cpp'
--- plugins/scale/src/scale.cpp 2011-10-17 09:57:48 +0000
+++ plugins/scale/src/scale.cpp 2011-10-21 15:23:24 +0000
@@ -267,53 +267,63 @@
267 if (window->state () & CompWindowStateHiddenMask)267 if (window->state () & CompWindowStateHiddenMask)
268 {268 {
269 GLfloat factor = 0;269 GLfloat factor = 0;
270 GLfloat targetX, targetY, targetScale;
271 GLfloat scaleFactor, xFactor, yFactor, divFactor = 3.0f;
270272
271 if (priv->slot)273 if (priv->slot)
272 {274 {
273 GLfloat scaleFactor, xFactor, yFactor;275 targetX = priv->slot->x ();
274276 targetY = priv->slot->y ();
275 /* Don't FDIV0 */277 targetScale = priv->slot->scale;
276 if (priv->scale - priv->slot->scale == 0.0f)278 }
277 scaleFactor = 1.0f;279 else
278 else280 {
279 scaleFactor = (1.0f - priv->scale) / (1.0f - priv->slot->scale);281 targetX = priv->lastTargetX;
280282 targetY = priv->lastTargetY;
281 if (priv->slot->x () - ((float) window->x () + priv->tx) == 0.0f)283 targetScale = priv->lastTargetScale;
282 xFactor = 1.0f;284 }
283 else285
284 xFactor = priv->slot->x () / ((float) window->x () + priv->tx);286 /* Don't FDIV0 */
285287 if (targetScale - priv->scale == 0.0f)
286 if (priv->slot->y () - ((float) window->y () + priv->ty) == 0.0f)288 {
287 yFactor = 1.0f;289 divFactor -= 1.0f;
288 else290 scaleFactor = 1.0f;
289 yFactor = priv->slot->y () / ((float) window->y () + priv->ty);291 }
290292 else
291 factor = (scaleFactor + xFactor + yFactor) / 3.0f;293 scaleFactor = (1.0f - priv->scale) / (1.0f - targetScale);
292 attrib.opacity *= factor;294
293 }295 if (targetX - ((float) window->x () + priv->tx) == 0.0f)
294 else296 {
295 {297 divFactor -= 1.0f;
296 GLfloat scaleFactor, xFactor, yFactor;298 xFactor = 1.0f;
297299 }
298 /* Don't FDIV0 */300 else
299 if (priv->scale - priv->slot->scale == 0.0f)301 {
300 scaleFactor = 1.0f;302 float distActual = fabsf (window->x () - ((float) window->x () + priv->tx));
301 else303 float distTarget = fabsf (window->x () - targetX);
302 scaleFactor = (1.0f - priv->scale) / (1.0f - priv->slot->scale);304
303305 xFactor = distActual / distTarget;
304 if (priv->lastTargetX - ((float) window->x () + priv->tx) == 0.0f)306 }
305 xFactor = 1.0f;307
306 else308 if (targetY - ((float) window->y () + priv->ty) == 0.0f)
307 xFactor = priv->lastTargetX / ((float) window->x () + priv->tx);309 {
308310 divFactor -= 1.0f;
309 if (priv->lastTargetY - ((float) window->y () + priv->ty) == 0.0f)311 yFactor = 1.0f;
310 yFactor = 1.0f;312 }
311 else313 else
312 yFactor = priv->lastTargetY / ((float) window->y () + priv->ty);314 {
313315 float distActual = fabsf (window->y () - ((float) window->y () + priv->ty));
314 factor = (scaleFactor + xFactor + yFactor) / 3.0f;316 float distTarget = fabsf (window->y () - targetY);
315 attrib.opacity *= factor;317
316 }318 yFactor = distActual / distTarget;
319 }
320
321 if (divFactor)
322 factor = (scaleFactor + xFactor + yFactor) / divFactor;
323 else
324 factor = 1.0f;
325
326 attrib.opacity *= factor;
317 }327 }
318328
319 if (priv->adjust || priv->slot)329 if (priv->adjust || priv->slot)

Subscribers

People subscribed via source and target branches