5namespace Stroika::Frameworks::Led {
16 template <
typename WORDWRAPPEDTEXTIMAGER,
typename SIMPLETEXTIMAGER,
typename TEXTSTORE>
17 Led_Size GetTextExtent (Tablet* tablet,
const Led_tString& text,
const Led_Rect& r,
bool wordWrap)
20 Led_Size textExtent (0, 0);
22 if (r.right > r.left) {
23 TrivialWordWrappedImager<TEXTSTORE, WORDWRAPPEDTEXTIMAGER> imager (tablet, r, text);
24 textExtent.v = imager.GetHeight ();
25 textExtent.h = r.GetWidth ();
29 TrivialImager<TEXTSTORE, SIMPLETEXTIMAGER> imager (tablet, r, text);
30 textExtent.v = imager.GetHeightOfRows (0, imager.GetRowCount ());
31 textExtent.h = imager.CalculateLongestRowInWindowPixelWidth ();
47 template <
typename WORDWRAPPEDTEXTIMAGER,
typename SIMPLETEXTIMAGER,
typename TEXTSTORE>
48 void DrawTextBox (Tablet* tablet,
const Led_tString& text,
const Led_Rect& r,
bool wordWrap)
52 TrivialWordWrappedImager<TEXTSTORE, WORDWRAPPEDTEXTIMAGER> imager (tablet, r, text);
53 imager.Draw (r,
false);
56 TrivialImager<TEXTSTORE, SIMPLETEXTIMAGER> imager (tablet, r, text);
57 imager.Draw (r,
false);
62 template <
typename TEXTSTORE,
typename WORDPROCESSOR>
63 WaterMarkHelper<TEXTSTORE, WORDPROCESSOR>::WaterMarkHelper (
const Led_tString& watermMarkText)
64 : fWatermarkColor (Color::kYellow)
65 , fWatermarkText (watermMarkText)
66 , fCachedImager (NULL)
67 , fCachedIntoRect (Led_Rect (0, 0, 0, 0))
68 , fCachedIntoTablet (NULL)
71 template <
typename TEXTSTORE,
typename WORDPROCESSOR>
72 WaterMarkHelper<TEXTSTORE, WORDPROCESSOR>::~WaterMarkHelper ()
76 template <
typename TEXTSTORE,
typename WORDPROCESSOR>
77 Color WaterMarkHelper<TEXTSTORE, WORDPROCESSOR>::GetWatermarkColor ()
const
79 return fWatermarkColor;
81 template <
typename TEXTSTORE,
typename WORDPROCESSOR>
82 void WaterMarkHelper<TEXTSTORE, WORDPROCESSOR>::SetWatermarkColor (
const Color& c)
86 template <
typename TEXTSTORE,
typename WORDPROCESSOR>
87 void WaterMarkHelper<TEXTSTORE, WORDPROCESSOR>::DrawWatermark (Tablet* tablet,
const Led_Rect& intoRect,
const Led_Rect& subsetToDraw)
96 if (fCachedImager != NULL) {
98 if (fCachedIntoRect != intoRect or fCachedIntoTablet != tablet) {
100 fCachedImager = NULL;
103 Led_Rect centeredRect = intoRect;
106 centeredRect.left += 5;
107 centeredRect.right -= 5;
108 if (centeredRect.right <= centeredRect.left) {
109 centeredRect.right = centeredRect.left + 1;
111 if (fCachedImager == NULL) {
112 fCachedImager =
new MyTrivImager (tablet, centeredRect, fWatermarkText);
113 fCachedIntoRect = centeredRect;
114 fCachedIntoTablet = tablet;
115 IncrementalFontSpecification extraStyles = GetStaticDefaultFont ();
116 extraStyles.SetTextColor (GetWatermarkColor ());
117 fCachedImager->SetStyleInfo (0, fCachedImager->GetLength (), extraStyles);
121 extraStyles.SetPointSize (72);
122 fCachedImager->SetStyleInfo (0, fCachedImager->GetLength (), extraStyles);
124 while (fCachedImager->GetRowCount () > 1) {
125 extraStyles.SetPointSize (extraStyles.GetPointSize () / 2);
126 fCachedImager->SetStyleInfo (0, fCachedImager->GetLength (), extraStyles);
128 if (extraStyles.GetPointSize () <= 12) {
133 fCachedImager->SetJustification (0, fCachedImager->GetLength (), eCenterJustify);
136 DistanceType rowHeight = fCachedImager->GetHeightOfRows (0, 1);
137 Led_Rect wr = fCachedImager->GetWindowRect ();
138 wr.top += (wr.GetHeight () - rowHeight) / 2;
139 wr.bottom = wr.top + rowHeight;
140 fCachedImager->SetWindowRect (wr);
144 Tablet::ClipNarrowAndRestore clipFurtherTo (tablet, intoRect * subsetToDraw);
146 bool printing =
true;
147 fCachedImager->Draw (subsetToDraw, printing);
#define RequireNotNull(p)