From 918f8ed91e325606a44d088da5fbbf8c463dffba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Sat, 16 Mar 2013 17:30:29 +0000 Subject: [PATCH] "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 --- cui/source/dialogs/about.cxx | 91 +---------------------- sd/source/ui/slideshow/slideshowimpl.cxx | 2 +- sfx2/inc/sfx2/app.hxx | 8 +- sfx2/source/appl/appmisc.cxx | 95 +++++++++++++++++++++++- 4 files changed, 99 insertions(+), 97 deletions(-) diff --git a/cui/source/dialogs/about.cxx b/cui/source/dialogs/about.cxx index e904d0f04ac1..d40e4525b2d1 100644 --- a/cui/source/dialogs/about.cxx +++ b/cui/source/dialogs/about.cxx @@ -20,7 +20,6 @@ #include #include -#include #include #include #include @@ -36,13 +35,8 @@ #include "comphelper/anytostring.hxx" #include "cppuhelper/exc_hlp.hxx" #include "cppuhelper/bootstrap.hxx" -#include #include -#include #include -#include -#include -#include #include #include @@ -191,87 +185,6 @@ void AboutDialog::StyleControls() aCancelButton.GrabFocus(); } -static bool 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; -} - void AboutDialog::LayoutControls() { // Get the size of the screen @@ -297,7 +210,7 @@ void AboutDialog::LayoutControls() Point aLogoPos( 0, 0 ); // load svg logo, specify desired width, scale height isotrophically - if( loadBrandSvg("flat_logo", + if( SfxApplication::loadBrandSvg("flat_logo", aLogoBitmap, aDialogSize.Width()) && !aLogoBitmap.IsEmpty() ) @@ -364,7 +277,7 @@ void AboutDialog::LayoutControls() // Layout background image if ( !(Application::GetSettings().GetStyleSettings().GetHighContrastMode()) ) - loadBrandSvg("shell/about", + SfxApplication::loadBrandSvg("shell/about", aBackgroundBitmap, aDialogSize.Width()); SetOutputSizePixel( aDialogSize ); diff --git a/sd/source/ui/slideshow/slideshowimpl.cxx b/sd/source/ui/slideshow/slideshowimpl.cxx index b21e0850bde3..88f282a0c3d7 100644 --- a/sd/source/ui/slideshow/slideshowimpl.cxx +++ b/sd/source/ui/slideshow/slideshowimpl.cxx @@ -3221,7 +3221,7 @@ void SAL_CALL SlideshowImpl::gotoNextSlide( ) throw (RuntimeException) { if ( maPresSettings.mbShowPauseLogo ) { - Graphic aGraphic( SfxApplication::GetApplicationLogo().GetBitmapEx() ); + Graphic aGraphic(SfxApplication::GetApplicationLogo(360)); mpShowWindow->SetPauseMode( 0, maPresSettings.mnPauseTimeout, &aGraphic ); } else 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 #include #include #include @@ -27,8 +28,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -43,6 +46,7 @@ #include #include #include +#include #include #include "sfx2/sfxresid.hxx" @@ -71,7 +75,10 @@ #include #include #include "helper.hxx" // SfxContentHelper::Kill() +#include +#include +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()