diff options
author | Szabolcs <szabolcs450@gmail.com> | 2020-04-03 11:34:07 +0200 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2020-04-28 10:08:33 +0200 |
commit | c431661ac716178305f64d98ce81aa8276bdbe8f (patch) | |
tree | 9821a99ddac2140641c67fb18c863f9a6f024a34 /oox/source/drawingml/color.cxx | |
parent | 0bf3220b91dfc39aced853cb53c5dcd008381dfa (diff) |
tdf#131841 DOCX DrawingML shape import: Fixed missing HighlightColor
Implemented highlight color in grouped shapes. It was missing
completely.
Co-Author: Balázs Regényi
Change-Id: I51207d01a205fbb24abc51c0d69042d6747570a5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91619
Tested-by: Jenkins
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'oox/source/drawingml/color.cxx')
-rw-r--r-- | oox/source/drawingml/color.cxx | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/oox/source/drawingml/color.cxx b/oox/source/drawingml/color.cxx index 5410d5fc7498..33e3c3dcd053 100644 --- a/oox/source/drawingml/color.cxx +++ b/oox/source/drawingml/color.cxx @@ -39,13 +39,15 @@ struct PresetColorsPool ColorVector maDmlColors; /// Predefined colors in DrawingML, indexed by XML token. ColorVector maVmlColors; /// Predefined colors in VML, indexed by XML token. + ColorVector maHighlightColors; /// Predefined colors in DrawingML for highlight, indexed by XML token. explicit PresetColorsPool(); }; PresetColorsPool::PresetColorsPool() : maDmlColors( static_cast< size_t >( XML_TOKEN_COUNT ), API_RGB_TRANSPARENT ), - maVmlColors( static_cast< size_t >( XML_TOKEN_COUNT ), API_RGB_TRANSPARENT ) + maVmlColors( static_cast< size_t >( XML_TOKEN_COUNT ), API_RGB_TRANSPARENT ), + maHighlightColors( static_cast<size_t>(XML_TOKEN_COUNT), API_RGB_TRANSPARENT ) { // predefined colors in DrawingML (map XML token identifiers to RGB values) static const std::pair<sal_Int32, ::Color> spnDmlColors[] = @@ -138,6 +140,22 @@ PresetColorsPool::PresetColorsPool() : }; for(auto const& nEntry : spnVmlColors) maVmlColors[ static_cast< size_t >(nEntry.first) ] = nEntry.second; + + // predefined highlight colors in DML (map XML token identifiers to RGB values) + static const std::pair<sal_Int32, ::Color> spnHighlightColors[] = + { + // tdf#131841 Predefined color for OOXML highlight. + {XML_black, ::Color(0x000000)}, {XML_blue, ::Color(0x0000FF)}, + {XML_cyan, ::Color(0x00FFFF)}, {XML_darkBlue, ::Color(0x00008B)}, + {XML_darkCyan, ::Color(0x008B8B)}, {XML_darkGray, ::Color(0xA9A9A9)}, + {XML_darkGreen, ::Color(0x006400)}, {XML_darkMagenta, ::Color(0x800080)}, + {XML_darkRed, ::Color(0x8B0000)}, {XML_darkYellow, ::Color(0x808000)}, + {XML_green, ::Color(0x00FF00)}, {XML_lightGray, ::Color(0xD3D3D3)}, + {XML_magenta, ::Color(0xFF00FF)}, {XML_red, ::Color(0xFF0000)}, + {XML_white, ::Color(0xFFFFFF)}, {XML_yellow, ::Color(0xFFFF00)} + }; + for (auto const& nEntry : spnHighlightColors) + maHighlightColors[static_cast<size_t>(nEntry.first)] = nEntry.second; } struct StaticPresetColorsPool : public ::rtl::Static< PresetColorsPool, StaticPresetColorsPool > {}; @@ -220,6 +238,15 @@ Color::Color() : return (sal_Int32(nRgbValue) >= 0) ? nRgbValue : nDefaultRgb; } +::Color Color::getHighlightColor(sal_Int32 nToken, ::Color nDefaultRgb) +{ + /* Do not pass nDefaultRgb to ContainerHelper::getVectorElement(), to be + able to catch the existing vector entries without corresponding XML + token identifier. */ + ::Color nRgbValue = ContainerHelper::getVectorElement( StaticPresetColorsPool::get().maHighlightColors, nToken, API_RGB_TRANSPARENT ); + return (sal_Int32(nRgbValue) >= 0) ? nRgbValue : nDefaultRgb; +} + void Color::setUnused() { meMode = COLOR_UNUSED; @@ -267,6 +294,14 @@ void Color::setPrstClr( sal_Int32 nToken ) setSrgbClr( nRgbValue ); } +void Color::setHighlight(sal_Int32 nToken) +{ + ::Color nRgbValue = getHighlightColor(nToken, API_RGB_TRANSPARENT); + OSL_ENSURE( sal_Int32(nRgbValue) >= 0, "Color::setPrstClr - invalid preset color token" ); + if ( sal_Int32(nRgbValue) >= 0 ) + setSrgbClr( nRgbValue ); +} + void Color::setSchemeClr( sal_Int32 nToken ) { OSL_ENSURE( nToken != XML_TOKEN_INVALID, "Color::setSchemeClr - invalid color token" ); |