[Libreoffice-commits] core.git: Branch 'feature/opengl-vcl' - vcl/workben

Michael Meeks michael.meeks at collabora.com
Tue Nov 11 14:55:11 PST 2014


 vcl/workben/vcldemo.cxx |   53 +++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 44 insertions(+), 9 deletions(-)

New commits:
commit e121f267cca6a5ed82f6fc5485233e9621a23515
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Tue Nov 11 22:55:38 2014 +0000

    vcldemo: render an enlarged view on mouse click.
    
    Change-Id: I9021ab4744b16f967eaa5006128d30621b421d7a

diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index 33c11e1..8e033a9 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -53,6 +53,9 @@ class DemoWin : public DemoBase
     Bitmap   maIntroBW;
     BitmapEx maIntro;
 
+    int mnSegmentsX;
+    int mnSegmentsY;
+
     struct RenderContext {
         RenderStyle meStyle;
         bool        mbVDev;
@@ -66,11 +69,15 @@ class DemoWin : public DemoBase
     };
 
     std::vector< RegionRenderer * > maRenderers;
+    sal_Int32  mnSelectedRenderer;
 
     void InitRenderers();
 
 public:
     DemoWin() : DemoBase()
+              , mnSegmentsX(4)
+              , mnSegmentsY(3)
+              , mnSelectedRenderer(-1)
               , mpButton(NULL)
               , mpButtonWin(NULL)
     {
@@ -114,14 +121,12 @@ public:
     std::vector<Rectangle> partitionAndClear(OutputDevice &rDev,
                                              int nX, int nY);
 
-    void drawBackground(OutputDevice &rDev)
+    void drawBackground(OutputDevice &rDev, Rectangle r)
     {
-        Rectangle r(Point(0,0), rDev.GetOutputSizePixel());
         Gradient aGradient;
         aGradient.SetStartColor(COL_BLUE);
         aGradient.SetEndColor(COL_GREEN);
         aGradient.SetStyle(GradientStyle_LINEAR);
-//        aGradient.SetBorder(r.GetSize().Width()/20);
         rDev.DrawGradient(r, aGradient);
     }
 
@@ -373,15 +378,25 @@ public:
     void drawToDevice(OutputDevice &rDev, bool bVdev)
     {
         RenderContext aCtx;
-        aCtx.meStyle = RENDER_THUMB;
         aCtx.mbVDev = bVdev;
         aCtx.mpDemoWin = this;
 
-        drawBackground(rDev);
+        Rectangle aWholeWin(Point(0,0), rDev.GetOutputSizePixel());
+
+        drawBackground(rDev, aWholeWin);
 
-        std::vector<Rectangle> aRegions(partitionAndClear(rDev, 4, 3));
-        for (size_t i = 0; i < maRenderers.size(); i++)
-            maRenderers[i]->RenderRegion(rDev, aRegions[i], aCtx);
+        if (mnSelectedRenderer >= 0)
+        {
+            aCtx.meStyle = RENDER_EXPANDED;
+            maRenderers[mnSelectedRenderer]->RenderRegion(rDev, aWholeWin, aCtx);
+        }
+        else
+        {
+            aCtx.meStyle = RENDER_THUMB;
+            std::vector<Rectangle> aRegions(partitionAndClear(rDev, mnSegmentsX, mnSegmentsY));
+            for (size_t i = 0; i < maRenderers.size(); i++)
+                maRenderers[i]->RenderRegion(rDev, aRegions[i], aCtx);
+        }
     }
 };
 
@@ -408,7 +423,27 @@ IMPL_LINK_NOARG(DemoWin,BounceTimerCb)
 
 void DemoWin::MouseButtonDown( const MouseEvent& rMEvt )
 {
-    (void) rMEvt;
+    // click to zoom out
+    if (mnSelectedRenderer >= 0)
+    {
+        mnSelectedRenderer = -1;
+        Invalidate();
+        return;
+    }
+
+    // click on a region to zoom into it
+    std::vector<Rectangle> aRegions(partitionAndClear(*this, mnSegmentsX, mnSegmentsY));
+    for (size_t i = 0; i < aRegions.size(); i++)
+    {
+        if (aRegions[i].IsInside(rMEvt.GetPosPixel()))
+        {
+            mnSelectedRenderer = i;
+            Invalidate();
+            return;
+        }
+    }
+
+    // otherwise bounce floating windows
     if (!mpButton)
     {
         mpButtonWin = new FloatingWindow(this);


More information about the Libreoffice-commits mailing list