21#include <rtl/ustrbuf.hxx>
30#include <osl/diagnose.h>
33#include <com/sun/star/awt/MouseButton.hpp>
34#include <com/sun/star/awt/MouseEvent.hpp>
35#include <com/sun/star/rendering/XBitmap.hpp>
36#include <com/sun/star/rendering/XCanvas.hpp>
56 WakeupEvent( std::shared_ptr< ::canvas::tools::ElapsedTime >
const& pTimeBase,
70 virtual bool fire()
override
79 virtual bool isCharged()
const override {
return true; }
84 return ::std::max( nCurrentTime,
126 bool isInArea( css::awt::MouseEvent
const & evt )
const;
139 mrScreenUpdater(rContext.mrScreenUpdater),
141 mrActivitiesQueue(rContext.mrActivitiesQueue),
145 maFont(
Application::GetSettings().GetStyleSettings().GetLabelFont() ),
160 blackHole->EnableOutput(
false);
161 blackHole->SetFont(
maFont );
162 blackHole->SetMapMode(
MapMode(MapUnit::MapPixel));
164 const FontMetric metric( blackHole->GetFontMetric() );
165 blackHole->GetTextBoundRect( rect,
"XX:XX:XX" );
180 catch (
const uno::Exception&)
189 std::shared_ptr<RehearseTimingsActivity> pActivity(
192 pActivity->mpMouseHandler =
193 std::make_shared<MouseHandler>(*pActivity);
194 pActivity->mpWakeUpEvent =
212 for_each_sprite( []( const ::cppcanvas::CustomSpriteSharedPtr& pSprite )
213 {
return pSprite->show(); } );
231 for_each_sprite( []( const ::cppcanvas::CustomSpriteSharedPtr& pSprite )
232 {
return pSprite->hide(); } );
308 const geometry::IntegerSize2D realSize( xBitmap->getSize() );
316 spritePos *= transformation;
319 spriteSize *= transformation;
334 sprite->setAlpha( 0.8 );
344 maViews.emplace_back( rView, sprite );
355 (
const ViewsVecT::value_type& cp )
356 { return rView == cp.first; } ),
363 ViewsVecT::iterator aModifiedEntry(
368 (
const ViewsVecT::value_type& cp )
369 { return rView == cp.first; } )
372 OSL_ASSERT( aModifiedEntry !=
maViews.end() );
373 if( aModifiedEntry ==
maViews.end() )
396 for_each_sprite( [nMin]( const ::cppcanvas::CustomSpriteSharedPtr& pSprite )
397 {
return pSprite->move( nMin ); } );
406 [
this]( const ::cppcanvas::CustomSpriteSharedPtr& pSprite )
407 {
return this->
paint( pSprite->getContentCanvas() ); } );
413 const sal_Int32 nTimeSecs =
416 sal_Int32
n = nTimeSecs / 3600;
419 buf.append( OUString::number(
n) +
":" );
420 n = ((nTimeSecs % 3600) / 60);
423 buf.append( OUString::number(
n) +
":" );
424 n = (nTimeSecs % 60);
428 const OUString time = buf.makeStringAndClear();
433 metaFile.
Record( blackHole );
435 blackHole->EnableOutput(
false);
436 blackHole->SetMapMode(
MapMode(MapUnit::MapPixel));
437 blackHole->SetFont(
maFont );
445 blackHole->SetLineColor(
COL_GRAY );
451 blackHole->SetLineColor(
COL_GRAY );
453 blackHole->DrawRect( rect );
454 blackHole->GetTextBoundRect( rect, time );
465 const bool succ = renderer->draw();
472 mbHasBeenClicked(false),
473 mbMouseStartedInArea(false)
478 mbHasBeenClicked =
false;
479 mbMouseStartedInArea =
false;
483 awt::MouseEvent
const & evt )
const
490 const bool pressedState )
const
492 if( pressedState !=
mrActivity.mbDrawPressed )
503 awt::MouseEvent
const & evt )
505 if( evt.Buttons == awt::MouseButton::LEFT && isInArea(evt) )
507 mbMouseStartedInArea =
true;
508 updatePressedState(
true);
515 awt::MouseEvent
const & evt )
517 if( evt.Buttons == awt::MouseButton::LEFT && mbMouseStartedInArea )
519 mbHasBeenClicked = isInArea(evt);
520 mbMouseStartedInArea =
false;
521 updatePressedState(
false);
522 if( !mbHasBeenClicked )
529 awt::MouseEvent
const & evt )
531 if( mbMouseStartedInArea )
532 updatePressedState( isInArea(evt) );
537 awt::MouseEvent
const & )
tools::Long GetLineHeight() const
tools::Long GetAscent() const
B2DPoint getMinimum() const
static RendererSharedPtr createRenderer(const CanvasSharedPtr &rCanvas, const ::GDIMetaFile &rMtf, const Renderer::Parameters &rParms)
This class handles the XSprite updates needed for animations, such as moves, scales etc.
bool addActivity(const ActivitySharedPtr &pActivity)
Add the given activity to the queue.
void removeClickHandler(const MouseEventHandlerSharedPtr &rHandler)
void removeMouseMoveHandler(const MouseEventHandlerSharedPtr &rHandler)
void addClickHandler(const MouseEventHandlerSharedPtr &rHandler, double nPriority)
Register a mouse handler that is called on mouse click.
void addMouseMoveHandler(const MouseEventHandlerSharedPtr &rHandler, double nPriority)
Register a mouse handler that is called for mouse moves.
void addViewHandler(const ViewEventHandlerWeakPtr &rHandler)
Register an event handler that will be called when views are changed.
std::shared_ptr< ::canvas::tools::ElapsedTime > const & getTimer() const
Gets the queue's timer object.
bool addEvent(const EventSharedPtr &event)
Add the given event to the queue.
Definition of Event interface.
Interface for handling mouse events.
virtual bool handleMouseMoved(awt::MouseEvent const &evt) override
MouseHandler(const MouseHandler &)=delete
MouseHandler(RehearseTimingsActivity &rta)
RehearseTimingsActivity & mrActivity
bool mbMouseStartedInArea
bool isInArea(css::awt::MouseEvent const &evt) const
virtual bool handleMouseReleased(awt::MouseEvent const &evt) override
MouseHandler & operator=(const MouseHandler &)=delete
void updatePressedState(const bool pressedState) const
virtual bool handleMousePressed(awt::MouseEvent const &evt) override
virtual bool handleMouseDragged(awt::MouseEvent const &evt) override
bool hasBeenClicked() const
WakeupEvent(const WakeupEvent &)=delete
virtual bool fire() override
Execute the event.
WakeupEvent(std::shared_ptr< ::canvas::tools::ElapsedTime > const &pTimeBase, ActivitySharedPtr const &rActivity, ActivitiesQueue &rActivityQueue)
virtual void dispose() override
Dispose all object references.
void setNextTimeout(double nextTime)
Set the next timeout this object should generate.
void start()
Start the internal timer.
virtual double getActivationTime(double nCurrentTime) const override
Query the activation time instant this event shall be fired, if it was inserted at instant nCurrentTi...
WakeupEvent & operator=(const WakeupEvent &)=delete
ActivitiesQueue & mrActivityQueue
std::weak_ptr< Activity > mpActivity
::canvas::tools::ElapsedTime maTimer
virtual bool isCharged() const override
Query whether this event is still charged, i.e.
virtual ~RehearseTimingsActivity() override
::basegfx::B2IVector maSpriteSizePixel
void paintAllSprites() const
double stop()
Stops and hides the timer.
EventMultiplexer & mrEventMultiplexer
virtual void dispose() override
Dispose all object references.
canvas::tools::ElapsedTime maElapsedTime
void start()
Starts and shows the timer; adds to activity queue.
virtual double calcTimeLag() const override
Calculates whether the activity lags time.
virtual void viewRemoved(const UnoViewSharedPtr &rView) override
Notify removed view.
void for_each_sprite(func_type const &func) const
EventQueue & mrEventQueue
ScreenUpdater & mrScreenUpdater
RehearseTimingsActivity(const RehearseTimingsActivity &)=delete
ActivitiesQueue & mrActivitiesQueue
::basegfx::B2DRange calcSpriteRectangle(UnoViewSharedPtr const &rView) const
virtual void end() override
Forces this activity deactivate and get to its end state (if possible), but does not dispose.
void paint(::cppcanvas::CanvasSharedPtr const &canvas) const
std::shared_ptr< MouseHandler > mpMouseHandler
bool hasBeenClicked() const
Determines whether the timer button has been clicked.
::basegfx::B2DRange maSpriteRectangle
screen rect of sprite (in view coordinates!)
virtual bool perform() override
Perform the activity associated with this interface's implementation.
virtual void viewAdded(const UnoViewSharedPtr &rView) override
Notify new view.
virtual void dequeued() override
Notifies the Activity that it has now left the ActivitiesQueue.
virtual bool isActive() const override
Query whether this activity is still continuing.
std::vector< std::pair< UnoViewSharedPtr, std::shared_ptr< cppcanvas::CustomSprite > > > ViewsVecT
std::shared_ptr< WakeupEvent > mpWakeUpEvent
virtual void viewChanged(const UnoViewSharedPtr &rView) override
Notify changed view.
virtual void viewsChanged() override
Notify that all views changed.
static std::shared_ptr< RehearseTimingsActivity > create(const SlideShowContext &rContext)
Creates the activity.
void notifyUpdate()
Notify screen update.
tools::Long GetFontHeight() const
void SetAverageFontWidth(tools::Long nWidth)
void SetColor(const Color &)
void SetFontHeight(tools::Long nHeight)
void SetAlignment(TextAlign)
tools::Long GetAverageFontWidth() const
constexpr ::Color COL_GRAY(0x80, 0x80, 0x80)
constexpr ::Color COL_WHITE(0xFF, 0xFF, 0xFF)
constexpr ::Color COL_LIGHTGRAY(0xC0, 0xC0, 0xC0)
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
#define TOOLS_WARN_EXCEPTION(area, stream)
IntrinsicAnimationActivity & mrActivity
std::shared_ptr< ::cppcanvas::CustomSprite > CustomSpriteSharedPtr
std::shared_ptr< ::cppcanvas::Renderer > RendererSharedPtr
std::shared_ptr< Canvas > CanvasSharedPtr
::std::shared_ptr< Activity > ActivitySharedPtr
const sal_Int32 LOWER_BORDER_SPACE
const sal_Int32 LEFT_BORDER_SPACE
std::shared_ptr< UnoView > UnoViewSharedPtr
bool mbActive
When true, show() was called. Slide hidden otherwise.
EventMultiplexer & mrEventMultiplexer
EventQueue & mrEventQueue
Common arguments for slideshow objects.
EventMultiplexer & mrEventMultiplexer
EventQueue & mrEventQueue
ActivitiesQueue & mrActivitiesQueue
const UnoViewContainer & mrViewContainer