Use array to look-up wxMSW underline colours

Remove previously added colours from wxColourDatabase.
This commit is contained in:
Maarten Bent
2019-07-18 22:36:40 +02:00
parent f5b3b6a84d
commit d2d11dc205
2 changed files with 36 additions and 74 deletions

View File

@@ -328,7 +328,6 @@ void wxColourDatabase::Initialize()
{wxT("INDIAN RED"), 79, 47, 47}, {wxT("INDIAN RED"), 79, 47, 47},
{wxT("KHAKI"), 159, 159, 95}, {wxT("KHAKI"), 159, 159, 95},
{wxT("LIGHT BLUE"), 191, 216, 216}, {wxT("LIGHT BLUE"), 191, 216, 216},
{wxT("LIGHT GREEN"), 0, 128, 0},
{wxT("LIGHT GREY"), 192, 192, 192}, {wxT("LIGHT GREY"), 192, 192, 192},
{wxT("LIGHT STEEL BLUE"), 143, 143, 188}, {wxT("LIGHT STEEL BLUE"), 143, 143, 188},
{wxT("LIME GREEN"), 50, 204, 50}, {wxT("LIME GREEN"), 50, 204, 50},
@@ -348,7 +347,6 @@ void wxColourDatabase::Initialize()
{wxT("MEDIUM VIOLET RED"), 219, 112, 147}, {wxT("MEDIUM VIOLET RED"), 219, 112, 147},
{wxT("MIDNIGHT BLUE"), 47, 47, 79}, {wxT("MIDNIGHT BLUE"), 47, 47, 79},
{wxT("NAVY"), 35, 35, 142}, {wxT("NAVY"), 35, 35, 142},
{wxT("OLIVE"), 128, 128, 0},
{wxT("ORANGE"), 204, 50, 50}, {wxT("ORANGE"), 204, 50, 50},
{wxT("ORANGE RED"), 255, 0, 127}, {wxT("ORANGE RED"), 255, 0, 127},
{wxT("ORCHID"), 219, 112, 219}, {wxT("ORCHID"), 219, 112, 219},
@@ -365,7 +363,6 @@ void wxColourDatabase::Initialize()
{wxT("SPRING GREEN"), 0, 255, 127}, {wxT("SPRING GREEN"), 0, 255, 127},
{wxT("STEEL BLUE"), 35, 107, 142}, {wxT("STEEL BLUE"), 35, 107, 142},
{wxT("TAN"), 219, 147, 112}, {wxT("TAN"), 219, 147, 112},
{wxT("TEAL"), 0, 128, 128},
{wxT("THISTLE"), 216, 191, 216}, {wxT("THISTLE"), 216, 191, 216},
{wxT("TURQUOISE"), 173, 234, 234}, {wxT("TURQUOISE"), 173, 234, 234},
{wxT("VIOLET"), 79, 47, 79}, {wxT("VIOLET"), 79, 47, 79},

View File

@@ -2812,6 +2812,30 @@ bool wxTextCtrl::SetFont(const wxFont& font)
// styling support for rich edit controls // styling support for rich edit controls
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#if _RICHEDIT_VER >= 0x0800
static const wxColour gs_underlineColourMap[] =
{
// The colours are coming from https://docs.microsoft.com/en-us/windows/desktop/api/tom/nf-tom-itextdocument2-geteffectcolor.
wxNullColour, // text colour
wxColour(0, 0, 0 ), // black
wxColour(0, 0, 255), // blue
wxColour(0, 255, 255), // cyan
wxColour(0, 255, 0 ), // green
wxColour(255, 0, 255), // magenta
wxColour(255, 0, 0 ), // red
wxColour(255, 255, 0 ), // yellow
wxColour(255, 255, 255), // white
wxColour(0, 0, 128), // navy
wxColour(0, 128, 128), // teal
wxColour(0, 128, 0 ), // light green
wxColour(128, 0, 128), // purple
wxColour(128, 0, 0 ), // maroon
wxColour(128, 128, 0 ), // olive
wxColour(128, 128, 128), // grey
wxColour(192, 192, 192), // light grey
};
#endif
bool wxTextCtrl::MSWSetCharFormat(const wxTextAttr& style, long start, long end) bool wxTextCtrl::MSWSetCharFormat(const wxTextAttr& style, long start, long end)
{ {
// initialize CHARFORMAT struct // initialize CHARFORMAT struct
@@ -2903,43 +2927,16 @@ bool wxTextCtrl::MSWSetCharFormat(const wxTextAttr& style, long start, long end)
} }
#if _RICHEDIT_VER >= 0x0800 #if _RICHEDIT_VER >= 0x0800
// The colours are coming from https://docs.microsoft.com/en-us/windows/desktop/api/tom/nf-tom-itextdocument2-geteffectcolor.
BYTE colour = 0; BYTE colour = 0;
wxColour col = style.GetUnderlineColour(); const wxColour& col = style.GetUnderlineColour();
if ( col == wxNullColour ) for ( size_t c = 0; c < WXSIZEOF(gs_underlineColourMap); ++c )
colour = 0; {
else if ( col == wxTheColourDatabase->Find("BLACK") ) if ( col == gs_underlineColourMap[c] )
colour = 1; {
else if ( col == wxTheColourDatabase->Find("BLUE") ) colour = static_cast<BYTE>(c);
colour = 2; break;
else if ( col == wxTheColourDatabase->Find("CYAN") ) }
colour = 3; }
else if ( col == wxTheColourDatabase->Find("GREEN") )
colour = 4;
else if ( col == wxTheColourDatabase->Find("MAGENTA") )
colour = 5;
else if ( col == wxTheColourDatabase->Find("RED") )
colour = 6;
else if ( col == wxTheColourDatabase->Find("YELLOW") )
colour = 7;
else if ( col == wxTheColourDatabase->Find("WHITE") )
colour = 8;
else if ( col == wxColour(0, 0, 128) ) // navy
colour = 9;
else if ( col == wxTheColourDatabase->Find("TEAL") )
colour = 10;
else if ( col == wxTheColourDatabase->Find("LIGHT GREEN") )
colour = 11;
else if ( col == wxColour(128, 0, 128) ) // purple
colour = 12;
else if ( col == wxColour(128, 0, 0) ) // maroon
colour = 13;
else if ( col == wxTheColourDatabase->Find("OLIVE") )
colour = 14;
else if ( col == wxTheColourDatabase->Find("GREY") )
colour = 15;
else if ( col == wxTheColourDatabase->Find("LIGHT GREY") )
colour = 16;
cf.bUnderlineColor = colour; cf.bUnderlineColor = colour;
#endif #endif
} }
@@ -3273,42 +3270,10 @@ bool wxTextCtrl::GetStyle(long position, wxTextAttr& style)
break; break;
} }
wxColour underlineColour = wxNullColour; wxColour underlineColour;
#if _RICHEDIT_VER >= 0x0800 #if _RICHEDIT_VER >= 0x0800
if ( cf.bUnderlineColor == 0 ) if ( cf.bUnderlineColor < WXSIZEOF(gs_underlineColourMap) )
underlineColour = wxNullColour; underlineColour = gs_underlineColourMap[cf.bUnderlineColor];
else if ( cf.bUnderlineColor == 1 )
underlineColour = wxTheColourDatabase->Find("BLACK");
else if ( cf.bUnderlineColor == 2 )
underlineColour = wxTheColourDatabase->Find("BLUE");
else if ( cf.bUnderlineColor == 3 )
underlineColour = wxTheColourDatabase->Find("CYAN");
else if ( cf.bUnderlineColor == 4 )
underlineColour = wxTheColourDatabase->Find("GREEN");
else if ( cf.bUnderlineColor == 5 )
underlineColour = wxTheColourDatabase->Find("MAGENTA");
else if ( cf.bUnderlineColor == 6 )
underlineColour = wxTheColourDatabase->Find("RED");
else if ( cf.bUnderlineColor == 7 )
underlineColour = wxTheColourDatabase->Find("YELLOW");
else if ( cf.bUnderlineColor == 8 )
underlineColour = wxTheColourDatabase->Find("WHITE");
else if ( cf.bUnderlineColor == 9 )
underlineColour = wxColour(0, 0, 128); // navy
else if ( cf.bUnderlineColor == 10 )
underlineColour = wxTheColourDatabase->Find("TEAL");
else if ( cf.bUnderlineColor == 11 )
underlineColour = wxTheColourDatabase->Find("LIGHT GREEN");
else if ( cf.bUnderlineColor == 12 )
underlineColour = wxColour(128, 0, 128); // purple
else if ( cf.bUnderlineColor == 13 )
underlineColour = wxColour(128, 0, 0); // maroon
else if ( cf.bUnderlineColor == 14 )
underlineColour = wxTheColourDatabase->Find("OLIVE");
else if ( cf.bUnderlineColor == 15 )
underlineColour = wxTheColourDatabase->Find("GREY");
else if ( cf.bUnderlineColor == 16 )
underlineColour = wxTheColourDatabase->Find("LIGHT GREY");
#endif #endif
if ( underlineType != wxTEXT_ATTR_UNDERLINE_NONE ) if ( underlineType != wxTEXT_ATTR_UNDERLINE_NONE )