From a2cf7058e5140029cda939bfe16ea5853006f06f Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Wed, 20 Nov 2024 10:57:21 +0100 Subject: [PATCH] RichEdit::Skin --- uppsrc/Core/Color.cpp | 106 ------------------------------------- uppsrc/RichEdit/Editor.cpp | 18 ++++--- uppsrc/RichEdit/RichEdit.h | 1 + 3 files changed, 12 insertions(+), 113 deletions(-) diff --git a/uppsrc/Core/Color.cpp b/uppsrc/Core/Color.cpp index 9d619950b..40f9aba5b 100644 --- a/uppsrc/Core/Color.cpp +++ b/uppsrc/Core/Color.cpp @@ -306,8 +306,6 @@ int Grayscale2(const Color& c) return (c.GetR() + c.GetG() + c.GetB()) / 3; } -#if 1 - double C_R = 0.32; double C_G = 0.5; double C_B = 0.2; @@ -348,85 +346,6 @@ Color DarkTheme(Color color) Saturate255(int(b + saturation))); } - -#else // older worse algorithm - -double DarkTheme_c[3] = { 0.3, 0.5, 0.2 }; -int DarkTheme_middle = 155; - -Color DarkTheme(Color color) -{ - if(IsNull(color)) - return Null; - - double v[3]; - v[0] = color.GetR(); - v[1] = color.GetG(); - v[2] = color.GetB(); - -// this represent physiological perception of brightness of R,G,B. Sum = 1 - static double *c = DarkTheme_c; // with this set, blues and reds are more pronounced - - double m0 = c[0] * v[0] + c[1] * v[1] + c[2] * v[2]; // base brightness - - const int middle = DarkTheme_middle; // this value represents gamma-like feature, imbalance of perception of dark vs bright - const double up = (256.0 - middle) / middle; - const double down = 1 / up; - - double m; // target brightness - if(m0 < middle) - m = middle + (middle - m0) * up; - else - m = middle - (m0 - middle) * down; - - int i0 = 0; - int i1 = 1; - int i2 = 2; - - if(v[i0] > v[i1]) - Swap(i0, i1); - if(v[i1] > v[i2]) - Swap(i1, i2); - if(v[i0] > v[i1]) - Swap(i0, i1); - - if(m0 < m) { - m -= m0; - double a = min(v[i2] + m, 255.0) - v[i2]; - v[i0] += a; - v[i1] += a; - v[i2] += a; - m -= a; - - a = min(v[i1] + m / (c[i0] + c[i1]), 255.0) - v[i1]; - v[i0] += a; - v[i1] += a; - m -= (c[i0] + c[i1]) * a; - - v[i0] = min(v[i0] + m / c[i1], 255.0); - } - else { - m = m0 - m; - double a = v[i0] - max(v[i0] - m, 0.0); - v[i0] -= a; - v[i1] -= a; - v[i2] -= a; - m -= a; - - a = v[i1] - max(v[i1] - m / (c[i1] + c[i2]), 0.0); - v[i1] -= a; - v[i2] -= a; - m -= (c[i1] + c[i2]) * a; - - v[i2] = max(v[i2] - m / c[i2], 0.0); - } - - return Color((int)v[0], (int)v[1], (int)v[2]); -} - -#endif - -#if 1 Color DarkThemeCached(Color c) { const int N = 256; // must be 2^N @@ -449,30 +368,5 @@ Color DarkThemeCached(Color c) cache.icolor[i] = c; return cache.ocolor[i] = DarkTheme(cache.icolor[i]); } -#else -Color DarkThemeCached(Color c) -{ - const int N = 8; - thread_local struct Cache { - Color icolor[N]; - Color ocolor[N]; - int ii = 0; - - Cache() { - for(int i = 0; i < N; i++) { - icolor[i] = Color(0, 0, 0); - ocolor[i] = Color(255, 255, 255); - } - } - } cache; - #define DO(i) if(cache.icolor[i] == c) return cache.ocolor[i]; - DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7); - cache.ii = (cache.ii + 1) & (N - 1); - cache.icolor[cache.ii] = c; - c = DarkTheme(c); - cache.ocolor[cache.ii] = c; - return c; -} -#endif } diff --git a/uppsrc/RichEdit/Editor.cpp b/uppsrc/RichEdit/Editor.cpp index fa92ecfcd..e78ca3bdb 100644 --- a/uppsrc/RichEdit/Editor.cpp +++ b/uppsrc/RichEdit/Editor.cpp @@ -608,6 +608,17 @@ void StdIndexEntryDlg(String& s) EditText(s, t_("Index Entry"), t_("Index entry"), CharFilterAscii128, 1000); } +void RichEdit::Skin() +{ + adjustunits.Image(RichEditImg::AdjustUnits()); + ink.ColorImage(RichEditImg::InkColor()) + .NullImage(RichEditImg::NullInkColor()) + .StaticImage(RichEditImg::ColorA()); + paper.ColorImage(RichEditImg::PaperColor()) + .NullImage(RichEditImg::NullPaperColor()) + .StaticImage(RichEditImg::ColorA()); +} + RichEdit::RichEdit() { floating_zoom = Null; @@ -651,7 +662,6 @@ RichEdit::RichEdit() Layout(); SetSb(); - adjustunits.Image(RichEditImg::AdjustUnits()); adjustunits <<= THISBACK(SetupUnits); ruler.Add(adjustunits.RightPosZ(4, 16).VSizePosZ(2, 2)); @@ -710,13 +720,7 @@ RichEdit::RichEdit() gototable.WhenSelect = THISBACK(Goto); - ink.ColorImage(RichEditImg::InkColor()) - .NullImage(RichEditImg::NullInkColor()) - .StaticImage(RichEditImg::ColorA()); ink.NotNull(); - paper.ColorImage(RichEditImg::PaperColor()) - .NullImage(RichEditImg::NullPaperColor()) - .StaticImage(RichEditImg::ColorA()); ink <<= THISBACK(SetInk); ink.Tip(t_("Text color")); paper <<= THISBACK(SetPaper); diff --git a/uppsrc/RichEdit/RichEdit.h b/uppsrc/RichEdit/RichEdit.h index e901dfab0..e8206c436 100644 --- a/uppsrc/RichEdit/RichEdit.h +++ b/uppsrc/RichEdit/RichEdit.h @@ -226,6 +226,7 @@ public: virtual Point GetPreedit(); virtual Font GetPreeditFont(); virtual Rect GetCaret() const; + virtual void Skin(); private: virtual int GetCharAt(int64 i) const { return GetChar((int)i); }