Kaydet (Commit) eff346b7 authored tarafından Thorsten Behrens's avatar Thorsten Behrens Kaydeden (comit) Thorsten Behrens

oglcanvas: XCanvas != XBitmap kill another instance

This crept in from gsoc, some whitespace / formatting alignment
with slideshow conventions, added doxygen class mission statement.

Change-Id: Ie9837fc437d9827dc8fa6b1c25a3f46a638bac51
üst 1aae965d
...@@ -28,8 +28,7 @@ ...@@ -28,8 +28,7 @@
#include <basegfx/vector/b2dvector.hxx> #include <basegfx/vector/b2dvector.hxx>
#include <com/sun/star/rendering/XCanvas.hpp> #include <com/sun/star/rendering/XCanvas.hpp>
#include <com/sun/star/geometry/IntegerSize2D.hpp> #include <com/sun/star/presentation/XSlideShowView.hpp>
#include "com/sun/star/uno/Reference.hxx"
#include "pointersymbol.hxx" #include "pointersymbol.hxx"
#include "eventmultiplexer.hxx" #include "eventmultiplexer.hxx"
...@@ -47,9 +46,9 @@ const sal_Int32 LEFT_BORDER_SPACE = 10; ...@@ -47,9 +46,9 @@ const sal_Int32 LEFT_BORDER_SPACE = 10;
const sal_Int32 LOWER_BORDER_SPACE = 10; const sal_Int32 LOWER_BORDER_SPACE = 10;
PointerSymbolSharedPtr PointerSymbol::create( const uno::Reference<rendering::XBitmap>& xBitmap, PointerSymbolSharedPtr PointerSymbol::create( const uno::Reference<rendering::XBitmap>& xBitmap,
ScreenUpdater& rScreenUpdater, ScreenUpdater& rScreenUpdater,
EventMultiplexer& rEventMultiplexer, EventMultiplexer& rEventMultiplexer,
const UnoViewContainer& rViewContainer ) const UnoViewContainer& rViewContainer )
{ {
PointerSymbolSharedPtr pRet( PointerSymbolSharedPtr pRet(
new PointerSymbol( xBitmap, new PointerSymbol( xBitmap,
...@@ -62,11 +61,12 @@ PointerSymbolSharedPtr PointerSymbol::create( const uno::Reference<rendering::XB ...@@ -62,11 +61,12 @@ PointerSymbolSharedPtr PointerSymbol::create( const uno::Reference<rendering::XB
} }
PointerSymbol::PointerSymbol( uno::Reference<rendering::XBitmap> const & xBitmap, PointerSymbol::PointerSymbol( uno::Reference<rendering::XBitmap> const & xBitmap,
ScreenUpdater& rScreenUpdater, ScreenUpdater& rScreenUpdater,
const UnoViewContainer& rViewContainer ) : const UnoViewContainer& rViewContainer ) :
mxBitmap(xBitmap), mxBitmap(xBitmap),
maViews(), maViews(),
mrScreenUpdater( rScreenUpdater ), mrScreenUpdater( rScreenUpdater ),
maPos(),
mbVisible(false) mbVisible(false)
{ {
std::for_each( rViewContainer.begin(), std::for_each( rViewContainer.begin(),
...@@ -102,35 +102,14 @@ void PointerSymbol::setVisible( const bool bVisible ) ...@@ -102,35 +102,14 @@ void PointerSymbol::setVisible( const bool bVisible )
} }
} }
basegfx::B2DPoint PointerSymbol::calcSpritePos( UnoViewSharedPtr const & rView ) const basegfx::B2DPoint PointerSymbol::calcSpritePos(UnoViewSharedPtr const & rView) const
{ {
const uno::Reference<rendering::XBitmap> xBitmap( rView->getCanvas()->getUNOCanvas(), const awt::Rectangle aViewArea( rView->getUnoView()->getCanvasArea() );
uno::UNO_QUERY_THROW );
const geometry::IntegerSize2D realSize( xBitmap->getSize() );
return basegfx::B2DPoint(
// pos.X pos.Y are given in 0..1, beginning from the upper left corner of the currentSlide.
std::min<sal_Int32>( 0, LEFT_BORDER_SPACE ),
std::max<sal_Int32>( 0, realSize.Height * 1 - mxBitmap->getSize().Height
- LOWER_BORDER_SPACE ) );
}
basegfx::B2DPoint PointerSymbol::calcSpritePos(
UnoViewSharedPtr const & rView, const ::com::sun::star::geometry::RealPoint2D pos) const
{
const uno::Reference<rendering::XBitmap> xBitmap( rView->getCanvas()->getUNOCanvas(),
uno::UNO_QUERY_THROW );
const geometry::IntegerSize2D realSize( xBitmap->getSize() );
const geometry::IntegerSize2D realTranslationOffset ( rView->getTranslationOffset() ); const geometry::IntegerSize2D realTranslationOffset ( rView->getTranslationOffset() );
return basegfx::B2DPoint(
basegfx::B2DPoint newPos( realTranslationOffset.Width + ((aViewArea.Width - aViewArea.X) - 2 * realTranslationOffset.Width) * maPos.X,
realTranslationOffset.Width + (realSize.Width - 2 * realTranslationOffset.Width) * pos.X, realTranslationOffset.Height + ((aViewArea.Height - aViewArea.Y) - 2 * realTranslationOffset.Height) * maPos.Y);
realTranslationOffset.Height + (realSize.Height - 2 * realTranslationOffset.Height) * pos.Y);
return newPos;
} }
void PointerSymbol::viewAdded( const UnoViewSharedPtr& rView ) void PointerSymbol::viewAdded( const UnoViewSharedPtr& rView )
...@@ -215,20 +194,26 @@ void PointerSymbol::viewsChanged() ...@@ -215,20 +194,26 @@ void PointerSymbol::viewsChanged()
} }
} }
void PointerSymbol::viewsChanged(const ::com::sun::star::geometry::RealPoint2D pos) void PointerSymbol::viewsChanged(const geometry::RealPoint2D pos)
{ {
// reposition sprites on all views if( pos.X != maPos.X || pos.Y != maPos.Y )
ViewsVecT::const_iterator aIter( maViews.begin() );
ViewsVecT::const_iterator const aEnd ( maViews.end() );
while( aIter != aEnd )
{ {
if( aIter->second ) { maPos = pos;
aIter->second->movePixel(
calcSpritePos( aIter->first, pos )); // reposition sprites on all views
mrScreenUpdater.notifyUpdate(); ViewsVecT::const_iterator aIter( maViews.begin() );
mrScreenUpdater.commitUpdates(); ViewsVecT::const_iterator const aEnd ( maViews.end() );
while( aIter != aEnd )
{
if( aIter->second )
{
aIter->second->movePixel(
calcSpritePos( aIter->first ));
mrScreenUpdater.notifyUpdate();
mrScreenUpdater.commitUpdates();
}
++aIter;
} }
++aIter;
} }
} }
......
...@@ -34,15 +34,16 @@ namespace internal { ...@@ -34,15 +34,16 @@ namespace internal {
class EventMultiplexer; class EventMultiplexer;
typedef boost::shared_ptr<class PointerSymbol> PointerSymbolSharedPtr; typedef boost::shared_ptr<class PointerSymbol> PointerSymbolSharedPtr;
/// On-screen 'laser pointer' from the Impress remote control
class PointerSymbol : public ViewEventHandler, class PointerSymbol : public ViewEventHandler,
private ::boost::noncopyable private ::boost::noncopyable
{ {
public: public:
static PointerSymbolSharedPtr create( const ::com::sun::star::uno::Reference< static PointerSymbolSharedPtr create( const ::com::sun::star::uno::Reference<
::com::sun::star::rendering::XBitmap>& xBitmap, ::com::sun::star::rendering::XBitmap>& xBitmap,
ScreenUpdater& rScreenUpdater, ScreenUpdater& rScreenUpdater,
EventMultiplexer& rEventMultiplexer, EventMultiplexer& rEventMultiplexer,
const UnoViewContainer& rViewContainer ); const UnoViewContainer& rViewContainer );
/** Shows the pointer symbol. /** Shows the pointer symbol.
*/ */
...@@ -58,9 +59,9 @@ public: ...@@ -58,9 +59,9 @@ public:
private: private:
PointerSymbol( const ::com::sun::star::uno::Reference< PointerSymbol( const ::com::sun::star::uno::Reference<
::com::sun::star::rendering::XBitmap>& xBitmap, ::com::sun::star::rendering::XBitmap>& xBitmap,
ScreenUpdater& rScreenUpdater, ScreenUpdater& rScreenUpdater,
const UnoViewContainer& rViewContainer ); const UnoViewContainer& rViewContainer );
// ViewEventHandler // ViewEventHandler
virtual void viewAdded( const UnoViewSharedPtr& rView ); virtual void viewAdded( const UnoViewSharedPtr& rView );
...@@ -68,8 +69,6 @@ private: ...@@ -68,8 +69,6 @@ private:
virtual void viewChanged( const UnoViewSharedPtr& rView ); virtual void viewChanged( const UnoViewSharedPtr& rView );
virtual void viewsChanged(); virtual void viewsChanged();
::basegfx::B2DPoint calcSpritePos( UnoViewSharedPtr const & rView, const ::com::sun::star::geometry::RealPoint2D pos ) const;
::basegfx::B2DPoint calcSpritePos( UnoViewSharedPtr const & rView ) const; ::basegfx::B2DPoint calcSpritePos( UnoViewSharedPtr const & rView ) const;
template <typename func_type> template <typename func_type>
...@@ -91,6 +90,7 @@ private: ...@@ -91,6 +90,7 @@ private:
ViewsVecT maViews; ViewsVecT maViews;
ScreenUpdater& mrScreenUpdater; ScreenUpdater& mrScreenUpdater;
::com::sun::star::geometry::RealPoint2D maPos;
bool mbVisible; bool mbVisible;
}; };
......
...@@ -39,6 +39,7 @@ namespace internal { ...@@ -39,6 +39,7 @@ namespace internal {
class EventMultiplexer; class EventMultiplexer;
typedef boost::shared_ptr<class WaitSymbol> WaitSymbolSharedPtr; typedef boost::shared_ptr<class WaitSymbol> WaitSymbolSharedPtr;
/// On-screen 'hour glass' for when slideshow is unresponsive
class WaitSymbol : public ViewEventHandler, class WaitSymbol : public ViewEventHandler,
private ::boost::noncopyable private ::boost::noncopyable
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment