vcl/Library_vcl.mk | 1 vcl/inc/graphic/GraphicID.hxx | 47 ++++++++++++++++ vcl/inc/impgraph.hxx | 21 ------- vcl/source/gdi/impgraph.cxx | 83 ---------------------------- vcl/source/graphic/GraphicID.cxx | 112 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 161 insertions(+), 103 deletions(-)
New commits: commit b6bc43f354bcbe6a98db9fb372fd47bc5b23f4d8 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon Feb 24 23:02:20 2020 +0100 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Tue Feb 25 19:30:53 2020 +0100 vcl: move GraphicID out of impgraph.{cxx,hxx} Change-Id: I0b3b17736a76be290f6e5b77ee547b7e650d4489 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89449 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index a38c84874ff9..79f2002c8c9d 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -318,6 +318,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/gdi/TypeSerializer \ vcl/source/pdf/ResourceDict \ vcl/source/pdf/Matrix3 \ + vcl/source/graphic/GraphicID \ vcl/source/graphic/GraphicLoader \ vcl/source/graphic/GraphicObject \ vcl/source/graphic/GraphicObject2 \ diff --git a/vcl/inc/graphic/GraphicID.hxx b/vcl/inc/graphic/GraphicID.hxx new file mode 100644 index 000000000000..87ac6a50f37a --- /dev/null +++ b/vcl/inc/graphic/GraphicID.hxx @@ -0,0 +1,47 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <vcl/dllapi.h> +#include <rtl/string.hxx> +#include <vcl/checksum.hxx> + +class ImpGraphic; + +class GraphicID +{ +private: + sal_uInt32 mnID1; + sal_uInt32 mnID2; + sal_uInt32 mnID3; + BitmapChecksum mnID4; + +public: + GraphicID(ImpGraphic const& rGraphic); + + bool operator==(const GraphicID& rID) const + { + return rID.mnID1 == mnID1 && rID.mnID2 == mnID2 && rID.mnID3 == mnID3 && rID.mnID4 == mnID4; + } + + OString getIDString() const; +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/impgraph.hxx b/vcl/inc/impgraph.hxx index 90e658c67308..56c663d2d687 100644 --- a/vcl/inc/impgraph.hxx +++ b/vcl/inc/impgraph.hxx @@ -24,6 +24,7 @@ #include <vcl/gdimtf.hxx> #include <vcl/graph.hxx> #include "graphic/Manager.hxx" +#include "graphic/GraphicID.hxx" struct ImpSwapInfo { @@ -45,26 +46,6 @@ struct ImpSwapFile; class GraphicConversionParameters; class ImpGraphic; -class GraphicID -{ -private: - sal_uInt32 mnID1; - sal_uInt32 mnID2; - sal_uInt32 mnID3; - BitmapChecksum mnID4; - -public: - GraphicID(ImpGraphic const & rGraphic); - - bool operator==(const GraphicID& rID) const - { - return rID.mnID1 == mnID1 && rID.mnID2 == mnID2 && - rID.mnID3 == mnID3 && rID.mnID4 == mnID4; - } - - OString getIDString() const; -}; - class ImpGraphic final { friend class Graphic; diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index 7e9c96feddf2..df736a274d87 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -69,89 +69,6 @@ struct ImpSwapFile ~ImpSwapFile(); }; -GraphicID::GraphicID(ImpGraphic const & rGraphic) -{ - rGraphic.ensureAvailable(); - - mnID1 = static_cast<sal_uLong>(rGraphic.ImplGetType()) << 28; - mnID2 = mnID3 = mnID4 = 0; - - if (rGraphic.ImplGetType() == GraphicType::Bitmap) - { - if (rGraphic.getVectorGraphicData().get()) - { - const VectorGraphicDataPtr& rVectorGraphicDataPtr = rGraphic.getVectorGraphicData(); - const basegfx::B2DRange& rRange = rVectorGraphicDataPtr->getRange(); - - mnID1 |= rVectorGraphicDataPtr->getVectorGraphicDataArrayLength(); - mnID2 = basegfx::fround(rRange.getWidth()); - mnID3 = basegfx::fround(rRange.getHeight()); - mnID4 = vcl_get_checksum(0, rVectorGraphicDataPtr->getVectorGraphicDataArray().getConstArray(), rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()); - } - else if (rGraphic.hasPdfData()) - { - std::shared_ptr<std::vector<sal_Int8>> pPdfData = rGraphic.getPdfData(); - const BitmapEx& rBmpEx = rGraphic.ImplGetBitmapExRef(); - - mnID1 |= (rGraphic.mnPageNumber & 0x0fffffff); - mnID2 = rBmpEx.GetSizePixel().Width(); - mnID3 = rBmpEx.GetSizePixel().Height(); - mnID4 = vcl_get_checksum(0, pPdfData->data(), pPdfData->size()); - } - else if (rGraphic.ImplIsAnimated()) - { - const Animation aAnimation(rGraphic.ImplGetAnimation()); - - mnID1 |= ( aAnimation.Count() & 0x0fffffff ); - mnID2 = aAnimation.GetDisplaySizePixel().Width(); - mnID3 = aAnimation.GetDisplaySizePixel().Height(); - mnID4 = rGraphic.ImplGetChecksum(); - } - else - { - const BitmapEx aBmpEx(rGraphic.ImplGetBitmapEx(GraphicConversionParameters())); - - mnID1 |= ( ( ( static_cast<sal_uLong>(aBmpEx.GetTransparentType()) << 8 ) | ( aBmpEx.IsAlpha() ? 1 : 0 ) ) & 0x0fffffff ); - mnID2 = aBmpEx.GetSizePixel().Width(); - mnID3 = aBmpEx.GetSizePixel().Height(); - mnID4 = rGraphic.ImplGetChecksum(); - } - } - else if (rGraphic.ImplGetType() == GraphicType::GdiMetafile) - { - const GDIMetaFile& rMtf = rGraphic.ImplGetGDIMetaFile(); - - mnID1 |= ( rMtf.GetActionSize() & 0x0fffffff ); - mnID2 = rMtf.GetPrefSize().Width(); - mnID3 = rMtf.GetPrefSize().Height(); - mnID4 = rGraphic.ImplGetChecksum(); - } -} - -OString GraphicID::getIDString() const -{ - static const char aHexData[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - - sal_Int32 nShift, nIndex = 0; - sal_Int32 nLen = 24 + (2 * BITMAP_CHECKSUM_SIZE); - OStringBuffer aHexStr(nLen); - aHexStr.setLength(nLen); - - for( nShift = 28; nShift >= 0; nShift -= 4 ) - aHexStr[nIndex++] = aHexData[ ( mnID1 >> static_cast<sal_uInt32>(nShift) ) & 0xf ]; - - for( nShift = 28; nShift >= 0; nShift -= 4 ) - aHexStr[nIndex++] = aHexData[ ( mnID2 >> static_cast<sal_uInt32>(nShift) ) & 0xf ]; - - for( nShift = 28; nShift >= 0; nShift -= 4 ) - aHexStr[nIndex++] = aHexData[ ( mnID3 >> static_cast<sal_uInt32>(nShift) ) & 0xf ]; - - for( nShift = ( 8 * BITMAP_CHECKSUM_SIZE ) - 4; nShift >= 0; nShift -= 4 ) - aHexStr[nIndex++] = aHexData[ ( mnID4 >> static_cast<sal_uInt32>(nShift) ) & 0xf ]; - - return aHexStr.makeStringAndClear(); -} - ImpGraphic::ImpGraphic() : meType ( GraphicType::NONE ), mnSizeBytes ( 0 ), diff --git a/vcl/source/graphic/GraphicID.cxx b/vcl/source/graphic/GraphicID.cxx new file mode 100644 index 000000000000..7220853b998b --- /dev/null +++ b/vcl/source/graphic/GraphicID.cxx @@ -0,0 +1,112 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <graphic/GraphicID.hxx> + +#include <impgraph.hxx> + +GraphicID::GraphicID(ImpGraphic const& rGraphic) +{ + rGraphic.ensureAvailable(); + + mnID1 = static_cast<sal_uLong>(rGraphic.ImplGetType()) << 28; + mnID2 = mnID3 = mnID4 = 0; + + if (rGraphic.ImplGetType() == GraphicType::Bitmap) + { + if (rGraphic.getVectorGraphicData().get()) + { + const VectorGraphicDataPtr& rVectorGraphicDataPtr = rGraphic.getVectorGraphicData(); + const basegfx::B2DRange& rRange = rVectorGraphicDataPtr->getRange(); + + mnID1 |= rVectorGraphicDataPtr->getVectorGraphicDataArrayLength(); + mnID2 = basegfx::fround(rRange.getWidth()); + mnID3 = basegfx::fround(rRange.getHeight()); + mnID4 = vcl_get_checksum( + 0, rVectorGraphicDataPtr->getVectorGraphicDataArray().getConstArray(), + rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()); + } + else if (rGraphic.hasPdfData()) + { + std::shared_ptr<std::vector<sal_Int8>> pPdfData = rGraphic.getPdfData(); + const BitmapEx& rBmpEx = rGraphic.ImplGetBitmapExRef(); + + mnID1 |= (rGraphic.mnPageNumber & 0x0fffffff); + mnID2 = rBmpEx.GetSizePixel().Width(); + mnID3 = rBmpEx.GetSizePixel().Height(); + mnID4 = vcl_get_checksum(0, pPdfData->data(), pPdfData->size()); + } + else if (rGraphic.ImplIsAnimated()) + { + const Animation aAnimation(rGraphic.ImplGetAnimation()); + + mnID1 |= (aAnimation.Count() & 0x0fffffff); + mnID2 = aAnimation.GetDisplaySizePixel().Width(); + mnID3 = aAnimation.GetDisplaySizePixel().Height(); + mnID4 = rGraphic.ImplGetChecksum(); + } + else + { + const BitmapEx aBmpEx(rGraphic.ImplGetBitmapEx(GraphicConversionParameters())); + + mnID1 |= (((static_cast<sal_uLong>(aBmpEx.GetTransparentType()) << 8) + | (aBmpEx.IsAlpha() ? 1 : 0)) + & 0x0fffffff); + mnID2 = aBmpEx.GetSizePixel().Width(); + mnID3 = aBmpEx.GetSizePixel().Height(); + mnID4 = rGraphic.ImplGetChecksum(); + } + } + else if (rGraphic.ImplGetType() == GraphicType::GdiMetafile) + { + const GDIMetaFile& rMtf = rGraphic.ImplGetGDIMetaFile(); + + mnID1 |= (rMtf.GetActionSize() & 0x0fffffff); + mnID2 = rMtf.GetPrefSize().Width(); + mnID3 = rMtf.GetPrefSize().Height(); + mnID4 = rGraphic.ImplGetChecksum(); + } +} + +OString GraphicID::getIDString() const +{ + static const char aHexData[] + = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + sal_Int32 nShift, nIndex = 0; + sal_Int32 nLen = 24 + (2 * BITMAP_CHECKSUM_SIZE); + OStringBuffer aHexStr(nLen); + aHexStr.setLength(nLen); + + for (nShift = 28; nShift >= 0; nShift -= 4) + aHexStr[nIndex++] = aHexData[(mnID1 >> static_cast<sal_uInt32>(nShift)) & 0xf]; + + for (nShift = 28; nShift >= 0; nShift -= 4) + aHexStr[nIndex++] = aHexData[(mnID2 >> static_cast<sal_uInt32>(nShift)) & 0xf]; + + for (nShift = 28; nShift >= 0; nShift -= 4) + aHexStr[nIndex++] = aHexData[(mnID3 >> static_cast<sal_uInt32>(nShift)) & 0xf]; + + for (nShift = (8 * BITMAP_CHECKSUM_SIZE) - 4; nShift >= 0; nShift -= 4) + aHexStr[nIndex++] = aHexData[(mnID4 >> static_cast<sal_uInt32>(nShift)) & 0xf]; + + return aHexStr.makeStringAndClear(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits