include/oox/drawingml/clrscheme.hxx | 8 +++--- oox/source/drawingml/clrscheme.cxx | 37 +++++++++++++++++++++++------- sc/source/filter/inc/themebuffer.hxx | 2 + sc/source/filter/oox/condformatbuffer.cxx | 2 - sc/source/filter/oox/themebuffer.cxx | 6 ++++ 5 files changed, 42 insertions(+), 13 deletions(-)
New commits: commit f3121049828596b369e3ea844355d61666e49795 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Wed Apr 15 18:19:47 2015 +0200 use index as real index and not token, tdf#90511 At least in calc a theme index is a zero based index into the clrScheme. A map is unsiutable for that task so let us use a vector and still allow to get them by their tokens. Change-Id: I09d56acaf22c3ed16387aae95c36382302c5a17e diff --git a/include/oox/drawingml/clrscheme.hxx b/include/oox/drawingml/clrscheme.hxx index b4c12cf..00bf149 100644 --- a/include/oox/drawingml/clrscheme.hxx +++ b/include/oox/drawingml/clrscheme.hxx @@ -42,12 +42,15 @@ typedef std::shared_ptr< ClrMap > ClrMapPtr; class OOX_DLLPUBLIC ClrScheme { - std::map < sal_Int32, sal_Int32 > maClrScheme; + std::vector< std::pair<sal_Int32, sal_Int32> > maClrScheme; public: bool getColor( sal_Int32 nSchemeClrToken, sal_Int32& rColor ) const; void setColor( sal_Int32 nSchemeClrToken, sal_Int32 nColor ); + + bool getColorByIndex(size_t nIndex, + sal_Int32& rColor) const; }; typedef std::shared_ptr< ClrScheme > ClrSchemePtr; diff --git a/oox/source/drawingml/clrscheme.cxx b/oox/source/drawingml/clrscheme.cxx index 52f78aa..9fb8382 100644 --- a/oox/source/drawingml/clrscheme.cxx +++ b/oox/source/drawingml/clrscheme.cxx @@ -43,6 +43,21 @@ void ClrMap::setColorMap( sal_Int32 nClrToken, sal_Int32 nMappedClrToken ) maClrMap[ nClrToken ] = nMappedClrToken; } +struct find_by_token +{ + find_by_token(sal_Int32 token): + m_token(token) + { + } + + bool operator()(const std::pair<sal_Int32, sal_Int32>& r) + { + return r.first == m_token; + } + +private: + sal_Int32 m_token; +}; bool ClrScheme::getColor( sal_Int32 nSchemeClrToken, sal_Int32& rColor ) const { @@ -54,15 +69,27 @@ bool ClrScheme::getColor( sal_Int32 nSchemeClrToken, sal_Int32& rColor ) const case XML_tx1 : nSchemeClrToken = XML_dk1; break; case XML_tx2 : nSchemeClrToken = XML_dk2; break; } - std::map < sal_Int32, sal_Int32 >::const_iterator aIter( maClrScheme.find( nSchemeClrToken ) ); + + auto aIter = std::find_if(maClrScheme.begin(), maClrScheme.end(), find_by_token(nSchemeClrToken) ); + if ( aIter != maClrScheme.end() ) - rColor = (*aIter).second; + rColor = aIter->second; + return aIter != maClrScheme.end(); } void ClrScheme::setColor( sal_Int32 nSchemeClrToken, sal_Int32 nColor ) { - maClrScheme[ nSchemeClrToken ] = nColor; + maClrScheme.push_back(std::pair<sal_Int32, sal_Int32>(nSchemeClrToken, nColor)); +} + +bool ClrScheme::getColorByIndex(size_t nIndex, sal_Int32& rColor) const +{ + if (nIndex >= maClrScheme.size()) + return false; + + rColor = maClrScheme[nIndex].second; + return true; } } } diff --git a/sc/source/filter/inc/themebuffer.hxx b/sc/source/filter/inc/themebuffer.hxx index 84ff9ea..21f560a 100644 --- a/sc/source/filter/inc/themebuffer.hxx +++ b/sc/source/filter/inc/themebuffer.hxx @@ -37,6 +37,8 @@ public: /** Returns the theme color with the specified token identifier. */ sal_Int32 getColorByToken( sal_Int32 nToken ) const; + sal_Int32 getColorByIndex(size_t nIndex) const; + /** Returns the default font data for the current file type. */ inline const FontModel& getDefaultFontModel() const { return *mxDefFontModel; } diff --git a/sc/source/filter/oox/condformatbuffer.cxx b/sc/source/filter/oox/condformatbuffer.cxx index 2c04142..cfe4af2 100644 --- a/sc/source/filter/oox/condformatbuffer.cxx +++ b/sc/source/filter/oox/condformatbuffer.cxx @@ -245,7 +245,7 @@ void DataBarRule::importColor( const AttributeList& rAttribs ) else if( rAttribs.hasAttribute( XML_theme ) ) { sal_uInt32 nThemeIndex = rAttribs.getUnsigned( XML_theme, 0 ); - nColor = getTheme().getColorByToken( nThemeIndex ); + nColor = getTheme().getColorByIndex( nThemeIndex ); } ::Color aColor = RgbToRgbComponents( nColor ); diff --git a/sc/source/filter/oox/themebuffer.cxx b/sc/source/filter/oox/themebuffer.cxx index 58ed242..a4dfc32 100644 --- a/sc/source/filter/oox/themebuffer.cxx +++ b/sc/source/filter/oox/themebuffer.cxx @@ -56,6 +56,12 @@ sal_Int32 ThemeBuffer::getColorByToken( sal_Int32 nToken ) const return getClrScheme().getColor( nToken, nColor ) ? nColor : API_RGB_TRANSPARENT; } +sal_Int32 ThemeBuffer::getColorByIndex(size_t nIndex) const +{ + sal_Int32 nColor = 0; + return getClrScheme().getColorByIndex(nIndex, nColor) ? nColor : API_RGB_TRANSPARENT; +} + } // namespace xls } // namespace oox commit b99a4b81f53aa406a98e167fc9b8e1f1347fa970 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Wed Apr 15 18:18:24 2015 +0200 remove empty constructor and destructor Change-Id: Ia88d17a632f75b203823b66a5fdd261732c09ae4 diff --git a/include/oox/drawingml/clrscheme.hxx b/include/oox/drawingml/clrscheme.hxx index d430374..b4c12cf 100644 --- a/include/oox/drawingml/clrscheme.hxx +++ b/include/oox/drawingml/clrscheme.hxx @@ -46,9 +46,6 @@ class OOX_DLLPUBLIC ClrScheme public: - ClrScheme(); - ~ClrScheme(); - bool getColor( sal_Int32 nSchemeClrToken, sal_Int32& rColor ) const; void setColor( sal_Int32 nSchemeClrToken, sal_Int32 nColor ); }; diff --git a/oox/source/drawingml/clrscheme.cxx b/oox/source/drawingml/clrscheme.cxx index e4a7a8e..52f78aa 100644 --- a/oox/source/drawingml/clrscheme.cxx +++ b/oox/source/drawingml/clrscheme.cxx @@ -43,12 +43,6 @@ void ClrMap::setColorMap( sal_Int32 nClrToken, sal_Int32 nMappedClrToken ) maClrMap[ nClrToken ] = nMappedClrToken; } -ClrScheme::ClrScheme() -{ -} -ClrScheme::~ClrScheme() -{ -} bool ClrScheme::getColor( sal_Int32 nSchemeClrToken, sal_Int32& rColor ) const { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits