30 #ifndef Pt_Forms_PlatinumStyle_h
31 #define Pt_Forms_PlatinumStyle_h
33 #include <Pt/Forms/Api.h>
34 #include <Pt/Forms/Style.h>
35 #include <Pt/Forms/ButtonStyler.h>
36 #include <Pt/Forms/PanelStyler.h>
37 #include <Pt/Forms/CheckBoxStyler.h>
38 #include <Pt/Forms/SpinBoxStyler.h>
39 #include <Pt/Forms/SliderStyler.h>
40 #include <Pt/Forms/ScrollBarStyler.h>
41 #include <Pt/Forms/ProgressBarStyler.h>
42 #include <Pt/Forms/LineEditStyler.h>
43 #include <Pt/Forms/ComboBoxStyler.h>
44 #include <Pt/Forms/ListBoxStyler.h>
45 #include <Pt/Forms/TabViewStyler.h>
46 #include <Pt/Forms/Painter.h>
47 #include <Pt/Gfx/Color.h>
48 #include <Pt/Gfx/Font.h>
49 #include <Pt/Gfx/Rect.h>
50 #include <Pt/Gfx/Point.h>
51 #include <Pt/Gfx/Size.h>
52 #include <Pt/Gfx/Path.h>
53 #include <Pt/String.h>
61 class PlatinumRendererBase :
public Style::Facet
64 PlatinumRendererBase(std::size_t refs = 0);
66 virtual ~PlatinumRendererBase();
68 void renderChrome(Painter& painter,
69 const Gfx::RectF& rect,
73 void renderChrome(Painter& painter,
74 const Gfx::RectF& rect,
78 void renderPlane(Painter& painter,
79 const Gfx::RectF& rect,
80 const Gfx::Brush& brush,
83 void renderPlane(Painter& painter,
84 const Gfx::RectF& rect,
88 static Gfx::Polygon getPolygon(
const Gfx::RectF& rect,
double inset,
double corner);
92 class PT_FORMS_API PlatinumPanelRenderer :
public PanelRenderer
95 PlatinumPanelRenderer(FacetPtr<PlatinumRendererBase> base,
96 std::size_t refs = 0);
98 virtual ~PlatinumPanelRenderer();
101 virtual PanelRenderer* onCreate()
const;
103 virtual void onReset(
const StyleOptions& options);
105 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
106 const Gfx::SizeF& contentSize);
108 virtual Gfx::RectF onLayoutFrame(PaintSurface& surface,
109 const Gfx::RectF& rect);
111 virtual const Painter& onGetTextPainter(PaintSurface& surface);
113 virtual void onRenderBackground(PaintContext& context,
114 const Gfx::RectF& rect,
115 const PanelState& state);
117 virtual void onRenderFrame(PaintContext& context,
118 const Gfx::RectF& rect,
119 const PanelState& state);
121 virtual void onRenderText(PaintContext& context,
122 const Gfx::RectF& rect,
124 const Gfx::PointF& pos,
125 const PanelState& state);
127 virtual void onRenderIcon(PaintContext& context,
128 const Gfx::RectF& rect,
129 const Pixmap& picture,
130 const Gfx::PointF& pos,
131 const PanelState& state);
134 FacetPtr<PlatinumRendererBase> _base;
136 Painter _framePainter;
137 Painter _textPainter;
138 Painter _iconPainter;
139 double _cornerRadius;
143 class PT_FORMS_API PlatinumButtonRenderer :
public ButtonRenderer
146 PlatinumButtonRenderer(FacetPtr<PlatinumRendererBase> base,
147 std::size_t refs = 0);
149 virtual ~PlatinumButtonRenderer();
152 virtual ButtonRenderer* onCreate()
const;
154 virtual void onReset(
const StyleOptions& options);
156 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
157 const Gfx::SizeF& contentSize);
159 virtual Gfx::SizeF onMeasureContent(PaintSurface& surface,
161 const Gfx::SizeF& iconSize,
162 const Gfx::SizeF& textSize);
164 virtual Gfx::RectF onLayoutFrame(PaintSurface& surface,
165 const Gfx::RectF& rect);
167 virtual Gfx::RectF onLayoutMnemonic(PaintSurface& surface,
169 const Gfx::PointF& textPos,
170 const Gfx::FontMetrics& fontMetrics,
171 String::size_type mnemonicIndex);
173 virtual const Painter& onGetTextPainter(PaintSurface& surface);
175 virtual void onLayoutContent(PaintSurface& surface,
176 const Gfx::RectF& contentRect,
178 const Gfx::SizeF& iconSize,
179 const Gfx::SizeF& textSize,
180 Gfx::RectF& iconRect,
181 Gfx::RectF& textRect);
183 virtual void onRenderBackground(PaintContext& context,
184 const Gfx::RectF& rect,
185 const ButtonState& state);
187 virtual void onPrepareIcon(
const Gfx::Image& icon,
189 const ButtonState& state)
const;
191 virtual void onRenderChrome(PaintContext& context,
192 const Gfx::RectF& rect,
193 const ButtonState& state);
195 virtual void onRenderText(PaintContext& context,
196 const Gfx::RectF& rect,
198 const Gfx::PointF& pos,
199 const ButtonState& state);
201 virtual void onRenderMnemonic(PaintContext& context,
202 const Gfx::RectF& rect,
203 const Gfx::RectF& mnemonic,
204 const ButtonState& state);
206 virtual void onRenderIcon(PaintContext& context,
207 const Gfx::RectF& rect,
208 const Pixmap& picture,
209 const Gfx::PointF& pos,
210 const ButtonState& state);
213 FacetPtr<PlatinumRendererBase> _base;
214 Gfx::Color _accentColor;
215 Gfx::Color _textColor;
216 Painter _normalPainter;
217 Painter _pressedPainter;
218 Painter _highlightPainter;
219 Painter _textPainter;
220 Painter _iconPainter;
224 class PT_FORMS_API PlatinumCheckBoxRenderer :
public CheckBoxRenderer
227 PlatinumCheckBoxRenderer(std::size_t refs = 0);
229 virtual ~PlatinumCheckBoxRenderer();
232 virtual CheckBoxRenderer* onCreate()
const;
234 virtual void onReset(
const StyleOptions& options);
236 virtual Gfx::SizeF onMeasureIndicator(PaintSurface& surface);
238 virtual Gfx::SizeF onMeasureContent(PaintSurface& surface,
239 const Gfx::SizeF& indicatorSize,
240 const Gfx::SizeF& textSize);
242 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
243 const Gfx::SizeF& contentSize);
245 virtual Gfx::RectF onLayoutFrame(PaintSurface& surface,
246 const Gfx::RectF& rect);
248 virtual void onLayoutContent(PaintSurface& surface,
249 const Gfx::RectF& contentRect,
250 const Gfx::SizeF& indicatorSize,
251 const Gfx::SizeF& textSize,
252 Gfx::RectF& indicatorRect,
253 Gfx::RectF& textRect);
255 virtual Gfx::RectF onLayoutMnemonic(PaintSurface& surface,
257 const Gfx::PointF& textPos,
258 const Gfx::FontMetrics& fontMetrics,
259 String::size_type mnemonicIndex);
261 virtual const Painter& onGetTextPainter(PaintSurface& surface);
263 virtual void onRenderChrome(PaintContext& context,
264 const Gfx::RectF& rect,
265 const Gfx::RectF& boxRect,
266 const CheckBoxState& state);
268 virtual void onRenderText(PaintContext& context,
269 const Gfx::RectF& textRect,
271 const Gfx::PointF& pos,
272 const CheckBoxState& state);
274 virtual void onRenderMnemonic(PaintContext& context,
275 const Gfx::RectF& rect,
276 const Gfx::RectF& mnemonic,
277 const CheckBoxState& state);
281 Painter _textPainter;
282 Gfx::Color _checkColor;
286 class PT_FORMS_API PlatinumSpinBoxRenderer :
public SpinBoxRenderer
289 PlatinumSpinBoxRenderer(std::size_t refs = 0);
291 virtual ~PlatinumSpinBoxRenderer();
294 virtual SpinBoxRenderer* onCreate()
const;
298 virtual void onReset(
const StyleOptions& options);
300 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
301 const Gfx::SizeF& contentSize);
303 virtual Gfx::SizeF onMeasureEntry(PaintSurface& surface,
304 const Gfx::SizeF& contentSize);
306 virtual Gfx::SizeF onMeasureIndicator(PaintSurface& surface);
308 virtual void onLayoutChrome(PaintSurface& surface,
309 const Gfx::RectF& rect,
310 Gfx::RectF& entryRect,
311 Gfx::RectF& upButtonRect,
312 Gfx::RectF& downButtonRect,
313 Gfx::RectF& textRect);
315 virtual Gfx::RectF onLayoutEntry(PaintSurface& surface,
316 const Gfx::RectF& entryRect);
318 virtual const Painter& onGetTextPainter(PaintSurface& surface);
320 virtual void onRenderChrome(PaintContext& context,
321 const Gfx::RectF& rect,
322 const Gfx::RectF& entryRect,
323 const Gfx::RectF& upButtonRect,
324 const Gfx::RectF& downButtonRect,
325 const SpinBoxState& state);
327 virtual void onRenderEntry(PaintContext& context,
328 const Gfx::RectF& entryRect,
329 const SpinBoxState& state);
331 virtual void onRenderUpButton(PaintContext& context,
332 const Gfx::RectF& buttonRect,
333 const SpinBoxState& state);
335 virtual void onRenderDownButton(PaintContext& context,
336 const Gfx::RectF& buttonRect,
337 const SpinBoxState& state);
339 virtual void onRenderText(PaintContext& context,
340 const Gfx::RectF& textRect,
342 const Gfx::PointF& textPos,
343 const Gfx::RectF& cursor,
344 const SpinBoxState& state);
347 void renderIndicator(Painter& painter,
348 const Gfx::RectF& rect,
352 Gfx::Brush _background;
354 Gfx::Brush _foreground;
356 Gfx::Color _textColor;
357 Gfx::Color _accentColor;
359 Painter _buttonPainter;
360 Painter _textPainter;
365 class PT_FORMS_API PlatinumLineEditRenderer :
public LineEditRenderer
368 PlatinumLineEditRenderer(std::size_t refs = 0);
370 virtual ~PlatinumLineEditRenderer();
373 virtual LineEditRenderer* onCreate()
const;
375 virtual void onReset(
const StyleOptions& options);
377 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
378 const Gfx::SizeF& contentSize);
380 virtual Gfx::RectF onLayoutFrame(PaintSurface& surface,
381 const Gfx::RectF& rect);
383 virtual const Painter& onGetTextPainter(PaintSurface& surface);
385 virtual void onRenderEntry(PaintContext& context,
386 const Gfx::RectF& rect,
387 const LineEditState& state);
389 virtual void onRenderSelection(PaintContext& context,
390 const Gfx::RectF& textRect,
391 const Gfx::RectF& selection,
392 const LineEditState& state);
394 virtual void onRenderText(PaintContext& context,
395 const Gfx::RectF& textRect,
397 const Gfx::PointF& textPos,
398 const LineEditState& state);
400 virtual void onRenderCursor(PaintContext& context,
401 const Gfx::RectF& textRect,
402 const Gfx::RectF& cursor,
403 const LineEditState& state);
407 Painter _selectionPainter;
408 Painter _textPainter;
411 Gfx::Brush _background;
414 Gfx::Color _textColor;
415 Gfx::Color _accentColor;
416 Gfx::Color _selectionBackground;
417 Gfx::Color _selectionTextColor;
421 class PT_FORMS_API PlatinumProgressBarRenderer :
public ProgressBarRenderer
424 PlatinumProgressBarRenderer(std::size_t refs = 0);
426 virtual ~PlatinumProgressBarRenderer();
429 virtual ProgressBarRenderer* onCreate()
const;
431 virtual void onReset(
const StyleOptions& options);
433 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
434 const Gfx::SizeF& contentSize);
436 virtual Gfx::SizeF onMeasureBar(PaintSurface& surface);
438 virtual void onLayoutChrome(PaintSurface& surface,
439 const Gfx::RectF& rect,
440 const Gfx::SizeF& barSize,
441 const Gfx::SizeF& textSize,
443 Gfx::RectF& textRect);
445 virtual void onLayoutBar(PaintSurface& surface,
446 const Gfx::RectF& barRect,
448 Gfx::RectF& trackRect,
449 Gfx::RectF& chunkRect);
451 virtual const Painter& onGetTextPainter(PaintSurface& surface);
453 virtual void onRenderTrack(PaintContext& context,
454 const Gfx::RectF& trackRect,
455 const ProgressBarState& state);
457 virtual void onRenderChunk(PaintContext& context,
458 const Gfx::RectF& chunkRect,
459 const ProgressBarState& state);
461 virtual void onRenderText(PaintContext& context,
462 const Gfx::RectF& textRect,
463 const Gfx::RectF& chunkRect,
465 const Gfx::PointF& textPos,
466 const ProgressBarState& state);
470 Gfx::Color _textBackground;
471 Painter _trackPainter;
472 Painter _chunkPainter;
473 Painter _textPainter;
474 Painter _invertTextPainter;
477 class PT_FORMS_API PlatinumSliderRenderer :
public SliderRenderer
480 PlatinumSliderRenderer(std::size_t refs = 0);
482 virtual ~PlatinumSliderRenderer();
485 virtual SliderRenderer* onCreate()
const;
489 virtual void onReset(
const StyleOptions& options);
491 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
492 const Gfx::SizeF& contentSize);
494 virtual Gfx::SizeF onMeasureTrack(PaintSurface& surface);
496 virtual Gfx::SizeF onMeasureHandle(PaintSurface& surface);
498 virtual void onLayoutChrome(PaintSurface& surface,
499 const Gfx::RectF& rect,
500 const Gfx::SizeF& trackSize,
501 const Gfx::SizeF& handleSize,
502 Gfx::RectF& trackRect,
503 Gfx::RectF& handleRect);
505 virtual void onLayoutHandle(PaintSurface& surface,
506 const Gfx::RectF& trackRect,
508 Gfx::RectF& handleRect);
510 virtual void onRenderTrack(PaintContext& context,
511 const Gfx::RectF& trackRect,
512 const SliderState& state);
514 virtual void onRenderHandle(PaintContext& context,
515 const Gfx::RectF& handleRect,
516 const SliderState& state);
519 Gfx::Brush _hoverBrush;
520 Gfx::Brush _contourBrush;
521 Painter _trackPainter;
522 Painter _handlePainter;
526 class PT_FORMS_API PlatinumScrollBarRenderer :
public ScrollBarRenderer
529 PlatinumScrollBarRenderer(std::size_t refs = 0);
531 virtual ~PlatinumScrollBarRenderer();
534 virtual ScrollBarRenderer* onCreate()
const;
538 virtual void onReset(
const StyleOptions& options);
540 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
541 const Gfx::SizeF& contentSize,
542 Direction direction);
544 virtual Gfx::SizeF onMeasureTrack(PaintSurface& surface,
545 Direction direction);
547 virtual Gfx::SizeF onMeasureHandle(PaintSurface& surface,
548 Direction direction);
550 virtual Gfx::SizeF onMeasureButton(PaintSurface& surface,
551 Direction direction);
553 virtual void onLayoutChrome(PaintSurface& surface,
554 const Gfx::RectF& rect,
556 const Gfx::SizeF& buttonSize,
557 Gfx::RectF& trackRect,
558 Gfx::RectF& decreaseRect,
559 Gfx::RectF& increaseRect);
561 virtual void onLayoutHandle(PaintSurface& surface,
562 const Gfx::RectF& trackRect,
565 float viewProportion,
566 Gfx::RectF& handleRect);
568 virtual void onRenderTrack(PaintContext& context,
569 const Gfx::RectF& trackRect,
571 const ScrollBarState& state);
573 virtual void onRenderHandle(PaintContext& context,
574 const Gfx::RectF& handleRect,
576 const ScrollBarState& state);
578 virtual void onRenderDecreaseButton(PaintContext& context,
579 const Gfx::RectF& buttonRect,
581 const ScrollBarState& state);
583 virtual void onRenderIncreaseButton(PaintContext& context,
584 const Gfx::RectF& buttonRect,
586 const ScrollBarState& state);
589 Gfx::Brush _background;
591 Gfx::Color _accentColor;
592 Painter _trackPainter;
593 Painter _handlePainter;
594 Painter _buttonPainter;
598 class PT_FORMS_API PlatinumListBoxRenderer :
public ListBoxRenderer
601 PlatinumListBoxRenderer(std::size_t refs = 0);
603 virtual ~PlatinumListBoxRenderer();
606 virtual ListBoxRenderer* onCreate()
const;
608 virtual void onReset(
const StyleOptions& options);
610 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
611 const Gfx::SizeF& contentSize);
613 virtual Gfx::RectF onLayoutFrame(PaintSurface& surface,
614 const Gfx::RectF& rect);
616 virtual void onRenderBackground(PaintContext& context,
617 const Gfx::RectF& rect,
618 const ListBoxState& state);
620 virtual void onRenderChrome(PaintContext& context,
621 const Gfx::RectF& rect,
622 const ListBoxState& state);
625 Gfx::Brush _viewBackground;
628 Painter _framePainter;
632 class PT_FORMS_API PlatinumListItemRenderer :
public ListItemRenderer
635 PlatinumListItemRenderer(std::size_t refs = 0);
637 virtual ~PlatinumListItemRenderer();
640 virtual ListItemRenderer* onCreate()
const;
644 virtual void onReset(
const StyleOptions& options);
646 virtual Gfx::SizeF onMeasureContent(PaintSurface& surface,
647 const Gfx::SizeF& iconSize,
648 const Gfx::SizeF& textSize);
650 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
651 const Gfx::SizeF& contentSize);
653 virtual const Painter& onGetTextPainter(PaintSurface& surface);
655 virtual Gfx::RectF onLayoutFrame(PaintSurface& surface,
656 const Gfx::RectF& rect);
658 virtual void onLayoutContent(PaintSurface& surface,
659 const Gfx::RectF& contentRect,
660 const Gfx::SizeF& iconSize,
661 const Gfx::SizeF& textSize,
662 Gfx::RectF& iconRect,
663 Gfx::RectF& textRect);
665 virtual void onRenderBackground(PaintContext& context,
666 const Gfx::RectF& rect,
667 const ListItemState& state);
669 virtual void onRenderHighlight(PaintContext& context,
670 const Gfx::RectF& rect,
671 const ListItemState& state);
673 virtual void onRenderText(PaintContext& context,
674 const Gfx::RectF& textRect,
676 const Gfx::PointF& pos,
677 const ListItemState& state);
679 virtual void onRenderIcon(PaintContext& context,
680 const Gfx::RectF& iconRect,
681 const Pixmap& picture,
682 const Gfx::PointF& pos,
683 const ListItemState& state);
686 Gfx::Brush _background;
688 Gfx::Color _textColor;
689 Gfx::Brush _highlightBrush;
690 Gfx::Color _highlightedTextColor;
692 Painter _iconPainter;
693 Painter _textPainter;
697 class PT_FORMS_API PlatinumComboBoxRenderer :
public ComboBoxRenderer
700 PlatinumComboBoxRenderer(std::size_t refs = 0);
702 virtual ~PlatinumComboBoxRenderer();
705 virtual ComboBoxRenderer* onCreate()
const;
709 virtual void onReset(
const StyleOptions& options);
711 virtual Gfx::SizeF onMeasureFrame(PaintSurface& surface,
712 const Gfx::SizeF& contentSize);
714 virtual Gfx::SizeF onMeasureButton(PaintSurface& surface);
716 virtual void onLayoutChrome(PaintSurface& surface,
717 const Gfx::RectF& rect,
718 Gfx::RectF& entryRect,
719 Gfx::RectF& buttonRect,
720 Gfx::RectF& textRect);
722 virtual const Painter& onGetTextPainter(PaintSurface& surface);
724 virtual void onRenderChrome(PaintContext& context,
725 const Gfx::RectF& rect,
726 const Gfx::RectF& entryRect,
727 const Gfx::RectF& buttonRect,
728 const ComboBoxState& state,
729 const ComboBoxButtonState& buttonState);
731 virtual void onRenderEntry(PaintContext& context,
732 const Gfx::RectF& entryRect,
733 const ComboBoxState& state);
735 virtual void onRenderButton(PaintContext& context,
736 const Gfx::RectF& buttonRect,
737 const ComboBoxState& state,
738 const ComboBoxButtonState& buttonState);
740 virtual void onRenderText(PaintContext& context,
741 const Gfx::RectF& textRect,
743 const Gfx::PointF& textPos,
744 const Gfx::RectF& cursor,
745 const ComboBoxState& state);
748 Gfx::Brush _background;
750 Gfx::Brush _foreground;
752 Gfx::Color _textColor;
753 Gfx::Color _accentColor;
756 Painter _buttonPainter;
757 Painter _textPainter;
761 class PT_FORMS_API PlatinumTabViewRenderer :
public TabViewRenderer
764 PlatinumTabViewRenderer(std::size_t refs = 0);
766 virtual ~PlatinumTabViewRenderer();
769 virtual TabViewRenderer* onCreate()
const;
773 virtual void onReset(
const StyleOptions& options);
775 virtual Gfx::SizeF onMeasureTab(PaintSurface& surface,
778 virtual Gfx::RectF onLayoutTab(PaintSurface& surface,
779 const Gfx::RectF& tabRect);
781 virtual const Painter& onGetTextPainter(PaintSurface& surface);
783 virtual void onRenderBackground(PaintContext& context,
784 const Gfx::RectF& contentRect,
785 const TabViewState& state);
787 virtual void onRenderChrome(PaintContext& context,
788 const Gfx::RectF& contentRect,
789 const Gfx::RectF& activeTabRect,
790 const TabViewState& state);
792 virtual void onRenderTab(PaintContext& context,
793 const Gfx::RectF& tabRect,
795 const Gfx::PointF& textPos,
796 const TabViewItemState& state);
799 Gfx::Brush _background;
802 Gfx::Color _textColor;
803 Gfx::Color _accentColor;
806 Painter _framePainter;
807 Painter _textPainter;
808 Painter _activeTextPainter;