mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
RichEdit::Skin
This commit is contained in:
parent
c3f31d5af6
commit
a2cf7058e5
3 changed files with 12 additions and 113 deletions
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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); }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue