diff --git a/src/common/gdicmn.cpp b/src/common/gdicmn.cpp index a7d8980501..0b2d514408 100644 --- a/src/common/gdicmn.cpp +++ b/src/common/gdicmn.cpp @@ -328,7 +328,6 @@ void wxColourDatabase::Initialize() {wxT("INDIAN RED"), 79, 47, 47}, {wxT("KHAKI"), 159, 159, 95}, {wxT("LIGHT BLUE"), 191, 216, 216}, - {wxT("LIGHT GREEN"), 0, 128, 0}, {wxT("LIGHT GREY"), 192, 192, 192}, {wxT("LIGHT STEEL BLUE"), 143, 143, 188}, {wxT("LIME GREEN"), 50, 204, 50}, @@ -348,7 +347,6 @@ void wxColourDatabase::Initialize() {wxT("MEDIUM VIOLET RED"), 219, 112, 147}, {wxT("MIDNIGHT BLUE"), 47, 47, 79}, {wxT("NAVY"), 35, 35, 142}, - {wxT("OLIVE"), 128, 128, 0}, {wxT("ORANGE"), 204, 50, 50}, {wxT("ORANGE RED"), 255, 0, 127}, {wxT("ORCHID"), 219, 112, 219}, @@ -365,7 +363,6 @@ void wxColourDatabase::Initialize() {wxT("SPRING GREEN"), 0, 255, 127}, {wxT("STEEL BLUE"), 35, 107, 142}, {wxT("TAN"), 219, 147, 112}, - {wxT("TEAL"), 0, 128, 128}, {wxT("THISTLE"), 216, 191, 216}, {wxT("TURQUOISE"), 173, 234, 234}, {wxT("VIOLET"), 79, 47, 79}, diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index b77446a5dd..8933f7b803 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -2812,6 +2812,30 @@ bool wxTextCtrl::SetFont(const wxFont& font) // 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) { // initialize CHARFORMAT struct @@ -2903,43 +2927,16 @@ bool wxTextCtrl::MSWSetCharFormat(const wxTextAttr& style, long start, long end) } #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; - wxColour col = style.GetUnderlineColour(); - if ( col == wxNullColour ) - colour = 0; - else if ( col == wxTheColourDatabase->Find("BLACK") ) - colour = 1; - else if ( col == wxTheColourDatabase->Find("BLUE") ) - colour = 2; - 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; + const wxColour& col = style.GetUnderlineColour(); + for ( size_t c = 0; c < WXSIZEOF(gs_underlineColourMap); ++c ) + { + if ( col == gs_underlineColourMap[c] ) + { + colour = static_cast(c); + break; + } + } cf.bUnderlineColor = colour; #endif } @@ -3273,42 +3270,10 @@ bool wxTextCtrl::GetStyle(long position, wxTextAttr& style) break; } - wxColour underlineColour = wxNullColour; + wxColour underlineColour; #if _RICHEDIT_VER >= 0x0800 - if ( cf.bUnderlineColor == 0 ) - underlineColour = wxNullColour; - 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"); + if ( cf.bUnderlineColor < WXSIZEOF(gs_underlineColourMap) ) + underlineColour = gs_underlineColourMap[cf.bUnderlineColor]; #endif if ( underlineType != wxTEXT_ATTR_UNDERLINE_NONE )