From a03b796335c8c945b9a1c4238201616d2e5600ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Sun, 3 Dec 2006 13:37:44 +0000 Subject: [PATCH] Screen scaling. svn path=/branches/work/kwin_composite/; revision=610135 --- scene_xrender.cpp | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/scene_xrender.cpp b/scene_xrender.cpp index c542e3a80a..17a8f7f554 100644 --- a/scene_xrender.cpp +++ b/scene_xrender.cpp @@ -357,29 +357,34 @@ void SceneXrender::Window::performPaint( int mask, QRegion region, WindowPaintDa int y = toplevel->y(); int width = toplevel->width(); int height = toplevel->height(); - if( mask & PAINT_SCREEN_TRANSFORMED ) - { - // TODO xScale, yScale - x += screen_paint.xTranslate; - y += screen_paint.yTranslate; - } + double xscale = 1; + double yscale = 1; if( mask & PAINT_WINDOW_TRANSFORMED ) { + xscale *= data.xScale; + yscale *= data.yScale; x += data.xTranslate; y += data.yTranslate; } - bool transform = false; - if(( mask & PAINT_WINDOW_TRANSFORMED ) && ( data.xScale != 1 || data.yScale != 1 )) + if( mask & PAINT_SCREEN_TRANSFORMED ) + { + xscale *= screen_paint.xScale; + yscale *= screen_paint.yScale; + x = int( x * screen_paint.xScale ); + y = int( y * screen_paint.yScale ); + x += screen_paint.xTranslate; + y += screen_paint.yTranslate; + } + if( yscale != 1 || xscale != 1 ) { XTransform xform = {{ - { XDoubleToFixed( 1 / data.xScale ), XDoubleToFixed( 0 ), XDoubleToFixed( 0 ) }, - { XDoubleToFixed( 0 ), XDoubleToFixed( 1 / data.yScale ), XDoubleToFixed( 0 ) }, + { XDoubleToFixed( 1 / xscale ), XDoubleToFixed( 0 ), XDoubleToFixed( 0 ) }, + { XDoubleToFixed( 0 ), XDoubleToFixed( 1 / yscale ), XDoubleToFixed( 0 ) }, { XDoubleToFixed( 0 ), XDoubleToFixed( 0 ), XDoubleToFixed( 1 ) } }}; XRenderSetPictureTransform( display(), pic, &xform ); - width = (int)(width * data.xScale); - height = (int)(height * data.yScale); - transform = true; + width = (int)(width * xscale); + height = (int)(height * yscale); } if( opaque ) { @@ -392,7 +397,7 @@ void SceneXrender::Window::performPaint( int mask, QRegion region, WindowPaintDa XRenderComposite( display(), PictOpOver, pic, alpha, buffer, 0, 0, 0, 0, x, y, width, height); } - if( transform ) + if( xscale != 1 || yscale != 1 ) { XTransform xform = {{ { XDoubleToFixed( 1 ), XDoubleToFixed( 0 ), XDoubleToFixed( 0 ) },