4#ifndef _Stroika_Frameworks_Led_HiddenText_h_
5#define _Stroika_Frameworks_Led_HiddenText_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
16#include "StandardStyledTextImager.h"
17#include "StyledTextImager.h"
19#include "TextInteractor.h"
21namespace Stroika::Frameworks::Led {
48 virtual void HideAll ();
49 virtual void HideAll (
size_t from,
size_t to);
50 virtual void ShowAll ();
51 virtual void ShowAll (
size_t from,
size_t to);
54 virtual void MakeRegionHidable (
size_t from,
size_t to);
55 virtual void MakeRegionUnHidable (
size_t from,
size_t to);
58 nonvirtual DiscontiguousRun<bool> GetHidableRegions ()
const;
59 nonvirtual DiscontiguousRun<bool> GetHidableRegions (
size_t from,
size_t to)
const;
62 nonvirtual
bool GetHidableRegionsContiguous (
size_t from,
size_t to,
bool hidden)
const;
65 nonvirtual shared_ptr<FlavorPackageInternalizer> GetInternalizer ()
const;
66 nonvirtual
void SetInternalizer (
const shared_ptr<FlavorPackageInternalizer>& i);
69 shared_ptr<FlavorPackageInternalizer> fInternalizer;
72 nonvirtual shared_ptr<FlavorPackageExternalizer> GetExternalizer ()
const;
73 nonvirtual
void SetExternalizer (
const shared_ptr<FlavorPackageExternalizer>& e);
76 shared_ptr<FlavorPackageExternalizer> fExternalizer;
79 class HidableTextMarker;
80 class FontSpecHidableTextMarker;
85 virtual void CollapseMarker (HidableTextMarker* m);
86 virtual void ReifyMarker (HidableTextMarker* m);
89 virtual HidableTextMarker* MakeHidableTextMarker ();
92 virtual TextStore* PeekAtTextStore ()
const override;
95 virtual void AboutToUpdateText (
const UpdateInfo& updateInfo)
override;
96 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
99 TextStore& fTextStore;
100 mutable MarkerMortuary<HidableTextMarker> fMarkersToBeDeleted;
103 using MarkerList = vector<HidableTextMarker*>;
106 nonvirtual MarkerList CollectAllInRange (
size_t from,
size_t to)
const;
107 nonvirtual MarkerList CollectAllInRange_OrSurroundings (
size_t from,
size_t to)
const;
110 nonvirtual
void Invariant ()
const;
112#if qStroika_Foundation_Debug_AssertionsChecked
114 virtual void Invariant_ ()
const;
118 friend class HidableTextMarker;
123 class HidableTextMarkerOwner::HidableTextMarker :
public StyleMarker {
125 using inherited = StyleMarker;
128 HidableTextMarker ();
131 nonvirtual
void Hide ();
132 nonvirtual
void Show ();
133 nonvirtual
bool IsShown ()
const;
154 template <
typename BASECLASS>
155 class HidableTextMarkerHelper :
public BASECLASS {
157 using inherited = BASECLASS;
160 HidableTextMarkerHelper () =
default;
163 virtual int GetPriority ()
const override;
165#if qStroika_Frameworks_Led_SupportGDI
167 virtual void DrawSegment (
const StyledTextImager* imager,
const StyleRunElement& runElement, Tablet* tablet,
size_t from,
size_t to,
168 const TextLayoutBlock& text,
const Led_Rect& drawInto,
const Led_Rect& ,
169 CoordinateType useBaseLine, DistanceType* pixelsDrawn)
override;
170 virtual void MeasureSegmentWidth (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to,
171 const Led_tChar* text, DistanceType* distanceResults)
const override;
172 virtual DistanceType MeasureSegmentHeight (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to)
const override;
174 virtual DistanceType MeasureSegmentBaseLine (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to)
const override;
185 :
public HidableTextMarkerHelper<SimpleStyleMarkerWithLightUnderline<SimpleStyleMarkerByIncrementalFontSpec<
186 SimpleStyleMarkerByIncrementalFontSpecStandardStyleMarkerHelper<SimpleStyleMarkerWithExtraDraw<HidableTextMarkerOwner::HidableTextMarker>>>>>,
189 using inherited = HidableTextMarkerHelper<SimpleStyleMarkerWithLightUnderline<SimpleStyleMarkerByIncrementalFontSpec<
190 SimpleStyleMarkerByIncrementalFontSpecStandardStyleMarkerHelper<SimpleStyleMarkerWithExtraDraw<HidableTextMarkerOwner::HidableTextMarker>>>>>;
195 virtual Color GetUnderlineBaseColor ()
const override;
207 class HidableTextMarkerOwner::FontSpecHidableTextMarker
208 :
public HidableTextMarkerHelper<SimpleStyleMarkerByFontSpec<HidableTextMarkerOwner::HidableTextMarker>>,
211 using inherited = HidableTextMarkerHelper<SimpleStyleMarkerByFontSpec<HidableTextMarkerOwner::HidableTextMarker>>;
214 FontSpecHidableTextMarker (
const IncrementalFontSpecification& styleInfo);
216#if qStroika_Frameworks_Led_SupportGDI
218 virtual FontSpecification MakeFontSpec (
const StyledTextImager* imager,
const StyleRunElement& runElement)
const override;
222 IncrementalFontSpecification fFontSpecification;
240 virtual void HideAll ()
override;
241 virtual void ShowAll ()
override;
244 nonvirtual
bool IsHidden ()
const;
247 virtual void MakeRegionHidable (
size_t from,
size_t to)
override;
265 nonvirtual
Color GetColor ()
const;
266 nonvirtual
void SetColor (
const Color& color);
267 nonvirtual
bool GetColored ()
const;
268 nonvirtual
void SetColored (
bool colored);
271 nonvirtual
void FixupSubMarkers ();
274 virtual HidableTextMarker* MakeHidableTextMarker ()
override;
288#include "HiddenText.inl"
conditional_t< qStroika_Foundation_Memory_PreferBlockAllocation and andTrueCheck, BlockAllocationUseHelper< T >, Common::Empty > UseBlockAllocationIfAppropriate
Use this to enable block allocation for a particular class. Beware of subclassing.