"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
This commit is contained in:
Caolán McNamara
2013-03-16 17:30:29 +00:00
parent 4d362d2362
commit 918f8ed91e
4 changed files with 99 additions and 97 deletions

View File

@@ -20,7 +20,6 @@
#include <vcl/svapp.hxx>
#include <vcl/msgbox.hxx>
#include <osl/process.h>
#include <tools/stream.hxx>
#include <rtl/bootstrap.hxx>
#include <unotools/configmgr.hxx>
@@ -36,13 +35,8 @@
#include "comphelper/anytostring.hxx"
#include "cppuhelper/exc_hlp.hxx"
#include "cppuhelper/bootstrap.hxx"
#include <com/sun/star/graphic/XPrimitive2DRenderer.hpp>
#include <basegfx/numeric/ftools.hxx>
#include <vcl/canvastools.hxx>
#include <com/sun/star/geometry/RealRectangle2D.hpp>
#include <com/sun/star/rendering/XIntegerReadOnlyBitmap.hpp>
#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
#include <sfx2/sfxuno.hxx>
#include <sfx2/sfxcommands.h>
@@ -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 );

View File

@@ -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

View File

@@ -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()

View File

@@ -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()