summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2015-09-30 14:55:18 +0200
committerTor Lillqvist <tml@collabora.com>2015-10-06 09:15:09 +0000
commitc34cb60b230cab567c1a45236bf2e33290b25b72 (patch)
tree01cdfb4ba27fa4d1fbb868966a3c25f6f3be075a /vcl
parent27b822e3d321496c6adfd4deaa1e5c668e78862e (diff)
create "disabled" image (icon) only if the original changes
Currently we create a "disabled" version of bitmaps in "Image" class (used for toolbar icons for example) in every draw call. This is not really optimal. The solution is to calculate the checksum of the original and create a "disabled" version only if the checksum changes. (cherry picked from commit 86186de42e13426305cf3dc8dfb076aff6a5e4ae) Conflicts: vcl/source/gdi/impimage.cxx Change-Id: I6ed2d08c64fee028b479fedb35e4384f112e98e2 Reviewed-on: https://gerrit.libreoffice.org/19160 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tor Lillqvist <tml@collabora.com> Tested-by: Tor Lillqvist <tml@collabora.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/image.h2
-rw-r--r--vcl/source/gdi/impimage.cxx7
2 files changed, 8 insertions, 1 deletions
diff --git a/vcl/inc/image.h b/vcl/inc/image.h
index 3aa942418bb6..0dcc14ef7da8 100644
--- a/vcl/inc/image.h
+++ b/vcl/inc/image.h
@@ -40,6 +40,8 @@ public:
private:
BitmapEx maBmpEx;
+ BitmapChecksum maBitmapChecksum;
+
BitmapEx maDisabledBmpEx;
BitmapEx* mpDisplayBmp;
Size maSize;
diff --git a/vcl/source/gdi/impimage.cxx b/vcl/source/gdi/impimage.cxx
index 067b6e8ab95e..8ea787e605fd 100644
--- a/vcl/source/gdi/impimage.cxx
+++ b/vcl/source/gdi/impimage.cxx
@@ -182,7 +182,12 @@ void ImplImageBmp::Draw( sal_uInt16 nPos, OutputDevice* pOutDev,
if( nStyle & DrawImageFlags::Disable )
{
- ImplUpdateDisabledBmpEx( nPos);
+ BitmapChecksum aChecksum = maBmpEx.GetChecksum();
+ if (maBitmapChecksum != aChecksum)
+ {
+ maBitmapChecksum = aChecksum;
+ ImplUpdateDisabledBmpEx(nPos);
+ }
pOutDev->DrawBitmapEx( rPos, aOutSize, aSrcPos, maSize, maDisabledBmpEx );
}
else