[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