[Libreoffice-commits] core.git: 3 commits - include/vcl vcl/opengl vcl/source vcl/workben
Michael Meeks
michael.meeks at collabora.com
Mon Nov 10 04:17:00 PST 2014
include/vcl/bitmapex.hxx | 2 +
vcl/opengl/gdiimpl.cxx | 2 -
vcl/source/gdi/bitmapex.cxx | 17 +++++++-
vcl/workben/vcldemo.cxx | 84 ++++++++++++++++++++++++++++++--------------
4 files changed, 75 insertions(+), 30 deletions(-)
New commits:
commit 16068663e2aa984388be5f774b8f1917c12bf6f3
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Mon Nov 10 12:16:15 2014 +0000
vcldemo: load and render some icons
Change-Id: I4a4567d43e4c5c8a7ce7ba2764d2f9668fed291f
diff --git a/vcl/workben/vcldemo.cxx b/vcl/workben/vcldemo.cxx
index daa877f..1142e37 100644
--- a/vcl/workben/vcldemo.cxx
+++ b/vcl/workben/vcldemo.cxx
@@ -25,10 +25,9 @@
#include <vcl/virdev.hxx>
#include <vcl/graphicfilter.hxx>
-# define FIXME_ALPHA_WORKING
-# define FIXME_ROUNDED_RECT_WORKING
-# define FIXME_DRAW_TRANSPARENT_WORKING
#if 0
+# define FIXME_SELF_INTERSECTING_WORKING
+# define FIXME_DRAW_BITMAPEX
#endif
using namespace css;
@@ -99,7 +98,6 @@ public:
rDev.SetLineColor(Color(COL_BLACK));
rDev.DrawRect( r );
- // FIXME: notice these appear reflected at the bottom not the top.
for(int i=0; i<r.GetHeight(); i+=15)
rDev.DrawLine( Point(r.Left(), r.Top()+i), Point(r.Right(), r.Bottom()-i) );
for(int i=0; i<r.GetWidth(); i+=15)
@@ -126,8 +124,7 @@ public:
rDev.DrawText( r, OUString( "Just a simple text" ) );
}
- void drawPoly(OutputDevice &rDev, Rectangle r)
- // pretty
+ void drawPoly(OutputDevice &rDev, Rectangle r) // pretty
{
drawCheckered(rDev, r);
@@ -181,14 +178,10 @@ public:
BitmapEx aBitmap(maIntro);
aBitmap.Scale(r.GetSize(), BMP_SCALE_BESTQUALITY);
-#ifdef FIXME_ALPHA_WORKING
AlphaMask aSemiTransp(aBitmap.GetSizePixel());
aSemiTransp.Erase(64);
rDev.DrawBitmapEx(r.TopLeft(), BitmapEx(aBitmap.GetBitmap(),
- aSemiTransp));
-#else
- rDev.DrawBitmapEx(r.TopLeft(), aBitmap);
-#endif
+ aSemiTransp));
}
void drawPolyPolgons(OutputDevice &rDev, Rectangle r)
@@ -196,8 +189,13 @@ public:
struct {
double nX, nY;
} aPoints[] = { { 0.1, 0.1 }, { 0.9, 0.9 },
+#ifdef FIXME_SELF_INTERSECTING_WORKING
{ 0.9, 0.1 }, { 0.1, 0.9 },
{ 0.1, 0.1 } };
+#else
+ { 0.1, 0.9 }, { 0.5, 0.5 },
+ { 0.9, 0.1 }, { 0.1, 0.1 } };
+#endif
tools::PolyPolygon aPolyPoly;
// Render 4x polygons & aggregate into another PolyPolygon
@@ -228,16 +226,12 @@ public:
}
rDev.SetLineColor(Color(COL_LIGHTRED));
rDev.SetFillColor(Color(COL_GREEN));
-#ifdef FIXME_DRAW_TRANSPARENT_WORKING
rDev.DrawTransparent(aPolyPoly, 50);
-#else
- rDev.DrawPolyPolygon(aPolyPoly);
-#endif
}
void drawToVirtualDevice(OutputDevice &rDev, Rectangle r)
{
- VirtualDevice aNested;
- aNested.SetOutputSize(r.GetSize());
+ VirtualDevice aNested(rDev);
+ aNested.SetOutputSizePixel(r.GetSize());
Rectangle aWhole(Point(0,0), r.GetSize());
// mini me
drawToDevice(aNested, true);
@@ -246,9 +240,52 @@ public:
rDev.DrawBitmap(r.TopLeft(), aBitmap);
}
+ std::vector<BitmapEx> maIcons;
+ void initIcons()
+ {
+ if (maIcons.size())
+ return;
+
+ const char *pNames[] = {
+ "cmd/lc_openurl.png",
+ "cmd/lc_newdoc.png",
+ "cmd/lc_save.png",
+ "cmd/lc_saveas.png",
+ "cmd/lc_sendmail.png",
+ "cmd/lc_editdoc.png",
+ "cmd/lc_print.png",
+ "cmd/lc_printpreview.png",
+ "cmd/lc_cut.png",
+ "cmd/lc_copy.png",
+ "cmd/lc_paste.png",
+ "cmd/lc_formatpaintbrush.png",
+ "cmd/lc_undo.png",
+ "cmd/lc_redo.png",
+ };
+ for (size_t i = 0; i < SAL_N_ELEMENTS(pNames); i++)
+ maIcons.push_back(BitmapEx(OUString::createFromAscii(pNames[i])));
+ }
+ void drawIcons(OutputDevice &rDev, Rectangle r)
+ {
+ initIcons();
+
+ Rectangle p(r);
+ for (size_t i = 0; i < maIcons.size(); i++)
+ {
+ Size aSize(maIcons[i].GetSizePixel());
+#ifdef FIXME_DRAW_BITMAPEX
+ rDev.DrawBitmapEx(p.TopLeft(), maIcons[i]);
+#else
+ rDev.DrawBitmap(p.TopLeft(), maIcons[i].GetBitmap());
+#endif
+ p.Move(aSize.Width(), 0);
+ if (p.Left() >= r.Right())
+ break;
+ }
+ }
+
void fetchDrawBitmap(OutputDevice &rDev, Rectangle r)
{
- // FIXME: should work ...
Bitmap aBitmap(GetBitmap(Point(0,0),rDev.GetOutputSizePixel()));
aBitmap.Scale(r.GetSize(), BMP_SCALE_BESTQUALITY);
rDev.DrawBitmap(r.TopLeft(), aBitmap);
@@ -277,15 +314,9 @@ std::vector<Rectangle> DemoWin::partitionAndClear(OutputDevice &rDev, int nX, in
rDev.SetLineColor(COL_GRAY);
rDev.SetFillColor(COL_LIGHTGRAY);
if ((x + y) % 2)
- rDev.DrawRect(r);
- else
- {
-#ifdef FIXME_ROUNDED_RECT_WORKING
rDev.DrawRect(r, nBorderSize, nBorderSize);
-#else
+ else
rDev.DrawRect(r);
-#endif
- }
aRegions.push_back(r);
}
@@ -311,8 +342,9 @@ void DemoWin::drawToDevice(OutputDevice &rDev, bool bVdev)
drawPolyPolgons(rDev, aRegions[8]);
if (!bVdev)
drawToVirtualDevice(rDev, aRegions[9]);
+ drawIcons(rDev, aRegions[10]);
// last - thumbnail all the above
- fetchDrawBitmap(rDev, aRegions[10]);
+ fetchDrawBitmap(rDev, aRegions[11]);
}
class DemoApp : public Application
commit 2ca7304c765f429ea95802e59d90d190b6f249b9
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Mon Nov 10 12:16:00 2014 +0000
vcl: calm a valgrind warning.
Change-Id: I12dad502960dc892adce5ab25c8b71f41227198f
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index e62e32e..ca5a975 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -856,7 +856,7 @@ SalBitmap* OpenGLSalGraphicsImpl::getBitmap( long nX, long nY, long nWidth, long
SalColor OpenGLSalGraphicsImpl::getPixel( long nX, long nY )
{
- char pixel[3];
+ char pixel[3] = { 0, 0, 0 };
maContext.makeCurrent();
glViewport( 0, 0, GetWidth(), GetHeight() );
commit 7fd1ed8603bf21d54847339ba2c55019ec5e8b6c
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Mon Nov 10 12:15:17 2014 +0000
vcl: add BitmapEx load from icon theme constructor.
Change-Id: I3dbad69664b7417928a6be10ac561307dd94f67b
diff --git a/include/vcl/bitmapex.hxx b/include/vcl/bitmapex.hxx
index dc875ff..1603f6f 100644
--- a/include/vcl/bitmapex.hxx
+++ b/include/vcl/bitmapex.hxx
@@ -46,6 +46,7 @@ public:
BitmapEx();
BitmapEx( const ResId& rResId );
+ BitmapEx( const OUString& rIconName );
BitmapEx( const BitmapEx& rBitmapEx );
BitmapEx( const BitmapEx& rBitmapEx, Point aSrc, Size aSize );
BitmapEx( const Bitmap& rBmp );
@@ -460,6 +461,7 @@ public:
private:
friend class ImpGraphic;
friend bool VCL_DLLPUBLIC WriteDIBBitmapEx(const BitmapEx& rSource, SvStream& rOStm);
+ void loadFromIconTheme( const OUString& rIconName );
Bitmap aBitmap;
Bitmap aMask;
diff --git a/vcl/source/gdi/bitmapex.cxx b/vcl/source/gdi/bitmapex.cxx
index 81fd6a3..330bd59 100644
--- a/vcl/source/gdi/bitmapex.cxx
+++ b/vcl/source/gdi/bitmapex.cxx
@@ -85,11 +85,15 @@ BitmapEx::BitmapEx( const BitmapEx& rBitmapEx, Point aSrc, Size aSize ) :
CopyPixel( aDestRect, aSrcRect, &rBitmapEx );
}
+BitmapEx::BitmapEx( const OUString& rIconName )
+{
+ loadFromIconTheme( rIconName );
+}
+
BitmapEx::BitmapEx( const ResId& rResId ) :
eTransparent( TRANSPARENT_NONE ),
bAlpha ( false )
{
- static ImplImageTreeSingletonRef aImageTree;
ResMgr* pResMgr = NULL;
ResMgr::GetResourceSkipHeader( rResId.SetRT( RSC_BITMAP ), &pResMgr );
@@ -97,13 +101,20 @@ BitmapEx::BitmapEx( const ResId& rResId ) :
pResMgr->ReadLong();
const OUString aFileName( pResMgr->ReadString() );
+ loadFromIconTheme( aFileName );
+}
+
+void BitmapEx::loadFromIconTheme( const OUString& rIconName )
+{
+ static ImplImageTreeSingletonRef aImageTree;
+
OUString aIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
- if( !aImageTree->loadImage( aFileName, aIconTheme, *this, true ) )
+ if( !aImageTree->loadImage( rIconName, aIconTheme, *this, true ) )
{
#ifdef DBG_UTIL
OStringBuffer aErrorStr(
- "BitmapEx::BitmapEx( const ResId& rResId ): could not load image <");
+ "BitmapEx::BitmapEx(): could not load image <");
aErrorStr.append(OUStringToOString(aFileName, RTL_TEXTENCODING_ASCII_US)).append("> via icon theme ");
aErrorStr.append(OUStringToOString(aIconTheme, RTL_TEXTENCODING_ASCII_US)).append('.');
OSL_FAIL(aErrorStr.getStr());
More information about the Libreoffice-commits
mailing list