4#ifndef _Stroika_Frameworks_Led_StandardStyledTextImager_h_
5#define _Stroika_Frameworks_Led_StandardStyledTextImager_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
19#include "Stroika/Frameworks/Led/StyledTextImager.h"
21namespace Stroika::Frameworks::Led {
29 struct StyledInfoSummaryRecord :
public FontSpecification {
31 StyledInfoSummaryRecord (
const FontSpecification& fontSpec,
size_t length);
42 class AbstractStyleDatabaseRep :
public virtual MarkerOwner {
44 using inherited = MarkerOwner;
47 virtual vector<StyledInfoSummaryRecord> GetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing)
const = 0;
48 virtual void SetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const IncrementalFontSpecification& styleInfo) = 0;
49 nonvirtual
void SetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const vector<StyledInfoSummaryRecord>& styleInfos);
50 virtual void SetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
size_t nStyleInfos,
const StyledInfoSummaryRecord* styleInfos) = 0;
54 nonvirtual
void Invariant ()
const;
55#if qStroika_Foundation_Debug_AssertionsChecked
57 virtual void Invariant_ ()
const;
70 class StandardStyleMarker :
public StyleMarker {
72 using inherited = StyleMarker;
75 StandardStyleMarker (
const FontSpecification& styleInfo = GetStaticDefaultFont ());
77#if qStroika_Frameworks_Led_SupportGDI
79 virtual void DrawSegment (
const StyledTextImager* imager,
const StyleRunElement& runElement, Tablet* tablet,
size_t from,
size_t to,
80 const TextLayoutBlock& text,
const Led_Rect& drawInto,
const Led_Rect& ,
81 CoordinateType useBaseLine, DistanceType* pixelsDrawn)
override;
82 virtual void MeasureSegmentWidth (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to,
83 const Led_tChar* text, DistanceType* distanceResults)
const override;
84 virtual DistanceType MeasureSegmentHeight (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to)
const override;
85 virtual DistanceType MeasureSegmentBaseLine (
const StyledTextImager* imager,
const StyleRunElement& runElement,
size_t from,
size_t to)
const override;
89 nonvirtual FontSpecification GetInfo ()
const;
90 nonvirtual
void SetInfo (
const FontSpecification& fsp);
93 FontSpecification fFontSpecification;
96 DISABLE_COMPILER_MSC_WARNING_START (4250)
106 class StyleDatabaseRep : public AbstractStyleDatabaseRep, private MarkerCover<StandardStyleMarker, FontSpecification, IncrementalFontSpecification> {
108 using inheritedMC = MarkerCover<StandardStyleMarker, FontSpecification, IncrementalFontSpecification>;
111 StyleDatabaseRep (TextStore& textStore);
114 virtual vector<StyledInfoSummaryRecord> GetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing)
const override;
115 virtual void SetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const IncrementalFontSpecification& styleInfo)
override;
116 virtual void SetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
size_t nStyleInfos,
const StyledInfoSummaryRecord* styleInfos)
override;
118#if qStroika_Foundation_Debug_AssertionsChecked
120 virtual void Invariant_ ()
const override;
123 DISABLE_COMPILER_MSC_WARNING_END (4250)
137 template <class BASECLASS>
138 class SimpleStyleMarkerByIncrementalFontSpecStandardStyleMarkerHelper : public BASECLASS {
140 using inherited = BASECLASS;
143 virtual StyleRunElement MungeRunElement (
const StyleRunElement& inRunElt)
const override;
145#if qStroika_Frameworks_Led_SupportGDI
147 virtual FontSpecification MakeFontSpec (
const StyledTextImager* imager,
const StyleRunElement& runElement)
const override;
151 mutable FontSpecification fFSP;
154#if qStroika_Frameworks_Led_SupportGDI
174 class StandardStyledTextImager :
public virtual StyledTextImager {
176 using inherited = StyledTextImager;
179 StandardStyledTextImager () =
default;
180 virtual ~StandardStyledTextImager () =
default;
183 virtual void HookLosingTextStore ()
override;
184 nonvirtual
void HookLosingTextStore_ ();
185 virtual void HookGainedNewTextStore ()
override;
186 nonvirtual
void HookGainedNewTextStore_ ();
193 nonvirtual FontSpecification GetStyleInfo (
size_t charAfterPos)
const;
194 nonvirtual vector<StyledInfoSummaryRecord> GetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing)
const;
195 nonvirtual
void SetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const IncrementalFontSpecification& styleInfo);
196 nonvirtual
void SetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const vector<StyledInfoSummaryRecord>& styleInfos);
197 nonvirtual
void SetStyleInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
size_t nStyleInfos,
const StyledInfoSummaryRecord* styleInfos);
200 virtual FontMetrics GetFontMetricsAt (
size_t charAfterPos)
const override;
203 virtual FontSpecification GetDefaultSelectionFont ()
const override;
207 virtual IncrementalFontSpecification GetContinuousStyleInfo (
size_t from,
size_t nTChars)
const;
209 nonvirtual IncrementalFontSpecification GetContinuousStyleInfo_ (
const vector<StyledInfoSummaryRecord>& summaryInfo)
const;
211#if qStroika_Foundation_Common_Platform_MacOS
213 nonvirtual
bool DoContinuousStyle_Mac (
size_t from,
size_t nTChars,
short* mode, TextStyle* theStyle);
216#if qStroika_Foundation_Common_Platform_MacOS
219 static vector<StyledInfoSummaryRecord>
Convert (
const ScrpSTElement* teScrapFmt,
size_t nElts);
220 static void Convert (
const vector<StyledInfoSummaryRecord>& fromLedStyleRuns, ScrpSTElement* teScrapFmt);
224 nonvirtual shared_ptr<AbstractStyleDatabaseRep> GetStyleDatabase ()
const;
225 nonvirtual
void SetStyleDatabase (
const shared_ptr<AbstractStyleDatabaseRep>& styleDatabase);
228 virtual void HookStyleDatabaseChanged ();
231 shared_ptr<AbstractStyleDatabaseRep> fStyleDatabase{
nullptr};
232 bool fICreatedDatabase{
false};
235#if qStroika_Foundation_Debug_AssertionsChecked
237 virtual void Invariant_ ()
const;
250#include "StandardStyledTextImager.inl"
Profile Convert(const VariantValue &v)