30 #ifndef PT_FORMS_VIEW_H
31 #define PT_FORMS_VIEW_H
33 #include <Pt/Forms/Api.h>
34 #include <Pt/Forms/Widget.h>
35 #include <Pt/Forms/Pixmap.h>
36 #include <Pt/Forms/PaintSurface.h>
37 #include <Pt/Forms/Style.h>
39 #include <Pt/Gfx/Canvas.h>
40 #include <Pt/Gfx/PaintSurface.h>
41 #include <Pt/Gfx/Point.h>
42 #include <Pt/Gfx/Size.h>
43 #include <Pt/Gfx/Rect.h>
53 class PT_FORMS_API View :
public Widget
73 Gfx::PointF toControl(
const Control& control,
74 const Gfx::PointF& pos)
const;
76 Gfx::PointF fromControl(
const Control& control,
77 const Gfx::PointF& pos)
const;
79 void setStyleOptions(
const StyleOptions& opts);
81 PaintSurface& surface();
83 const PaintSurface& surface()
const;
85 void setSurface(PaintSurface* surface,
86 const Gfx::PointF& pos = Gfx::PointF() );
89 virtual void onSetSurface(PaintSurface* surface,
90 const Gfx::PointF& pos);
92 virtual void onPaint(PaintSurface& surface,
93 const Gfx::RectF& rect);
96 virtual void onAttach(Control& control);
98 virtual void onDetach(Control& control);
100 virtual void onInit(Control& control);
102 virtual void onRelease(Control& control);
104 virtual Gfx::PointF onToControl(
const Control& control,
105 const Gfx::PointF& pos)
const;
107 virtual Gfx::PointF onFromControl(
const Control& control,
108 const Gfx::PointF& pos)
const;
110 virtual void onSetStyleOptions(
const StyleOptions& o);
113 virtual void onRepaintRequest(Control& control,
const Gfx::RectF& rect);
115 virtual void onRelayoutRequest(Control& control);
117 virtual void onEnableRequest(Control& control,
bool isEnable);
119 virtual void onActivateRequest(Control& control,
bool active);
121 virtual void onShowRequest(Control& control,
bool isShown);
123 virtual void onMoveRequest(Control& control,
const Gfx::PointF& pos);
125 virtual void onResizeRequest(Control& control,
const Gfx::SizeF& size);
127 virtual void onRaiseRequest(Control& control);
133 virtual void onConnect(Screen& screen);
135 virtual void onDisconnect();
138 virtual void onPaintEvent(
const PaintEvent& ev)
override;
140 virtual void onMoveEvent(
const MoveEvent& ev)
override;
142 virtual void onResizeEvent(
const ResizeEvent& ev)
override;
145 class ViewSurface* _surface;
150 class ViewSurface :
public PaintSurface
153 explicit ViewSurface(View& view)
159 explicit ViewSurface(Widget& w)
165 PaintSurface* surface()
170 const Gfx::PointF& position()
const
175 void setSurface(PaintSurface* surface,
176 const Gfx::PointF& pos)
183 virtual void onDrawPixmap(
const Gfx::PointF& to,
185 const Gfx::Paint& paint,
186 const Gfx::RectF* rect)
override;
188 virtual void onDrawPixmap(Gfx::Canvas& canvas,
189 const Gfx::PointF& to,
191 const Gfx::RectF* rect)
override;
194 virtual const Gfx::ImageFormat& onGetFormat()
const override
197 return _surface->format();
199 return Gfx::ImageFormat::argb32();
202 const Gfx::SizeF& onGetSize()
const
204 return _view->size();
207 virtual const Gfx::Scaling& onGetScaling()
const override
209 return _view->scaling();
212 virtual Gfx::Canvas* onGetCanvas(Gfx::Canvas* reuse)
override
214 Gfx::Canvas* canvas = _surface ? _surface->getCanvas(reuse)
219 Gfx::RectF region = canvas->region();
220 region.shift( _position.x(), _position.y() );
221 region.setSize( _view->size() );
223 canvas->setRegion(region);
227 virtual Gfx::Canvas* onCreateCanvas(Gfx::Canvas* reuse)
override
229 assert(
false &&
"ViewSurface does not create its own canvas");
233 virtual void onReleaseCanvas()
override
238 virtual void onSync()
override
243 virtual void onFinish()
override
250 PaintSurface* _surface;
251 Gfx::PointF _position;
258 #endif // include guard