summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-10-04 14:48:11 +0100
committerCaolán McNamara <caolanm@redhat.com>2013-10-04 20:20:55 +0100
commit507c1c9905ce02c376be4e57a937cde8d01d2c26 (patch)
tree781de1a3cabfa28b4520460aeeb4c02d5b72562b
parentfa5c7ccff482c23f96def89978377f2d7d41d225 (diff)
Resolves: rhbz#1012379 draw audio-placeholder in presentation mode
Change-Id: Ied61f9b4947e1a6eda04c442d95037cc1c7ef460
-rw-r--r--avmedia/source/viewer/mediawindow.cxx15
-rw-r--r--include/avmedia/mediawindow.hxx4
-rw-r--r--slideshow/source/engine/shapes/viewmediashape.cxx41
3 files changed, 53 insertions, 7 deletions
diff --git a/avmedia/source/viewer/mediawindow.cxx b/avmedia/source/viewer/mediawindow.cxx
index 02e5b63258a7..183a9554e129 100644
--- a/avmedia/source/viewer/mediawindow.cxx
+++ b/avmedia/source/viewer/mediawindow.cxx
@@ -433,7 +433,7 @@ uno::Reference< graphic::XGraphic > MediaWindow::grabFrame( const OUString& rURL
if( !aPrefSize.Width && !aPrefSize.Height )
{
- const BitmapEx aBmpEx( AVMEDIA_RESID( AVMEDIA_BMP_AUDIOLOGO ) );
+ const BitmapEx aBmpEx( getAudioLogo() );
apGraphic.reset( new Graphic( aBmpEx ) );
}
}
@@ -441,7 +441,7 @@ uno::Reference< graphic::XGraphic > MediaWindow::grabFrame( const OUString& rURL
if( !xRet.is() && !apGraphic.get() && bAllowToCreateReplacementGraphic )
{
- const BitmapEx aBmpEx( AVMEDIA_RESID( AVMEDIA_BMP_EMPTYLOGO ) );
+ const BitmapEx aBmpEx( getEmptyLogo() );
apGraphic.reset( new Graphic( aBmpEx ) );
}
@@ -451,6 +451,17 @@ uno::Reference< graphic::XGraphic > MediaWindow::grabFrame( const OUString& rURL
return xRet;
}
+BitmapEx MediaWindow::getAudioLogo()
+{
+ return BitmapEx(AVMEDIA_RESID(AVMEDIA_BMP_AUDIOLOGO));
+}
+
+BitmapEx MediaWindow::getEmptyLogo()
+{
+ return BitmapEx(AVMEDIA_RESID(AVMEDIA_BMP_EMPTYLOGO));
+}
+
+
} // namespace avemdia
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/avmedia/mediawindow.hxx b/include/avmedia/mediawindow.hxx
index a5cb5dc8e7a8..dcf4f36a72e9 100644
--- a/include/avmedia/mediawindow.hxx
+++ b/include/avmedia/mediawindow.hxx
@@ -27,6 +27,7 @@
#include <com/sun/star/media/XPlayer.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
#include <com/sun/star/uno/XInterface.hpp>
+#include <vcl/bitmapex.hxx>
#include <avmedia/avmediadllapi.h>
#define AVMEDIA_FRAMEGRABBER_DEFAULTFRAME -1.0
@@ -107,6 +108,9 @@ namespace avmedia
bool bAllowToCreateReplacementGraphic = false,
double fMediaTime = AVMEDIA_FRAMEGRABBER_DEFAULTFRAME );
+ static BitmapEx getAudioLogo();
+ static BitmapEx getEmptyLogo();
+
private:
// default: disabled copy/assignment
diff --git a/slideshow/source/engine/shapes/viewmediashape.cxx b/slideshow/source/engine/shapes/viewmediashape.cxx
index 2da034a902d7..b788a0ff6274 100644
--- a/slideshow/source/engine/shapes/viewmediashape.cxx
+++ b/slideshow/source/engine/shapes/viewmediashape.cxx
@@ -28,10 +28,12 @@
#include <comphelper/anytostring.hxx>
#include <cppuhelper/exc_hlp.hxx>
-#include <vcl/window.hxx>
+#include <vcl/canvastools.hxx>
#include <vcl/syschild.hxx>
+#include <vcl/window.hxx>
#include <basegfx/tools/canvastools.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <basegfx/numeric/ftools.hxx>
#include <basegfx/polygon/b2dpolygon.hxx>
#include <basegfx/point/b2dpoint.hxx>
@@ -184,10 +186,32 @@ namespace slideshow
if( !mpMediaWindow.get() && !mxPlayerWindow.is() )
{
- // fill the shape background with black
- fillRect( pCanvas,
- rBounds,
- 0x000000FFU );
+ // draw placeholder for no-video (no window) case
+ // no window and player == audio icon
+ // no window and no player == broken icon
+ BitmapEx aAudioLogo(mxPlayer.is() ?
+ avmedia::MediaWindow::getAudioLogo() : avmedia::MediaWindow::getEmptyLogo() );
+
+ uno::Reference< rendering::XBitmap > xBitmap(vcl::unotools::xBitmapFromBitmapEx(
+ pCanvas->getUNOCanvas()->getDevice(), aAudioLogo));
+
+ rendering::ViewState aViewState;
+ aViewState.AffineTransform = pCanvas->getViewState().AffineTransform;
+
+ rendering::RenderState aRenderState;
+ ::canvas::tools::initRenderState( aRenderState );
+
+ const ::Size aBmpSize( aAudioLogo.GetSizePixel() );
+
+ const ::basegfx::B2DVector aScale( rBounds.getWidth() / aBmpSize.Width(),
+ rBounds.getHeight() / aBmpSize.Height() );
+ const basegfx::B2DHomMatrix aTranslation(basegfx::tools::createScaleTranslateB2DHomMatrix(
+ aScale, rBounds.getMinimum()));
+ ::canvas::tools::setRenderStateTransform( aRenderState, aTranslation );
+
+ pCanvas->getUNOCanvas()->drawBitmap( xBitmap,
+ aViewState,
+ aRenderState );
}
return true;
@@ -463,6 +487,13 @@ namespace slideshow
mxPlayerWindow->setEnable( true );
}
}
+
+ if( !mxPlayerWindow.is() )
+ {
+ //if there was no playerwindow, then clear the mpMediaWindow too
+ //so that we can draw a placeholder instead in that space
+ mpMediaWindow.reset();
+ }
}
}
}