diff options
author | Radek Doulik <rodo@novell.com> | 2013-03-19 13:17:42 +0100 |
---|---|---|
committer | Radek Doulik <rodo@novell.com> | 2013-03-19 13:19:19 +0100 |
commit | 69b19ba284a1589a9e85b259dfe327cb7ee9d618 (patch) | |
tree | 753f74a89016e9bfd24276448ad37ea8cb37c23c /cppcanvas/source/inc | |
parent | 9988dfd934754a917086bc9423b6c5b16faea40a (diff) |
implemented EmfPlusRecordTypeSave and EmfPlusRecordTypeRestore records
Change-Id: Iac87870c0f50a74b7f4db4c674adcded1494c055
Diffstat (limited to 'cppcanvas/source/inc')
-rw-r--r-- | cppcanvas/source/inc/implrenderer.hxx | 12 | ||||
-rw-r--r-- | cppcanvas/source/inc/outdevstate.hxx | 126 |
2 files changed, 137 insertions, 1 deletions
diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx index c2902d6c0b6a..453736825e9b 100644 --- a/cppcanvas/source/inc/implrenderer.hxx +++ b/cppcanvas/source/inc/implrenderer.hxx @@ -28,8 +28,10 @@ #include <canvasgraphichelper.hxx> #include <action.hxx> +#include <outdevstate.hxx> #include <vector> +#include <map> class GDIMetaFile; class VirtualDevice; @@ -166,6 +168,12 @@ static float GetSwapFloat( SvStream& rSt ) } }; + // EMF+ + typedef struct { + XForm aWorldTransform; + OutDevState aDevState; + } EmfPlusGraphicState; + class ImplRenderer : public virtual Renderer, protected CanvasGraphicHelper { public: @@ -278,7 +286,6 @@ static float GetSwapFloat( SvStream& rSt ) sal_Int32 nOriginY; sal_Int32 nHDPI; sal_Int32 nVDPI; - ::PolyPolygon aClippingPolygon; /* EMF+ emf header info */ sal_Int32 nFrameLeft; sal_Int32 nFrameTop; @@ -292,6 +299,9 @@ static float GetSwapFloat( SvStream& rSt ) bool mbMultipart; sal_uInt16 mMFlags; SvMemoryStream mMStream; + /* emf+ graphic state stack */ + ::std::map<int,EmfPlusGraphicState> mGSStack; + typedef ::std::map<int,EmfPlusGraphicState>::iterator EPGSSIter; }; diff --git a/cppcanvas/source/inc/outdevstate.hxx b/cppcanvas/source/inc/outdevstate.hxx new file mode 100644 index 000000000000..26e10263a369 --- /dev/null +++ b/cppcanvas/source/inc/outdevstate.hxx @@ -0,0 +1,126 @@ +/* -*- 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 . + */ + +#ifndef _CPPCANVAS_OUTDEVSTATE_HXX +#define _CPPCANVAS_OUTDEVSTATE_HXX + +#include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/uno/Sequence.hxx> + +#include <com/sun/star/rendering/StringContext.hpp> +#include <com/sun/star/rendering/RenderState.hpp> +#include <com/sun/star/rendering/XPolyPolygon2D.hpp> +#include <com/sun/star/rendering/XCanvasFont.hpp> +#include <com/sun/star/rendering/TextDirection.hpp> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <basegfx/polygon/b2dpolypolygon.hxx> +#include <vcl/fntstyle.hxx> +#include <vcl/vclenum.hxx> +#include <vcl/outdev.hxx> + + +namespace cppcanvas +{ + namespace internal + { + struct OutDevState + { + OutDevState() : + clip(), + clipRect(), + xClipPoly(), + + lineColor(), + fillColor(), + textColor(), + textFillColor(), + textLineColor(), + + xFont(), + transform(), + mapModeTransform(), + fontRotation(0.0), + + textEmphasisMarkStyle(EMPHASISMARK_NONE), + pushFlags(PUSH_ALL), + textDirection(::com::sun::star::rendering::TextDirection::WEAK_LEFT_TO_RIGHT), + textAlignment(0), // TODO(Q2): Synchronize with implrenderer + // and possibly new rendering::TextAlignment + textReliefStyle(RELIEF_NONE), + textOverlineStyle(UNDERLINE_NONE), + textUnderlineStyle(UNDERLINE_NONE), + textStrikeoutStyle(STRIKEOUT_NONE), + textReferencePoint(ALIGN_BASELINE), + + isTextOutlineModeSet( false ), + isTextEffectShadowSet( false ), + isTextWordUnderlineSet( false ), + + isLineColorSet( false ), + isFillColorSet( false ), + isTextFillColorSet( false ), + isTextLineColorSet( false ) + { + } + + ::basegfx::B2DPolyPolygon clip; + ::Rectangle clipRect; + ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D > xClipPoly; + + ::com::sun::star::uno::Sequence< double > lineColor; + ::com::sun::star::uno::Sequence< double > fillColor; + ::com::sun::star::uno::Sequence< double > textColor; + ::com::sun::star::uno::Sequence< double > textFillColor; + ::com::sun::star::uno::Sequence< double > textLineColor; + + /** Current font. + + @attention Beware, this member can be NULL, and + nevertheless text output is generated. + */ + ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCanvasFont > xFont; + ::basegfx::B2DHomMatrix transform; + ::basegfx::B2DHomMatrix mapModeTransform; + double fontRotation; + + sal_uInt16 textEmphasisMarkStyle; + sal_uInt16 pushFlags; + sal_Int8 textDirection; + sal_Int8 textAlignment; + sal_Int8 textReliefStyle; + sal_Int8 textOverlineStyle; + sal_Int8 textUnderlineStyle; + sal_Int8 textStrikeoutStyle; + TextAlign textReferencePoint; + + bool isTextOutlineModeSet; + bool isTextEffectShadowSet; + bool isTextWordUnderlineSet; + + bool isLineColorSet; + bool isFillColorSet; + bool isTextFillColorSet; + bool isTextLineColorSet; + }; + } +} + +#endif /* _CPPCANVAS_OUTDEVSTATE_HXX */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |