drawinglayer/source/tools/emfphelperdata.cxx |   33 +++++++++++++++++++++++++--
 drawinglayer/source/tools/emfphelperdata.hxx |    2 -
 2 files changed, 32 insertions(+), 3 deletions(-)

New commits:
commit adc7d311de22b0026a5fa0f80f2327d0336fd7cd
Author:     Bartosz Kosiorek <gan...@poczta.onet.pl>
AuthorDate: Tue Mar 24 17:19:14 2020 +0100
Commit:     Bartosz Kosiorek <gan...@poczta.onet.pl>
CommitDate: Tue Mar 24 20:37:52 2020 +0100

    tdf#131542 EMF+ Implement BeginContainer record
    
    Change-Id: If388ef4544001fb9064aed3ce979c2790ab0645f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90997
    Tested-by: Jenkins
    Reviewed-by: Bartosz Kosiorek <gan...@poczta.onet.pl>

diff --git a/drawinglayer/source/tools/emfphelperdata.cxx 
b/drawinglayer/source/tools/emfphelperdata.cxx
index c8e0d078be39..7ec2b165de9b 100644
--- a/drawinglayer/source/tools/emfphelperdata.cxx
+++ b/drawinglayer/source/tools/emfphelperdata.cxx
@@ -98,6 +98,7 @@ namespace emfplushelper
             case EmfPlusRecordTypeSetCompositingQuality: return 
"EmfPlusRecordTypeSetCompositingQuality";
             case EmfPlusRecordTypeSave: return "EmfPlusRecordTypeSave";
             case EmfPlusRecordTypeRestore: return "EmfPlusRecordTypeRestore";
+            case EmfPlusRecordTypeBeginContainer: return 
"EmfPlusRecordTypeBeginContainer";
             case EmfPlusRecordTypeBeginContainerNoParams: return 
"EmfPlusRecordTypeBeginContainerNoParams";
             case EmfPlusRecordTypeEndContainer: return 
"EmfPlusRecordTypeEndContainer";
             case EmfPlusRecordTypeSetWorldTransform: return 
"EmfPlusRecordTypeSetWorldTransform";
@@ -234,7 +235,7 @@ namespace emfplushelper
                 return 1.0f;
 
             case UnitTypePoint:
-                return Application::GetDefaultDevice()->GetDPIX() / 72;
+                return Application::GetDefaultDevice()->GetDPIX() / 72.0;
 
             case UnitTypeInch:
                 return Application::GetDefaultDevice()->GetDPIX();
@@ -243,7 +244,7 @@ namespace emfplushelper
                 return Application::GetDefaultDevice()->GetDPIX() / 25.4;
 
             case UnitTypeDocument:
-                return Application::GetDefaultDevice()->GetDPIX() / 300;
+                return Application::GetDefaultDevice()->GetDPIX() / 300.0;
 
             case UnitTypeWorld:
             case UnitTypeDisplay:
@@ -1773,6 +1774,34 @@ namespace emfplushelper
                         GraphicStatePop(mGSStack, stackIndex, 
mrPropertyHolders.Current());
                         break;
                     }
+                    case EmfPlusRecordTypeBeginContainer:
+                    {
+                        float dx, dy, dw, dh;
+                        ReadRectangle(rMS, dx, dy, dw, dh);
+                        SAL_INFO("drawinglayer", "EMF+\t Dest RectData: " << 
dx << "," << dy << " " << dw << "x" << dh);
+
+                        float sx, sy, sw, sh;
+                        ReadRectangle(rMS, sx, sy, sw, sh);
+                        SAL_INFO("drawinglayer", "EMF+\t Source RectData: " << 
sx << "," << sy << " " << sw << "x" << sh);
+
+                        sal_uInt32 stackIndex;
+                        rMS.ReadUInt32(stackIndex);
+                        SAL_INFO("drawinglayer", "EMF+\t Begin Container stack 
index: " << stackIndex << ", PageUnit: " << flags);
+
+                        if ((flags == UnitTypeDisplay) || (flags == 
UnitTypeWorld))
+                        {
+                            SAL_WARN("drawinglayer", "EMF+\t file error. 
UnitTypeDisplay and UnitTypeWorld are not supported by BeginContainer in EMF+ 
specification.");
+                            break;
+                        }
+                        const float aPageScale = 
getUnitToPixelMultiplier(static_cast<UnitType>(flags));
+                        GraphicStatePush(mGSContainerStack, stackIndex);
+                        const basegfx::B2DHomMatrix transform = 
basegfx::utils::createScaleTranslateB2DHomMatrix(
+                            aPageScale * ( dw / sw ), aPageScale * ( dh / sh ),
+                            aPageScale * ( dx - sx ), aPageScale * ( dy - sy) 
);
+                        maWorldTransform *= transform;
+                        mappingChanged();
+                        break;
+                    }
                     case EmfPlusRecordTypeBeginContainerNoParams:
                     {
                         sal_uInt32 stackIndex;
diff --git a/drawinglayer/source/tools/emfphelperdata.hxx 
b/drawinglayer/source/tools/emfphelperdata.hxx
index 76e4b657dbe1..de85f2f84e31 100644
--- a/drawinglayer/source/tools/emfphelperdata.hxx
+++ b/drawinglayer/source/tools/emfphelperdata.hxx
@@ -71,7 +71,7 @@ namespace emfplushelper
     #define EmfPlusRecordTypeSetCompositingQuality 0x4024
     #define EmfPlusRecordTypeSave 0x4025
     #define EmfPlusRecordTypeRestore 0x4026
-    //TODO EmfPlusRecordTypeBeginContainer 0x4027
+    #define EmfPlusRecordTypeBeginContainer 0x4027
     #define EmfPlusRecordTypeBeginContainerNoParams 0x4028
     #define EmfPlusRecordTypeEndContainer 0x4029
     #define EmfPlusRecordTypeSetWorldTransform 0x402A
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to