5namespace Stroika::Frameworks::Led {
7#if qStroika_Frameworks_Led_SupportGDI
14 inline SimpleTextImager::RowReference::RowReference (PartitionMarker* partitionMarker)
15 : fPartitionMarker (partitionMarker)
18 inline void SimpleTextImager::InvalidateTotalRowsInWindow ()
20 fTotalRowsInWindow = 0;
22 inline SimpleTextImager::RowReference SimpleTextImager::GetTopRowReferenceInWindow ()
const
26 return (RowReference (fTopLinePartitionMarkerInWindow));
28 inline size_t SimpleTextImager::GetTotalRowsInWindow_ ()
const
30 if (fTotalRowsInWindow == 0) {
31 fTotalRowsInWindow = ComputeRowsThatWouldFitInWindowWithTopRow (GetTopRowReferenceInWindow ());
33 Assert (fTotalRowsInWindow >= 1);
34 Assert (fTotalRowsInWindow == ComputeRowsThatWouldFitInWindowWithTopRow (GetTopRowReferenceInWindow ()));
35 return (fTotalRowsInWindow);
39 inline SimpleTextImager::RowReference::RowReference (
const RowReference& from)
40 : fPartitionMarker (from.fPartitionMarker)
43 inline SimpleTextImager::RowReference& SimpleTextImager::RowReference::operator= (
const SimpleTextImager::RowReference& rhs)
45 fPartitionMarker = rhs.fPartitionMarker;
48 inline SimpleTextImager::PartitionMarker* SimpleTextImager::RowReference::GetPartitionMarker ()
const
50 return (fPartitionMarker);
61 inline DistanceType SimpleTextImager::GetRowHeight ()
const
63 if (fRowHeight == DistanceType (-1)) {
65 const_cast<SimpleTextImager*
> (
this)->fRowHeight = ReCalcRowHeight ();
67 Ensure (fRowHeight > 0);
68 Ensure (fRowHeight != DistanceType (-1));
76 inline void SimpleTextImager::InvalidateRowHeight ()
78 fRowHeight = DistanceType (-1);
86 inline bool SimpleTextImager::GetNextRowReference (RowReference* adjustMeInPlace)
const
89 PartitionMarker* cur = adjustMeInPlace->GetPartitionMarker ();
94 *adjustMeInPlace = RowReference{cur};
98 if (cur->GetNext () == NULL) {
102 cur = cur->GetNext ();
104 *adjustMeInPlace = RowReference{cur};
115 inline bool SimpleTextImager::GetPreviousRowReference (RowReference* adjustMeInPlace)
const
118 PartitionMarker* cur = adjustMeInPlace->GetPartitionMarker ();
123 *adjustMeInPlace = RowReference (cur);
127 if (cur->GetPrevious () == NULL) {
131 cur = cur->GetPrevious ();
133 *adjustMeInPlace = RowReference (cur);
145 inline SimpleTextImager::RowReference SimpleTextImager::GetIthRowReferenceFromHere (RowReference fromHere, ptrdiff_t ith)
const
147 [[maybe_unused]]
bool result = GetIthRowReferenceFromHere (&fromHere, ith);
157 inline SimpleTextImager::RowReference SimpleTextImager::GetIthRowReference (
size_t ith)
const
159 RowReference fromHere ((PartitionMarker*)GetFirstPartitionMarker ());
160 [[maybe_unused]]
bool result = GetIthRowReferenceFromHere (&fromHere, ith);
169 inline size_t SimpleTextImager::GetRowLength (RowReference row)
const
171 return (GetEndOfRow (row) - GetStartOfRow (row));
177 inline SimpleTextImager::RowReference SimpleTextImager::GetLastRowReferenceInWindow ()
const
179 RowReference row = GetTopRowReferenceInWindow ();
180 Assert (GetTotalRowsInWindow_ () >= 1);
181 (void)GetIthRowReferenceFromHere (&row, GetTotalRowsInWindow_ () - 1);
184 inline void SimpleTextImager::SetTopRowInWindow_ (RowReference row)
186 fTopLinePartitionMarkerInWindow = row.GetPartitionMarker ();
188 InvalidateTotalRowsInWindow ();
197 inline DistanceType SimpleTextImager::GetInterLineSpace ()
const
199 return (fInterlineSpace);
202 inline bool operator== (SimpleTextImager::RowReference lhs, SimpleTextImager::RowReference rhs)
204 return (lhs.GetPartitionMarker () == rhs.GetPartitionMarker ());
206 inline bool operator!= (SimpleTextImager::RowReference lhs, SimpleTextImager::RowReference rhs)
208 return (lhs.GetPartitionMarker () != rhs.GetPartitionMarker ());
#define RequireNotNull(p)