4#ifndef _Stroika_Frameworks_Led_WordWrappedTextImager_h_
5#define _Stroika_Frameworks_Led_WordWrappedTextImager_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
17#include "Stroika/Frameworks/Led/MultiRowTextImager.h"
19namespace Stroika::Frameworks::Led {
29#ifndef qDefaultLedSoftLineBreakChar
30#define qDefaultLedSoftLineBreakChar '\001'
36 constexpr Led_tChar kSoftLineBreakChar = qDefaultLedSoftLineBreakChar;
38#if qStroika_Frameworks_Led_SupportGDI
46 class WordWrappedTextImager :
public MultiRowTextImager {
48 WordWrappedTextImager () =
default;
49 virtual ~WordWrappedTextImager () =
default;
52 using inherited = MultiRowTextImager;
74 virtual void GetLayoutMargins (RowReference row, CoordinateType* lhs, CoordinateType* rhs)
const = 0;
77 virtual void FillCache (PartitionMarker* pm, PartitionElementCacheInfo& cacheInfo)
override;
80 virtual void AdjustBestRowLength (
size_t textStart,
const Led_tChar* text,
const Led_tChar* end,
size_t* rowLength);
83 virtual bool ContainsMappedDisplayCharacters (
const Led_tChar* text,
size_t nTChars)
const override;
84 virtual size_t RemoveMappedDisplayCharacters (Led_tChar* copyText,
size_t nTChars)
const override;
85 virtual void PatchWidthRemoveMappedDisplayCharacters (
const Led_tChar* srcText, DistanceType* distanceResults,
size_t nTChars)
const override;
91 nonvirtual
size_t FindWrapPointForMeasuredText (
const Led_tChar* text,
size_t length, DistanceType wrapWidth,
92 size_t offsetToMarkerCoords,
const DistanceType* widthsVector,
size_t startSoFar);
93 nonvirtual
size_t TryToFindWrapPointForMeasuredText1 (
const Led_tChar* text,
size_t length, DistanceType wrapWidth,
94 size_t offsetToMarkerCoords,
const DistanceType* widthsVector,
95 size_t startSoFar,
size_t searchStart,
size_t wrapLength);
96 nonvirtual
size_t FindWrapPointForOneLongWordForMeasuredText (
const Led_tChar* text,
size_t length, DistanceType wrapWidth,
97 size_t offsetToMarkerCoords,
const DistanceType* widthsVector,
size_t startSoFar);
115 template <
typename TEXTSTORE,
typename IMAGER = WordWrappedTextImager>
116 class TrivialWordWrappedImager :
public TrivialImager<TEXTSTORE, IMAGER> {
118 TrivialWordWrappedImager (Tablet* t);
121 TrivialWordWrappedImager (Tablet* t, Led_Rect bounds,
const Led_tString& initialText = LED_TCHAR_OF (
""));
124 virtual void GetLayoutMargins (MultiRowTextImager::RowReference row, CoordinateType* lhs, CoordinateType* rhs)
const override;
125 nonvirtual DistanceType GetHeight ()
const;
136#include "WordWrappedTextImager.inl"