[Libreoffice-commits] core.git: Branch 'feature/slideshowprimitives' - 5 commits - canvas/source cppcanvas/CppunitTest_cppcanvas_test.mk cppcanvas/Library_cppcanvas.mk cppcanvas/Library_mtfrenderer.mk cppcanvas/Makefile cppcanvas/Module_cppcanvas.mk cppcanvas/qa cppcanvas/README cppcanvas/source drawinglayer/Library_drawinglayer.mk include/canvas offapi/com postprocess/Rdb_services.mk sd/CppunitTest_sd_uimpress.mk sd/Library_sd.mk sd/Library_sdui.mk sd/source slideshow/CppunitTest_slideshow.mk slideshow/Executable_demoshow.mk slideshow/inc slideshow/Library_slideshow.mk slideshow/source slideshow/test slideshow/TODO
Thorsten Behrens
thb at documentfoundation.org
Thu Oct 31 09:38:02 CET 2013
Rebased ref, commits from common ancestor:
commit 14c7c2a07771a1cce723da94b265cb1592989a5d
Author: Thorsten Behrens <thb at documentfoundation.org>
Date: Tue Oct 29 19:08:11 2013 +0100
Die, wrapper code, die.
Change-Id: I987703958621abb38d877b3089aaaa7d0f97f5e9
diff --git a/cppcanvas/CppunitTest_cppcanvas_test.mk b/cppcanvas/CppunitTest_cppcanvas_test.mk
deleted file mode 100644
index 8112fd3..0000000
--- a/cppcanvas/CppunitTest_cppcanvas_test.mk
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#*************************************************************************
-#
-# 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/.
-#
-#*************************************************************************
-
-$(eval $(call gb_CppunitTest_CppunitTest,cppcanvas_test))
-
-$(eval $(call gb_CppunitTest_add_exception_objects,cppcanvas_test, \
- cppcanvas/qa/unit/test \
-))
-
-$(eval $(call gb_CppunitTest_unset_headless,cppcanvas_test))
-
-$(eval $(call gb_CppunitTest_use_external,cppcanvas_test,boost_headers))
-
-$(eval $(call gb_CppunitTest_use_libraries,cppcanvas_test, \
- cppcanvas \
- basegfx \
- canvastools \
- comphelper \
- cppu \
- cppuhelper \
- i18nlangtag \
- sal \
- svt \
- test \
- tl \
- vcl \
- $(gb_UWINAPI) \
-))
-
-$(eval $(call gb_CppunitTest_use_api,cppcanvas_test,\
- offapi \
- udkapi \
-))
-
-$(eval $(call gb_CppunitTest_use_ure,cppcanvas_test))
-
-$(eval $(call gb_CppunitTest_use_components,cppcanvas_test,\
- canvas/source/cairo/cairocanvas \
- canvas/source/factory/canvasfactory \
- configmgr/source/configmgr \
- fileaccess/source/fileacc \
- i18npool/util/i18npool \
- linguistic/source/lng \
- package/util/package2 \
- sax/source/expatwrap/expwrap \
- ucb/source/core/ucb1 \
- unoxml/source/service/unoxml \
-))
-
-$(eval $(call gb_CppunitTest_use_configuration,cppcanvas_test))
-
-# vim: set noet sw=4 ts=4:
diff --git a/cppcanvas/Library_cppcanvas.mk b/cppcanvas/Library_cppcanvas.mk
deleted file mode 100644
index 7f69cf9..0000000
--- a/cppcanvas/Library_cppcanvas.mk
+++ /dev/null
@@ -1,74 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# 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 .
-#
-
-$(eval $(call gb_Library_Library,cppcanvas))
-
-$(eval $(call gb_Library_set_include,cppcanvas,\
- -I$(SRCDIR)/cppcanvas/source/inc \
- $$(INCLUDE) \
-))
-
-$(eval $(call gb_Library_use_sdk_api,cppcanvas))
-$(eval $(call gb_Library_add_defs,cppcanvas,\
- -DCPPCANVAS_DLLIMPLEMENTATION \
-))
-
-$(eval $(call gb_Library_use_external,cppcanvas,boost_headers))
-
-$(eval $(call gb_Library_use_libraries,cppcanvas,\
- basegfx \
- canvastools \
- comphelper \
- cppu \
- cppuhelper \
- i18nlangtag \
- sal \
- svt \
- tl \
- vcl \
- $(gb_UWINAPI) \
-))
-
-$(eval $(call gb_Library_add_exception_objects,cppcanvas,\
- cppcanvas/source/mtfrenderer/bitmapaction \
- cppcanvas/source/mtfrenderer/cachedprimitivebase \
- cppcanvas/source/mtfrenderer/emfplus \
- cppcanvas/source/mtfrenderer/implrenderer \
- cppcanvas/source/mtfrenderer/lineaction \
- cppcanvas/source/mtfrenderer/mtftools \
- cppcanvas/source/mtfrenderer/pointaction \
- cppcanvas/source/mtfrenderer/polypolyaction \
- cppcanvas/source/mtfrenderer/textaction \
- cppcanvas/source/mtfrenderer/transparencygroupaction \
- cppcanvas/source/tools/canvasgraphichelper \
- cppcanvas/source/tools/tools \
- cppcanvas/source/wrapper/basegfxfactory \
- cppcanvas/source/wrapper/implbitmap \
- cppcanvas/source/wrapper/implbitmapcanvas \
- cppcanvas/source/wrapper/implcanvas \
- cppcanvas/source/wrapper/implcolor \
- cppcanvas/source/wrapper/implcustomsprite \
- cppcanvas/source/wrapper/implfont \
- cppcanvas/source/wrapper/implpolypolygon \
- cppcanvas/source/wrapper/implsprite \
- cppcanvas/source/wrapper/implspritecanvas \
- cppcanvas/source/wrapper/vclfactory \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/cppcanvas/Library_mtfrenderer.mk b/cppcanvas/Library_mtfrenderer.mk
deleted file mode 100644
index 4a33ac0..0000000
--- a/cppcanvas/Library_mtfrenderer.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# 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 .
-#
-
-$(eval $(call gb_Library_Library,mtfrenderer))
-
-$(eval $(call gb_Library_set_componentfile,mtfrenderer,cppcanvas/source/uno/mtfrenderer))
-
-$(eval $(call gb_Library_use_external,mtfrenderer,boost_headers))
-
-$(eval $(call gb_Library_use_libraries,mtfrenderer,\
- sal \
- cppu \
- cppuhelper \
- comphelper \
- cppcanvas \
- basegfx \
- $(gb_UWINAPI) \
-))
-
-$(eval $(call gb_Library_use_sdk_api,mtfrenderer))
-
-$(eval $(call gb_Library_add_exception_objects,mtfrenderer,\
- cppcanvas/source/uno/uno_mtfrenderer \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/cppcanvas/Makefile b/cppcanvas/Makefile
deleted file mode 100644
index 0997e62..0000000
--- a/cppcanvas/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# 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/.
-#
-
-module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
-
-include $(module_directory)/../solenv/gbuild/partial_build.mk
-
-# vim: set noet sw=4 ts=4:
diff --git a/cppcanvas/Module_cppcanvas.mk b/cppcanvas/Module_cppcanvas.mk
deleted file mode 100644
index 9894f9c..0000000
--- a/cppcanvas/Module_cppcanvas.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# 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 .
-#
-
-$(eval $(call gb_Module_Module,cppcanvas))
-
-$(eval $(call gb_Module_add_targets,cppcanvas,\
- Library_cppcanvas \
- Library_mtfrenderer \
-))
-
-# FIXME: should generalize these ...
-ifeq ($(ENABLE_CAIRO_CANVAS),TRUE)
-$(eval $(call gb_Module_add_check_targets,cppcanvas,\
- CppunitTest_cppcanvas_test \
-))
-endif
-
-# vim: set noet sw=4 ts=4:
diff --git a/cppcanvas/README b/cppcanvas/README
deleted file mode 100644
index 1e90831..0000000
--- a/cppcanvas/README
+++ /dev/null
@@ -1,5 +0,0 @@
-Helper C++ classes for [[canvas]], plus a GDIMetaFile-to-XCanvas converter.
-
-== EMF+ ==
-
-For cppcanvas/source/mtfrenderer, see the README in vcl (the EMF+ part).
diff --git a/cppcanvas/qa/unit/test.cxx b/cppcanvas/qa/unit/test.cxx
deleted file mode 100644
index af652a3..0000000
--- a/cppcanvas/qa/unit/test.cxx
+++ /dev/null
@@ -1,93 +0,0 @@
-/* -*- 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/.
- */
-
-#include <test/bootstrapfixture.hxx>
-
-#include <osl/file.hxx>
-#include <osl/process.h>
-#include <vcl/svapp.hxx>
-#include <vcl/wrkwin.hxx>
-#include <vcl/canvastools.hxx>
-
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-
-#include <com/sun/star/rendering/XBitmap.hpp>
-#include <com/sun/star/rendering/XCanvas.hpp>
-#include <com/sun/star/rendering/XBitmapCanvas.hpp>
-
-using namespace ::com::sun::star;
-
-class CanvasTest : public test::BootstrapFixture
-{
-public:
- CanvasTest() : BootstrapFixture(true, false) {}
-
- void testComposite();
-
- CPPUNIT_TEST_SUITE(CanvasTest);
- CPPUNIT_TEST(testComposite);
- CPPUNIT_TEST_SUITE_END();
-};
-
-void CanvasTest::testComposite()
-{
-#ifdef LINUX
- Window* pWin = new WorkWindow( (Window *)NULL );
- CPPUNIT_ASSERT( pWin != NULL );
-
- uno::Reference<rendering::XCanvas> xCanvas = pWin->GetCanvas ();
- if( !xCanvas.is() )
- return; // can't get a canvas working at all - truly headless ?
-
- // a huge canvas ...
- Size aSize (1, 1);
- uno::Reference<rendering::XBitmap> xBitmap;
- xBitmap = xCanvas->getDevice ()->createCompatibleAlphaBitmap(
- vcl::unotools::integerSize2DFromSize( aSize ) );
- CPPUNIT_ASSERT( xBitmap.is() );
-
- uno::Reference< rendering::XBitmapCanvas > xBitmapCanvas( xBitmap, uno::UNO_QUERY );
- CPPUNIT_ASSERT( xBitmapCanvas.is() );
-
- BitmapEx aBitmapEx;
- {
- // clear the canvas and basic sanity check ...
- xBitmapCanvas->clear();
- CPPUNIT_ASSERT( aBitmapEx.Create( xBitmapCanvas, aSize ) );
- CPPUNIT_ASSERT( aBitmapEx.IsAlpha() );
- CPPUNIT_ASSERT( aBitmapEx.GetAlpha() );
- }
-
- {
- // render something
- rendering::RenderState aDefaultState;
- uno::Sequence< double > aRedTransparent( 4 );
- aRedTransparent[0] = 1.0; // R
- aRedTransparent[1] = 0.0; // G
- aRedTransparent[2] = 0.0; // B
- aRedTransparent[3] = 0.5; // A
- aDefaultState.DeviceColor = aRedTransparent;
-#if 0
- // words fail me to describe the sheer beauty of allocating an UNO
- // object to represent a polygon, and manually handling the ViewState
- // and there being no public helper for this - to render ... a rectangle.
- XCachedPrimitive fillPolyPolygon( [in] XPolyPolygon2D xPolyPolygon, [in] ViewState aViewState, [in] RenderState aRenderState )
-#endif
- }
-
-#endif
-}
-
-CPPUNIT_TEST_SUITE_REGISTRATION(CanvasTest);
-
-CPPUNIT_PLUGIN_IMPLEMENT();
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/inc/action.hxx b/cppcanvas/source/inc/action.hxx
deleted file mode 100644
index 3beaa8c..0000000
--- a/cppcanvas/source/inc/action.hxx
+++ /dev/null
@@ -1,156 +0,0 @@
-/* -*- 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_ACTION_HXX
-#define _CPPCANVAS_ACTION_HXX
-
-#include <sal/types.h>
-
-#include <boost/shared_ptr.hpp>
-
-namespace basegfx
-{
- class B2DHomMatrix;
- class B2DRange;
-}
-
-
-/* Definition of Action interface */
-
-namespace cppcanvas
-{
- namespace internal
- {
- /** Interface for internal render actions
-
- This interface is implemented by all objects generated
- from the metafile renderer, and corresponds roughly to the
- VCL meta action.
- */
- class Action
- {
- public:
- /** Used for rendering action subsets
-
- There are several cases where an Action might have
- subsettable content, e.g. text, or referenced
- metafiles, like the transparent action.
-
- Generally, at the metafile renderer, all actions are
- 'flattened' out, i.e. a meta action rendering the
- string "Hello" counts five indices, and a transparent
- action containing a metafile with 100 actions counts
- at least 100 indices (contained transparency or text
- actions recursively add to this value). From the
- outside, the subset to render is referenced via this
- flat index range
- */
- struct Subset
- {
- /** Denotes start of the subset.
-
- The index given here specifies the first subaction
- to render.
- */
- sal_Int32 mnSubsetBegin;
-
- /** Denotes end of the subset
-
- The index given here specifies the first subaction
- <em>not<em> to render, i.e. one action behind the
- subset to be rendered
- */
- sal_Int32 mnSubsetEnd;
- };
-
- virtual ~Action() {}
-
- /** Render this action to the associated canvas
-
- @param rTransformation
- Transformation matrix to apply before rendering
-
- @return true, if rendering was successful. If
- rendering failed, false is returned.
- */
- virtual bool render( const ::basegfx::B2DHomMatrix& rTransformation ) const = 0;
-
- /** Render the given part of the action to the associated
- canvas.
-
- @param rTransformation
- Transformation matrix to apply before rendering
-
- @param rSubset
- Subset of the action to render. See Subset description
- for index semantics.
-
- @return true, if rendering was successful. If the
- specified subset is invalid for this action, or if
- rendering failed for other reasons, false is returned.
- */
- virtual bool renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
- const Subset& rSubset ) const = 0;
-
- /** Query bounds of this action on the associated canvas
-
- @param rTransformation
- Transformation matrix to apply
-
- @return the bounds for this action in device
- coordinate space.
- */
- virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const = 0;
-
- /** Query bounds for the given part of the action on the
- associated canvas.
-
- @param rTransformation
- Transformation matrix to apply.
-
- @param rSubset
- Subset of the action to query. See Subset description
- for index semantics.
-
- @return the bounds for the given subset in device
- coordinate space.
- */
- virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
- const Subset& rSubset ) const = 0;
-
- /** Query action count.
-
- This method returns the number of subset actions
- contained in this action. The render( Subset ) method
- must accept subset ranges up to the value returned
- here.
-
- @return the number of subset actions
- */
- virtual sal_Int32 getActionCount() const = 0;
- };
-
- typedef ::boost::shared_ptr< Action > ActionSharedPtr;
-
- }
-}
-
-#endif /* _CPPCANVAS_ACTION_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/inc/canvasgraphichelper.hxx b/cppcanvas/source/inc/canvasgraphichelper.hxx
deleted file mode 100644
index f0ab8bc..0000000
--- a/cppcanvas/source/inc/canvasgraphichelper.hxx
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- 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_CANVASGRAPHICHELPER_HXX
-#define _CPPCANVAS_CANVASGRAPHICHELPER_HXX
-
-#include <com/sun/star/rendering/RenderState.hpp>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-
-#include <cppcanvas/canvasgraphic.hxx>
-
-#include <boost/optional.hpp>
-
-namespace com { namespace sun { namespace star { namespace rendering
-{
- class XGraphicDevice;
-} } } }
-
-
-/* Definition of CanvasGraphicHelper class */
-
-namespace cppcanvas
-{
-
- namespace internal
- {
-
- class CanvasGraphicHelper : public virtual CanvasGraphic
- {
- public:
- CanvasGraphicHelper( const CanvasSharedPtr& rParentCanvas );
-
- // CanvasGraphic implementation
- virtual void setTransformation( const ::basegfx::B2DHomMatrix& rMatrix );
- virtual ::basegfx::B2DHomMatrix getTransformation() const;
- virtual void setClip( const ::basegfx::B2DPolyPolygon& rClipPoly );
- virtual void setClip();
- virtual ::basegfx::B2DPolyPolygon const* getClip() const;
- virtual void setCompositeOp( CompositeOp aOp );
- virtual CompositeOp getCompositeOp() const;
-
- protected:
- // for our clients
- // ===============
- CanvasSharedPtr getCanvas() const;
- ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XGraphicDevice > getGraphicDevice() const;
- const ::com::sun::star::rendering::RenderState& getRenderState() const;
-
- private:
- mutable ::com::sun::star::rendering::RenderState maRenderState;
-
- boost::optional<basegfx::B2DPolyPolygon> maClipPolyPolygon;
- CanvasSharedPtr mpCanvas;
- ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XGraphicDevice > mxGraphicDevice;
- };
-
- }
-}
-
-#endif /* _CPPCANVAS_CANVASGRAPHICHELPER_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx
deleted file mode 100644
index c70bf54..0000000
--- a/cppcanvas/source/inc/implrenderer.hxx
+++ /dev/null
@@ -1,342 +0,0 @@
-/* -*- 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_IMPLRENDERER_HXX
-#define _CPPCANVAS_IMPLRENDERER_HXX
-
-#include <sal/types.h>
-
-#include <boost/shared_ptr.hpp>
-#include <cppcanvas/renderer.hxx>
-#include <cppcanvas/canvas.hxx>
-
-#include <canvasgraphichelper.hxx>
-#include <action.hxx>
-#include <outdevstate.hxx>
-
-#include <vector>
-#include <map>
-
-class GDIMetaFile;
-class VirtualDevice;
-class Gradient;
-class Rectangle;
-class Font;
-class PolyPolygon;
-class Point;
-class MetaCommentAction;
-
-namespace basegfx {
- class B2DPolyPolygon;
- class B2DPolygon;
-}
-
-namespace cppcanvas
-{
-
- namespace internal
- {
- struct OutDevState;
- struct ActionFactoryParameters;
- struct XForm;
-
- struct EMFPObject
- {
- virtual ~EMFPObject() {}
- };
-
- // state stack of OutputDevice, to correctly handle
- // push/pop actions
- class VectorOfOutDevStates
- {
- public:
- OutDevState& getState();
- const OutDevState& getState() const;
- void pushState(sal_uInt16 nFlags);
- void popState();
- void clearStateStack();
- private:
- ::std::vector< OutDevState > m_aStates;
- };
-
- // EMF+
- // TODO: replace?
- struct XForm
- {
- float eM11;
- float eM12;
- float eM21;
- float eM22;
- float eDx;
- float eDy;
- XForm()
- {
- SetIdentity ();
- };
-
- void SetIdentity ()
- {
- eM11 = eM22 = 1.0f;
- eDx = eDy = eM12 = eM21 = 0.0f;
- }
-
- void Set (float m11, float m12, float dx, float m21, float m22, float dy)
- {
- eM11 = m11;
- eM12 = m12;
- eDx = dx;
- eM21 = m21;
- eM22 = m22;
- eDy = dy;
- }
-
- void Set (XForm f)
- {
- eM11 = f.eM11;
- eM12 = f.eM12;
- eM21 = f.eM21;
- eM22 = f.eM22;
- eDx = f.eDx;
- eDy = f.eDy;
- }
-
- void Multiply (float m11, float m12, float dx, float m21, float m22, float dy)
- {
- eM11 = eM11*m11 + eM12*m21;
- eM12 = eM11*m12 + eM12*m22;
- eM21 = eM21*m11 + eM22*m21;
- eM22 = eM21*m12 + eM22*m22;
- eDx *= eDx*m11 + eDy*m21 + dx;
- eDy *= eDx*m12 + eDy*m22 + dy;
- }
-
- void Multiply (XForm f)
- {
- eM11 = eM11*f.eM11 + eM12*f.eM21;
- eM12 = eM11*f.eM12 + eM12*f.eM22;
- eM21 = eM21*f.eM11 + eM22*f.eM21;
- eM22 = eM21*f.eM12 + eM22*f.eM22;
- eDx *= eDx*f.eM11 + eDy*f.eM21 + f.eDx;
- eDy *= eDx*f.eM12 + eDy*f.eM22 + f.eDy;
- }
-
-#ifdef OSL_BIGENDIAN
-// currently unused
-static float GetSwapFloat( SvStream& rSt )
-{
- float fTmp;
- sal_Int8* pPtr = (sal_Int8*)&fTmp;
- rSt >> pPtr[3] >> pPtr[2] >> pPtr[1] >> pPtr[0]; // Little Endian <-> Big Endian switch
- return fTmp;
-}
-#endif
-
- friend SvStream& operator>>( SvStream& rIn, XForm& rXForm )
- {
- if ( sizeof( float ) != 4 )
- {
- OSL_FAIL( "EnhWMFReader::sizeof( float ) != 4" );
- rXForm = XForm();
- }
- else
- {
-#ifdef OSL_BIGENDIAN
- rXForm.eM11 = GetSwapFloat( rIn );
- rXForm.eM12 = GetSwapFloat( rIn );
- rXForm.eM21 = GetSwapFloat( rIn );
- rXForm.eM22 = GetSwapFloat( rIn );
- rXForm.eDx = GetSwapFloat( rIn );
- rXForm.eDy = GetSwapFloat( rIn );
-#else
- rIn >> rXForm.eM11 >> rXForm.eM12 >> rXForm.eM21 >> rXForm.eM22
- >> rXForm.eDx >> rXForm.eDy;
-#endif
- }
- return rIn;
- }
- };
-
- // EMF+
- typedef struct {
- XForm aWorldTransform;
- OutDevState aDevState;
- } EmfPlusGraphicState;
-
- typedef ::std::map<int,EmfPlusGraphicState> GraphicStateMap;
-
- class ImplRenderer : public virtual Renderer, protected CanvasGraphicHelper
- {
- public:
- ImplRenderer( const CanvasSharedPtr& rCanvas,
- const GDIMetaFile& rMtf,
- const Parameters& rParms );
-
- virtual ~ImplRenderer();
-
- virtual bool draw() const;
- virtual bool drawSubset( sal_Int32 nStartIndex,
- sal_Int32 nEndIndex ) const;
- virtual ::basegfx::B2DRange getSubsetArea( sal_Int32 nStartIndex,
- sal_Int32 nEndIndex ) const;
-
-
- // element of the Renderer's action vector. Need to be
- // public, since some functors need it, too.
- struct MtfAction
- {
- MtfAction( const ActionSharedPtr& rAction,
- sal_Int32 nOrigIndex ) :
- mpAction( rAction ),
- mnOrigIndex( nOrigIndex )
- {
- }
-
- ActionSharedPtr mpAction;
- sal_Int32 mnOrigIndex;
- };
-
- // prefetched and prepared canvas actions
- // (externally not visible)
- typedef ::std::vector< MtfAction > ActionVector;
-
- /* EMF+ */
- void ReadRectangle (SvStream& s, float& x, float& y, float &width, float& height, bool bCompressed = false);
- void ReadPoint (SvStream& s, float& x, float& y, sal_uInt32 flags);
- void MapToDevice (double &x, double &y);
- ::basegfx::B2DPoint Map (double ix, double iy);
- ::basegfx::B2DSize MapSize (double iwidth, double iheight);
- void GraphicStatePush (GraphicStateMap& map, sal_Int32 index, OutDevState& rState);
- void GraphicStatePop (GraphicStateMap& map, sal_Int32 index, OutDevState& rState);
-
- private:
- // default: disabled copy/assignment
- ImplRenderer(const ImplRenderer&);
- ImplRenderer& operator=( const ImplRenderer& );
-
- void updateClipping( const ::basegfx::B2DPolyPolygon& rClipPoly,
- const ActionFactoryParameters& rParms,
- bool bIntersect );
-
- void updateClipping( const ::Rectangle& rClipRect,
- const ActionFactoryParameters& rParms,
- bool bIntersect );
-
- ::com::sun::star::uno::Reference<
- ::com::sun::star::rendering::XCanvasFont > createFont( double& o_rFontRotation,
- const ::Font& rFont,
- const ActionFactoryParameters& rParms ) const;
- bool createActions( GDIMetaFile& rMtf,
- const ActionFactoryParameters& rParms,
- bool bSubsettableActions );
- bool createFillAndStroke( const ::basegfx::B2DPolyPolygon& rPolyPoly,
- const ActionFactoryParameters& rParms );
- bool createFillAndStroke( const ::basegfx::B2DPolygon& rPoly,
- const ActionFactoryParameters& rParms );
- void skipContent( GDIMetaFile& rMtf,
- const char* pCommentString,
- sal_Int32& io_rCurrActionIndex ) const;
-
- bool isActionContained( GDIMetaFile& rMtf,
- const char* pCommentString,
- sal_uInt16 nType ) const;
-
- void createGradientAction( const ::PolyPolygon& rPoly,
- const ::Gradient& rGradient,
- const ActionFactoryParameters& rParms,
- bool bIsPolygonRectangle,
- bool bSubsettableActions );
-
- void createTextAction( const ::Point& rStartPoint,
- const OUString rString,
- int nIndex,
- int nLength,
- const sal_Int32* pCharWidths,
- const ActionFactoryParameters& rParms,
- bool bSubsettable );
-
- bool getSubsetIndices( sal_Int32& io_rStartIndex,
- sal_Int32& io_rEndIndex,
- ActionVector::const_iterator& o_rRangeBegin,
- ActionVector::const_iterator& o_rRangeEnd ) const;
-
- void processObjectRecord(SvMemoryStream& rObjectStream, sal_uInt16 flags, sal_uInt32 dataSize, sal_Bool bUseWholeStream = sal_False);
-
- /* EMF+ */
- void processEMFPlus( MetaCommentAction* pAct, const ActionFactoryParameters& rFactoryParms, OutDevState& rState, const CanvasSharedPtr& rCanvas );
- double setFont( sal_uInt8 objectId, const ActionFactoryParameters& rParms, OutDevState& rState );
- void EMFPPlusDrawPolygon (::basegfx::B2DPolyPolygon& polygon, const ActionFactoryParameters& rParms, OutDevState& rState, const CanvasSharedPtr& rCanvas, sal_uInt32 penIndex);
- void EMFPPlusFillPolygon (::basegfx::B2DPolyPolygon& polygon, const ActionFactoryParameters& rParms, OutDevState& rState, const CanvasSharedPtr& rCanvas, bool isColor, sal_uInt32 brushIndexOrColor);
-
- ActionVector maActions;
-
- /* EMF+ */
- XForm aBaseTransform;
- XForm aWorldTransform;
- EMFPObject* aObjects [256];
- float fPageScale;
- sal_Int32 nOriginX;
- sal_Int32 nOriginY;
- sal_Int32 nHDPI;
- sal_Int32 nVDPI;
- /* EMF+ emf header info */
- sal_Int32 nFrameLeft;
- sal_Int32 nFrameTop;
- sal_Int32 nFrameRight;
- sal_Int32 nFrameBottom;
- sal_Int32 nPixX;
- sal_Int32 nPixY;
- sal_Int32 nMmX;
- sal_Int32 nMmY;
- /* multipart object data */
- bool mbMultipart;
- sal_uInt16 mMFlags;
- SvMemoryStream mMStream;
- /* emf+ graphic state stack */
- GraphicStateMap mGSStack;
- GraphicStateMap mGSContainerStack;
- };
-
-
- /// Common parameters when creating actions
- struct ActionFactoryParameters
- {
- ActionFactoryParameters( VectorOfOutDevStates& rStates,
- const CanvasSharedPtr& rCanvas,
- ::VirtualDevice& rVDev,
- const Renderer::Parameters& rParms,
- sal_Int32& io_rCurrActionIndex ) :
- mrStates(rStates),
- mrCanvas(rCanvas),
- mrVDev(rVDev),
- mrParms(rParms),
- mrCurrActionIndex(io_rCurrActionIndex)
- {}
-
- VectorOfOutDevStates& mrStates;
- const CanvasSharedPtr& mrCanvas;
- ::VirtualDevice& mrVDev;
- const Renderer::Parameters& mrParms;
- sal_Int32& mrCurrActionIndex;
- };
- }
-}
-
-#endif /* _CPPCANVAS_IMPLRENDERER_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/inc/outdevstate.hxx b/cppcanvas/source/inc/outdevstate.hxx
deleted file mode 100644
index 26e1026..0000000
--- a/cppcanvas/source/inc/outdevstate.hxx
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- 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: */
diff --git a/cppcanvas/source/inc/tools.hxx b/cppcanvas/source/inc/tools.hxx
deleted file mode 100644
index f1d60ed..0000000
--- a/cppcanvas/source/inc/tools.hxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- 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_TOOLS_HXX
-#define _CPPCANVAS_TOOLS_HXX
-
-#include <com/sun/star/uno/Reference.hxx>
-#include <com/sun/star/uno/Sequence.hxx>
-#include <cppcanvas/color.hxx>
-
-namespace com { namespace sun { namespace star { namespace rendering
-{
- class XGraphicDevice;
-} } } }
-
-
-namespace cppcanvas
-{
- namespace tools
- {
- ::com::sun::star::uno::Sequence< double >
- intSRGBAToDoubleSequence( const ::com::sun::star::uno::Reference<
- ::com::sun::star::rendering::XGraphicDevice >&,
- Color::IntSRGBA );
-
- Color::IntSRGBA doubleSequenceToIntSRGBA( const ::com::sun::star::uno::Reference<
- ::com::sun::star::rendering::XGraphicDevice >& rDevice,
- const ::com::sun::star::uno::Sequence< double >& rColor );
- }
-}
-
-#endif /* _CPPCANVAS_TOOLS_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/bitmapaction.cxx b/cppcanvas/source/mtfrenderer/bitmapaction.cxx
deleted file mode 100644
index d3b61fa..0000000
--- a/cppcanvas/source/mtfrenderer/bitmapaction.cxx
+++ /dev/null
@@ -1,229 +0,0 @@
-/* -*- 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 <com/sun/star/rendering/XBitmap.hpp>
-#include <com/sun/star/rendering/RepaintResult.hpp>
-#include <com/sun/star/rendering/XCachedPrimitive.hpp>
-#include <vcl/bitmapex.hxx>
-#include <tools/gen.hxx>
-#include <vcl/canvastools.hxx>
-#include <canvas/canvastools.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <basegfx/vector/b2dsize.hxx>
-#include <basegfx/point/b2dpoint.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <boost/utility.hpp>
-#include "cachedprimitivebase.hxx"
-#include "bitmapaction.hxx"
-#include "outdevstate.hxx"
-#include "mtftools.hxx"
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-
-
-using namespace ::com::sun::star;
-
-namespace cppcanvas
-{
- namespace internal
- {
- namespace
- {
-
- class BitmapAction : public CachedPrimitiveBase
- {
- public:
- BitmapAction( const ::BitmapEx&,
- const ::basegfx::B2DPoint& rDstPoint,
- const CanvasSharedPtr&,
- const OutDevState& );
- BitmapAction( const ::BitmapEx&,
- const ::basegfx::B2DPoint& rDstPoint,
- const ::basegfx::B2DVector& rDstSize,
- const CanvasSharedPtr&,
- const OutDevState& );
-
- virtual bool renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
- const Subset& rSubset ) const;
-
- virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const;
- virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
- const Subset& rSubset ) const;
-
- virtual sal_Int32 getActionCount() const;
-
- private:
- using Action::render;
- virtual bool renderPrimitive( uno::Reference< rendering::XCachedPrimitive >& rCachedPrimitive,
- const ::basegfx::B2DHomMatrix& rTransformation ) const;
-
- uno::Reference< rendering::XBitmap > mxBitmap;
- CanvasSharedPtr mpCanvas;
- rendering::RenderState maState;
- };
-
-
- BitmapAction::BitmapAction( const ::BitmapEx& rBmpEx,
- const ::basegfx::B2DPoint& rDstPoint,
- const CanvasSharedPtr& rCanvas,
- const OutDevState& rState ) :
- CachedPrimitiveBase( rCanvas, true ),
- mxBitmap( ::vcl::unotools::xBitmapFromBitmapEx( rCanvas->getUNOCanvas()->getDevice(),
- rBmpEx ) ),
- mpCanvas( rCanvas ),
- maState()
- {
- tools::initRenderState(maState,rState);
-
- // Setup transformation such that the next render call is
- // moved rPoint away.
- const basegfx::B2DHomMatrix aLocalTransformation(basegfx::tools::createTranslateB2DHomMatrix(rDstPoint));
- ::canvas::tools::appendToRenderState( maState,
- aLocalTransformation );
-
- // correct clip (which is relative to original transform)
- tools::modifyClip( maState,
- rState,
- rCanvas,
- rDstPoint,
- NULL,
- NULL );
- }
-
- BitmapAction::BitmapAction( const ::BitmapEx& rBmpEx,
- const ::basegfx::B2DPoint& rDstPoint,
- const ::basegfx::B2DVector& rDstSize,
- const CanvasSharedPtr& rCanvas,
- const OutDevState& rState ) :
- CachedPrimitiveBase( rCanvas, true ),
- mxBitmap( ::vcl::unotools::xBitmapFromBitmapEx( rCanvas->getUNOCanvas()->getDevice(),
- rBmpEx ) ),
- mpCanvas( rCanvas ),
- maState()
- {
- tools::initRenderState(maState,rState);
-
- // Setup transformation such that the next render call is
- // moved rPoint away, and scaled according to the ratio
- // given by src and dst size.
- const ::Size aBmpSize( rBmpEx.GetSizePixel() );
-
- const ::basegfx::B2DVector aScale( rDstSize.getX() / aBmpSize.Width(),
- rDstSize.getY() / aBmpSize.Height() );
- const basegfx::B2DHomMatrix aLocalTransformation(basegfx::tools::createScaleTranslateB2DHomMatrix(
- aScale, rDstPoint));
- ::canvas::tools::appendToRenderState( maState, aLocalTransformation );
-
- // correct clip (which is relative to original transform)
- tools::modifyClip( maState,
- rState,
- rCanvas,
- rDstPoint,
- &aScale,
- NULL );
- }
-
- bool BitmapAction::renderPrimitive( uno::Reference< rendering::XCachedPrimitive >& rCachedPrimitive,
- const ::basegfx::B2DHomMatrix& rTransformation ) const
- {
- SAL_INFO( "cppcanvas.emf", "::cppcanvas::internal::BitmapAction::renderPrimitive()" );
- SAL_INFO( "cppcanvas.emf", "::cppcanvas::internal::BitmapAction: 0x" << std::hex << this );
-
- rendering::RenderState aLocalState( maState );
- ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
-
- rCachedPrimitive = mpCanvas->getUNOCanvas()->drawBitmap( mxBitmap,
- mpCanvas->getViewState(),
- aLocalState );
-
- return true;
- }
-
- bool BitmapAction::renderSubset( const ::basegfx::B2DHomMatrix& rTransformation,
- const Subset& rSubset ) const
- {
- // bitmap only contains a single action, fail if subset
- // requests different range
- if( rSubset.mnSubsetBegin != 0 ||
- rSubset.mnSubsetEnd != 1 )
- return false;
-
- return CachedPrimitiveBase::render( rTransformation );
- }
-
- ::basegfx::B2DRange BitmapAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const
- {
- rendering::RenderState aLocalState( maState );
- ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
-
- const geometry::IntegerSize2D aSize( mxBitmap->getSize() );
-
- return tools::calcDevicePixelBounds( ::basegfx::B2DRange( 0,0,
- aSize.Width,
- aSize.Height ),
- mpCanvas->getViewState(),
- aLocalState );
- }
-
- ::basegfx::B2DRange BitmapAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation,
- const Subset& rSubset ) const
- {
- // bitmap only contains a single action, empty bounds
- // if subset requests different range
- if( rSubset.mnSubsetBegin != 0 ||
- rSubset.mnSubsetEnd != 1 )
- return ::basegfx::B2DRange();
-
- return getBounds( rTransformation );
- }
-
- sal_Int32 BitmapAction::getActionCount() const
- {
- return 1;
- }
- }
-
- ActionSharedPtr BitmapActionFactory::createBitmapAction( const ::BitmapEx& rBmpEx,
- const ::basegfx::B2DPoint& rDstPoint,
- const CanvasSharedPtr& rCanvas,
- const OutDevState& rState )
- {
- return ActionSharedPtr( new BitmapAction(rBmpEx,
- rDstPoint,
- rCanvas,
- rState ) );
- }
-
- ActionSharedPtr BitmapActionFactory::createBitmapAction( const ::BitmapEx& rBmpEx,
- const ::basegfx::B2DPoint& rDstPoint,
- const ::basegfx::B2DVector& rDstSize,
- const CanvasSharedPtr& rCanvas,
- const OutDevState& rState )
- {
- return ActionSharedPtr( new BitmapAction(rBmpEx,
- rDstPoint,
- rDstSize,
- rCanvas,
- rState ) );
- }
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/bitmapaction.hxx b/cppcanvas/source/mtfrenderer/bitmapaction.hxx
deleted file mode 100644
index f960747..0000000
--- a/cppcanvas/source/mtfrenderer/bitmapaction.hxx
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- 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_BITMAPACTION_HXX
-#define _CPPCANVAS_BITMAPACTION_HXX
-
-#include <cppcanvas/canvas.hxx>
-#include <action.hxx>
-
-namespace basegfx {
- class B2DPoint;
- class B2DVector;
-}
-class BitmapEx;
-
-/* Definition of internal::BitmapActionFactory class */
-
-namespace cppcanvas
-{
- namespace internal
- {
- struct OutDevState;
-
- /** Creates encapsulated converters between GDIMetaFile and
- XCanvas. The Canvas argument is deliberately placed at the
- constructor, to force reconstruction of this object for a
- new canvas. This considerably eases internal state
- handling, since a lot of the internal state (e.g. fonts,
- text layout) is Canvas-dependent.
- */
- class BitmapActionFactory
- {
- public:
- /// Unscaled bitmap action, only references destination point
- static ActionSharedPtr createBitmapAction( const ::BitmapEx&,
- const ::basegfx::B2DPoint& rDstPoint,
- const CanvasSharedPtr&,
- const OutDevState& );
-
- /// Scaled bitmap action, dest point and dest size
- static ActionSharedPtr createBitmapAction( const ::BitmapEx&,
- const ::basegfx::B2DPoint& rDstPoint,
- const ::basegfx::B2DVector& rDstSize,
- const CanvasSharedPtr&,
- const OutDevState& );
-
- private:
- // static factory, disable big four
- BitmapActionFactory();
- ~BitmapActionFactory();
- BitmapActionFactory(const BitmapActionFactory&);
- BitmapActionFactory& operator=( const BitmapActionFactory& );
- };
- }
-}
-
-#endif /*_CPPCANVAS_BITMAPACTION_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx b/cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx
deleted file mode 100644
index 02de858..0000000
--- a/cppcanvas/source/mtfrenderer/cachedprimitivebase.cxx
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- 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 <com/sun/star/rendering/RepaintResult.hpp>
-
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <canvas/canvastools.hxx>
-#include <cppcanvas/canvas.hxx>
-
-#include "cachedprimitivebase.hxx"
-
-using namespace ::com::sun::star;
-
-namespace cppcanvas
-{
- namespace internal
- {
- CachedPrimitiveBase::CachedPrimitiveBase( const CanvasSharedPtr& rCanvas,
- bool bOnlyRedrawWithSameTransform ) :
- mpCanvas( rCanvas ),
- mxCachedPrimitive(),
- maLastTransformation(),
- mbOnlyRedrawWithSameTransform( bOnlyRedrawWithSameTransform )
- {
- // TODO(F2): also store last view transform, and refuse to
- // redraw if changed.
- }
-
- bool CachedPrimitiveBase::render( const ::basegfx::B2DHomMatrix& rTransformation ) const
- {
- SAL_INFO( "cppcanvas.emf", "::cppcanvas::internal::CachedPrimitiveBase::render()" );
- SAL_INFO( "cppcanvas.emf", "::cppcanvas::internal::CachedPrimitiveBase: 0x" << std::hex << this );
-
- const rendering::ViewState& rViewState( mpCanvas->getViewState() );
- ::basegfx::B2DHomMatrix aTotalTransform;
-
- ::canvas::tools::getViewStateTransform( aTotalTransform,
- rViewState );
- aTotalTransform *= rTransformation;
-
- // can we use the cached primitive? For that, it must be
- // present in the first place, and, if
- // mbOnlyRedrawWithSameTransform is true, the overall
- // transformation must be the same.
- if( mxCachedPrimitive.is() &&
- (!mbOnlyRedrawWithSameTransform ||
- maLastTransformation == aTotalTransform) )
- {
- if( mxCachedPrimitive->redraw( rViewState ) ==
- rendering::RepaintResult::REDRAWN )
- {
- // cached repaint succeeded, done.
- return true;
- }
- }
-
- maLastTransformation = aTotalTransform;
-
- // delegate rendering to derived classes
- return renderPrimitive( mxCachedPrimitive,
- rTransformation );
- }
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx b/cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx
deleted file mode 100644
index e7b4248..0000000
--- a/cppcanvas/source/mtfrenderer/cachedprimitivebase.hxx
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- 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_CACHEDPRIMITIVEBASE_HXX
-#define _CPPCANVAS_CACHEDPRIMITIVEBASE_HXX
-
-#include <com/sun/star/uno/Reference.hxx>
-#include <com/sun/star/rendering/XCanvas.hpp>
-
-#include <cppcanvas/canvas.hxx>
-#include <boost/utility.hpp>
-
-#include "action.hxx"
-
-namespace basegfx { class B2DHomMatrix; }
-
-
-/* Definition of internal::CachedPrimitiveBase class */
-
-namespace cppcanvas
-{
- namespace internal
- {
- /** Base class providing cached re-rendering, if XCanvas
- returns XCachedPrimitive
-
- Derive from this class and implement private render()
- method to perform the actual primitive rendering. Return
- cached primitive into given reference. Next time this
- class' public render() method gets called, the cached
- representation is taken.
- */
- class CachedPrimitiveBase : public Action,
- private ::boost::noncopyable
- {
- public:
- /** Constructor
-
- @param rCanvas
- Canvas on which this primitive is to appear
-
- @param bOnlyRedrawWithSameTransform
- When true, this class only reuses the cached
- primitive, if the overall transformation stays the
- same. Otherwise, repaints are always performed via the
- cached primitive.
- */
- CachedPrimitiveBase( const CanvasSharedPtr& rCanvas,
- bool bOnlyRedrawWithSameTransform );
- virtual ~CachedPrimitiveBase() {}
-
- virtual bool render( const ::basegfx::B2DHomMatrix& rTransformation ) const;
-
- protected:
- using Action::render;
-
- private:
- virtual bool renderPrimitive( ::com::sun::star::uno::Reference<
- ::com::sun::star::rendering::XCachedPrimitive >& rCachedPrimitive,
- const ::basegfx::B2DHomMatrix& rTransformation ) const = 0;
-
- CanvasSharedPtr mpCanvas;
- mutable ::com::sun::star::uno::Reference<
- ::com::sun::star::rendering::XCachedPrimitive > mxCachedPrimitive;
- mutable ::basegfx::B2DHomMatrix maLastTransformation;
- const bool mbOnlyRedrawWithSameTransform;
- };
- }
-}
-
-#endif /*_CPPCANVAS_CACHEDPRIMITIVEBASE_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
deleted file mode 100644
index 5685c49..0000000
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
+++ /dev/null
@@ -1,1940 +0,0 @@
-/* -*- 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 <tools/stream.hxx>
-#include <vcl/metaact.hxx>
-#include <vcl/graphicfilter.hxx>
-#include <basegfx/tools/canvastools.hxx>
-#include <basegfx/tools/gradienttools.hxx>
-#include <basegfx/tools/tools.hxx>
-#include <basegfx/numeric/ftools.hxx>
-#include <basegfx/point/b2dpoint.hxx>
-#include <basegfx/vector/b2dsize.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/range/b2drectangle.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <vcl/canvastools.hxx>
-#include <rtl/ustring.hxx>
-#include <sal/alloca.h>
-
-#include <com/sun/star/rendering/XCanvas.hpp>
-#include <com/sun/star/rendering/TexturingMode.hpp>
-
-#include <bitmapaction.hxx>
-#include <implrenderer.hxx>
-#include <outdevstate.hxx>
-#include <polypolyaction.hxx>
-#include <textaction.hxx>
-#include <stdio.h>
-
-#define EmfPlusRecordTypeHeader 16385
-#define EmfPlusRecordTypeEndOfFile 16386
-#define EmfPlusRecordTypeGetDC 16388
-#define EmfPlusRecordTypeObject 16392
-#define EmfPlusRecordTypeFillRects 16394
-#define EmfPlusRecordTypeFillPolygon 16396
-#define EmfPlusRecordTypeDrawLines 16397
-#define EmfPlusRecordTypeFillEllipse 16398
-#define EmfPlusRecordTypeDrawEllipse 16399
-#define EmfPlusRecordTypeFillPie 16400
-#define EmfPlusRecordTypeFillPath 16404
-#define EmfPlusRecordTypeDrawPath 16405
-#define EmfPlusRecordTypeDrawImage 16410
-#define EmfPlusRecordTypeDrawImagePoints 16411
-#define EmfPlusRecordTypeDrawString 16412
-#define EmfPlusRecordTypeSetRenderingOrigin 16413
-#define EmfPlusRecordTypeSetAntiAliasMode 16414
-#define EmfPlusRecordTypeSetTextRenderingHint 16415
-#define EmfPlusRecordTypeSetInterpolationMode 16417
-#define EmfPlusRecordTypeSetPixelOffsetMode 16418
-#define EmfPlusRecordTypeSetCompositingQuality 16420
-#define EmfPlusRecordTypeSave 16421
-#define EmfPlusRecordTypeRestore 16422
-#define EmfPlusRecordTypeBeginContainerNoParams 16424
-#define EmfPlusRecordTypeEndContainer 16425
-#define EmfPlusRecordTypeSetWorldTransform 16426
-#define EmfPlusRecordTypeResetWorldTransform 16427
-#define EmfPlusRecordTypeMultiplyWorldTransform 16428
-#define EmfPlusRecordTypeSetPageTransform 16432
-#define EmfPlusRecordTypeSetClipRect 16434
-#define EmfPlusRecordTypeSetClipPath 16435
-#define EmfPlusRecordTypeSetClipRegion 16436
-#define EmfPlusRecordTypeDrawDriverString 16438
-
-#define EmfPlusObjectTypeBrush 0x100
-#define EmfPlusObjectTypePen 0x200
-#define EmfPlusObjectTypePath 0x300
-#define EmfPlusObjectTypeRegion 0x400
-#define EmfPlusObjectTypeImage 0x500
-#define EmfPlusObjectTypeFont 0x600
-
-#define EmfPlusRegionInitialStateInfinite 0x10000003
-
-using namespace ::com::sun::star;
-using namespace ::basegfx;
-
-namespace cppcanvas
-{
- namespace internal
- {
-
-#if OSL_DEBUG_LEVEL > 1
- void dumpWords (SvStream& s, int i)
- {
- sal_uInt32 pos = s.Tell ();
- sal_Int16 data;
- SAL_INFO ("cppcanvas.emf", "EMF+ dumping words");
- for (; i > 0; i --) {
- s >> data;
- SAL_INFO ("cppcanvas.emf", "EMF+\tdata: " << std::hex << data << std::dec);
- }
- SAL_INFO ("cppcanvas.emf", "EMF+ end dumping words");
- s.Seek (pos);
- }
-#endif
-
- struct EMFPPath : public EMFPObject
- {
- ::basegfx::B2DPolyPolygon aPolygon;
- sal_Int32 nPoints;
- float* pPoints;
- sal_uInt8* pPointTypes;
-
- public:
- EMFPPath (sal_Int32 _nPoints, bool bLines = false)
- {
- if( _nPoints<0 || sal_uInt32(_nPoints)>SAL_MAX_INT32/(2*sizeof(float)) )
- _nPoints = SAL_MAX_INT32/(2*sizeof(float));
- nPoints = _nPoints;
- pPoints = new float [nPoints*2];
- if (!bLines)
- pPointTypes = new sal_uInt8 [_nPoints];
- else
- pPointTypes = NULL;
- }
-
- ~EMFPPath ()
- {
- delete [] pPoints;
- delete [] pPointTypes;
- }
-
- // TODO: remove rR argument when debug code is not longer needed
- void Read (SvStream& s, sal_uInt32 pathFlags, ImplRenderer& rR)
- {
- for (int i = 0; i < nPoints; i ++) {
- if (pathFlags & 0x4000) {
- // points are stored in short 16bit integer format
- sal_uInt16 x, y;
-
- s >> x >> y;
- SAL_INFO ("cppcanvas.emf", "EMF+\tpoint [x,y]: " << x << "," << y);
- pPoints [i*2] = x;
- pPoints [i*2 + 1] = y;
- } else {
- // points are stored in Single (float) format
- s >> pPoints [i*2] >> pPoints [i*2 + 1];
- SAL_INFO ("cppcanvas.emf", "EMF+\tpoint [x,y]: " << pPoints [i*2] << "," << pPoints [i*2 + 1]);
- }
- }
-
- if (pPointTypes)
- for (int i = 0; i < nPoints; i ++) {
- s >> pPointTypes [i];
- SAL_INFO ("cppcanvas.emf", "EMF+\tpoint type: " << (int)pPointTypes [i]);
- }
-
- aPolygon.clear ();
-
-#if OSL_DEBUG_LEVEL > 1
- const ::basegfx::B2DRectangle aBounds (::basegfx::tools::getRange (GetPolygon (rR)));
-
- SAL_INFO ("cppcanvas.emf",
- "EMF+\tpolygon bounding box: " << aBounds.getMinX () << "," << aBounds.getMinY () << aBounds.getWidth () << "x" << aBounds.getHeight () << " (mapped)");
-#else
- (void) rR; // avoid warnings
-#endif
- }
-
- ::basegfx::B2DPolyPolygon& GetPolygon (ImplRenderer& rR, bool bMapIt = true)
- {
- ::basegfx::B2DPolygon polygon;
-
- aPolygon.clear ();
-
- int last_normal = 0, p = 0;
- ::basegfx::B2DPoint prev, mapped;
- bool hasPrev = false;
- for (int i = 0; i < nPoints; i ++) {
- if (p && pPointTypes && (pPointTypes [i] == 0)) {
- aPolygon.append (polygon);
- last_normal = i;
- p = 0;
- polygon.clear ();
- }
-
- if (bMapIt)
- mapped = rR.Map (pPoints [i*2], pPoints [i*2 + 1]);
- else
- mapped = ::basegfx::B2DPoint (pPoints [i*2], pPoints [i*2 + 1]);
- if (pPointTypes) {
- if ((pPointTypes [i] & 0x07) == 3) {
- if (((i - last_normal )% 3) == 1) {
- polygon.setNextControlPoint (p - 1, mapped);
- SAL_INFO ("cppcanvas.emf", "polygon append next: " << p - 1 << " mapped: " << mapped.getX () << "," << mapped.getY ());
- continue;
- } else if (((i - last_normal) % 3) == 2) {
- prev = mapped;
- hasPrev = true;
- continue;
- }
- } else
- last_normal = i;
- }
- polygon.append (mapped);
- SAL_INFO ("cppcanvas.emf", "polygon append point: " << pPoints [i*2] << "," << pPoints [i*2 + 1] << " mapped: " << mapped.getX () << ":" << mapped.getY ());
- if (hasPrev) {
- polygon.setPrevControlPoint (p, prev);
- SAL_INFO ("cppcanvas.emf", "polygon append prev: " << p << " mapped: " << prev.getX () << "," << prev.getY ());
- hasPrev = false;
- }
- p ++;
- if (pPointTypes && (pPointTypes [i] & 0x80)) { // closed polygon
- polygon.setClosed (true);
- aPolygon.append (polygon);
- SAL_INFO ("cppcanvas.emf", "close polygon");
- last_normal = i + 1;
- p = 0;
- polygon.clear ();
- }
- }
-
- if (polygon.count ()) {
- aPolygon.append (polygon);
-
-#if OSL_DEBUG_LEVEL > 1
- for (unsigned int i=0; i<aPolygon.count(); i++) {
- polygon = aPolygon.getB2DPolygon(i);
- SAL_INFO ("cppcanvas.emf", "polygon: " << i);
- for (unsigned int j=0; j<polygon.count(); j++) {
- ::basegfx::B2DPoint point = polygon.getB2DPoint(j);
- SAL_INFO ("cppcanvas.emf", "point: " << point.getX() << "," << point.getY());
- if (polygon.isPrevControlPointUsed(j)) {
- point = polygon.getPrevControlPoint(j);
- SAL_INFO ("cppcanvas.emf", "prev: " << point.getX() << "," << point.getY());
- }
- if (polygon.isNextControlPointUsed(j)) {
- point = polygon.getNextControlPoint(j);
- SAL_INFO ("cppcanvas.emf", "next: " << point.getX() << "," << point.getY());
- }
- }
- }
-#endif
- }
-
- return aPolygon;
- }
- };
-
- struct EMFPRegion : public EMFPObject
- {
- sal_Int32 parts;
- sal_Int32 *combineMode;
- sal_Int32 initialState;
- EMFPPath *initialPath;
- float ix, iy, iw, ih;
-
- EMFPRegion ()
- {
- combineMode = NULL;
- initialPath = NULL;
- }
-
- ~EMFPRegion ()
- {
- if (combineMode) {
- delete [] combineMode;
- combineMode = NULL;
- }
- if (initialPath) {
- delete initialPath;
- initialPath = NULL;
- }
- }
-
- void Read (SvStream& s)
- {
- sal_uInt32 header;
-
- s >> header >> parts;
-
- SAL_INFO ("cppcanvas.emf", "EMF+\tregion");
- SAL_INFO ("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " parts: " << parts << std::dec );
-
- if (parts) {
- if( parts<0 || sal_uInt32(parts)>SAL_MAX_INT32/sizeof(sal_Int32) )
- parts = SAL_MAX_INT32/sizeof(sal_Int32);
-
- combineMode = new sal_Int32 [parts];
-
- for (int i = 0; i < parts; i ++) {
- s >> combineMode [i];
- SAL_INFO ("cppcanvas.emf", "EMF+\tcombine mode [" << i << "]: 0x" << std::hex << combineMode [i] << std::dec);
- }
- }
-
- s >> initialState;
- SAL_INFO ("cppcanvas.emf", "EMF+\tinitial state: 0x" << std::hex << initialState << std::dec);
- }
- };
-
- struct EMFPBrush : public EMFPObject
- {
- ::Color solidColor;
- sal_uInt32 type;
- sal_uInt32 additionalFlags;
-
- /* linear gradient */
- sal_Int32 wrapMode;
- float areaX, areaY, areaWidth, areaHeight;
- ::Color secondColor; // first color is stored in solidColor;
- XForm transformation;
- bool hasTransformation;
- sal_Int32 blendPoints;
- float* blendPositions;
- float* blendFactors;
- sal_Int32 colorblendPoints;
- float* colorblendPositions;
- ::Color* colorblendColors;
- sal_Int32 surroundColorsNumber;
- ::Color* surroundColors;
- EMFPPath *path;
-
- public:
- EMFPBrush ()
- {
- blendPositions = NULL;
- colorblendPositions = NULL;
- colorblendColors = NULL;
- surroundColors = NULL;
- path = NULL;
- hasTransformation = false;
- }
-
- ~EMFPBrush ()
- {
- if (blendPositions != NULL) {
- delete[] blendPositions;
- blendPositions = NULL;
- }
- if (colorblendPositions != NULL) {
- delete[] colorblendPositions;
- colorblendPositions = NULL;
- }
- if (colorblendColors != NULL) {
- delete[] colorblendColors;
- colorblendColors = NULL;
- }
- if (surroundColors != NULL) {
- delete[] surroundColors;
- surroundColors = NULL;
- }
- if (path) {
- delete path;
- path = NULL;
- }
- }
-
- sal_uInt32 GetType() const { return type; }
- const ::Color& GetColor() const { return solidColor; }
-
- void Read (SvStream& s, ImplRenderer& rR)
- {
- sal_uInt32 header;
-
- s >> header >> type;
-
- SAL_INFO ("cppcanvas.emf", "EMF+\tbrush");
- SAL_INFO ("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " type: " << type << std::dec);
-
- switch (type) {
- case 0:
- {
- sal_uInt32 color;
-
- s >> color;
- solidColor = ::Color (0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
- SAL_INFO ("cppcanvas.emf", "EMF+\tsolid color: 0x" << std::hex << color << std::dec);
-
- break;
- }
- // path gradient
- case 3:
- {
- s >> additionalFlags >> wrapMode;
-
- SAL_INFO ("cppcanvas.emf", "EMF+\tpath gradient, additional flags: 0x" << std::hex << additionalFlags << std::dec);
-
- sal_uInt32 color;
-
- s >> color;
- solidColor = ::Color (0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
- SAL_INFO("cppcanvas.emf", "EMF+\tcenter color: 0x" << std::hex << color << std::dec);
-
- s >> areaX >> areaY;
- SAL_INFO("cppcanvas.emf", "EMF+\tcenter point: " << areaX << "," << areaY);
-
- s >> surroundColorsNumber;
- SAL_INFO("cppcanvas.emf", "EMF+\tsurround colors: " << surroundColorsNumber);
-
- if( surroundColorsNumber<0 || sal_uInt32(surroundColorsNumber)>SAL_MAX_INT32/sizeof(::Color) )
- surroundColorsNumber = SAL_MAX_INT32/sizeof(::Color);
-
- surroundColors = new ::Color [surroundColorsNumber];
- for (int i = 0; i < surroundColorsNumber; i++) {
- s >> color;
- surroundColors[i] = ::Color (0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
- if (i == 0)
- secondColor = surroundColors [0];
- SAL_INFO("cppcanvas.emf", "EMF+\tsurround color[" << i << "]: 0x" << std::hex << color << std::dec);
- }
-
- if (additionalFlags & 0x01) {
- sal_Int32 pathLength;
-
- s >> pathLength;
- SAL_INFO("cppcanvas.emf", "EMF+\tpath length: " << pathLength);
-
- sal_uInt32 pos = s.Tell ();
-#if OSL_DEBUG_LEVEL > 1
- dumpWords (s, 32);
-#endif
-
- sal_uInt32 pathHeader;
- sal_Int32 pathPoints, pathFlags;
- s >> pathHeader >> pathPoints >> pathFlags;
-
- SAL_INFO("cppcanvas.emf", "EMF+\tpath (brush path gradient)");
- SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << pathHeader << " points: " << std::dec << pathPoints << " additional flags: 0x" << std::hex << pathFlags << std::dec );
-
- path = new EMFPPath (pathPoints);
- path->Read (s, pathFlags, rR);
-
- s.Seek (pos + pathLength);
-
- const ::basegfx::B2DRectangle aBounds (::basegfx::tools::getRange (path->GetPolygon (rR, false)));
- areaWidth = aBounds.getWidth ();
- areaHeight = aBounds.getHeight ();
-
- SAL_INFO("cppcanvas.emf", "EMF+\tpolygon bounding box: " << aBounds.getMinX () << "," << aBounds.getMinY () << " " << aBounds.getWidth () << "x" << aBounds.getHeight ());
-
-
- if (additionalFlags & 0x02) {
- SAL_INFO("cppcanvas.emf", "EMF+\tuse transformation");
- s >> transformation;
- hasTransformation = true;
- SAL_INFO("cppcanvas.emf",
- "EMF+\tm11: " << transformation.eM11 << " m12: " << transformation.eM12 <<
- "\nEMF+\tm21: " << transformation.eM21 << " m22: " << transformation.eM22 <<
- "\nEMF+\tdx: " << transformation.eDx << " dy: " << transformation.eDy);
-
- }
- if (additionalFlags & 0x08) {
- s >> blendPoints;
- SAL_INFO("cppcanvas.emf", "EMF+\tuse blend, points: " << blendPoints);
- if( blendPoints<0 || sal_uInt32(blendPoints)>SAL_MAX_INT32/(2*sizeof(float)) )
- blendPoints = SAL_MAX_INT32/(2*sizeof(float));
- blendPositions = new float [2*blendPoints];
- blendFactors = blendPositions + blendPoints;
- for (int i=0; i < blendPoints; i ++) {
- s >> blendPositions [i];
- SAL_INFO("cppcanvas.emf", "EMF+\tposition[" << i << "]: " << blendPositions [i]);
- }
- for (int i=0; i < blendPoints; i ++) {
- s >> blendFactors [i];
- SAL_INFO("cppcanvas.emf", "EMF+\tfactor[" << i << "]: " << blendFactors [i]);
- }
- }
-
- if (additionalFlags & 0x04) {
- s >> colorblendPoints;
- SAL_INFO("cppcanvas.emf", "EMF+\tuse color blend, points: " << colorblendPoints);
- if( colorblendPoints<0 || sal_uInt32(colorblendPoints)>SAL_MAX_INT32/sizeof(float) )
- colorblendPoints = SAL_MAX_INT32/sizeof(float);
- if( sal_uInt32(colorblendPoints)>SAL_MAX_INT32/sizeof(::Color) )
- colorblendPoints = SAL_MAX_INT32/sizeof(::Color);
- colorblendPositions = new float [colorblendPoints];
- colorblendColors = new ::Color [colorblendPoints];
- for (int i=0; i < colorblendPoints; i ++) {
- s >> colorblendPositions [i];
- SAL_INFO("cppcanvas.emf", "EMF+\tposition[" << i << "]: " << colorblendPositions [i]);
- }
- for (int i=0; i < colorblendPoints; i ++) {
- s >> color;
- colorblendColors [i] = ::Color (0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
- SAL_INFO("cppcanvas.emf", "EMF+\tcolor[" << i << "]: 0x" << std::hex << color << std::dec);
- }
- }
- } else {
-#if OSL_DEBUG_LEVEL > 1
- dumpWords (s, 1024);
-#endif
- }
- break;
- }
- // linear gradient
- case 4:
- {
- s >> additionalFlags >> wrapMode;
-
- SAL_INFO("cppcanvas.emf", "EMF+\tlinear gradient, additional flags: 0x" << std::hex << additionalFlags << std::dec);
-
- s >> areaX >> areaY >> areaWidth >> areaHeight;
-
- SAL_INFO("cppcanvas.emf", "EMF+\tarea: " << areaX << "," << areaY << " - " << areaWidth << "x" << areaHeight);
-
- sal_uInt32 color;
-
- s >> color;
- solidColor = ::Color (0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
- SAL_INFO("cppcanvas.emf", "EMF+\tfirst color: 0x" << std::hex << color << std::dec);
-
- s >> color;
- secondColor = ::Color (0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
- SAL_INFO("cppcanvas.emf", "EMF+\tsecond color: 0x" << std::hex << color << std::dec);
-
- // repeated colors, unknown meaning, see http://www.aces.uiuc.edu/~jhtodd/Metafile/MetafileRecords/ObjectBrush.html
- s >> color;
- s >> color;
-
- if (additionalFlags & 0x02) {
- SAL_INFO("cppcanvas.emf", "EMF+\tuse transformation");
- s >> transformation;
- hasTransformation = true;
- SAL_INFO("cppcanvas.emf",
- "EMF+\tm11: " << transformation.eM11 << " m12: " << transformation.eM12 <<
- "\nEMF+\tm21: " << transformation.eM21 << " m22: " << transformation.eM22 <<
- "\nEMF+\tdx: " << transformation.eDx << " dy: " << transformation.eDy);
- }
- if (additionalFlags & 0x08) {
- s >> blendPoints;
- SAL_INFO("cppcanvas.emf", "EMF+\tuse blend, points: " << blendPoints);
- if( blendPoints<0 || sal_uInt32(blendPoints)>SAL_MAX_INT32/(2*sizeof(float)) )
- blendPoints = SAL_MAX_INT32/(2*sizeof(float));
- blendPositions = new float [2*blendPoints];
- blendFactors = blendPositions + blendPoints;
- for (int i=0; i < blendPoints; i ++) {
- s >> blendPositions [i];
- SAL_INFO("cppcanvas.emf", "EMF+\tposition[" << i << "]: " << blendPositions [i]);
- }
- for (int i=0; i < blendPoints; i ++) {
- s >> blendFactors [i];
- SAL_INFO("cppcanvas.emf", "EMF+\tfactor[" << i << "]: " << blendFactors [i]);
- }
- }
-
- if (additionalFlags & 0x04) {
- s >> colorblendPoints;
- SAL_INFO("cppcanvas.emf", "EMF+\tuse color blend, points: " << colorblendPoints);
- if( colorblendPoints<0 || sal_uInt32(colorblendPoints)>SAL_MAX_INT32/sizeof(float) )
- colorblendPoints = SAL_MAX_INT32/sizeof(float);
- if( sal_uInt32(colorblendPoints)>SAL_MAX_INT32/sizeof(::Color) )
- colorblendPoints = sal_uInt32(SAL_MAX_INT32)/sizeof(::Color);
- colorblendPositions = new float [colorblendPoints];
- colorblendColors = new ::Color [colorblendPoints];
- for (int i=0; i < colorblendPoints; i ++) {
- s >> colorblendPositions [i];
- SAL_INFO("cppcanvas.emf", "EMF+\tposition[" << i << "]: " << colorblendPositions [i]);
- }
- for (int i=0; i < colorblendPoints; i ++) {
- s >> color;
- colorblendColors [i] = ::Color (0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff);
- SAL_INFO("cppcanvas.emf", "EMF+\tcolor[" << i << "]: 0x" << std::hex << color << std::dec);
- }
- }
-
- break;
- }
- default:
- SAL_INFO("cppcanvas.emf", "EMF+\tunhandled brush type: " << std::hex << type << std::dec);
- }
- }
- };
-
- struct EMFPPen : public EMFPBrush
- {
- XForm transformation;
- float width;
- sal_Int32 startCap;
- sal_Int32 endCap;
- sal_Int32 lineJoin;
- float mitterLimit;
- sal_Int32 dashStyle;
- sal_Int32 dashCap;
- float dashOffset;
- sal_Int32 dashPatternLen;
- float *dashPattern;
- sal_Int32 alignment;
- sal_Int32 compoundArrayLen;
- float *compoundArray;
- sal_Int32 customStartCapLen;
- sal_uInt8 *customStartCap;
- sal_Int32 customEndCapLen;
- sal_uInt8 *customEndCap;
-
- public:
- EMFPPen () : EMFPBrush ()
- {
- dashPattern = NULL;
- compoundArray = NULL;
- customStartCap = NULL;
- customEndCap = NULL;
- }
-
- ~EMFPPen ()
- {
- delete[] dashPattern;
- delete[] compoundArray;
- delete[] customStartCap;
- delete[] customEndCap;
- }
-
- void SetStrokeAttributes (rendering::StrokeAttributes& rStrokeAttributes, ImplRenderer& rR, const OutDevState& rState)
- {
-#if OSL_DEBUG_LEVEL > 1
- if (width == 0.0) {
- SAL_INFO ("cppcanvas.emf", "TODO: pen with zero width - using minimal which might not be correct\n");
- }
-#endif
- rStrokeAttributes.StrokeWidth = (rState.mapModeTransform * rR.MapSize (width == 0.0 ? 0.05 : width, 0)).getX ();
- }
-
- void Read (SvStream& s, ImplRenderer& rR, sal_Int32, sal_Int32 )
- {
- sal_uInt32 header, unknown, penFlags, unknown2;
- int i;
-
- s >> header >> unknown >> penFlags >> unknown2 >> width;
-
- SAL_INFO("cppcanvas.emf", "EMF+\tpen");
- SAL_INFO("cppcanvas.emf", "EMF+\theader: 0x" << std::hex << header << " unknown: 0x" << unknown <<
- " additional flags: 0x" << penFlags << " unknown: 0x" << unknown2 << " width: " << std::dec << width );
-
- if (penFlags & 1)
- s >> transformation;
-
- if (penFlags & 2)
- s >> startCap;
- else
- startCap = 0;
-
- if (penFlags & 4)
- s >> endCap;
- else
- endCap = 0;
-
- if (penFlags & 8)
- s >> lineJoin;
- else
- lineJoin = 0;
-
- if (penFlags & 16)
- s >> mitterLimit;
- else
- mitterLimit = 0;
-
- if (penFlags & 32)
- s >> dashStyle;
- else
- dashStyle = 0;
-
- if (penFlags & 64)
- s >> dashCap;
- else
- dashCap = 0;
-
- if (penFlags & 128)
- s >> dashOffset;
- else
- dashOffset = 0;
-
- if (penFlags & 256) {
- s >> dashPatternLen;
- if( dashPatternLen<0 || sal_uInt32(dashPatternLen)>SAL_MAX_INT32/sizeof(float) )
- dashPatternLen = SAL_MAX_INT32/sizeof(float);
- dashPattern = new float [dashPatternLen];
- for (i = 0; i < dashPatternLen; i++)
- s >> dashPattern [i];
- } else
- dashPatternLen = 0;
-
- if (penFlags & 512)
- s >> alignment;
- else
- alignment = 0;
-
- if (penFlags & 1024) {
- s >> compoundArrayLen;
- if( compoundArrayLen<0 || sal_uInt32(compoundArrayLen)>SAL_MAX_INT32/sizeof(float) )
- compoundArrayLen = SAL_MAX_INT32/sizeof(float);
- compoundArray = new float [compoundArrayLen];
- for (i = 0; i < compoundArrayLen; i++)
- s >> compoundArray [i];
- } else
- compoundArrayLen = 0;
-
- if (penFlags & 2048) {
- s >> customStartCapLen;
- if( customStartCapLen<0 )
- customStartCapLen=0;
- customStartCap = new sal_uInt8 [customStartCapLen];
- for (i = 0; i < customStartCapLen; i++)
- s >> customStartCap [i];
- } else
- customStartCapLen = 0;
-
- if (penFlags & 4096) {
- s >> customEndCapLen;
- if( customEndCapLen<0 )
- customEndCapLen=0;
- customEndCap = new sal_uInt8 [customEndCapLen];
- for (i = 0; i < customEndCapLen; i++)
- s >> customEndCap [i];
- } else
- customEndCapLen = 0;
-
- EMFPBrush::Read (s, rR);
- }
- };
-
- struct EMFPImage : public EMFPObject
- {
- sal_uInt32 type;
- sal_Int32 width;
- sal_Int32 height;
- sal_Int32 stride;
- sal_Int32 pixelFormat;
- Graphic graphic;
-
-
- void Read (SvMemoryStream &s, sal_uInt32 dataSize, sal_Bool bUseWholeStream)
- {
- sal_uInt32 header, unknown;
-
- s >> header >> type;
-
- SAL_INFO("cppcanvas.emf", "EMF+\timage\nEMF+\theader: 0x" << std::hex << header << " type: " << type << std::dec );
-
- if (type == 1) { // bitmap
- s >> width >> height >> stride >> pixelFormat >> unknown;
- SAL_INFO("cppcanvas.emf", "EMF+\tbitmap width: " << width << " height: " << height << " stride: " << "pixelFormat: 0x" << std::hex << pixelFormat << std::dec);
- if (width == 0) { // non native formats
- GraphicFilter filter;
-
- filter.ImportGraphic (graphic, OUString(), s);
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list