diff options
-rw-r--r-- | sax/inc/sax/tools/converter.hxx | 7 | ||||
-rw-r--r-- | sax/source/tools/converter.cxx | 22 |
2 files changed, 27 insertions, 2 deletions
diff --git a/sax/inc/sax/tools/converter.hxx b/sax/inc/sax/tools/converter.hxx index 601ce6c6532c..8b84feb5c984 100644 --- a/sax/inc/sax/tools/converter.hxx +++ b/sax/inc/sax/tools/converter.hxx @@ -95,10 +95,15 @@ public: static void convertMeasurePx( ::rtl::OUStringBuffer& rBuffer, sal_Int32 nValue ); - /** convert string to color */ + /** convert string to rgb color */ static bool convertColor( sal_Int32& rColor, const ::rtl::OUString&rValue ); + /** convert string to argb color */ + static bool convertColor( sal_Int32& rColor, + const ::rtl::OUString&rValue, + const double alpha); + /** convert color to string */ static void convertColor( ::rtl::OUStringBuffer &rBuffer, sal_Int32 nColor ); diff --git a/sax/source/tools/converter.cxx b/sax/source/tools/converter.cxx index 78dd22b79f0b..e7fff9ae6e9c 100644 --- a/sax/source/tools/converter.cxx +++ b/sax/source/tools/converter.cxx @@ -478,7 +478,7 @@ int lcl_gethex( int nChar ) return 0; } -/** convert string to color */ +/** convert string to rgb color */ bool Converter::convertColor( sal_Int32& rColor, const OUString& rValue ) { if( rValue.getLength() != 7 || rValue[0] != '#' ) @@ -495,6 +495,26 @@ bool Converter::convertColor( sal_Int32& rColor, const OUString& rValue ) return true; } +/** convert string to rgba color */ +bool Converter::convertColor( sal_Int32& rColor, const OUString& rValue, const double alpha) +{ + if( rValue.getLength() != 7 || rValue[0] != '#' ) + return false; + + rColor = (int) (alpha * 255); + rColor <<= 8; + + rColor |= lcl_gethex( rValue[1] ) * 16 + lcl_gethex( rValue[2] ); + rColor <<= 8; + + rColor |= ( lcl_gethex( rValue[3] ) * 16 + lcl_gethex( rValue[4] ) ); + rColor <<= 8; + + rColor |= ( lcl_gethex( rValue[5] ) * 16 + lcl_gethex( rValue[6] ) ); + + return true; +} + static sal_Char aHexTab[] = "0123456789abcdef"; /** convert color to string */ |