4#ifndef _Stroika_Frameworks_Led_SimpleTextImager_h_
5#define _Stroika_Frameworks_Led_SimpleTextImager_h_ 1
15#include "Stroika/Frameworks/StroikaPreComp.h"
20#include "PartitioningTextImager.h"
22namespace Stroika::Frameworks::Led {
24#if qStroika_Frameworks_Led_SupportGDI
25 DISABLE_COMPILER_MSC_WARNING_START (4250)
45 class SimpleTextImager : public PartitioningTextImager {
47 using inherited = PartitioningTextImager;
51 virtual ~SimpleTextImager ();
54 SimpleTextImager (
const SimpleTextImager&) =
delete;
55 nonvirtual
void operator= (
const SimpleTextImager&) =
delete;
58 virtual void HookLosingTextStore ()
override;
59 nonvirtual
void HookLosingTextStore_ ();
60 virtual void HookGainedNewTextStore ()
override;
61 nonvirtual
void HookGainedNewTextStore_ ();
64 nonvirtual
void SetPartition (
const PartitionPtr& partitionPtr);
67 bool fICreatedPartition;
70 virtual PartitionPtr MakeDefaultPartition ()
const override;
73 class MyPartitionWatcher :
public Partition::PartitionWatcher {
75 nonvirtual
void Init (PartitionPtr partition, SimpleTextImager* imager);
76 nonvirtual
void UnInit (PartitionPtr partition);
79 virtual void AboutToSplit (PartitionMarker* pm,
size_t at,
void** infoRecord)
const noexcept override;
80 virtual void DidSplit (
void* infoRecord)
const noexcept override;
81 virtual void AboutToCoalece (PartitionMarker* pm,
void** infoRecord)
const noexcept override;
82 virtual void DidCoalece (
void* infoRecord)
const noexcept override;
85 SimpleTextImager* fImager;
89 friend class MyPartitionWatcher;
90 MyPartitionWatcher fMyPartitionWatcher;
93 nonvirtual DistanceType GetRowHeight ()
const;
96 nonvirtual
void InvalidateRowHeight ();
97 virtual DistanceType ReCalcRowHeight ()
const;
100 DistanceType fRowHeight;
103 virtual DistanceType MeasureSegmentHeight (
size_t from,
size_t to)
const override;
104 virtual DistanceType MeasureSegmentBaseLine (
size_t from,
size_t to)
const override;
107 using PartitionMarker = Partition::PartitionMarker;
122 RowReference (
const RowReference& from);
123 RowReference (PartitionMarker* partitionMarker);
128 nonvirtual RowReference& operator= (
const RowReference& rhs);
131 nonvirtual PartitionMarker* GetPartitionMarker ()
const;
134 PartitionMarker* fPartitionMarker;
139 nonvirtual
bool GetNextRowReference (RowReference* adjustMeInPlace)
const;
140 nonvirtual
bool GetPreviousRowReference (RowReference* adjustMeInPlace)
const;
143 nonvirtual
bool GetIthRowReferenceFromHere (RowReference* adjustMeInPlace, ptrdiff_t ith)
const;
144 nonvirtual RowReference GetIthRowReferenceFromHere (RowReference fromHere, ptrdiff_t ith)
const;
145 nonvirtual RowReference GetIthRowReference (
size_t ith)
const;
147 nonvirtual
size_t GetRowNumber (RowReference rowRef)
const;
151 nonvirtual
size_t CountRowDifference (RowReference lhs, RowReference rhs)
const;
157 virtual size_t GetTopRowInWindow ()
const override;
158 virtual size_t GetTotalRowsInWindow ()
const override;
159 virtual size_t GetLastRowInWindow ()
const override;
160 virtual void SetTopRowInWindow (
size_t newTopRow)
override;
161 virtual size_t GetMarkerPositionOfStartOfWindow ()
const override;
162 virtual size_t GetMarkerPositionOfEndOfWindow ()
const override;
163 virtual size_t GetMarkerPositionOfStartOfLastRowOfWindow ()
const override;
164 virtual ptrdiff_t CalculateRowDeltaFromCharDeltaFromTopOfWindow (
long deltaChars)
const override;
165 virtual ptrdiff_t CalculateCharDeltaFromRowDeltaFromTopOfWindow (ptrdiff_t deltaRows)
const override;
166 virtual void ScrollByIfRoom (ptrdiff_t downByRows);
172 virtual void ScrollSoShowing (
size_t markerPos,
size_t andTryToShowMarkerPos = 0)
override;
175 nonvirtual RowReference GetTopRowReferenceInWindow ()
const;
176 nonvirtual RowReference GetLastRowReferenceInWindow ()
const;
177 virtual void SetTopRowInWindow (RowReference row);
180 nonvirtual
void SetTopRowInWindow_ (RowReference row);
187 virtual void AssureWholeWindowUsedIfNeeded ()
override;
190 virtual DistanceType ComputeMaxHScrollPos ()
const override;
193 virtual Led_Rect GetCharLocation (
size_t afterPosition)
const override;
194 virtual size_t GetCharAtLocation (
const Led_Point& where)
const override;
195 virtual Led_Rect GetCharWindowLocation (
size_t afterPosition)
const override;
196 virtual size_t GetCharAtWindowLocation (
const Led_Point& where)
const override;
199 virtual size_t GetStartOfRow (
size_t rowNumber)
const override;
200 virtual size_t GetStartOfRowContainingPosition (
size_t charPosition)
const override;
201 virtual size_t GetEndOfRow (
size_t rowNumber)
const override;
202 virtual size_t GetEndOfRowContainingPosition (
size_t charPosition)
const override;
203 virtual size_t GetRealEndOfRow (
size_t rowNumber)
const override;
204 virtual size_t GetRealEndOfRowContainingPosition (
size_t charPosition)
const override;
205 virtual size_t GetRowContainingPosition (
size_t charPosition)
const override;
206 virtual size_t GetRowCount ()
const override;
207 virtual Led_Rect GetCharLocationRowRelativeByPosition (
size_t afterPosition,
size_t positionOfTopRow,
size_t maxRowsToCheck)
const override;
210 nonvirtual
size_t GetStartOfRow (RowReference row)
const;
211 nonvirtual
size_t GetEndOfRow (RowReference row)
const;
212 nonvirtual
size_t GetRealEndOfRow (RowReference row)
const;
213 nonvirtual RowReference GetRowReferenceContainingPosition (
size_t charPosition)
const;
214 nonvirtual
size_t GetRowLength (RowReference row)
const;
217 virtual DistanceType GetRowHeight (
size_t rowNumber)
const override;
220 virtual DistanceType GetRowRelativeBaselineOfRowContainingPosition (
size_t charPosition)
const override;
223 nonvirtual DistanceType GetHeightOfRows (
size_t startingRow,
size_t rowCount)
const;
224 nonvirtual DistanceType GetHeightOfRows (RowReference startingRow,
size_t rowCount)
const;
227 virtual void GetStableTypingRegionContaingMarkerRange (
size_t fromMarkerPos,
size_t toMarkerPos,
size_t* expandedFromMarkerPos,
228 size_t* expandedToMarkerPos)
const override;
231 virtual void Draw (
const Led_Rect& subsetToDraw,
bool printing)
override;
234 virtual void DrawPartitionElement (PartitionMarker* pm,
size_t startSubRow,
size_t maxSubRow, Tablet* tablet, OffscreenTablet* offscreenTablet,
235 bool printing,
const Led_Rect& subsetToDraw, Led_Rect* remainingDrawArea,
size_t* rowsDrawn);
238 virtual Led_Rect GetCharLocationRowRelative (
size_t afterPosition, RowReference topRow,
size_t maxRowsToCheck = UINT_MAX)
const;
239 virtual size_t GetCharAtLocationRowRelative (
const Led_Point& where, RowReference topRow,
size_t maxRowsToCheck = UINT_MAX)
const;
242 nonvirtual DistanceType GetInterLineSpace ()
const;
243 nonvirtual
void SetInterLineSpace (DistanceType interlineSpace);
246 DistanceType fInterlineSpace;
249 virtual DistanceType GetInterLineSpace (PartitionMarker* pm)
const;
250 virtual void ChangedInterLineSpace (PartitionMarker* pm);
254 virtual void SetDefaultFont (
const IncrementalFontSpecification& defaultFont)
override;
258 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
262 virtual void SetWindowRect (
const Led_Rect& windowRect)
override;
265 virtual void InvalidateAllCaches ()
override;
268 nonvirtual RowReference AdjustPotentialTopRowReferenceSoWholeWindowUsed (
const RowReference& potentialTopRow);
269 nonvirtual
bool PositionWouldFitInWindowWithThisTopRow (
size_t markerPos,
const RowReference& newTopRow);
272 PartitionMarker* fTopLinePartitionMarkerInWindow;
279 mutable size_t fTotalRowsInWindow;
281 nonvirtual
size_t GetTotalRowsInWindow_ ()
const;
282 nonvirtual
void InvalidateTotalRowsInWindow ();
283 virtual size_t ComputeRowsThatWouldFitInWindowWithTopRow (
const RowReference& newTopRow)
const;
286 virtual bool ContainsMappedDisplayCharacters (
const Led_tChar* text,
size_t nTChars)
const override;
287 virtual size_t RemoveMappedDisplayCharacters (Led_tChar* copyText,
size_t nTChars)
const override;
289 DISABLE_COMPILER_MSC_WARNING_END (4250)
299#include "SimpleTextImager.inl"