1 #include <mof/widget/ClippingView.hpp>
2 #include <mof/GraphicsDevice.hpp>
3 #include <mof/ConsoleIO.hpp>
10 struct ClippingView::Impl
12 std::shared_ptr<WidgetView> pBody_;
13 mof::Vector2D preferredSize_;
15 Impl(std::shared_ptr<WidgetView> pBody)
27 ClippingView::ClippingView(std::shared_ptr<WidgetView> pBody)
29 pImpl_(new Impl(pBody))
31 pImpl_->pBody_->getPositionStream() << getPositionStream();
32 pImpl_->pBody_->getColorStream() << getColorStream();
33 pImpl_->preferredSize_ = pImpl_->pBody_->getPreferredSize();// the initial scale depends on the body.
34 getSizeStream() << pImpl_->preferredSize_;
35 pImpl_->pBody_->getSizeStream() << getSizeStream() << mof::makeConstantHandler(-pImpl_->preferredSize_);
39 ClippingView::~ClippingView()
44 void ClippingView::update( )
46 m_positionStream.update( );
47 m_sizeStream.update( );
48 m_colorStream.update( );
49 pImpl_->pBody_->update();
53 void ClippingView::draw( ) const
55 int width = mof::GraphicsDevice::getViewportWidth();
56 int height = mof::GraphicsDevice::getViewportHeight();
57 mof::Vector2D position = m_positionStream.value();
58 mof::Vector2D scale = m_sizeStream.value();
59 if (0 == scale.x || 0 == scale.y) return;// prevent the area of viewport from vanishing.
60 mof::GraphicsDevice::setViewport(mof::Rectangle<mof::real>(position.x, position.y, position.x + scale.x, position.y + scale.y));
61 pImpl_->pBody_->draw( );
62 mof::GraphicsDevice::setViewport(mof::Rectangle<mof::real>(0, 0, width, height));// restore the viewport.
66 void ClippingView::setVisible(bool visible)
68 pImpl_->pBody_->setVisible(visible);
72 FrameNumber ClippingView::show(bool immediately)
74 return pImpl_->pBody_->show(immediately);
78 FrameNumber ClippingView::hide(bool immediately)
80 return pImpl_->pBody_->hide(immediately);
84 FrameNumber ClippingView::focus(bool immediately)
86 return pImpl_->pBody_->focus(immediately);
90 FrameNumber ClippingView::blur(bool immediately)
92 return pImpl_->pBody_->blur(immediately);
96 FrameNumber ClippingView::click(bool immediately)
98 return pImpl_->pBody_->click(immediately);
101 //{{{ getPreferredSize
102 mof::Vector2D ClippingView::getPreferredSize() const
104 return pImpl_->preferredSize_;