diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-03-16 17:30:29 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-03-16 21:25:17 +0000 |
commit | 918f8ed91e325606a44d088da5fbbf8c463dffba (patch) | |
tree | c44b3ccf10b0325aa85a3ea5830a87dea5edb1a2 /sfx2 | |
parent | 4d362d2362661670579c03bdccf0063ee6569604 (diff) |
"show logo" in slideshow settings doesn't do anything
This wants to load about.png which doesn't exist anymore. "about.svg" does,
but is a rather abstract background image for the about dialog these days, so
use "flat_logo.svg" instead.
Which requires moving the svg loader out of cui into sfx2 for re-use.
Change-Id: I8654f0f93766556ef4ed4b87eff35b45d8189761
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/inc/sfx2/app.hxx | 8 | ||||
-rw-r--r-- | sfx2/source/appl/appmisc.cxx | 95 |
2 files changed, 96 insertions, 7 deletions
diff --git a/sfx2/inc/sfx2/app.hxx b/sfx2/inc/sfx2/app.hxx index 24c0294211d9..ab884406e5de 100644 --- a/sfx2/inc/sfx2/app.hxx +++ b/sfx2/inc/sfx2/app.hxx @@ -257,10 +257,10 @@ public: SAL_DLLPRIVATE SfxModule* GetModule_Impl(); SAL_DLLPRIVATE ResMgr* GetOffResManager_Impl(); - /* loads a branded bitmap - that can be overridden per locale */ - static bool LoadBrandBitmap (const char* pName, BitmapEx &rBitmap); - /** loads the application logo as used in the about dialog and impress slideshow pause screen */ - static Image GetApplicationLogo(); + static bool loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWidth); + + /** loads the application logo as used in the impress slideshow pause screen */ + static BitmapEx GetApplicationLogo(long nWidth); }; #define SFX_APP() SfxGetpApp() diff --git a/sfx2/source/appl/appmisc.cxx b/sfx2/source/appl/appmisc.cxx index a134957d1304..7e016efa01e5 100644 --- a/sfx2/source/appl/appmisc.cxx +++ b/sfx2/source/appl/appmisc.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <vcl/canvastools.hxx> #include <vcl/status.hxx> #include <vcl/msgbox.hxx> #include <svl/whiter.hxx> @@ -27,8 +28,10 @@ #include <unotools/internaloptions.hxx> #include <unotools/pathoptions.hxx> #include <com/sun/star/registry/InvalidRegistryException.hpp> +#include <com/sun/star/rendering/XIntegerReadOnlyBitmap.hpp> #include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/frame/XFrame.hpp> +#include <com/sun/star/graphic/XPrimitive2DRenderer.hpp> #include <com/sun/star/util/XURLTransformer.hpp> #include <com/sun/star/frame/XFramesSupplier.hpp> #include <com/sun/star/uno/Reference.h> @@ -43,6 +46,7 @@ #include <unotools/bootstrap.hxx> #include <unotools/moduleoptions.hxx> #include <osl/file.hxx> +#include <osl/process.h> #include <rtl/bootstrap.hxx> #include "sfx2/sfxresid.hxx" @@ -71,7 +75,10 @@ #include <sfx2/viewsh.hxx> #include <sfx2/objface.hxx> #include "helper.hxx" // SfxContentHelper::Kill() +#include <basegfx/matrix/b2dhommatrixtools.hxx> +#include <drawinglayer/primitive2d/transformprimitive2d.hxx> +using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::util; using namespace ::com::sun::star::beans; @@ -259,12 +266,94 @@ sal_Bool SfxApplication::IsDowning() const { return pAppData_Impl->bDowning; } SfxDispatcher* SfxApplication::GetAppDispatcher_Impl() { return pAppData_Impl->pAppDispat; } SfxSlotPool& SfxApplication::GetAppSlotPool_Impl() const { return *pAppData_Impl->pSlotPool; } -/** loads the application logo as used in the about dialog and impress slideshow pause screen */ -Image SfxApplication::GetApplicationLogo() +bool SfxApplication::loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWidth) +{ + // Load from disk + // --------------------------------------------------------------------- + rtl::OUString aBaseName = ( rtl::OUString("/") + + rtl::OUString::createFromAscii( pName ) ); + rtl::OUString aSvg( ".svg" ); + + rtl_Locale *pLoc = NULL; + osl_getProcessLocale (&pLoc); + LanguageTag aLanguageTag( *pLoc); + + rtl::OUString uri = rtl::OUString::createFromAscii( "$BRAND_BASE_DIR/program" ) + aBaseName+aSvg; + rtl::Bootstrap::expandMacros( uri ); + INetURLObject aObj( uri ); + SvgData aSvgData(aObj.PathToFileName()); + + // transform into [0,0,width,width*aspect] std dimensions + // --------------------------------------------------------------------- + basegfx::B2DRange aRange(aSvgData.getRange()); + const double fAspectRatio(aRange.getWidth()/aRange.getHeight()); + basegfx::B2DHomMatrix aTransform( + basegfx::tools::createTranslateB2DHomMatrix( + -aRange.getMinX(), + -aRange.getMinY())); + aTransform.scale( + nWidth / aRange.getWidth(), + nWidth / fAspectRatio / aRange.getHeight()); + const drawinglayer::primitive2d::Primitive2DReference xTransformRef( + new drawinglayer::primitive2d::TransformPrimitive2D( + aTransform, + aSvgData.getPrimitive2DSequence())); + + // UNO dance to render from drawinglayer + // --------------------------------------------------------------------- + uno::Reference< lang::XMultiServiceFactory > xFactory(::comphelper::getProcessServiceFactory()); + const rtl::OUString aServiceName("com.sun.star.graphic.Primitive2DTools"); + + try + { + const uno::Reference< graphic::XPrimitive2DRenderer > xPrimitive2DRenderer( + xFactory->createInstance(aServiceName), + uno::UNO_QUERY_THROW); + + if(xPrimitive2DRenderer.is()) + { + // cancel out rasterize's mm2pixel conversion + const double fFakeDPI=1000.0/2.54; + + geometry::RealRectangle2D aRealRect( + 0, 0, + nWidth, nWidth / fAspectRatio); + + const uno::Reference< rendering::XBitmap > xBitmap( + xPrimitive2DRenderer->rasterize( + drawinglayer::primitive2d::Primitive2DSequence(&xTransformRef, 1), + uno::Sequence< beans::PropertyValue >(), + fFakeDPI, + fFakeDPI, + aRealRect, + 500000)); + + if(xBitmap.is()) + { + const uno::Reference< rendering::XIntegerReadOnlyBitmap> xIntBmp(xBitmap, uno::UNO_QUERY_THROW); + + if(xIntBmp.is()) + { + rBitmap = vcl::unotools::bitmapExFromXBitmap(xIntBmp); + return true; + } + } + } + } + catch(const uno::Exception&) + { + OSL_ENSURE(sal_False, "Got no graphic::XPrimitive2DRenderer (!)" ); + } + return false; +} + +/** loads the application logo as used in the impress slideshow pause screen */ +BitmapEx SfxApplication::GetApplicationLogo(long nWidth) { BitmapEx aBitmap; + SfxApplication::loadBrandSvg("flat_logo", aBitmap, nWidth); Application::LoadBrandBitmap ("about", aBitmap); - return Image( aBitmap ); + return aBitmap; } SfxChildWinFactArr_Impl::~SfxChildWinFactArr_Impl() |