diff options
Diffstat (limited to 'drawinglayer')
237 files changed, 0 insertions, 50219 deletions
diff --git a/drawinglayer/Library_drawinglayer.mk b/drawinglayer/Library_drawinglayer.mk deleted file mode 100644 index 133364bcc0..0000000000 --- a/drawinglayer/Library_drawinglayer.mk +++ /dev/null @@ -1,186 +0,0 @@ -# -*- Mode: makefile; tab-width: 4; indent-tabs-mode: t -*- -# Version: MPL 1.1 / GPLv3+ / LGPLv3+ -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License or as specified alternatively below. You may obtain a copy of -# the License at http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Initial Developer of the Original Code is -# David Tardon, Red Hat Inc. <dtardon@redhat.com> -# Portions created by the Initial Developer are Copyright (C) 2010 the -# Initial Developer. All Rights Reserved. -# -# Major Contributor(s): -# -# For minor contributions see the git repository. -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 3 or later (the "GPLv3+"), or -# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), -# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable -# instead of those above. - -$(eval $(call gb_Library_Library,drawinglayer)) - -$(eval $(call gb_Library_add_package_headers,drawinglayer,drawinglayer_inc)) - -$(eval $(call gb_Library_add_precompiled_header,drawinglayer,$(SRCDIR)/drawinglayer/inc/pch/precompiled_drawinglayer)) - -$(eval $(call gb_Library_set_include,drawinglayer,\ - $$(INCLUDE) \ - -I$(realpath $(SRCDIR)/drawinglayer/inc/pch) \ - -I$(OUTDIR)/inc \ -)) - -$(eval $(call gb_Library_add_defs,drawinglayer,\ - -DDRAWINGLAYER_DLLIMPLEMENTATION \ -)) - -$(eval $(call gb_Library_add_api,drawinglayer,\ - offapi \ - udkapi \ -)) - -$(eval $(call gb_Library_add_linked_libs,drawinglayer,\ - avmedia \ - basegfx \ - canvastools \ - comphelper \ - cppcanvas \ - cppu \ - cppuhelper \ - i18nisolang1 \ - sal \ - svl \ - svt \ - tk \ - tl \ - vcl \ - $(gb_STDLIBS) \ -)) - -$(eval $(call gb_Library_add_exception_objects,drawinglayer,\ - drawinglayer/source/animation/animationtiming \ - drawinglayer/source/attribute/fillbitmapattribute \ - drawinglayer/source/attribute/fillgradientattribute \ - drawinglayer/source/attribute/fillhatchattribute \ - drawinglayer/source/attribute/fontattribute \ - drawinglayer/source/attribute/lineattribute \ - drawinglayer/source/attribute/linestartendattribute \ - drawinglayer/source/attribute/materialattribute3d \ - drawinglayer/source/attribute/sdrallattribute3d \ - drawinglayer/source/attribute/sdrfillattribute \ - drawinglayer/source/attribute/sdrfillbitmapattribute \ - drawinglayer/source/attribute/sdrlightattribute3d \ - drawinglayer/source/attribute/sdrlightingattribute3d \ - drawinglayer/source/attribute/sdrlineattribute \ - drawinglayer/source/attribute/sdrlinestartendattribute \ - drawinglayer/source/attribute/sdrobjectattribute3d \ - drawinglayer/source/attribute/sdrsceneattribute3d \ - drawinglayer/source/attribute/sdrshadowattribute \ - drawinglayer/source/attribute/strokeattribute \ - drawinglayer/source/primitive2d/animatedprimitive2d \ - drawinglayer/source/primitive2d/backgroundcolorprimitive2d \ - drawinglayer/source/primitive2d/baseprimitive2d \ - drawinglayer/source/primitive2d/bitmapprimitive2d \ - drawinglayer/source/primitive2d/borderlineprimitive2d \ - drawinglayer/source/primitive2d/chartprimitive2d \ - drawinglayer/source/primitive2d/clippedborderlineprimitive2d \ - drawinglayer/source/primitive2d/controlprimitive2d \ - drawinglayer/source/primitive2d/discretebitmapprimitive2d \ - drawinglayer/source/primitive2d/discreteshadowprimitive2d \ - drawinglayer/source/primitive2d/embedded3dprimitive2d \ - drawinglayer/source/primitive2d/epsprimitive2d \ - drawinglayer/source/primitive2d/fillbitmapprimitive2d \ - drawinglayer/source/primitive2d/fillgradientprimitive2d \ - drawinglayer/source/primitive2d/fillhatchprimitive2d \ - drawinglayer/source/primitive2d/graphicprimitive2d \ - drawinglayer/source/primitive2d/gridprimitive2d \ - drawinglayer/source/primitive2d/groupprimitive2d \ - drawinglayer/source/primitive2d/helplineprimitive2d \ - drawinglayer/source/primitive2d/hiddengeometryprimitive2d \ - drawinglayer/source/primitive2d/invertprimitive2d \ - drawinglayer/source/primitive2d/markerarrayprimitive2d \ - drawinglayer/source/primitive2d/maskprimitive2d \ - drawinglayer/source/primitive2d/mediaprimitive2d \ - drawinglayer/source/primitive2d/metafileprimitive2d \ - drawinglayer/source/primitive2d/modifiedcolorprimitive2d \ - drawinglayer/source/primitive2d/pagepreviewprimitive2d \ - drawinglayer/source/primitive2d/pointarrayprimitive2d \ - drawinglayer/source/primitive2d/polygonprimitive2d \ - drawinglayer/source/primitive2d/polypolygonprimitive2d \ - drawinglayer/source/primitive2d/primitivetools2d \ - drawinglayer/source/primitive2d/rendergraphicprimitive2d \ - drawinglayer/source/primitive2d/sceneprimitive2d \ - drawinglayer/source/primitive2d/sdrdecompositiontools2d \ - drawinglayer/source/primitive2d/shadowprimitive2d \ - drawinglayer/source/primitive2d/structuretagprimitive2d \ - drawinglayer/source/primitive2d/textdecoratedprimitive2d \ - drawinglayer/source/primitive2d/texteffectprimitive2d \ - drawinglayer/source/primitive2d/textenumsprimitive2d \ - drawinglayer/source/primitive2d/texthierarchyprimitive2d \ - drawinglayer/source/primitive2d/textlayoutdevice \ - drawinglayer/source/primitive2d/textlineprimitive2d \ - drawinglayer/source/primitive2d/textprimitive2d \ - drawinglayer/source/primitive2d/textstrikeoutprimitive2d \ - drawinglayer/source/primitive2d/transformprimitive2d \ - drawinglayer/source/primitive2d/transparenceprimitive2d \ - drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d \ - drawinglayer/source/primitive2d/wallpaperprimitive2d \ - drawinglayer/source/primitive2d/wrongspellprimitive2d \ - drawinglayer/source/primitive3d/baseprimitive3d \ - drawinglayer/source/primitive3d/groupprimitive3d \ - drawinglayer/source/primitive3d/hatchtextureprimitive3d \ - drawinglayer/source/primitive3d/hiddengeometryprimitive3d \ - drawinglayer/source/primitive3d/modifiedcolorprimitive3d \ - drawinglayer/source/primitive3d/polygonprimitive3d \ - drawinglayer/source/primitive3d/polygontubeprimitive3d \ - drawinglayer/source/primitive3d/polypolygonprimitive3d \ - drawinglayer/source/primitive3d/sdrcubeprimitive3d \ - drawinglayer/source/primitive3d/sdrdecompositiontools3d \ - drawinglayer/source/primitive3d/sdrextrudelathetools3d \ - drawinglayer/source/primitive3d/sdrextrudeprimitive3d \ - drawinglayer/source/primitive3d/sdrlatheprimitive3d \ - drawinglayer/source/primitive3d/sdrpolypolygonprimitive3d \ - drawinglayer/source/primitive3d/sdrprimitive3d \ - drawinglayer/source/primitive3d/sdrsphereprimitive3d \ - drawinglayer/source/primitive3d/shadowprimitive3d \ - drawinglayer/source/primitive3d/textureprimitive3d \ - drawinglayer/source/primitive3d/transformprimitive3d \ - drawinglayer/source/processor2d/baseprocessor2d \ - drawinglayer/source/processor2d/canvasprocessor \ - drawinglayer/source/processor2d/contourextractor2d \ - drawinglayer/source/processor2d/helperchartrenderer \ - drawinglayer/source/processor2d/helperwrongspellrenderer \ - drawinglayer/source/processor2d/hittestprocessor2d \ - drawinglayer/source/processor2d/linegeometryextractor2d \ - drawinglayer/source/processor2d/textaspolygonextractor2d \ - drawinglayer/source/processor2d/vclhelperbitmaprender \ - drawinglayer/source/processor2d/vclhelperbitmaptransform \ - drawinglayer/source/processor2d/vclhelperbufferdevice \ - drawinglayer/source/processor2d/vclhelpergradient \ - drawinglayer/source/processor2d/vclmetafileprocessor2d \ - drawinglayer/source/processor2d/vclpixelprocessor2d \ - drawinglayer/source/processor2d/vclprocessor2d \ - drawinglayer/source/processor3d/baseprocessor3d \ - drawinglayer/source/processor3d/cutfindprocessor3d \ - drawinglayer/source/processor3d/defaultprocessor3d \ - drawinglayer/source/processor3d/geometry2dextractor \ - drawinglayer/source/processor3d/shadow3dextractor \ - drawinglayer/source/processor3d/zbufferprocessor3d \ - drawinglayer/source/texture/texture3d \ - drawinglayer/source/texture/texture \ -)) - -$(eval $(call gb_Library_add_noexception_objects,drawinglayer,\ - drawinglayer/source/geometry/viewinformation2d \ - drawinglayer/source/geometry/viewinformation3d \ -)) - -# vim: set noet sw=4 ts=4: diff --git a/drawinglayer/Makefile b/drawinglayer/Makefile deleted file mode 100644 index 8d71119918..0000000000 --- a/drawinglayer/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -ifeq ($(strip $(SOLARENV)),) -$(error No environment set!) -endif - -gb_PARTIALBUILD := T -GBUILDDIR := $(SOLARENV)/gbuild -include $(GBUILDDIR)/gbuild.mk - -$(eval $(call gb_Module_make_global_targets,$(shell ls $(dir $(realpath $(firstword $(MAKEFILE_LIST))))/Module*.mk))) - -# vim: set noet sw=4 ts=4: diff --git a/drawinglayer/Module_drawinglayer.mk b/drawinglayer/Module_drawinglayer.mk deleted file mode 100644 index 05f4548216..0000000000 --- a/drawinglayer/Module_drawinglayer.mk +++ /dev/null @@ -1,36 +0,0 @@ -# -*- Mode: makefile; tab-width: 4; indent-tabs-mode: t -*- -# Version: MPL 1.1 / GPLv3+ / LGPLv3+ -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License or as specified alternatively below. You may obtain a copy of -# the License at http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Initial Developer of the Original Code is -# David Tardon, Red Hat Inc. <dtardon@redhat.com> -# Portions created by the Initial Developer are Copyright (C) 2010 the -# Initial Developer. All Rights Reserved. -# -# Major Contributor(s): -# -# For minor contributions see the git repository. -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 3 or later (the "GPLv3+"), or -# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), -# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable -# instead of those above. - -$(eval $(call gb_Module_Module,drawinglayer)) - -$(eval $(call gb_Module_add_targets,drawinglayer,\ - Library_drawinglayer \ - Package_inc \ -)) - -# vim: set noet sw=4 ts=4: diff --git a/drawinglayer/Package_inc.mk b/drawinglayer/Package_inc.mk deleted file mode 100644 index 8c5880448f..0000000000 --- a/drawinglayer/Package_inc.mk +++ /dev/null @@ -1,141 +0,0 @@ -# -*- Mode: makefile; tab-width: 4; indent-tabs-mode: t -*- -# Version: MPL 1.1 / GPLv3+ / LGPLv3+ -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License or as specified alternatively below. You may obtain a copy of -# the License at http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Initial Developer of the Original Code is -# David Tardon, Red Hat Inc. <dtardon@redhat.com> -# Portions created by the Initial Developer are Copyright (C) 2010 the -# Initial Developer. All Rights Reserved. -# -# Major Contributor(s): -# -# For minor contributions see the git repository. -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 3 or later (the "GPLv3+"), or -# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), -# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable -# instead of those above. - -$(eval $(call gb_Package_Package,drawinglayer_inc,$(SRCDIR)/drawinglayer/inc)) - -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/animation/animationtiming.hxx,drawinglayer/animation/animationtiming.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/fillbitmapattribute.hxx,drawinglayer/attribute/fillbitmapattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/fillgradientattribute.hxx,drawinglayer/attribute/fillgradientattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/fillhatchattribute.hxx,drawinglayer/attribute/fillhatchattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/fontattribute.hxx,drawinglayer/attribute/fontattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/lineattribute.hxx,drawinglayer/attribute/lineattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/linestartendattribute.hxx,drawinglayer/attribute/linestartendattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/materialattribute3d.hxx,drawinglayer/attribute/materialattribute3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrallattribute3d.hxx,drawinglayer/attribute/sdrallattribute3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrfillattribute.hxx,drawinglayer/attribute/sdrfillattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx,drawinglayer/attribute/sdrfillbitmapattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrlightattribute3d.hxx,drawinglayer/attribute/sdrlightattribute3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrlightingattribute3d.hxx,drawinglayer/attribute/sdrlightingattribute3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrlineattribute.hxx,drawinglayer/attribute/sdrlineattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrlinestartendattribute.hxx,drawinglayer/attribute/sdrlinestartendattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrobjectattribute3d.hxx,drawinglayer/attribute/sdrobjectattribute3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrsceneattribute3d.hxx,drawinglayer/attribute/sdrsceneattribute3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/sdrshadowattribute.hxx,drawinglayer/attribute/sdrshadowattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/attribute/strokeattribute.hxx,drawinglayer/attribute/strokeattribute.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/drawinglayerdllapi.h,drawinglayer/drawinglayerdllapi.h)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/geometry/viewinformation2d.hxx,drawinglayer/geometry/viewinformation2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/geometry/viewinformation3d.hxx,drawinglayer/geometry/viewinformation3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/animatedprimitive2d.hxx,drawinglayer/primitive2d/animatedprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx,drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/baseprimitive2d.hxx,drawinglayer/primitive2d/baseprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/bitmapprimitive2d.hxx,drawinglayer/primitive2d/bitmapprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx,drawinglayer/primitive2d/borderlineprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/chartprimitive2d.hxx,drawinglayer/primitive2d/chartprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/clippedborderlineprimitive2d.hxx,drawinglayer/primitive2d/clippedborderlineprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/controlprimitive2d.hxx,drawinglayer/primitive2d/controlprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/discretebitmapprimitive2d.hxx,drawinglayer/primitive2d/discretebitmapprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/discreteshadowprimitive2d.hxx,drawinglayer/primitive2d/discreteshadowprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx,drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/embedded3dprimitive2d.hxx,drawinglayer/primitive2d/embedded3dprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/epsprimitive2d.hxx,drawinglayer/primitive2d/epsprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/fillbitmapprimitive2d.hxx,drawinglayer/primitive2d/fillbitmapprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/fillgradientprimitive2d.hxx,drawinglayer/primitive2d/fillgradientprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx,drawinglayer/primitive2d/fillhatchprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/graphicprimitive2d.hxx,drawinglayer/primitive2d/graphicprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/gridprimitive2d.hxx,drawinglayer/primitive2d/gridprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/groupprimitive2d.hxx,drawinglayer/primitive2d/groupprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/helplineprimitive2d.hxx,drawinglayer/primitive2d/helplineprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx,drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/invertprimitive2d.hxx,drawinglayer/primitive2d/invertprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/markerarrayprimitive2d.hxx,drawinglayer/primitive2d/markerarrayprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/maskprimitive2d.hxx,drawinglayer/primitive2d/maskprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/mediaprimitive2d.hxx,drawinglayer/primitive2d/mediaprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/metafileprimitive2d.hxx,drawinglayer/primitive2d/metafileprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx,drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/pagepreviewprimitive2d.hxx,drawinglayer/primitive2d/pagepreviewprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/pointarrayprimitive2d.hxx,drawinglayer/primitive2d/pointarrayprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/polygonprimitive2d.hxx,drawinglayer/primitive2d/polygonprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/polypolygonprimitive2d.hxx,drawinglayer/primitive2d/polypolygonprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/primitivetools2d.hxx,drawinglayer/primitive2d/primitivetools2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/rendergraphicprimitive2d.hxx,drawinglayer/primitive2d/rendergraphicprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/sceneprimitive2d.hxx,drawinglayer/primitive2d/sceneprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/sdrdecompositiontools2d.hxx,drawinglayer/primitive2d/sdrdecompositiontools2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/shadowprimitive2d.hxx,drawinglayer/primitive2d/shadowprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/structuretagprimitive2d.hxx,drawinglayer/primitive2d/structuretagprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/textdecoratedprimitive2d.hxx,drawinglayer/primitive2d/textdecoratedprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/texteffectprimitive2d.hxx,drawinglayer/primitive2d/texteffectprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/textenumsprimitive2d.hxx,drawinglayer/primitive2d/textenumsprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/texthierarchyprimitive2d.hxx,drawinglayer/primitive2d/texthierarchyprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/textlayoutdevice.hxx,drawinglayer/primitive2d/textlayoutdevice.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/textlineprimitive2d.hxx,drawinglayer/primitive2d/textlineprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/textprimitive2d.hxx,drawinglayer/primitive2d/textprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx,drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/transformprimitive2d.hxx,drawinglayer/primitive2d/transformprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/transparenceprimitive2d.hxx,drawinglayer/primitive2d/transparenceprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx,drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/wallpaperprimitive2d.hxx,drawinglayer/primitive2d/wallpaperprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive2d/wrongspellprimitive2d.hxx,drawinglayer/primitive2d/wrongspellprimitive2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/baseprimitive3d.hxx,drawinglayer/primitive3d/baseprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx,drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/groupprimitive3d.hxx,drawinglayer/primitive3d/groupprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/hatchtextureprimitive3d.hxx,drawinglayer/primitive3d/hatchtextureprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx,drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx,drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/polygonprimitive3d.hxx,drawinglayer/primitive3d/polygonprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/polygontubeprimitive3d.hxx,drawinglayer/primitive3d/polygontubeprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/polypolygonprimitive3d.hxx,drawinglayer/primitive3d/polypolygonprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/sdrcubeprimitive3d.hxx,drawinglayer/primitive3d/sdrcubeprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/sdrdecompositiontools3d.hxx,drawinglayer/primitive3d/sdrdecompositiontools3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/sdrextrudelathetools3d.hxx,drawinglayer/primitive3d/sdrextrudelathetools3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/sdrextrudeprimitive3d.hxx,drawinglayer/primitive3d/sdrextrudeprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/sdrlatheprimitive3d.hxx,drawinglayer/primitive3d/sdrlatheprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/sdrpolypolygonprimitive3d.hxx,drawinglayer/primitive3d/sdrpolypolygonprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/sdrprimitive3d.hxx,drawinglayer/primitive3d/sdrprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/sdrsphereprimitive3d.hxx,drawinglayer/primitive3d/sdrsphereprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/shadowprimitive3d.hxx,drawinglayer/primitive3d/shadowprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/textureprimitive3d.hxx,drawinglayer/primitive3d/textureprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/primitive3d/transformprimitive3d.hxx,drawinglayer/primitive3d/transformprimitive3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/baseprocessor2d.hxx,drawinglayer/processor2d/baseprocessor2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/canvasprocessor.hxx,drawinglayer/processor2d/canvasprocessor.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/contourextractor2d.hxx,drawinglayer/processor2d/contourextractor2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/hittestprocessor2d.hxx,drawinglayer/processor2d/hittestprocessor2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/linegeometryextractor2d.hxx,drawinglayer/processor2d/linegeometryextractor2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/textaspolygonextractor2d.hxx,drawinglayer/processor2d/textaspolygonextractor2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/vclmetafileprocessor2d.hxx,drawinglayer/processor2d/vclmetafileprocessor2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx,drawinglayer/processor2d/vclpixelprocessor2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor2d/vclprocessor2d.hxx,drawinglayer/processor2d/vclprocessor2d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor3d/baseprocessor3d.hxx,drawinglayer/processor3d/baseprocessor3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor3d/cutfindprocessor3d.hxx,drawinglayer/processor3d/cutfindprocessor3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor3d/defaultprocessor3d.hxx,drawinglayer/processor3d/defaultprocessor3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor3d/geometry2dextractor.hxx,drawinglayer/processor3d/geometry2dextractor.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor3d/shadow3dextractor.hxx,drawinglayer/processor3d/shadow3dextractor.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/processor3d/zbufferprocessor3d.hxx,drawinglayer/processor3d/zbufferprocessor3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/texture/texture3d.hxx,drawinglayer/texture/texture3d.hxx)) -$(eval $(call gb_Package_add_file,drawinglayer_inc,inc/drawinglayer/texture/texture.hxx,drawinglayer/texture/texture.hxx)) - -# vim: set noet sw=4 ts=4: diff --git a/drawinglayer/inc/drawinglayer/animation/animationtiming.hxx b/drawinglayer/inc/drawinglayer/animation/animationtiming.hxx deleted file mode 100644 index ff7b82d750..0000000000 --- a/drawinglayer/inc/drawinglayer/animation/animationtiming.hxx +++ /dev/null @@ -1,153 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ANIMATION_ANIMATIONTIMING_HXX -#define INCLUDED_DRAWINGLAYER_ANIMATION_ANIMATIONTIMING_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> -#include <vector> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace animation - { - ////////////////////////////////////////////////////////////////////////////// - - class DRAWINGLAYER_DLLPUBLIC AnimationEntry - { - private: - AnimationEntry(const AnimationEntry&); - AnimationEntry& operator=(const AnimationEntry& rCandidate); - - public: - AnimationEntry(); - virtual ~AnimationEntry(); - virtual AnimationEntry* clone() const = 0; - - virtual bool operator==(const AnimationEntry& rCandidate) const = 0; - virtual double getDuration() const = 0; - virtual double getStateAtTime(double fTime) const = 0; - virtual double getNextEventTime(double fTime) const = 0; - }; - - ////////////////////////////////////////////////////////////////////////////// - - class DRAWINGLAYER_DLLPUBLIC AnimationEntryFixed : public AnimationEntry - { - protected: - double mfDuration; - double mfState; - - public: - AnimationEntryFixed(double fDuration, double fState = 0.0); - virtual ~AnimationEntryFixed(); - virtual AnimationEntry* clone() const; - - virtual bool operator==(const AnimationEntry& rCandidate) const; - virtual double getDuration() const; - virtual double getStateAtTime(double fTime) const; - virtual double getNextEventTime(double fTime) const; - }; - - ////////////////////////////////////////////////////////////////////////////// - - class DRAWINGLAYER_DLLPUBLIC AnimationEntryLinear : public AnimationEntry - { - protected: - double mfDuration; - double mfFrequency; - double mfStart; - double mfStop; - - public: - AnimationEntryLinear(double fDuration, double fFrequency = 250.0, double fStart = 0.0, double fStop = 1.0); - virtual ~AnimationEntryLinear(); - virtual AnimationEntry* clone() const; - - virtual bool operator==(const AnimationEntry& rCandidate) const; - virtual double getDuration() const; - virtual double getStateAtTime(double fTime) const; - virtual double getNextEventTime(double fTime) const; - }; - - ////////////////////////////////////////////////////////////////////////////// - - class DRAWINGLAYER_DLLPUBLIC AnimationEntryList : public AnimationEntry - { - protected: - double mfDuration; - ::std::vector< AnimationEntry* > maEntries; - - // helpers - sal_uInt32 impGetIndexAtTime(double fTime, double &rfAddedTime) const; - - public: - AnimationEntryList(); - virtual ~AnimationEntryList(); - virtual AnimationEntry* clone() const; - - virtual bool operator==(const AnimationEntry& rCandidate) const; - void append(const AnimationEntry& rCandidate); - virtual double getDuration() const; - virtual double getStateAtTime(double fTime) const; - virtual double getNextEventTime(double fTime) const; - }; - - ////////////////////////////////////////////////////////////////////////////// - - class DRAWINGLAYER_DLLPUBLIC AnimationEntryLoop : public AnimationEntryList - { - protected: - sal_uInt32 mnRepeat; - - public: - AnimationEntryLoop(sal_uInt32 nRepeat = 0xffffffff); - virtual ~AnimationEntryLoop(); - virtual AnimationEntry* clone() const; - - virtual bool operator==(const AnimationEntry& rCandidate) const; - virtual double getDuration() const; - virtual double getStateAtTime(double fTime) const; - virtual double getNextEventTime(double fTime) const; - }; - - ////////////////////////////////////////////////////////////////////////////// - } // end of namespace animation -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ANIMATION_ANIMATIONTIMING_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx deleted file mode 100644 index b36a524a8e..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLBITMAPATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLBITMAPATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -class BitmapEx; - -namespace basegfx { - class B2DPoint; - class B2DVector; -} - -namespace drawinglayer { namespace attribute { - class ImpFillBitmapAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC FillBitmapAttribute - { - private: - ImpFillBitmapAttribute* mpFillBitmapAttribute; - - public: - /// constructors/assignmentoperator/destructor - FillBitmapAttribute( - const BitmapEx& rBitmapEx, - const basegfx::B2DPoint& rTopLeft, - const basegfx::B2DVector& rSize, - bool bTiling); - FillBitmapAttribute(); - FillBitmapAttribute(const FillBitmapAttribute& rCandidate); - FillBitmapAttribute& operator=(const FillBitmapAttribute& rCandidate); - ~FillBitmapAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const FillBitmapAttribute& rCandidate) const; - - // data read access - const BitmapEx& getBitmapEx() const; - const basegfx::B2DPoint& getTopLeft() const; - const basegfx::B2DVector& getSize() const; - bool getTiling() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLBITMAPATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx deleted file mode 100644 index e0fdf7453f..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/fillgradientattribute.hxx +++ /dev/null @@ -1,120 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLGRADIENTATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLGRADIENTATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BColor; -} - -namespace drawinglayer { namespace attribute { - class ImpFillGradientAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// -// declarations - -namespace drawinglayer -{ - namespace attribute - { - enum GradientStyle - { - GRADIENTSTYLE_LINEAR, - GRADIENTSTYLE_AXIAL, - GRADIENTSTYLE_RADIAL, - GRADIENTSTYLE_ELLIPTICAL, - GRADIENTSTYLE_SQUARE, - GRADIENTSTYLE_RECT - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC FillGradientAttribute - { - private: - ImpFillGradientAttribute* mpFillGradientAttribute; - - public: - /// constructors/assignmentoperator/destructor - FillGradientAttribute( - GradientStyle eStyle, - double fBorder, - double fOffsetX, - double fOffsetY, - double fAngle, - const basegfx::BColor& rStartColor, - const basegfx::BColor& rEndColor, - sal_uInt16 nSteps); - FillGradientAttribute(); - FillGradientAttribute(const FillGradientAttribute& rCandidate); - FillGradientAttribute& operator=(const FillGradientAttribute& rCandidate); - ~FillGradientAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const FillGradientAttribute& rCandidate) const; - - // data read access - GradientStyle getStyle() const; - double getBorder() const; - double getOffsetX() const; - double getOffsetY() const; - double getAngle() const; - const basegfx::BColor& getStartColor() const; - const basegfx::BColor& getEndColor() const; - sal_uInt16 getSteps() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLGRADIENTATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx deleted file mode 100644 index a05b19ad8a..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/fillhatchattribute.hxx +++ /dev/null @@ -1,111 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLHATCHATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLHATCHATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BColor; -} - -namespace drawinglayer { namespace attribute { - class ImpFillHatchAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// -// declarations - -namespace drawinglayer -{ - namespace attribute - { - enum HatchStyle - { - HATCHSTYLE_SINGLE, - HATCHSTYLE_DOUBLE, - HATCHSTYLE_TRIPLE - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC FillHatchAttribute - { - private: - ImpFillHatchAttribute* mpFillHatchAttribute; - - public: - /// constructors/assignmentoperator/destructor - FillHatchAttribute( - HatchStyle eStyle, - double fDistance, - double fAngle, - const basegfx::BColor& rColor, - bool bFillBackground); - FillHatchAttribute(); - FillHatchAttribute(const FillHatchAttribute& rCandidate); - FillHatchAttribute& operator=(const FillHatchAttribute& rCandidate); - ~FillHatchAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const FillHatchAttribute& rCandidate) const; - - // data read access - HatchStyle getStyle() const; - double getDistance() const; - double getAngle() const; - const basegfx::BColor& getColor() const; - bool isFillBackground() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLHATCHATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/fontattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/fontattribute.hxx deleted file mode 100644 index e7171adc9b..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/fontattribute.hxx +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_FONTATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_FONTATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -class String; - -namespace drawinglayer { namespace attribute { - class ImpFontAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - /** FontAttribute class - - This attribute class is able to hold all parameters needed/used - to completely define the parametrisation of a text portion. - */ - class DRAWINGLAYER_DLLPUBLIC FontAttribute - { - private: - ImpFontAttribute* mpFontAttribute; - - public: - /// constructors/assignmentoperator/destructor - /// TODO: pair kerning and CJK kerning - FontAttribute( - const String& rFamilyName, - const String& rStyleName, - sal_uInt16 nWeight, - bool bSymbol = false, - bool bVertical = false, - bool bItalic = false, - bool bMonospaced = false, - bool bOutline = false, - bool bRTL = false, - bool bBiDiStrong = false); - FontAttribute(); - FontAttribute(const FontAttribute& rCandidate); - FontAttribute& operator=(const FontAttribute& rCandidate); - ~FontAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const FontAttribute& rCandidate) const; - - /// data read access - const String& getFamilyName() const; - const String& getStyleName() const; - sal_uInt16 getWeight() const; - bool getSymbol() const; - bool getVertical() const; - bool getItalic() const; - bool getOutline() const; - bool getRTL() const; - bool getBiDiStrong() const; - bool getMonospaced() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_FONTATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/lineattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/lineattribute.hxx deleted file mode 100644 index a9ec162b84..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/lineattribute.hxx +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_LINEATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_LINEATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <basegfx/vector/b2enums.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BColor; -} - -namespace drawinglayer { namespace attribute { - class ImpLineAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC LineAttribute - { - private: - ImpLineAttribute* mpLineAttribute; - - public: - /// constructors/assignmentoperator/destructor - LineAttribute( - const basegfx::BColor& rColor, - double fWidth = 0.0, - basegfx::B2DLineJoin aB2DLineJoin = basegfx::B2DLINEJOIN_ROUND); - LineAttribute(); - LineAttribute(const LineAttribute& rCandidate); - LineAttribute& operator=(const LineAttribute& rCandidate); - ~LineAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const LineAttribute& rCandidate) const; - - // data read access - const basegfx::BColor& getColor() const; - double getWidth() const; - basegfx::B2DLineJoin getLineJoin() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_LINEATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/linestartendattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/linestartendattribute.hxx deleted file mode 100644 index a722489979..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/linestartendattribute.hxx +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_LINESTARTENDATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_LINESTARTENDATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class B2DPolyPolygon; -} - -namespace drawinglayer { namespace attribute { - class ImpLineStartEndAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC LineStartEndAttribute - { - private: - ImpLineStartEndAttribute* mpLineStartEndAttribute; - - public: - /// constructors/assignmentoperator/destructor - LineStartEndAttribute( - double fWidth, - const basegfx::B2DPolyPolygon& rPolyPolygon, - bool bCentered); - LineStartEndAttribute(); - LineStartEndAttribute(const LineStartEndAttribute& rCandidate); - LineStartEndAttribute& operator=(const LineStartEndAttribute& rCandidate); - ~LineStartEndAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const LineStartEndAttribute& rCandidate) const; - - // data read access - double getWidth() const; - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const; - bool isCentered() const; - bool isActive() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_LINESTARTENDATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/materialattribute3d.hxx b/drawinglayer/inc/drawinglayer/attribute/materialattribute3d.hxx deleted file mode 100644 index 7b10c173e3..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/materialattribute3d.hxx +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_MATERIALATTRIBUTE3D_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_MATERIALATTRIBUTE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace attribute { - class ImpMaterialAttribute3D; -}} - -namespace basegfx { - class BColor; -} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC MaterialAttribute3D - { - private: - ImpMaterialAttribute3D* mpMaterialAttribute3D; - - public: - // constructors/destructor - MaterialAttribute3D( - const basegfx::BColor& rColor, - const basegfx::BColor& rSpecular, - const basegfx::BColor& rEmission, - sal_uInt16 nSpecularIntensity); - MaterialAttribute3D(const basegfx::BColor& rColor); - MaterialAttribute3D(); - MaterialAttribute3D(const MaterialAttribute3D& rCandidate); - ~MaterialAttribute3D(); - - // assignment operator - MaterialAttribute3D& operator=(const MaterialAttribute3D& rCandidate); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const MaterialAttribute3D& rCandidate) const; - - // data read access - const basegfx::BColor& getColor() const; - const basegfx::BColor& getSpecular() const; - const basegfx::BColor& getEmission() const; - sal_uInt16 getSpecularIntensity() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_MATERIALATTRIBUTE3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrallattribute3d.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrallattribute3d.hxx deleted file mode 100644 index be4a9c69de..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrallattribute3d.hxx +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRALLATTRIBUTE3D_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRALLATTRIBUTE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> -#include <drawinglayer/attribute/sdrlineattribute.hxx> -#include <drawinglayer/attribute/sdrfillattribute.hxx> -#include <drawinglayer/attribute/sdrlinestartendattribute.hxx> -#include <drawinglayer/attribute/sdrshadowattribute.hxx> -#include <drawinglayer/attribute/fillgradientattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC SdrLineFillShadowAttribute3D - { - private: - const SdrLineAttribute maLine; - const SdrFillAttribute maFill; - const SdrLineStartEndAttribute maLineStartEnd; - const SdrShadowAttribute maShadow; - const FillGradientAttribute maFillFloatTransGradient; - - public: - /// constructors/assignmentoperator/destructor - SdrLineFillShadowAttribute3D( - const SdrLineAttribute& rLine, - const SdrFillAttribute& rFill, - const SdrLineStartEndAttribute& rLineStartEnd, - const SdrShadowAttribute& rShadow, - const FillGradientAttribute& rFillFloatTransGradient); - SdrLineFillShadowAttribute3D(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const SdrLineFillShadowAttribute3D& rCandidate) const; - - // data read access - const SdrLineAttribute& getLine() const { return maLine; } - const SdrFillAttribute& getFill() const { return maFill; } - const SdrLineStartEndAttribute& getLineStartEnd() const { return maLineStartEnd; } - const SdrShadowAttribute& getShadow() const { return maShadow; } - const FillGradientAttribute& getFillFloatTransGradient() const { return maFillFloatTransGradient; } - }; - } // end of namespace overlay -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRALLATTRIBUTE3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrfillattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrfillattribute.hxx deleted file mode 100644 index 008dbabe72..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrfillattribute.hxx +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRFILLATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRFILLATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BColor; -} - -namespace drawinglayer { namespace attribute { - class ImpSdrFillAttribute; - class FillGradientAttribute; - class FillHatchAttribute; - class SdrFillBitmapAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC SdrFillAttribute - { - private: - ImpSdrFillAttribute* mpSdrFillAttribute; - - public: - /// constructors/assignmentoperator/destructor - SdrFillAttribute( - double fTransparence, - const basegfx::BColor& rColor, - const FillGradientAttribute& rGradient, - const FillHatchAttribute& rHatch, - const SdrFillBitmapAttribute& rBitmap); - SdrFillAttribute(); - SdrFillAttribute(const SdrFillAttribute& rCandidate); - SdrFillAttribute& operator=(const SdrFillAttribute& rCandidate); - ~SdrFillAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const SdrFillAttribute& rCandidate) const; - - // data read access - double getTransparence() const; - const basegfx::BColor& getColor() const; - const FillGradientAttribute& getGradient() const; - const FillHatchAttribute& getHatch() const; - const SdrFillBitmapAttribute& getBitmap() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRFILLATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx deleted file mode 100644 index 22ee52943a..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrfillbitmapattribute.hxx +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRFILLBITMAPATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRFILLBITMAPATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -class Bitmap; - -namespace basegfx { - class B2DRange; - class B2DVector; -} - -namespace drawinglayer { namespace attribute { - class FillBitmapAttribute; - class ImpSdrFillBitmapAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC SdrFillBitmapAttribute - { - private: - ImpSdrFillBitmapAttribute* mpSdrFillBitmapAttribute; - - public: - /// constructors/assignmentoperator/destructor - SdrFillBitmapAttribute( - const Bitmap& rBitmap, - const basegfx::B2DVector& rSize, - const basegfx::B2DVector& rOffset, - const basegfx::B2DVector& rOffsetPosition, - const basegfx::B2DVector& rRectPoint, - bool bTiling, - bool bStretch, - bool bLogSize); - SdrFillBitmapAttribute(); - SdrFillBitmapAttribute(const SdrFillBitmapAttribute& rCandidate); - SdrFillBitmapAttribute& operator=(const SdrFillBitmapAttribute& rCandidate); - ~SdrFillBitmapAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const SdrFillBitmapAttribute& rCandidate) const; - - // data read access - const Bitmap& getBitmap() const; - const basegfx::B2DVector& getSize() const; - const basegfx::B2DVector& getOffset() const; - const basegfx::B2DVector& getOffsetPosition() const; - const basegfx::B2DVector& getRectPoint() const; - bool getTiling() const; - bool getStretch() const; - bool getLogSize() const; - - // FillBitmapAttribute generator - FillBitmapAttribute getFillBitmapAttribute(const basegfx::B2DRange& rRange) const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRFILLBITMAPATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrlightattribute3d.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrlightattribute3d.hxx deleted file mode 100644 index 6cb575c327..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrlightattribute3d.hxx +++ /dev/null @@ -1,95 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLIGHTATTRIBUTE3D_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLIGHTATTRIBUTE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BColor; - class B3DVector; -} - -namespace drawinglayer { namespace attribute { - class ImpSdr3DLightAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC Sdr3DLightAttribute - { - private: - ImpSdr3DLightAttribute* mpSdr3DLightAttribute; - - public: - // constructors/destructor - Sdr3DLightAttribute( - const basegfx::BColor& rColor, - const basegfx::B3DVector& rDirection, - bool bSpecular); - Sdr3DLightAttribute(const basegfx::BColor& rColor); - Sdr3DLightAttribute(); - Sdr3DLightAttribute(const Sdr3DLightAttribute& rCandidate); - ~Sdr3DLightAttribute(); - - // assignment operator - Sdr3DLightAttribute& operator=(const Sdr3DLightAttribute& rCandidate); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const Sdr3DLightAttribute& rCandidate) const; - - // data read access - const basegfx::BColor& getColor() const; - const basegfx::B3DVector& getDirection() const; - bool getSpecular() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLIGHTATTRIBUTE3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrlightingattribute3d.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrlightingattribute3d.hxx deleted file mode 100644 index d704d7d0ee..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrlightingattribute3d.hxx +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLIGHTINGATTRIBUTE3D_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLIGHTINGATTRIBUTE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> -#include <vector> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BColor; - class B3DVector; -} - -namespace drawinglayer { namespace attribute { - class ImpSdrLightingAttribute; - class Sdr3DLightAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC SdrLightingAttribute - { - private: - ImpSdrLightingAttribute* mpSdrLightingAttribute; - - public: - /// constructors/assignmentoperator/destructor - SdrLightingAttribute( - const basegfx::BColor& rAmbientLight, - const ::std::vector< Sdr3DLightAttribute >& rLightVector); - SdrLightingAttribute(); - SdrLightingAttribute(const SdrLightingAttribute& rCandidate); - SdrLightingAttribute& operator=(const SdrLightingAttribute& rCandidate); - ~SdrLightingAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const SdrLightingAttribute& rCandidate) const; - - // data read access - const basegfx::BColor& getAmbientLight() const; - const ::std::vector< Sdr3DLightAttribute >& getLightVector() const; - - // color model solver - basegfx::BColor solveColorModel( - const basegfx::B3DVector& rNormalInEyeCoordinates, - const basegfx::BColor& rColor, const basegfx::BColor& rSpecular, - const basegfx::BColor& rEmission, sal_uInt16 nSpecularIntensity) const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLIGHTINGATTRIBUTE3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrlineattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrlineattribute.hxx deleted file mode 100644 index 6662a151e5..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrlineattribute.hxx +++ /dev/null @@ -1,103 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLINEATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLINEATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> -#include <basegfx/vector/b2enums.hxx> -#include <vector> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BColor; -} - -namespace drawinglayer { namespace attribute { - class ImpSdrLineAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC SdrLineAttribute - { - private: - ImpSdrLineAttribute* mpSdrLineAttribute; - - public: - /// constructors/assignmentoperator/destructor - SdrLineAttribute( - basegfx::B2DLineJoin eJoin, - double fWidth, - double fTransparence, - const basegfx::BColor& rColor, - const ::std::vector< double >& rDotDashArray, - double fFullDotDashLen); - SdrLineAttribute(const basegfx::BColor& rColor); - SdrLineAttribute(); - SdrLineAttribute(const SdrLineAttribute& rCandidate); - SdrLineAttribute& operator=(const SdrLineAttribute& rCandidate); - ~SdrLineAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const SdrLineAttribute& rCandidate) const; - - // data access - basegfx::B2DLineJoin getJoin() const; - double getWidth() const; - double getTransparence() const; - const basegfx::BColor& getColor() const; - const ::std::vector< double >& getDotDashArray() const; - double getFullDotDashLen() const; - - // bool access - bool isDashed() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLINEATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrlinestartendattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrlinestartendattribute.hxx deleted file mode 100644 index aae7a419b5..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrlinestartendattribute.hxx +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLINESTARTENDATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLINESTARTENDATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class B2DPolyPolygon; -} - -namespace drawinglayer { namespace attribute { - class ImpSdrLineStartEndAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC SdrLineStartEndAttribute - { - private: - ImpSdrLineStartEndAttribute* mpSdrLineStartEndAttribute; - - public: - /// constructors/assignmentoperator/destructor - SdrLineStartEndAttribute( - const basegfx::B2DPolyPolygon& rStartPolyPolygon, - const basegfx::B2DPolyPolygon& rEndPolyPolygon, - double fStartWidth, - double fEndWidth, - bool bStartActive, - bool bEndActive, - bool bStartCentered, - bool bEndCentered); - SdrLineStartEndAttribute(); - SdrLineStartEndAttribute(const SdrLineStartEndAttribute& rCandidate); - SdrLineStartEndAttribute& operator=(const SdrLineStartEndAttribute& rCandidate); - ~SdrLineStartEndAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const SdrLineStartEndAttribute& rCandidate) const; - - // data read access - const basegfx::B2DPolyPolygon& getStartPolyPolygon() const; - const basegfx::B2DPolyPolygon& getEndPolyPolygon() const; - double getStartWidth() const; - double getEndWidth() const; - bool isStartActive() const; - bool isEndActive() const; - bool isStartCentered() const; - bool isEndCentered() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRLINESTARTENDATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrobjectattribute3d.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrobjectattribute3d.hxx deleted file mode 100644 index 374efa08bf..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrobjectattribute3d.hxx +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDROBJECTATTRIBUTE3D_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDROBJECTATTRIBUTE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> -#include <com/sun/star/drawing/NormalsKind.hpp> -#include <com/sun/star/drawing/TextureProjectionMode.hpp> -#include <com/sun/star/drawing/TextureKind2.hpp> -#include <com/sun/star/drawing/TextureMode.hpp> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace attribute { - class ImpSdr3DObjectAttribute; - class MaterialAttribute3D; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC Sdr3DObjectAttribute - { - private: - ImpSdr3DObjectAttribute* mpSdr3DObjectAttribute; - - public: - // constructors/destructor - Sdr3DObjectAttribute( - ::com::sun::star::drawing::NormalsKind aNormalsKind, - ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionX, - ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionY, - ::com::sun::star::drawing::TextureKind2 aTextureKind, - ::com::sun::star::drawing::TextureMode aTextureMode, - const MaterialAttribute3D& rMaterial, - bool bNormalsInvert, - bool bDoubleSided, - bool bShadow3D, - bool bTextureFilter, - bool bReducedLineGeometry); - Sdr3DObjectAttribute(); - Sdr3DObjectAttribute(const Sdr3DObjectAttribute& rCandidate); - ~Sdr3DObjectAttribute(); - - // assignment operator - Sdr3DObjectAttribute& operator=(const Sdr3DObjectAttribute& rCandidate); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const Sdr3DObjectAttribute& rCandidate) const; - - // data read access - ::com::sun::star::drawing::NormalsKind getNormalsKind() const; - ::com::sun::star::drawing::TextureProjectionMode getTextureProjectionX() const; - ::com::sun::star::drawing::TextureProjectionMode getTextureProjectionY() const; - ::com::sun::star::drawing::TextureKind2 getTextureKind() const; - ::com::sun::star::drawing::TextureMode getTextureMode() const; - const MaterialAttribute3D& getMaterial() const; - bool getNormalsInvert() const; - bool getDoubleSided() const; - bool getShadow3D() const; - bool getTextureFilter() const; - bool getReducedLineGeometry() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDROBJECTATTRIBUTE3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrsceneattribute3d.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrsceneattribute3d.hxx deleted file mode 100644 index 594b4c45de..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrsceneattribute3d.hxx +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRSCENEATTRIBUTE3D_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRSCENEATTRIBUTE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> -#include <com/sun/star/drawing/ProjectionMode.hpp> -#include <com/sun/star/drawing/ShadeMode.hpp> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace attribute { - class ImpSdrSceneAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC SdrSceneAttribute - { - private: - ImpSdrSceneAttribute* mpSdrSceneAttribute; - - public: - /// constructors/assignmentoperator/destructor - SdrSceneAttribute( - double fDistance, - double fShadowSlant, - ::com::sun::star::drawing::ProjectionMode aProjectionMode, - ::com::sun::star::drawing::ShadeMode aShadeMode, - bool bTwoSidedLighting); - SdrSceneAttribute(); - SdrSceneAttribute(const SdrSceneAttribute& rCandidate); - SdrSceneAttribute& operator=(const SdrSceneAttribute& rCandidate); - ~SdrSceneAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const SdrSceneAttribute& rCandidate) const; - - // data read access - double getDistance() const; - double getShadowSlant() const; - ::com::sun::star::drawing::ProjectionMode getProjectionMode() const; - ::com::sun::star::drawing::ShadeMode getShadeMode() const; - bool getTwoSidedLighting() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRSCENEATTRIBUTE3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/sdrshadowattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/sdrshadowattribute.hxx deleted file mode 100644 index d98216ad6e..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/sdrshadowattribute.hxx +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRSHADOWATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRSHADOWATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BColor; - class B2DVector; -} - -namespace drawinglayer { namespace attribute { - class ImpSdrShadowAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC SdrShadowAttribute - { - private: - ImpSdrShadowAttribute* mpSdrShadowAttribute; - - public: - /// constructors/assignmentoperator/destructor - SdrShadowAttribute( - const basegfx::B2DVector& rOffset, - double fTransparence, - const basegfx::BColor& rColor); - SdrShadowAttribute(); - SdrShadowAttribute(const SdrShadowAttribute& rCandidate); - SdrShadowAttribute& operator=(const SdrShadowAttribute& rCandidate); - ~SdrShadowAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const SdrShadowAttribute& rCandidate) const; - - // data access - const basegfx::B2DVector& getOffset() const; - double getTransparence() const; - const basegfx::BColor& getColor() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_SDRSHADOWATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/attribute/strokeattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/strokeattribute.hxx deleted file mode 100644 index 45b341875f..0000000000 --- a/drawinglayer/inc/drawinglayer/attribute/strokeattribute.hxx +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_ATTRIBUTE_STROKEATTRIBUTE_HXX -#define INCLUDED_DRAWINGLAYER_ATTRIBUTE_STROKEATTRIBUTE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> -#include <vector> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace attribute { - class ImpStrokeAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class DRAWINGLAYER_DLLPUBLIC StrokeAttribute - { - private: - ImpStrokeAttribute* mpStrokeAttribute; - - public: - /// constructors/assignmentoperator/destructor - StrokeAttribute( - const ::std::vector< double >& rDotDashArray, - double fFullDotDashLen = 0.0); - StrokeAttribute(); - StrokeAttribute(const StrokeAttribute& rCandidate); - StrokeAttribute& operator=(const StrokeAttribute& rCandidate); - ~StrokeAttribute(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - // compare operator - bool operator==(const StrokeAttribute& rCandidate) const; - - // data read access - const ::std::vector< double >& getDotDashArray() const; - double getFullDotDashLen() const; - }; - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_ATTRIBUTE_STROKEATTRIBUTE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/drawinglayerdllapi.h b/drawinglayer/inc/drawinglayer/drawinglayerdllapi.h deleted file mode 100644 index 8badcbe1fe..0000000000 --- a/drawinglayer/inc/drawinglayer/drawinglayerdllapi.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * Version: MPL 1.1 / GPLv3+ / LGPLv3+ - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License or as specified alternatively below. You may obtain a copy of - * the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Initial Developer of the Original Code is - * David Tardon, Red Hat Inc. <dtardon@redhat.com> - * Portions created by the Initial Developer are Copyright (C) 2010 the - * Initial Developer. All Rights Reserved. - * - * Major Contributor(s): - * - * For minor contributions see the git repository. - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 3 or later (the "GPLv3+"), or - * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), - * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable - * instead of those above. - */ - -#ifndef INCLUDED_DRAWINGLAYER_DRAWINGLAYERDLLAPI_H -#define INCLUDED_DRAWINGLAYER_DRAWINGLAYERDLLAPI_H - -#include <sal/types.h> - -#if defined(DRAWINGLAYER_DLLIMPLEMENTATION) -#define DRAWINGLAYER_DLLPUBLIC SAL_DLLPUBLIC_EXPORT -#else -#define DRAWINGLAYER_DLLPUBLIC SAL_DLLPUBLIC_IMPORT -#endif -#define DRAWINGLAYER_DLLPRIVATE SAL_DLLPRIVATE - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/geometry/viewinformation2d.hxx b/drawinglayer/inc/drawinglayer/geometry/viewinformation2d.hxx deleted file mode 100644 index ee0dff6602..0000000000 --- a/drawinglayer/inc/drawinglayer/geometry/viewinformation2d.hxx +++ /dev/null @@ -1,188 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_GEOMETRY_VIEWINFORMATION2D_HXX -#define INCLUDED_DRAWINGLAYER_GEOMETRY_VIEWINFORMATION2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -// the solaris compiler defines 'sun' as '1'. To avoid that (and to allow -// pre-declarations of com/sun/star namespace), include sal/config.h here -// where sun is redefined as 'sun' (so i guess the problem is known). -#include <sal/config.h> -#include <com/sun/star/uno/Sequence.h> -#include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/drawing/XDrawPage.hpp> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace geometry { - class ImpViewInformation2D; -}} - -namespace basegfx { - class B2DHomMatrix; - class B2DRange; -} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace geometry - { - /** ViewInformation2D class - - This class holds all view-relevant information for a 2d geometry. It works - together with UNO API definitions and supports holding a sequence of PropertyValues. - The most used data is for convenience offered directly using basegfx tooling classes. - It is an implementation to support the sequence of PropertyValues used in a - ::com::sun::star::graphic::XPrimitive2D for C++ implementations working with those - */ - class DRAWINGLAYER_DLLPUBLIC ViewInformation2D - { - private: - /// pointer to private implementation class - ImpViewInformation2D* mpViewInformation2D; - - public: - /** Constructor: Create a ViewInformation2D - - @param rObjectTransformation - The Transformation from Object to World coordinates (normally logic coordinates). - - @param rViewTransformation - The Transformation from World to View coordinates (normally logic coordinates - to discrete units, e.g. pixels). - - @param rViewport - The visible part of the view in World coordinates. If empty (getViewport().isEmpty()) - everything is visible. The data is in World coordinates. - - @param rxDrawPage - The currently displaqyed page. This information is needed e.g. due to existing PageNumber - fields which need to be interpreted. - - @param fViewTime - The time the view is defined for. Default is 0.0. This parameter is used e.g. for - animated objects - - @param rExtendedParameters - A sequence of property values which allows holding various other parameters besides - the obvious and needed ones above. For this constructor none of the other parameters - should be added as data. The constructor will parse the given parameters and if - data for the other parameters is given, the value in rExtendedParameters will - be preferred and overwrite the given parameter - */ - ViewInformation2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - const basegfx::B2DHomMatrix& rViewTransformation, - const basegfx::B2DRange& rViewport, - const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& rxDrawPage, - double fViewTime, - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rExtendedParameters); - - /** Constructor: Create a ViewInformation2D - - @param rViewParameters - A sequence of property values which allows holding any combination of local and various - other parameters. This constructor is feeded completely with a sequence of PropertyValues - which will be parsed to be able to offer the most used ones in a convenient way. - */ - ViewInformation2D(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rViewParameters); - - /// default (empty) constructor - ViewInformation2D(); - - /// copy constructor - ViewInformation2D(const ViewInformation2D& rCandidate); - - /// destructor - ~ViewInformation2D(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - /// assignment operator - ViewInformation2D& operator=(const ViewInformation2D& rCandidate); - - /// compare operators - bool operator==(const ViewInformation2D& rCandidate) const; - bool operator!=(const ViewInformation2D& rCandidate) const { return !operator==(rCandidate); } - - /// data access - const basegfx::B2DHomMatrix& getObjectTransformation() const; - const basegfx::B2DHomMatrix& getViewTransformation() const; - const basegfx::B2DRange& getViewport() const; - double getViewTime() const; - const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& getVisualizedPage() const; - - /// On-demand prepared Object to View transformation and it's inerse for convenience - const basegfx::B2DHomMatrix& getObjectToViewTransformation() const; - const basegfx::B2DHomMatrix& getInverseObjectToViewTransformation() const; - - /// On-demand prepared Viewport in discrete units for convenience - const basegfx::B2DRange& getDiscreteViewport() const; - - /** support reduced DisplayQuality, PropertyName is 'ReducedDisplayQuality'. This - is used e.g. to allow to lower display quality for OverlayPrimitives and - may lead to simpler decompositions in the local create2DDecomposition - implementations of the primitives - */ - bool getReducedDisplayQuality() const; - - /** Get the uno::Sequence< beans::PropertyValue > which contains all ViewInformation - - Use this call if You need to extract all contained ViewInformation. The ones - directly supported for convenience will be added to the ones only available - as PropertyValues. This set completely describes this ViewInformation2D and - can be used for complete information transport over UNO API. - */ - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& getViewInformationSequence() const; - - /** Get the uno::Sequence< beans::PropertyValue > which contains only ViewInformation - not offered directly - - Use this call if You only need ViewInformation which is not offered conveniently, - but only exists as PropertyValue. This is e.g. used to create partially updated - incarnations of ViewInformation2D without losing the only with PropertyValues - defined data. It does not contain a complete description. - */ - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& getExtendedInformationSequence() const; - }; - } // end of namespace geometry -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_GEOMETRY_VIEWINFORMATION2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/geometry/viewinformation3d.hxx b/drawinglayer/inc/drawinglayer/geometry/viewinformation3d.hxx deleted file mode 100644 index aed21f599f..0000000000 --- a/drawinglayer/inc/drawinglayer/geometry/viewinformation3d.hxx +++ /dev/null @@ -1,182 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_GEOMETRY_VIEWINFORMATION3D_HXX -#define INCLUDED_DRAWINGLAYER_GEOMETRY_VIEWINFORMATION3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -// the solaris compiler defines 'sun' as '1'. To avoid that (and to allow -// pre-declarations of com/sun/star namespace), include sal/config.h here -// where sun is redefined as 'sun' (so i guess the problem is known). -#include <sal/config.h> -#include <com/sun/star/uno/Sequence.h> -#include <com/sun/star/beans/PropertyValue.hpp> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace geometry { - class ImpViewInformation3D; -}} - -namespace basegfx { - class B3DHomMatrix; -} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace geometry - { - /** ViewInformation3D class - - This class holds all view-relevant information for a 3d geometry. It works - together with UNO API definitions and supports holding a sequence of PropertyValues. - The most used data is for convenience offered directly using basegfx tooling classes. - It is an implementation to support the sequence of PropertyValues used in a - ::com::sun::star::graphic::XPrimitive3D for C++ implementations working with those - */ - class DRAWINGLAYER_DLLPUBLIC ViewInformation3D - { - private: - /// pointer to private implementation class - ImpViewInformation3D* mpViewInformation3D; - - public: - /** Constructor: Create a ViewInformation3D - - @param rObjectTransformation - The Transformation from Object to World coordinates (normally logic coordinates). - - @param rOrientation - A part of the 3D ViewTransformation, the World to Camera coordinates transformation - which holds the camera coordinate system. - - @param rProjection - A part of the 3D ViewTransformation, the Camera to Device transformation which - transforms coordinates to a [0.0 .. 1.0] device range in X,Y and Z. Z may be used - as source for for Z-Buffers. This transformation may be e.g. a parallell projection, - but also a perspective one and thus may use the last line of the matrix. - - @param rDeviceToView - A part of the 3D ViewTransformation, the Device to View transformation which normally - translates and scales from [0.0 .. 1.0] range in X,Y and Z to discrete position and - size. - - rOrientation, rProjection and rDeviceToView define the 3D transformation pipeline - and are normally used multiplied together to have a direct transformation from - World to View coordinates - - @param fViewTime - The time the view is defined for. Default is 0.0. This parameter is used e.g. for - animated objects - - @param rExtendedParameters - A sequence of property values which allows holding various other parameters besides - the obvious and needed ones above. For this constructor none of the other parameters - should be added as data. The constructor will parse the given parameters and if - data for the other parameters is given, the value in rExtendedParameters will - be preferred and overwrite the given parameter - */ - ViewInformation3D( - const basegfx::B3DHomMatrix& rObjectTransformation, - const basegfx::B3DHomMatrix& rOrientation, - const basegfx::B3DHomMatrix& rProjection, - const basegfx::B3DHomMatrix& rDeviceToView, - double fViewTime, - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rExtendedParameters); - - /** Constructor: Create a ViewInformation3D - - @param rViewParameters - A sequence of property values which allows holding any combination of local and various - other parameters. This constructor is feeded completely with a sequence of PropertyValues - which will be parsed to be able to offer the most used ones in a convenient way. - */ - ViewInformation3D(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rViewParameters); - - /// default (empty) constructor - ViewInformation3D(); - - /// copy constructor - ViewInformation3D(const ViewInformation3D& rCandidate); - - /// destructor - ~ViewInformation3D(); - - // checks if the incarnation is default constructed - bool isDefault() const; - - /// assignment operator - ViewInformation3D& operator=(const ViewInformation3D& rCandidate); - - /// compare operators - bool operator==(const ViewInformation3D& rCandidate) const; - bool operator!=(const ViewInformation3D& rCandidate) const { return !operator==(rCandidate); } - - /// data access - const basegfx::B3DHomMatrix& getObjectTransformation() const; - const basegfx::B3DHomMatrix& getOrientation() const; - const basegfx::B3DHomMatrix& getProjection() const; - const basegfx::B3DHomMatrix& getDeviceToView() const; - double getViewTime() const; - - /// for convenience, the linear combination of the above four transformations is offered - const basegfx::B3DHomMatrix& getObjectToView() const; - - /** Get the uno::Sequence< beans::PropertyValue > which contains all ViewInformation - - Use this call if You need to extract all contained ViewInformation. The ones - directly supported for convenience will be added to the ones only available - as PropertyValues. This set completely describes this ViewInformation3D and - can be used for complete information transport over UNO API. - */ - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& getViewInformationSequence() const; - - /** Get the uno::Sequence< beans::PropertyValue > which contains only ViewInformation - not offered directly - - Use this call if You only need ViewInformation which is not offered conveniently, - but only exists as PropertyValue. This is e.g. used to create partially updated - incarnations of ViewInformation3D without losing the only with PropertyValues - defined data. It does not contain a complete description. - */ - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& getExtendedInformationSequence() const; - }; - } // end of namespace geometry -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_GEOMETRY_VIEWINFORMATION3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/animatedprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/animatedprimitive2d.hxx deleted file mode 100644 index 9fea7eb4d8..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/animatedprimitive2d.hxx +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_ANIMATEDPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_ANIMATEDPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines -namespace drawinglayer { namespace animation { - class AnimationEntry; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** AnimatedSwitchPrimitive2D class - - This is the basic class for simple, animated primitives. The basic idea - is to have an animation definition (AnimationEntry) who's basic - functionality is to return a state value for any given animation time in - the range of [0.0 .. 1.0]. Depending on the state, the decomposition - calculates an index, which of the members of the child vector is to - be visualized. - - An example: For blinking, the Child vector should exist of two entries; - for values of [0.0 .. 0.5] the first, else the last entry will be used. - This mechanism is not limited to two entries, though. - */ - class DRAWINGLAYER_DLLPUBLIC AnimatedSwitchPrimitive2D : public GroupPrimitive2D - { - private: - /** - The animation definition which allows translation of a point in time - to an animation state [0.0 .. 1.0]. This member contains a cloned - definition and is owned by this implementation. - */ - animation::AnimationEntry* mpAnimationEntry; - - /// bitfield - /** flag if this is a text or graphic animation. Necessary since SdrViews need to differentiate - between both types if they are on/off - */ - unsigned mbIsTextAnimation : 1; - - public: - /// constructor - AnimatedSwitchPrimitive2D( - const animation::AnimationEntry& rAnimationEntry, - const Primitive2DSequence& rChildren, - bool bIsTextAnimation); - - /// destructor - needed due to mpAnimationEntry - virtual ~AnimatedSwitchPrimitive2D(); - - /// data read access - const animation::AnimationEntry& getAnimationEntry() const { return *mpAnimationEntry; } - bool isTextAnimation() const { return mbIsTextAnimation; } - bool isGraphicAnimation() const { return !isTextAnimation(); } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - - /** The getDecomposition is overloaded here since the decompose is dependent of the point in time, - so the default implementation is nut useful here, it needs to be handled locally - */ - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** AnimatedBlinkPrimitive2D class - - Basically the same mechanism as in AnimatedSwitchPrimitive2D, but the - decomposition is specialized in delivering the children in the - range [0.0.. 0.5] and an empty sequence else - */ - class DRAWINGLAYER_DLLPUBLIC AnimatedBlinkPrimitive2D : public AnimatedSwitchPrimitive2D - { - protected: - public: - /// constructor - AnimatedBlinkPrimitive2D( - const animation::AnimationEntry& rAnimationEntry, - const Primitive2DSequence& rChildren, - bool bIsTextAnimation); - - /// create local decomposition - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** AnimatedInterpolatePrimitive2D class - - Specialized on multi-step animations based on matrix transformations. The - Child sequelce will be embedded in a matrix transformation. That transformation - will be linearly combined from the decomposed values and the animation value - to allow a smooth animation. - */ - class DRAWINGLAYER_DLLPUBLIC AnimatedInterpolatePrimitive2D : public AnimatedSwitchPrimitive2D - { - private: - /// the transformations - std::vector< basegfx::tools::B2DHomMatrixBufferedDecompose > maMatrixStack; - - protected: - public: - /// constructor - AnimatedInterpolatePrimitive2D( - const std::vector< basegfx::B2DHomMatrix >& rmMatrixStack, - const animation::AnimationEntry& rAnimationEntry, - const Primitive2DSequence& rChildren, - bool bIsTextAnimation); - - /// create local decomposition - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_ANIMATEDPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx deleted file mode 100644 index 507a49f06a..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BACKGROUNDCOLORPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BACKGROUNDCOLORPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// -// BackgroundColorPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** BackgroundColorPrimitive2D class - - This primitive is defined to fill the whole visible Viewport with - the given color (and thus decomposes to a filled polygon). This - makes it a view-depnendent primitive by definition. It only has - a valid decomposition if a valid Viewport is given in the - ViewInformation2D at decomposition time. - - It will try to buffer it's last decomposition using maLastViewport - to detect changes in the get2DDecomposition call. - */ - class DRAWINGLAYER_DLLPUBLIC BackgroundColorPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the fill color to use - basegfx::BColor maBColor; - - /// the last used viewInformation, used from getDecomposition for buffering - basegfx::B2DRange maLastViewport; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - BackgroundColorPrimitive2D( - const basegfx::BColor& rBColor); - - /// data read access - const basegfx::BColor& getBColor() const { return maBColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get B2Drange - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - - /// Overload standard getDecomposition call to be view-dependent here - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BACKGROUNDCOLORPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/baseprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/baseprimitive2d.hxx deleted file mode 100644 index 1c53ff0f04..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/baseprimitive2d.hxx +++ /dev/null @@ -1,304 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BASEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BASEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <cppuhelper/compbase1.hxx> -#include <boost/utility.hpp> -#include <com/sun/star/graphic/XPrimitive2D.hpp> -#include <comphelper/broadcasthelper.hxx> -#include <basegfx/range/b2drange.hxx> - -////////////////////////////////////////////////////////////////////////////// -/** defines for DeclPrimitrive2DIDBlock and ImplPrimitrive2DIDBlock - Added to be able to simply change identification stuff later, e.g. add - a identification string and/or ID to the interface and to the implementation - ATM used to delclare implement getPrimitive2DID() -*/ - -#define DeclPrimitrive2DIDBlock() \ - virtual sal_uInt32 getPrimitive2DID() const; - -#define ImplPrimitrive2DIDBlock(TheClass, TheID) \ - sal_uInt32 TheClass::getPrimitive2DID() const { return TheID; } - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace geometry { - class ViewInformation2D; -}} - -namespace drawinglayer { namespace primitive2d { - /// typedefs for basePrimitive2DImplBase, Primitive2DSequence and Primitive2DReference - typedef cppu::WeakComponentImplHelper1< ::com::sun::star::graphic::XPrimitive2D > BasePrimitive2DImplBase; - typedef ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XPrimitive2D > Primitive2DReference; - typedef ::com::sun::star::uno::Sequence< Primitive2DReference > Primitive2DSequence; -}} - -////////////////////////////////////////////////////////////////////////////// -// basePrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** BasePrimitive2D class - - Baseclass for all C++ implementations of com::sun::star::graphic::XPrimitive2D - - This class is strongly virtual due to the lack of getPrimitiveID() implementation. - This is by purpose, this base class shall not be incarnated and be used directly as - a XPrimitive2D. - - Is is derived from boost::noncopyable to make clear that a primitive is a read-only - instance and copying or changing values is not intended. The idea is to hold all data - needed for visualisation of this primitive in unchangeable form. - - It is derived from comphelper::OBaseMutex to have a Mutex at hand; in a base - implementation this may not be needed, but e.g. when buffering at last decomposition - in a local member, multiple threads may try to decompose at the same time, so locking - is needed to avoid race conditions seen from the UNO object implementation. - - A method to get a simplified representation is provided by get2DDecomposition. The - default implementation returns an empty sequence. The idea is that processors - using this primitive and do not know it, may get the decomposition and process - these instead. An example is e.g. a fat line, who's decomposition may contain - the geometric representation of that line using filled polygon prmimitives. When - the renderer knows how to handle fat lines, he may proccess this primitive directly; - if not he can use the decomposition. With this functionality, renderers may operate by - knowing only a small set of primitives. - - When a primitive does not implement get2DDecomposition, it is called a 'Basic Primitive' and - belongs to the set of primitives which a processor should be able to handle. Practice - will define this minimal sets of primitives. When defined and the concept is prooved, - unique UNO APIs may be defined/implemented for these set to allow more intense work - with primitives using UNO. - - Current Basic 2D Primitives are: - - - BitmapPrimitive2D (bitmap data, evtl. with transparence) - - PointArrayPrimitive2D (single points) - - PolygonHairlinePrimitive2D (hairline curves/polygons) - - PolyPolygonColorPrimitive2D (colored polygons) - - UPDATE: MetafilePrimitive2D (VCL Metafile) is taken off this list since - it is implemented with the integration of CWS aw078 into DV300m69. - - All other implemented primitives have a defined decomposition and can thus be - decomposed down to this small set. - - A renderer implementing support for this minimal set of primitives can completely - render primitive-based visualisations. Of course, he also has to take states into account - which are representated by GroupPrimitive2D derivations, see groupprimitive2d.hxx - - To support getting the geometric BoundRect, getB2DRange is used. The default - implementation will use the get2DDecomposition result and merge a range from the - entries. Thus, an implementation is only necessary for the Basic Primitives, but - of course speedups are possible (and are used) by implementing the method at higher-level - primitives. - - For primitive identification, getPrimitiveID is used currently in this implementations - to allow a fast switch/case processing. This needs a unique identifier mechanism which - currently uses defines (see drawinglayer_primitivetypes2d.hxx). For UNO prmitive API - it will be needed to add a unique descriptor (Name?) later to the API. - - This base implementation provides mappings from the methods from XPrimitive2D - (getDecomposition/getRange) to the appropriate methods in the C++ implementations - (get2DDecomposition/getB2DRange). The PropertyValue ViewParameters is converted to - the appropriate C++ implementation class ViewInformation2D. - - This base class does not implement any buffering; e.g. buffering the decompositon - and/or the range. These may be buffered anytime since the definition is that the primitive - is read-only and thus unchangeable. This implies that the decomposition and/or getting - the range will lead to the same result as last time, under the precondition that - the parameter ViewInformation2D is the same as the last one. This is usually the case - for view-independent primitives which are defined by not using ViewInformation2D - in their get2DDecomposition/getB2DRange implementations. - */ - class DRAWINGLAYER_DLLPUBLIC BasePrimitive2D - : private boost::noncopyable, - protected comphelper::OBaseMutex, - public BasePrimitive2DImplBase - { - private: - protected: - public: - // constructor/destructor - BasePrimitive2D(); - virtual ~BasePrimitive2D(); - - /** the ==operator is mainly needed to allow testing newly-created primitives against their last - incarnation which buffers/holds the made decompositions. The default implementation - uses getPrimitive2DID()-calls to test if it's the same ID at last. Overloaded implementation are then - based on this implementation - */ - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - bool operator!=( const BasePrimitive2D& rPrimitive ) const { return !operator==(rPrimitive); } - - /// The default implementation will use getDecomposition results to create the range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /** provide unique ID for fast identifying of known primitive implementations in renderers. These use - the the defines from primitivetypes2d.hxx to define unique IDs. - This method is normally defined using DeclPrimitrive2DIDBlock() - */ - virtual sal_uInt32 getPrimitive2DID() const = 0; - - /// The default implementation will return an empty sequence - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - // - // Methods from XPrimitive2D - // - - /** The getDecomposition implementation for UNO API will use getDecomposition from this implementation. It - will construct a ViewInformation2D from the ViewParameters for that purpose - */ - virtual Primitive2DSequence SAL_CALL getDecomposition( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rViewParameters ) throw ( ::com::sun::star::uno::RuntimeException ); - - /** The getRange implementation for UNO API will use getRange from this implementation. It - will construct a ViewInformation2D from the ViewParameters for that purpose - */ - virtual ::com::sun::star::geometry::RealRectangle2D SAL_CALL getRange( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rViewParameters ) throw ( ::com::sun::star::uno::RuntimeException ); - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// BufferedDecompositionPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** BufferedDecompositionPrimitive2D class - - Baseclass for all C++ implementations of com::sun::star::graphic::XPrimitive2D - which want to buffer the decomoposition result - - Buffering the decomposition is the most-used buffering and is thus used my most - primitive implementations which support a decomposition as base class. - - The buffering is done by holding the last decomposition in the local parameter - maBuffered2DDecomposition. The default implementation of get2DDecomposition checks - if maBuffered2DDecomposition is empty. If yes, it uses create2DDecomposition - to create the content. In all cases, maBuffered2DDecomposition is returned. - - For view-dependent primitives derived from Primitive2DBufferDecomposition more needs - to be done when the decomposition depends on parts of the parameter ViewInformation2D. - This defines a standard method for processing these: - - Implement a view-dependent get2DDecomposition doing te following steps: - (a) Locally extract needed parameters from ViewInformation2D to new, local parameters - (this may be a complete local copy of ViewInformation2D) - (b) If a buffered decomposition exists, ckeck if one of the new local parameters - differs from the corresponding locally remembered (as member) ones. If yes, - clear maBuffered2DDecomposition - (d) call baseclass::get2DDecomposition which will use create2DDecomposition - to fill maBuffered2DDecomposition if it's empty - (e) copy the new local parameters to the corresponding locally remembered ones - to identify if a new decomposition is needed at the next call - (f) return maBuffered2DDecomposition - */ - class DRAWINGLAYER_DLLPUBLIC BufferedDecompositionPrimitive2D - : public BasePrimitive2D - { - private: - /// a sequence used for buffering the last create2DDecomposition() result - Primitive2DSequence maBuffered2DDecomposition; - - protected: - /** access methods to maBuffered2DDecomposition. The usage of this methods may allow - later thread-safe stuff to be added if needed. Only to be used by getDecomposition() - implementations for buffering the last decomposition. - */ - const Primitive2DSequence& getBuffered2DDecomposition() const { return maBuffered2DDecomposition; } - void setBuffered2DDecomposition(const Primitive2DSequence& rNew) { maBuffered2DDecomposition = rNew; } - - /** method which is to be used to implement the local decomposition of a 2D primitive. The default - implementation will just return an empty decomposition - */ - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - // constructor/destructor - BufferedDecompositionPrimitive2D(); - - /** The getDecomposition default implementation will on demand use create2DDecomposition() if - maBuffered2DDecomposition is empty. It will set maBuffered2DDecomposition to this obtained decomposition - to buffer it. If the decomposition is also ViewInformation2D-dependent, this method needs to be - overloaded and the ViewInformation2D for the last decomposition need to be remembered, too, and - be used in the next call to decide if the buffered decomposition may be reused or not. - */ - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// tooling - -namespace drawinglayer -{ - namespace primitive2d - { - /// get B2DRange from a given Primitive2DReference - basegfx::B2DRange DRAWINGLAYER_DLLPUBLIC getB2DRangeFromPrimitive2DReference(const Primitive2DReference& rCandidate, const geometry::ViewInformation2D& aViewInformation); - - /// get B2DRange from a given Primitive2DSequence - basegfx::B2DRange DRAWINGLAYER_DLLPUBLIC getB2DRangeFromPrimitive2DSequence(const Primitive2DSequence& rCandidate, const geometry::ViewInformation2D& aViewInformation); - - /** compare two Primitive2DReferences for equality, including trying to get implementations (BasePrimitive2D) - and using compare operator - */ - bool DRAWINGLAYER_DLLPUBLIC arePrimitive2DReferencesEqual(const Primitive2DReference& rA, const Primitive2DReference& rB); - - /// compare two Primitive2DReferences for equality, uses arePrimitive2DReferencesEqual internally - bool DRAWINGLAYER_DLLPUBLIC arePrimitive2DSequencesEqual(const Primitive2DSequence& rA, const Primitive2DSequence& rB); - - /// concatenate sequence - void DRAWINGLAYER_DLLPUBLIC appendPrimitive2DSequenceToPrimitive2DSequence(Primitive2DSequence& rDest, const Primitive2DSequence& rSource); - - /// concatenate single Primitive2D - void DRAWINGLAYER_DLLPUBLIC appendPrimitive2DReferenceToPrimitive2DSequence(Primitive2DSequence& rDest, const Primitive2DReference& rSource); - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BASEPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/bitmapprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/bitmapprimitive2d.hxx deleted file mode 100644 index 0eab4e7a43..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/bitmapprimitive2d.hxx +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BITMAPPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BITMAPPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <vcl/bitmapex.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// -// BitmapPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** BitmapPrimitive2D class - - This class is the central primitive for Bitmap-based primitives. - It provides RGBA-based bitmaps, currently using a BitmapEx from VCL. - This may change in the future to any other, maybe more general base - class providing 24bit RGBA. - */ - class DRAWINGLAYER_DLLPUBLIC BitmapPrimitive2D : public BasePrimitive2D - { - private: - /// the RGBA Bitmap-data - BitmapEx maBitmapEx; - - /** the object transformation from unit coordinates, defining - size, shear, rotate and position - */ - basegfx::B2DHomMatrix maTransform; - - public: - /// constructor - BitmapPrimitive2D( - const BitmapEx& rBitmapEx, - const basegfx::B2DHomMatrix& rTransform); - - /// data read access - const BitmapEx& getBitmapEx() const { return maBitmapEx; } - const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BITMAPPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx deleted file mode 100644 index 33777e6655..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/borderlineprimitive2d.hxx +++ /dev/null @@ -1,181 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** BorderLinePrimitive2D class - - This is the basic primitive to build frames around objects, e.g. tables. - It defines a single or double line from Start to nd using the LeftWidth, - Distance and RightWidth definitions. - The LineStart/End overlap is defined by the Extend(Inner|Outer)(Start|End) - definitions. - */ - class DRAWINGLAYER_DLLPUBLIC BorderLinePrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the line definition - basegfx::B2DPoint maStart; - basegfx::B2DPoint maEnd; - - /// the widths of single/double line - double mfLeftWidth; - double mfDistance; - double mfRightWidth; - - /// edge overlap sizes - double mfExtendLeftStart; - double mfExtendLeftEnd; - double mfExtendRightStart; - double mfExtendRightEnd; - - /// the line colors - basegfx::BColor maRGBColorRight; - basegfx::BColor maRGBColorLeft; - basegfx::BColor maRGBColorGap; - bool mbHasGapColor; - - short mnStyle; - - /// bitfield - /// flags to influence inside/outside creation - unsigned mbCreateInside : 1; - unsigned mbCreateOutside : 1; - - /// local helpers - double getCorrectedLeftWidth() const - { - return basegfx::fTools::equal(1.0, mfLeftWidth) ? 0.0 : mfLeftWidth; - } - - double getCorrectedDistance() const - { - return basegfx::fTools::equal(1.0, mfDistance) ? 0.0 : mfDistance; - } - - double getCorrectedRightWidth() const - { - return basegfx::fTools::equal(1.0, mfRightWidth) ? 0.0 : mfRightWidth; - } - - double getWidth() const - { - return getCorrectedLeftWidth() + getCorrectedDistance() + getCorrectedRightWidth(); - } - - bool leftIsHairline() const - { - return basegfx::fTools::equal(1.0, mfLeftWidth); - } - - bool rightIsHairline() const - { - return basegfx::fTools::equal(1.0, mfRightWidth); - } - - bool isInsideUsed() const - { - return !basegfx::fTools::equalZero(mfLeftWidth); - } - - bool isOutsideUsed() const - { - return !basegfx::fTools::equalZero(mfRightWidth); - } - - protected: - virtual basegfx::B2DPolyPolygon getClipPolygon( ) const; - - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - BorderLinePrimitive2D( - const basegfx::B2DPoint& rStart, - const basegfx::B2DPoint& rEnd, - double fLeftWidth, - double fDistance, - double fRightWidth, - double fExtendLeftStart, - double fExtendLeftEnd, - double fExtendRightStart, - double fExtendRightEnd, - const basegfx::BColor& rRGBColorRight, - const basegfx::BColor& rRGBColorLeft, - const basegfx::BColor& rRGBColorGap, - bool bHasGapColor, - const short nStyle ); - - /// data read access - const basegfx::B2DPoint& getStart() const { return maStart; } - const basegfx::B2DPoint& getEnd() const { return maEnd; } - double getLeftWidth() const { return mfLeftWidth; } - double getDistance() const { return mfDistance; } - double getRightWidth() const { return mfRightWidth; } - double getExtendLeftStart() const { return mfExtendLeftStart; } - double getExtendLeftEnd() const { return mfExtendLeftEnd; } - double getExtendRightStart() const { return mfExtendRightStart; } - double getExtendRightEnd() const { return mfExtendRightEnd; } - const basegfx::BColor& getRGBColorRight () const { return maRGBColorRight; } - const basegfx::BColor& getRGBColorLeft () const { return maRGBColorLeft; } - const basegfx::BColor& getRGBColorGap () const { return maRGBColorGap; } - bool hasGapColor( ) const { return mbHasGapColor; } - short getStyle () const { return mnStyle; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_BORDERLINEPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/chartprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/chartprimitive2d.hxx deleted file mode 100644 index 7edd2f5099..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/chartprimitive2d.hxx +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CHARTPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CHARTPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <com/sun/star/frame/XModel.hpp> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** ChartPrimitive2D class - - This is a helper primitive which decomposes to the ChartMetaFile - visualisation. It is used to allow specific renderers to do something - direct for visualising the chart. - */ - class DRAWINGLAYER_DLLPUBLIC ChartPrimitive2D : public GroupPrimitive2D - { - private: - ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mxChartModel; - basegfx::B2DHomMatrix maTransformation; - - public: - ChartPrimitive2D( - const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& rxChartModel, - const basegfx::B2DHomMatrix& rTransformation, - const Primitive2DSequence& rChildren); - - /// data read access - const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& getChartModel() const { return mxChartModel; } - const basegfx::B2DHomMatrix& getTransformation() const { return maTransformation; } - - // compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - // provide unique ID - DeclPrimitrive2DIDBlock() - - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CHARTPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/clippedborderlineprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/clippedborderlineprimitive2d.hxx deleted file mode 100644 index 9c1495b0d5..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/clippedborderlineprimitive2d.hxx +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * Version: MPL 1.1 / GPLv3+ / LGPLv3+ - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Initial Developer of the Original Code is - * [ Novell Inc. ] - * Portions created by the Initial Developer are Copyright (C) 2010 the - * Initial Developer. All Rights Reserved. - * - * Contributor(s): Cédric Bosdonnat <cbosdonnat@novell.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 3 or later (the "GPLv3+"), or - * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), - * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable - * instead of those above. - */ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CLIPPEDBORDERLINEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CLIPPEDBORDERLINEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/borderlineprimitive2d.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> - - -namespace drawinglayer -{ - namespace primitive2d - { - /** BorderLinePrimitive2D clipped by the intersection with a provided - polygon. - */ - class DRAWINGLAYER_DLLPUBLIC ClippedBorderLinePrimitive2D : public BorderLinePrimitive2D - { - private: - const basegfx::B2DPolygon maIntersection; - - protected: - virtual basegfx::B2DPolyPolygon getClipPolygon( ) const; - - public: - /// constructor - ClippedBorderLinePrimitive2D( - const basegfx::B2DPoint& rStart, - const basegfx::B2DPoint& rEnd, - double fLeftWidth, - double fDistance, - double fRightWidth, - const basegfx::B2DPolygon& rIntersection, - const basegfx::BColor& rRGBColorRight, - const basegfx::BColor& rRGBColorLeft, - const basegfx::BColor& rRGBColorGap, - bool bHasGapColor, - const short nStyle ); - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CLIPPEDBORDERLINEPRIMITIVE2D_HXX - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/controlprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/controlprimitive2d.hxx deleted file mode 100644 index 4c87db5adc..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/controlprimitive2d.hxx +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CONTROLPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CONTROLPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <com/sun/star/awt/XControlModel.hpp> -#include <com/sun/star/awt/XControl.hpp> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** ControlPrimitive2D class - - Base class for ControlPrimitive handling. It decoposes to a - graphical representation (Bitmap data) of the control. This - representation is limited to a quadratic pixel maximum defined - in the applicatin settings. - */ - class DRAWINGLAYER_DLLPUBLIC ControlPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// object's base data - basegfx::B2DHomMatrix maTransform; - com::sun::star::uno::Reference< com::sun::star::awt::XControlModel > mxControlModel; - - /// the created an cached awt::XControl - com::sun::star::uno::Reference< com::sun::star::awt::XControl > mxXControl; - - /// the last used scaling, used from getDecomposition for buffering - basegfx::B2DVector maLastViewScaling; - - /** used from getXControl() to create a local awt::XControl which is remembered in mxXControl - and from thereon always used and returned by getXControl() - */ - void createXControl(); - - /// single local decompositions, used from create2DDecomposition() - Primitive2DReference createBitmapDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - Primitive2DReference createPlaceholderDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - protected: - /// local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - ControlPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const com::sun::star::uno::Reference< com::sun::star::awt::XControlModel >& rxControlModel); - - /** constructor with an additional XControl as parameter to allow to hand it over at incarnation time - if it exists. This will avoid to create a 2nd one on demand in createXControl() - and thus double the XControls. - */ - ControlPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const com::sun::star::uno::Reference< com::sun::star::awt::XControlModel >& rxControlModel, - const com::sun::star::uno::Reference< com::sun::star::awt::XControl >& rxXControl); - - /// data read access - const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } - const com::sun::star::uno::Reference< com::sun::star::awt::XControlModel >& getControlModel() const { return mxControlModel; } - - /** mxControl access. This will on demand create the awt::XControl using createXControl() - if it does not exist. It may already have been created or even handed over at - incarnation - */ - const com::sun::star::uno::Reference< com::sun::star::awt::XControl >& getXControl() const; - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - - /// Overload standard getDecomposition call to be view-dependent here - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_CONTROLPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/discretebitmapprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/discretebitmapprimitive2d.hxx deleted file mode 100644 index 50c4074839..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/discretebitmapprimitive2d.hxx +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_DISCRETEBITMAPPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_DISCRETEBITMAPPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/primitivetools2d.hxx> -#include <vcl/bitmapex.hxx> - -////////////////////////////////////////////////////////////////////////////// -// DiscreteBitmapPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** DiscreteBitmapPrimitive2D class - - This class defines a view-dependent BitmapPrimitive which has a - logic position for the top-left position and is always to be - painted in 1:1 pixel resolution. It will never be sheared, rotated - or scaled with the view. - */ - class DRAWINGLAYER_DLLPUBLIC DiscreteBitmapPrimitive2D : public ObjectAndViewTransformationDependentPrimitive2D - { - private: - /// the RGBA Bitmap-data - BitmapEx maBitmapEx; - - /** the top-left object position */ - basegfx::B2DPoint maTopLeft; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - DiscreteBitmapPrimitive2D( - const BitmapEx& rBitmapEx, - const basegfx::B2DPoint& rTopLeft); - - /// data read access - const BitmapEx& getBitmapEx() const { return maBitmapEx; } - const basegfx::B2DPoint& getTopLeft() const { return maTopLeft; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_DISCRETEBITMAPPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/discreteshadowprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/discreteshadowprimitive2d.hxx deleted file mode 100644 index d633896f8a..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/discreteshadowprimitive2d.hxx +++ /dev/null @@ -1,130 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_QUADRATICSHADOWPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_QUADRATICSHADOWPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/primitivetools2d.hxx> -#include <vcl/bitmapex.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// -// DiscreteShadowPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** DiscreteShadow data class - - */ - class DRAWINGLAYER_DLLPUBLIC DiscreteShadow - { - private: - /// the original shadow BitmapEx in a special form - BitmapEx maBitmapEx; - - /// buffered extracted parts of CombinedShadow for easier usage - BitmapEx maTopLeft; - BitmapEx maTop; - BitmapEx maTopRight; - BitmapEx maRight; - BitmapEx maBottomRight; - BitmapEx maBottom; - BitmapEx maBottomLeft; - BitmapEx maLeft; - - public: - /// constructor - DiscreteShadow(const BitmapEx& rBitmapEx); - - /// data read access - const BitmapEx& getBitmapEx() const { return maBitmapEx; } - - /// compare operator - bool operator==(const DiscreteShadow& rCompare) const - { - return getBitmapEx() == rCompare.getBitmapEx(); - } - - /// helper accesses which create on-demand needed segments - const BitmapEx& getTopLeft() const; - const BitmapEx& getTop() const; - const BitmapEx& getTopRight() const; - const BitmapEx& getRight() const; - const BitmapEx& getBottomRight() const; - const BitmapEx& getBottom() const; - const BitmapEx& getBottomLeft() const; - const BitmapEx& getLeft() const; - }; - - /** DiscreteShadowPrimitive2D class - - */ - class DRAWINGLAYER_DLLPUBLIC DiscreteShadowPrimitive2D : public DiscreteMetricDependentPrimitive2D - { - private: - // the object transformation of the rectangular object - basegfx::B2DHomMatrix maTransform; - - // the bitmap shadow data - DiscreteShadow maDiscreteShadow; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - DiscreteShadowPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const DiscreteShadow& rDiscreteShadow); - - /// data read access - const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } - const DiscreteShadow& getDiscreteShadow() const { return maDiscreteShadow; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_QUADRATICSHADOWPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof diff --git a/drawinglayer/inc/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx deleted file mode 100644 index 22ee5b51fb..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PRIMITIVETYPES2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PRIMITIVETYPES2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// define ranges for other libraries - -#define PRIMITIVE2D_ID_RANGE_DRAWINGLAYER (0 << 16) -#define PRIMITIVE2D_ID_RANGE_SVX (1 << 16) -#define PRIMITIVE2D_ID_RANGE_SD (2 << 16) -#define PRIMITIVE2D_ID_RANGE_SW (3 << 16) -#define PRIMITIVE2D_ID_RANGE_SC (4 << 16) - -////////////////////////////////////////////////////////////////////////////// -// local primitives - -#define PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 0) -#define PRIMITIVE2D_ID_ANIMATEDSWITCHPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 1) -#define PRIMITIVE2D_ID_ANIMATEDBLINKPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 2) -#define PRIMITIVE2D_ID_ANIMATEDINTERPOLATEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 3) -#define PRIMITIVE2D_ID_BACKGROUNDCOLORPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 4) -#define PRIMITIVE2D_ID_BITMAPPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 5) -#define PRIMITIVE2D_ID_CONTROLPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 6) -#define PRIMITIVE2D_ID_EMBEDDED3DPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 7) -#define PRIMITIVE2D_ID_FILLBITMAPPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 8) -#define PRIMITIVE2D_ID_FILLGRADIENTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 9) -#define PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 10) -#define PRIMITIVE2D_ID_GRAPHICPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 11) -#define PRIMITIVE2D_ID_GRIDPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 12) -#define PRIMITIVE2D_ID_GROUPPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 13) -#define PRIMITIVE2D_ID_HELPLINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 14) -#define PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 15) -#define PRIMITIVE2D_ID_MASKPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 16) -#define PRIMITIVE2D_ID_MEDIAPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 17) -#define PRIMITIVE2D_ID_METAFILEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 18) -#define PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 19) -#define PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 20) -#define PRIMITIVE2D_ID_POLYGONMARKERPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 21) -#define PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 22) -#define PRIMITIVE2D_ID_POLYGONSTROKEARROWPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 23) -#define PRIMITIVE2D_ID_POLYPOLYGONSTROKEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 24) -#define PRIMITIVE2D_ID_POLYPOLYGONSTROKEARROWPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 25) -#define PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 26) -#define PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 27) -#define PRIMITIVE2D_ID_POLYPOLYGONHATCHPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 28) -#define PRIMITIVE2D_ID_POLYPOLYGONBITMAPPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 29) -#define PRIMITIVE2D_ID_SCENEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 30) -#define PRIMITIVE2D_ID_SHADOWPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 31) -#define PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 32) -#define PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 33) -#define PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 34) -#define PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 35) -#define PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 36) -#define PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 37) -#define PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 38) -#define PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 39) -#define PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 40) -#define PRIMITIVE2D_ID_TEXTHIERARCHYEDITPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 41) -#define PRIMITIVE2D_ID_POLYGONWAVEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 42) -#define PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 43) -#define PRIMITIVE2D_ID_TEXTEFFECTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 44) -#define PRIMITIVE2D_ID_TEXTHIERARCHYBULLETPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 45) -#define PRIMITIVE2D_ID_POLYPOLYGONHAIRLINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 46) -#define PRIMITIVE2D_ID_EXECUTEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 47) -#define PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 48) -#define PRIMITIVE2D_ID_CHARTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 49) -#define PRIMITIVE2D_ID_STRUCTURETAGPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 50) -#define PRIMITIVE2D_ID_BORDERLINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 51) -#define PRIMITIVE2D_ID_POLYPOLYGONMARKERPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 52) -#define PRIMITIVE2D_ID_HITTESTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 53) -#define PRIMITIVE2D_ID_INVERTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 54) -#define PRIMITIVE2D_ID_DISCRETEBITMAPPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 55) -#define PRIMITIVE2D_ID_WALLPAPERBITMAPPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 56) -#define PRIMITIVE2D_ID_TEXTLINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 57) -#define PRIMITIVE2D_ID_TEXTCHARACTERSTRIKEOUTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 58) -#define PRIMITIVE2D_ID_TEXTGEOMETRYSTRIKEOUTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 59) -#define PRIMITIVE2D_ID_EPSPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 60) -#define PRIMITIVE2D_ID_DISCRETESHADOWPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 61) -#define PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 62) -#define PRIMITIVE2D_ID_CLIPPEDBORDERLINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 63) -#define PRIMITIVE2D_ID_RENDERGRAPHICPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 64) - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PRIMITIVETYPES2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/embedded3dprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/embedded3dprimitive2d.hxx deleted file mode 100644 index c9abc8cec9..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/embedded3dprimitive2d.hxx +++ /dev/null @@ -1,134 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_EMBEDDED3DPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_EMBEDDED3DPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <drawinglayer/geometry/viewinformation3d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// -// Embedded3DPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** Embedded3DPrimitive2D class - - This is a helper primitive which allows embedding of single 3D - primitives to the 2D primitive logic. It will get the scene it's - involved and thus the 3D transformation. With this information it - is able to provide 2D range data for a 3D primitive. - - This primitive will not be visualized and decomposes to a yellow - 2D rectangle to visualize that this should never be visualized - */ - class DRAWINGLAYER_DLLPUBLIC Embedded3DPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the sequence of 3d primitives - primitive3d::Primitive3DSequence mxChildren3D; - - /// the 2D scene object transformation - basegfx::B2DHomMatrix maObjectTransformation; - - /// the 3D transformations - geometry::ViewInformation3D maViewInformation3D; - - /** if the embedded 3D primitives contain shadow, these parameters are needed - to extract the shadow wich is a sequence od 2D primitives and may expand - the 2D range. Since every single 3D object in a scene may individually - have shadow or not, these values need to be provided and prepared. The shadow - distance itself (a 2D transformation) is part of the 3D shadow definition - */ - basegfx::B3DVector maLightNormal; - double mfShadowSlant; - basegfx::B3DRange maScene3DRange; - - /// the primitiveSequence for on-demand created shadow primitives (see mbShadow3DChecked) - Primitive2DSequence maShadowPrimitives; - - /// #i96669# add simple range buffering for this primitive - basegfx::B2DRange maB2DRange; - - /// bitfield - /** flag if given 3D geometry is already cheched for shadow definitions and 2d shadows - are created in maShadowPrimitives - */ - unsigned mbShadow3DChecked : 1; - - /// private helpers - bool impGetShadow3D(const geometry::ViewInformation2D& rViewInformation) const; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - Embedded3DPrimitive2D( - const primitive3d::Primitive3DSequence& rxChildren3D, - const basegfx::B2DHomMatrix& rObjectTransformation, - const geometry::ViewInformation3D& rViewInformation3D, - const basegfx::B3DVector& rLightNormal, - double fShadowSlant, - const basegfx::B3DRange& rScene3DRange); - - /// data read access - const primitive3d::Primitive3DSequence& getChildren3D() const { return mxChildren3D; } - const basegfx::B2DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } - const geometry::ViewInformation3D& getViewInformation3D() const { return maViewInformation3D; } - const basegfx::B3DVector& getLightNormal() const { return maLightNormal; } - double getShadowSlant() const { return mfShadowSlant; } - const basegfx::B3DRange& getScene3DRange() const { return maScene3DRange; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_EMBEDDED3DPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/epsprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/epsprimitive2d.hxx deleted file mode 100644 index 427a370c46..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/epsprimitive2d.hxx +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_EPSPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_EPSPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <vcl/gfxlink.hxx> -#include <vcl/gdimtf.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** EpsPrimitive2D class */ - class DRAWINGLAYER_DLLPUBLIC EpsPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the geometry definition - basegfx::B2DHomMatrix maEpsTransform; - - /// the Eps content definition - GfxLink maGfxLink; - - /// the replacement content definition - GDIMetaFile maMetaFile; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - EpsPrimitive2D( - const basegfx::B2DHomMatrix& rEpsTransform, - const GfxLink& rGfxLink, - const GDIMetaFile& rMetaFile); - - /// data read access - const basegfx::B2DHomMatrix& getEpsTransform() const { return maEpsTransform; } - const GfxLink& getGfxLink() const { return maGfxLink; } - const GDIMetaFile& getMetaFile() const { return maMetaFile; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get B2Drange - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_EPSPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/fillbitmapprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/fillbitmapprimitive2d.hxx deleted file mode 100644 index 16b44fb892..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/fillbitmapprimitive2d.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLBITMAPPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLBITMAPPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <drawinglayer/attribute/fillbitmapattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// -// FillbitmapPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** FillBitmapPrimitive2D class - - This class defines a bitmap filling for a rectangular area. The - Range is defined by the Transformation, the fill by the FillBitmapAttribute. - There, the fill consists of a Bitmap (not transparent) defining the fill data - and a Point/Vector pair defining the relative position/size [0.0 .. 1.0] - inside the area where the bitmap is positioned. A flag defines then if this - is tiled or not. - - Renderers should handle this primitive; it has a geometrically correct - decomposition, but on pixel oututs the areas where the tiled pieces are - aligned tend to show up (one overlapping or empty pixel) - */ - class DRAWINGLAYER_DLLPUBLIC FillBitmapPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the geometric definition - basegfx::B2DHomMatrix maTransformation; - - /// the fill attributes - attribute::FillBitmapAttribute maFillBitmap; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - FillBitmapPrimitive2D( - const basegfx::B2DHomMatrix& rTransformation, - const attribute::FillBitmapAttribute& rFillBitmap); - - /// data read access - const basegfx::B2DHomMatrix& getTransformation() const { return maTransformation; } - const attribute::FillBitmapAttribute& getFillBitmap() const { return maFillBitmap; } - - /// compare operator - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLBITMAPPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/fillgradientprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/fillgradientprimitive2d.hxx deleted file mode 100644 index 2c76eec86a..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/fillgradientprimitive2d.hxx +++ /dev/null @@ -1,121 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLGRADIENTPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLGRADIENTPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/attribute/fillgradientattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { class B2DPolygon; } - -////////////////////////////////////////////////////////////////////////////// -// FillGradientPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** FillGradientPrimitive2D class - - This class defines a gradient filling for a rectangular area. The - Range is defined by the Transformation, the gradient by the FillGradientAttribute. - - The decomposition will deliver the decomposed gradient, e.g. for an ellipse - gradient the various ellipses in various color steps will be created. - - I have added functionality to create both versions of filled decompositions: - Those who overlap and non-overlapping ones. The overlapping version is the - default one since it works with and without AntiAliasing. The non-overlapping - version is used in the MetafilePrimitive2D decomposition when the old XOR - paint was recorded. - */ - class DRAWINGLAYER_DLLPUBLIC FillGradientPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the geometric definition - basegfx::B2DRange maObjectRange; - - /// the gradient definition - attribute::FillGradientAttribute maFillGradient; - - /// local helpers - void generateMatricesAndColors( - std::vector< basegfx::B2DHomMatrix >& rMatrices, - std::vector< basegfx::BColor >& rColors) const; - Primitive2DSequence createOverlappingFill( - const std::vector< basegfx::B2DHomMatrix >& rMatrices, - const std::vector< basegfx::BColor >& rColors, - const basegfx::B2DPolygon& rUnitPolygon) const; - Primitive2DSequence createNonOverlappingFill( - const std::vector< basegfx::B2DHomMatrix >& rMatrices, - const std::vector< basegfx::BColor >& rColors, - const basegfx::B2DPolygon& rUnitPolygon) const; - - protected: - /// local helper - Primitive2DSequence createFill(bool bOverlapping) const; - - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - FillGradientPrimitive2D( - const basegfx::B2DRange& rObjectRange, - const attribute::FillGradientAttribute& rFillGradient); - - /// data read access - const basegfx::B2DRange& getObjectRange() const { return maObjectRange; } - const attribute::FillGradientAttribute& getFillGradient() const { return maFillGradient; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLGRADIENTPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx deleted file mode 100644 index 2f4bea4ee1..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/fillhatchprimitive2d.hxx +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLHATCHPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLHATCHPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/attribute/fillhatchattribute.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// -// FillHatchPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** FillHatchPrimitive2D class - - This class defines a hatch filling for a rectangular area. The - Range is defined by the Transformation, the hatch by the FillHatchAttribute. - If the background is to be filled, a flag in FillHatchAttribute is set and - the BColor defines the background color. - - The decomposition will deliver the hatch lines. - */ - class DRAWINGLAYER_DLLPUBLIC FillHatchPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the geometric definition - basegfx::B2DRange maObjectRange; - - /// the hatch definition - attribute::FillHatchAttribute maFillHatch; - - /// hatch background color (if used) - basegfx::BColor maBColor; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - FillHatchPrimitive2D( - const basegfx::B2DRange& rObjectRange, - const basegfx::BColor& rBColor, - const attribute::FillHatchAttribute& rFillHatch); - - /// data read access - const basegfx::B2DRange& getObjectRange() const { return maObjectRange; } - const attribute::FillHatchAttribute& getFillHatch() const { return maFillHatch; } - const basegfx::BColor& getBColor() const { return maBColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_FILLHATCHPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/graphicprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/graphicprimitive2d.hxx deleted file mode 100644 index 5eaecd8d4a..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/graphicprimitive2d.hxx +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GRAPHICPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GRAPHICPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <svtools/grfmgr.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** GraphicPrimitive2D class - - Primitive to hold graphics defined by GraphicObject and GraphicAttr - combination. This includes MetaFiles and diverse pixel-oriented graphic - formats. It even includes animated GIFs, Croppings and other changes - defined in GraphicAttr. - - This makes the decomposition contain a wide variety of possibilites, - too. From a simple BitmapPrimitive over AnimatedSwitchPrimitive2D, - MetafilePrimitive2D (with and without embedding in a masking when e.g. - the Metafile is bigger than the geometry) and embeddings in - TransformPrimitive2D and MaskPrimitive2D for croppings. - - The primitive geometry area is defined by Transform. - */ - class DRAWINGLAYER_DLLPUBLIC GraphicPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the geometric definition - basegfx::B2DHomMatrix maTransform; - - /// the GraphicObject with all it's content possibilities - GraphicObject maGraphicObject; - - /// The GraphicAttr with all it's modification possibilities - GraphicAttr maGraphicAttr; - - protected: - /// local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor(s) - GraphicPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const GraphicObject& rGraphicObject, - const GraphicAttr& rGraphicAttr); - GraphicPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const GraphicObject& rGraphicObject); - - /// data read access - const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } - const GraphicObject& getGraphicObject() const { return maGraphicObject; } - const GraphicAttr& getGraphicAttr() const { return maGraphicAttr; } - bool isTransparent() const; - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GRAPHICPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/gridprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/gridprimitive2d.hxx deleted file mode 100644 index b75e4755d0..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/gridprimitive2d.hxx +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GRIDPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GRIDPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/color/bcolor.hxx> -#include <vcl/bitmapex.hxx> - -////////////////////////////////////////////////////////////////////////////// -// GridPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** GridPrimitive2D class - - This primitive is specialized to Grid visualisation. The graphic definition - (Transform) contains the whole grid area, but will of course be combined - with the visible area (Viewport) when decomposed. Also a reolution-dependent - point reduction is used to not create too much grid visualisation data. This - makes this primitive highly view-dependent and it dynamically buffers - the last decomposition dependent from the Viewport used. - */ - class DRAWINGLAYER_DLLPUBLIC GridPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// The geometry definition for the grid area - basegfx::B2DHomMatrix maTransform; - - /// grid layout definitions - double mfWidth; - double mfHeight; - double mfSmallestViewDistance; - double mfSmallestSubdivisionViewDistance; - sal_uInt32 mnSubdivisionsX; - sal_uInt32 mnSubdivisionsY; - - /// Grid color for single-pixel grid points - basegfx::BColor maBColor; - - /// The Bitmap (with transparence) for grid cross points - BitmapEx maCrossMarker; - - /** the last used object to view transformtion and the last Viewport, - used from getDecomposition for decide buffering - */ - basegfx::B2DHomMatrix maLastObjectToViewTransformation; - basegfx::B2DRange maLastViewport; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - GridPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - double fWidth, - double fHeight, - double fSmallestViewDistance, - double fSmallestSubdivisionViewDistance, - sal_uInt32 nSubdivisionsX, - sal_uInt32 nSubdivisionsY, - const basegfx::BColor& rBColor, - const BitmapEx& rCrossMarker); - - /// data read access - const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } - double getWidth() const { return mfWidth; } - double getHeight() const { return mfHeight; } - double getSmallestViewDistance() const { return mfSmallestViewDistance; } - double getSmallestSubdivisionViewDistance() const { return mfSmallestSubdivisionViewDistance; } - sal_uInt32 getSubdivisionsX() const { return mnSubdivisionsX; } - sal_uInt32 getSubdivisionsY() const { return mnSubdivisionsY; } - const basegfx::BColor& getBColor() const { return maBColor; } - const BitmapEx& getCrossMarker() const { return maCrossMarker; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get 2d range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - - /// Overload standard getDecomposition call to be view-dependent here - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GRIDPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/groupprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/groupprimitive2d.hxx deleted file mode 100644 index c0af7663a1..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/groupprimitive2d.hxx +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GROUPPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GROUPPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// -// GroupPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** GroupPrimitive2D class - - Baseclass for all grouping 2D primitives - - The grouping primitive in it's basic form is capable of holding - a child primitive content and returns it on decomposition on default. - It is used for two main purposes, but more may apply: - - - to transport extended information, e.g. for text classification, - see e.g. TextHierarchy*Primitive2D implementations. Since they - decompose to their child content, renderers not aware/interested - in that extra information will just ignore these primitives - - - to encapsulate common geometry, e.g. the ShadowPrimitive2D implements - applying a generic shadow to a child sequence by adding the needed - offset and color stuff in the decomposition - - In most cases the decomposition is straightforward, so by default - this primitive will not buffer the result and is not derived from - BufferedDecompositionPrimitive2D, but from BasePrimitive2D. - - A renderer has to take GroupPrimitive2D derivations into account which - are used to hold a state. - - Current Basic 2D StatePrimitives are: - - - TransparencePrimitive2D (objects with freely defined transparence) - - InvertPrimitive2D (for XOR) - - MaskPrimitive2D (for masking) - - ModifiedColorPrimitive2D (for a stack of color modifications) - - TransformPrimitive2D (for a transformation stack) - */ - class DRAWINGLAYER_DLLPUBLIC GroupPrimitive2D : public BasePrimitive2D - { - private: - /// the children. Declared private since this shall never be changed at all after construction - Primitive2DSequence maChildren; - - public: - /// constructor - GroupPrimitive2D(const Primitive2DSequence& rChildren); - - /// data read access - const Primitive2DSequence& getChildren() const { return maChildren; } - - /// compare operator - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - - /// local decomposition. Implementation will just return children - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_GROUPPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/helplineprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/helplineprimitive2d.hxx deleted file mode 100644 index 4b6120d2f0..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/helplineprimitive2d.hxx +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HELPLINEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HELPLINEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// -// HelplinePrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** HelplineStyle2D definition - - The available styles of Helplines - */ - enum HelplineStyle2D - { - HELPLINESTYLE2D_POINT, - HELPLINESTYLE2D_LINE - }; - - /** HelplinePrimitive2D class - - This primitive provides a view-dependent helpline definition. The Helpline - is defined by a line equation (Point and vector) and a style. When the style - is a line, dependent from Viewport the visible part of that Helpline is - constructed. For Point, a cross is constructed. This primitive is highly - view-dependent. - - The visualisation uses the two given colors to create a dashed line with - the given dash length. - */ - class DRAWINGLAYER_DLLPUBLIC HelplinePrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// Helpline geometry definition - basegfx::B2DPoint maPosition; - basegfx::B2DVector maDirection; - HelplineStyle2D meStyle; - - /// Helpline style definition - basegfx::BColor maRGBColA; - basegfx::BColor maRGBColB; - double mfDiscreteDashLength; - - /** the last used object to view transformtion and the last Viewport, - used from getDecomposition for decide buffering - */ - basegfx::B2DHomMatrix maLastObjectToViewTransformation; - basegfx::B2DRange maLastViewport; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - HelplinePrimitive2D( - const basegfx::B2DPoint& rPosition, - const basegfx::B2DVector& rDirection, - HelplineStyle2D eStyle, - const basegfx::BColor& rRGBColA, - const basegfx::BColor& aRGBColB, - double fDiscreteDashLength); - - /// data read access - const basegfx::B2DPoint& getPosition() const { return maPosition; } - const basegfx::B2DVector& getDirection() const { return maDirection; } - HelplineStyle2D getStyle() const { return meStyle; } - const basegfx::BColor& getRGBColA() const { return maRGBColA; } - const basegfx::BColor& getRGBColB() const { return maRGBColB; } - double getDiscreteDashLength() const { return mfDiscreteDashLength; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - - /// Overload standard getDecomposition call to be view-dependent here - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HELPLINEPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx deleted file mode 100644 index 2b245fa9f5..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HIDDENGEOMETRYPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HIDDENGEOMETRYPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - // This primitive is used to represent geometry for non-visible objects, - // e.g. a PresObj's outline. To still be able to use primitives for HitTest - // functionality, the 2d decompositions will produce an as much as possible - // simplified line geometry encapsulated in this primtive when there is no - // line geometry. In a further enchanced version this may change to 'if neither - // filled nor lines' creation criteria. The whole primitive decomposes to nothing, - // so no one not knowing it will be influenced. Only helper processors for hit test - // (and maybe BoundRect extractors) will use it and it's children subcontent. - class DRAWINGLAYER_DLLPUBLIC HiddenGeometryPrimitive2D : public GroupPrimitive2D - { - public: - HiddenGeometryPrimitive2D(const Primitive2DSequence& rChildren); - - // despite returning an empty decomposition since it's no visualisation data, - // range calculation is intended to use hidden geometry, so - // the local implementation will return the children's range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// local decomposition. Implementation will return empty Primitive2DSequence - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - // provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HIDDENGEOMETRYPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/invertprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/invertprimitive2d.hxx deleted file mode 100644 index f9a669aa86..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/invertprimitive2d.hxx +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_INVERTPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_INVERTPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** InvertPrimitive2D class - - This is a helper class which encapsulates geometry that should be - painted XOR, e.g. old cursor visualisations. It decomposes to - it's content, so when not supporting it, the contained geometry - will be visualized normally. - Unfortunately this is still needed, but hard to support on various - systems. XOR painting needs read access to the target, so modern - graphic systems tend to not support it anymore. - */ - class DRAWINGLAYER_DLLPUBLIC InvertPrimitive2D : public GroupPrimitive2D - { - public: - /// constructor - InvertPrimitive2D(const Primitive2DSequence& rChildren); - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_INVERTPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/markerarrayprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/markerarrayprimitive2d.hxx deleted file mode 100644 index abaec4138f..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/markerarrayprimitive2d.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MARKERARRAYPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MARKERARRAYPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/color/bcolor.hxx> -#include <vcl/bitmapex.hxx> - -////////////////////////////////////////////////////////////////////////////// -// MarkerArrayPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** MarkerArrayPrimitive2D class - - This primtive defines an array of markers. Their size is defined - in pixels and independent from the view transformation which makes - this primitive highly view-dependent. It is also transformation - invariant, so that the bitmap is always visualized unscaled and - unrotated. - It is used e.g. for grid position visualisation. The given Bitmap - (with transparence) is defined to be visible centered at each of the given - positions. - It decomposes to the needed number of BitmapPrimitive2D's, so it would - be efficient to handle it directly in a renderer. - */ - class DRAWINGLAYER_DLLPUBLIC MarkerArrayPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the positions for the marker - std::vector< basegfx::B2DPoint > maPositions; - - /// the marker definintion to visualize - BitmapEx maMarker; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - MarkerArrayPrimitive2D( - const std::vector< basegfx::B2DPoint >& rPositions, - const BitmapEx& rMarker); - - /// data read access - const std::vector< basegfx::B2DPoint >& getPositions() const { return maPositions; } - const BitmapEx& getMarker() const { return maMarker; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MARKERARRAYPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/maskprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/maskprimitive2d.hxx deleted file mode 100644 index f39572317a..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/maskprimitive2d.hxx +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MASKPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MASKPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** MaskPrimitive2D class - - This is the central masking primitive. It's a grouping - primitive and contains a PolyPolygon which defines the visible - area. Only visualisation parts of the Child primitive sequence - inside of the mask PolyPolygon is defined to be visible. - - This primitive should be handled by a renderer. If it is not handled, - it decomposes to it's Child content, and thus the visualisation would - contaiun no clips. - - The geometrc range of this primitive is completely defined by the Mask - PolyPolygon since by definition nothing outside of the mask is visible. - */ - class DRAWINGLAYER_DLLPUBLIC MaskPrimitive2D : public GroupPrimitive2D - { - private: - /// the mask PolyPolygon - basegfx::B2DPolyPolygon maMask; - - public: - /// constructor - MaskPrimitive2D( - const basegfx::B2DPolyPolygon& rMask, - const Primitive2DSequence& rChildren); - - /// data read access - const basegfx::B2DPolyPolygon& getMask() const { return maMask; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MASKPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/mediaprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/mediaprimitive2d.hxx deleted file mode 100644 index 095fca6409..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/mediaprimitive2d.hxx +++ /dev/null @@ -1,105 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MEDIAPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MEDIAPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** MediaPrimitive2D class - - This is a unified primitive for Media visualisation, e.g. animations - or sounds. It's geometry is defined by Transform. For conveinience, - it also contains a discrete border size (aka Pixels) which will be added - if used. This makes it a view-dependent primitive. It also gets a filled - background and the decomposition will try to create a graphic representation - if te content (defined by the URL), e.g. a still frome for animated stuff. - */ - class DRAWINGLAYER_DLLPUBLIC MediaPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the geometry definition - basegfx::B2DHomMatrix maTransform; - - /// the content definition - rtl::OUString maURL; - - /// style: background color - basegfx::BColor maBackgroundColor; - - /// discrete border (in 'pixels') - sal_uInt32 mnDiscreteBorder; - - protected: - /// local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - MediaPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const rtl::OUString& rURL, - const basegfx::BColor& rBackgroundColor, - sal_uInt32 nDiscreteBorder); - - /// data read access - const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } - const rtl::OUString& getURL() const { return maURL; } - const basegfx::BColor& getBackgroundColor() const { return maBackgroundColor; } - sal_uInt32 getDiscreteBorder() const { return mnDiscreteBorder; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MEDIAPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/metafileprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/metafileprimitive2d.hxx deleted file mode 100644 index 3dfdf9ad62..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/metafileprimitive2d.hxx +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_METAFILEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_METAFILEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <vcl/gdimtf.hxx> - -////////////////////////////////////////////////////////////////////////////// -// MetafilePrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** MetafilePrimitive2D class - - This is the MetaFile representing primitive. It's geometry is defined - by MetaFileTransform. The content (defined by MetaFile) will be scaled - to the geometric definiton by using PrefMapMode and PrefSize of the - Metafile. - - It has shown that this not always guarantees that all Metafile content - is inside the geometric definition, but this primitive defines that this - is the case to allow a getB2DRange implementation. If it cannot be - guaranteed that the Metafile is inside the geometric definition, it should - be embedded to a MaskPrimitive2D. - - This primitive has no decomposition yet, so when not supported by a renderer, - it will not be visualized. - - In the future, a decomposition implementation would be appreciated and would - have many advantages; Metafile would no longer have to be rendered by - sub-systems and a standard way for converting Metafiles would exist. - */ - class DRAWINGLAYER_DLLPUBLIC MetafilePrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the geometry definition - basegfx::B2DHomMatrix maMetaFileTransform; - - /// the content definition - GDIMetaFile maMetaFile; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - public: - /// constructor - MetafilePrimitive2D( - const basegfx::B2DHomMatrix& rMetaFileTransform, - const GDIMetaFile& rMetaFile); - - /// data read access - const basegfx::B2DHomMatrix& getTransform() const { return maMetaFileTransform; } - const GDIMetaFile& getMetaFile() const { return maMetaFile; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_METAFILEPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx deleted file mode 100644 index 1a76072284..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MODIFIEDCOLORPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MODIFIEDCOLORPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <basegfx/color/bcolormodifier.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** ModifiedColorPrimitive2D class - - This primitive is a grouping primitive and allows to define - how the colors of it's child content shall be modified for - visualisation. This can be (and is) used e.g. for generic shadow - visualisation by forcing all color usages of the contained - sub-content to the shadow color. - - For the possibilities of color modifications, please refer - to the basegfx::BColorModifier definitions in basegfx. For - processing there is tooling in basegfx to build a stack of - BColorModifiers to always be able to proccess the correct - colors. - - If a renderer does not handle this primitive, the content will - be visualized unchanged. - */ - class DRAWINGLAYER_DLLPUBLIC ModifiedColorPrimitive2D : public GroupPrimitive2D - { - private: - /// The ColorModifier to use - basegfx::BColorModifier maColorModifier; - - public: - /// constructor - ModifiedColorPrimitive2D( - const Primitive2DSequence& rChildren, - const basegfx::BColorModifier& rColorModifier); - - /// data read access - const basegfx::BColorModifier& getColorModifier() const { return maColorModifier; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_MODIFIEDCOLORPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/pagepreviewprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/pagepreviewprimitive2d.hxx deleted file mode 100644 index fa17caaa55..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/pagepreviewprimitive2d.hxx +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PAGEPREVIEWPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PAGEPREVIEWPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <com/sun/star/drawing/XDrawPage.hpp> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** PagePreviewPrimitive2D class - - This primitive is needed to have the correct XDrawPage as ViewInformation for decomposing - the page contents (given as PageContent here) if these contain e.g. - view-dependent (in this case XDrawPage-dependent) text fields like PageNumber. If You want - those primitives to be visualized correctly, Your renderer needs to locally correct it's - ViewInformation2D to reference the new XDrawPage. - */ - class DRAWINGLAYER_DLLPUBLIC PagePreviewPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /** the XDrawPage visualized by this primitive. When we go forward with primitives - this will not only be used by the renderers to provide the correct decompose - graphic attribute context, but also to completely create the page's sub-content. - */ - const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > mxDrawPage; - - /// the PageContent - Primitive2DSequence maPageContent; - - /// the own geometry - basegfx::B2DHomMatrix maTransform; - - /// content width and height - double mfContentWidth; - double mfContentHeight; - - /// bitfield - /// flag to allow keeping the aspect ratio - unsigned mbKeepAspectRatio : 1; - - protected: - /// local decomposition. Implementation will just return children - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PagePreviewPrimitive2D( - const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& rxDrawPage, - const basegfx::B2DHomMatrix& rTransform, - double fContentWidth, - double fContentHeight, - const Primitive2DSequence& rPageContent, - bool bKeepAspectRatio); - - /// data read access - const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& getXDrawPage() const { return mxDrawPage; } - const Primitive2DSequence& getPageContent() const { return maPageContent; } - const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } - double getContentWidth() const { return mfContentWidth; } - double getContentHeight() const { return mfContentHeight; } - bool getKeepAspectRatio() const { return mbKeepAspectRatio; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// own getB2DRange - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PAGEPREVIEWPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/pointarrayprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/pointarrayprimitive2d.hxx deleted file mode 100644 index 3a6d4007ba..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/pointarrayprimitive2d.hxx +++ /dev/null @@ -1,95 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POINTARRAYPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POINTARRAYPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// -// PointArrayPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PointArrayPrimitive2D class - - This primitive defines single,discrete 'pixels' for the given - positions in the given color. This makes it view-dependent since - the logic size of a 'pixel' depends on the view transformation. - - This is one of the non-decomposable primitives, so a renderer - should proccess it (Currently it is only used for grid visualisation, - but this may change). - */ - class DRAWINGLAYER_DLLPUBLIC PointArrayPrimitive2D : public BasePrimitive2D - { - private: - /// the array of positions - std::vector< basegfx::B2DPoint > maPositions; - - /// the color to use - basegfx::BColor maRGBColor; - - /// #i96669# add simple range buffering for this primitive - basegfx::B2DRange maB2DRange; - - public: - /// constructor - PointArrayPrimitive2D( - const std::vector< basegfx::B2DPoint >& rPositions, - const basegfx::BColor& rRGBColor); - - /// data read access - const std::vector< basegfx::B2DPoint >& getPositions() const { return maPositions; } - const basegfx::BColor& getRGBColor() const { return maRGBColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POINTARRAYPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/polygonprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/polygonprimitive2d.hxx deleted file mode 100644 index edda68c55a..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/polygonprimitive2d.hxx +++ /dev/null @@ -1,329 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POLYGONPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POLYGONPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/attribute/lineattribute.hxx> -#include <drawinglayer/attribute/strokeattribute.hxx> -#include <drawinglayer/attribute/linestartendattribute.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// -// PolygonHairlinePrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolygonHairlinePrimitive2D class - - This primitive defines a Hairline. Since hairlines are view-dependent, - this primitive is view-dependent, too. - - This is one of the non-decomposable primitives, so a renderer - should proccess it. - */ - class DRAWINGLAYER_DLLPUBLIC PolygonHairlinePrimitive2D : public BasePrimitive2D - { - private: - /// the hairline geometry - basegfx::B2DPolygon maPolygon; - - /// the hairline color - basegfx::BColor maBColor; - - public: - /// constructor - PolygonHairlinePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const basegfx::BColor& rBColor); - - /// data read access - const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; } - const basegfx::BColor& getBColor() const { return maBColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolygonMarkerPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolygonMarkerPrimitive2D class - - This primitive defines a two-colored marker hairline which is - dashed with the given dash length. Since hairlines are view-dependent, - this primitive is view-dependent, too. - - It will be decomposed to the needed PolygonHairlinePrimitive2D if - not handled directly by a renderer. - */ - class DRAWINGLAYER_DLLPUBLIC PolygonMarkerPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the marker hairline geometry - basegfx::B2DPolygon maPolygon; - - /// the two colors - basegfx::BColor maRGBColorA; - basegfx::BColor maRGBColorB; - - /// the dash distance in 'pixels' - double mfDiscreteDashLength; - - /// decomposition is view-dependent, remember last InverseObjectToViewTransformation - basegfx::B2DHomMatrix maLastInverseObjectToViewTransformation; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolygonMarkerPrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const basegfx::BColor& rRGBColorA, - const basegfx::BColor& rRGBColorB, - double fDiscreteDashLength); - - /// data read access - const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; } - const basegfx::BColor& getRGBColorA() const { return maRGBColorA; } - const basegfx::BColor& getRGBColorB() const { return maRGBColorB; } - double getDiscreteDashLength() const { return mfDiscreteDashLength; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// get local decomposition. Overloaded since this decomposition is view-dependent - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolygonStrokePrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolygonStrokePrimitive2D class - - This primitive defines a line with line width, line join, line color - and stroke attributes. It will be decomposed dependent on the definition - to the needed primitives, e.g. filled PolyPolygons for fat lines. - */ - class DRAWINGLAYER_DLLPUBLIC PolygonStrokePrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the line geometry - basegfx::B2DPolygon maPolygon; - - /// the line attributes like width, join and color - attribute::LineAttribute maLineAttribute; - - /// the line stroking (if used) - attribute::StrokeAttribute maStrokeAttribute; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolygonStrokePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute); - - /// constructor without stroking - PolygonStrokePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute); - - /// data read access - const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; } - const attribute::LineAttribute& getLineAttribute() const { return maLineAttribute; } - const attribute::StrokeAttribute& getStrokeAttribute() const { return maStrokeAttribute; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolygonWavePrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolygonWavePrimitive2D class - - This primitive defines a waveline based on a PolygonStrokePrimitive2D - where the wave is defined by wave width and wave length. - */ - class DRAWINGLAYER_DLLPUBLIC PolygonWavePrimitive2D : public PolygonStrokePrimitive2D - { - private: - /// wave definition - double mfWaveWidth; - double mfWaveHeight; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolygonWavePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute, - double fWaveWidth, - double fWaveHeight); - - /// constructor without stroking - PolygonWavePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - double fWaveWidth, - double fWaveHeight); - - /// data read access - double getWaveWidth() const { return mfWaveWidth; } - double getWaveHeight() const { return mfWaveHeight; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolygonStrokeArrowPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolygonStrokeArrowPrimitive2D class - - This primitive defines a PolygonStrokePrimitive2D which is extended - eventually by start and end definitions which are normally used for - arrows. - */ - class DRAWINGLAYER_DLLPUBLIC PolygonStrokeArrowPrimitive2D : public PolygonStrokePrimitive2D - { - private: - /// geometric definitions for line start and end - attribute::LineStartEndAttribute maStart; - attribute::LineStartEndAttribute maEnd; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolygonStrokeArrowPrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute, - const attribute::LineStartEndAttribute& rStart, - const attribute::LineStartEndAttribute& rEnd); - - /// constructor without stroking - PolygonStrokeArrowPrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::LineStartEndAttribute& rStart, - const attribute::LineStartEndAttribute& rEnd); - - /// data read access - const attribute::LineStartEndAttribute& getStart() const { return maStart; } - const attribute::LineStartEndAttribute& getEnd() const { return maEnd; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POLYGONPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/polypolygonprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/polypolygonprimitive2d.hxx deleted file mode 100644 index 1673d0d7a0..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/polypolygonprimitive2d.hxx +++ /dev/null @@ -1,451 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POLYPOLYGONPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POLYPOLYGONPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/attribute/fillbitmapattribute.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <drawinglayer/attribute/lineattribute.hxx> -#include <drawinglayer/attribute/strokeattribute.hxx> -#include <drawinglayer/attribute/linestartendattribute.hxx> -#include <drawinglayer/attribute/fillgradientattribute.hxx> -#include <drawinglayer/attribute/fillhatchattribute.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// -// PolyPolygonHairlinePrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolyPolygonHairlinePrimitive2D class - - This primitive defines a multi-PolygonHairlinePrimitive2D and is - just for convenience. The definition is not different from the single - defined PolygonHairlinePrimitive2Ds. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonHairlinePrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the hairline geometry - basegfx::B2DPolyPolygon maPolyPolygon; - - /// the hairline color - basegfx::BColor maBColor; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolyPolygonHairlinePrimitive2D(const basegfx::B2DPolyPolygon& rPolyPolygon, const basegfx::BColor& rBColor); - - /// data read access - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } - const basegfx::BColor& getBColor() const { return maBColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolyPolygonMarkerPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolyPolygonMarkerPrimitive2D class - - This primitive defines a multi-PolygonMarkerPrimitive2D and is - just for convenience. The definition is not different from the single - defined PolygonMarkerPrimitive2Ds. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonMarkerPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the marker hairline geometry - basegfx::B2DPolyPolygon maPolyPolygon; - - /// the two colors - basegfx::BColor maRGBColorA; - basegfx::BColor maRGBColorB; - - /// the dash distance in 'pixels' - double mfDiscreteDashLength; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolyPolygonMarkerPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const basegfx::BColor& rRGBColorA, - const basegfx::BColor& rRGBColorB, - double fDiscreteDashLength); - - // data read access - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } - const basegfx::BColor& getRGBColorA() const { return maRGBColorA; } - const basegfx::BColor& getRGBColorB() const { return maRGBColorB; } - double getDiscreteDashLength() const { return mfDiscreteDashLength; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolyPolygonStrokePrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolyPolygonStrokePrimitive2D class - - This primitive defines a multi-PolygonStrokePrimitive2D and is - just for convenience. The definition is not different from the single - defined PolygonStrokePrimitive2Ds. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonStrokePrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the line geometry - basegfx::B2DPolyPolygon maPolyPolygon; - - /// the line attributes like width, join and color - attribute::LineAttribute maLineAttribute; - - /// the line stroking (if used) - attribute::StrokeAttribute maStrokeAttribute; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolyPolygonStrokePrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute); - - /// constructor without stroking - PolyPolygonStrokePrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::LineAttribute& rLineAttribute); - - /// data read access - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } - const attribute::LineAttribute& getLineAttribute() const { return maLineAttribute; } - const attribute::StrokeAttribute& getStrokeAttribute() const { return maStrokeAttribute; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolyPolygonStrokeArrowPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolyPolygonStrokePrimitive2D class - - This primitive defines a multi-PolygonStrokeArrowPrimitive2D and is - just for convenience. The definition is not different from the single - defined PolygonStrokeArrowPrimitive2Ds. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonStrokeArrowPrimitive2D : public PolyPolygonStrokePrimitive2D - { - private: - /// geometric definitions for line start and end - attribute::LineStartEndAttribute maStart; - attribute::LineStartEndAttribute maEnd; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolyPolygonStrokeArrowPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute, - const attribute::LineStartEndAttribute& rStart, - const attribute::LineStartEndAttribute& rEnd); - - /// constructor without stroking - PolyPolygonStrokeArrowPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::LineStartEndAttribute& rStart, - const attribute::LineStartEndAttribute& rEnd); - - /// data read access - const attribute::LineStartEndAttribute& getStart() const { return maStart; } - const attribute::LineStartEndAttribute& getEnd() const { return maEnd; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolyPolygonColorPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolyPolygonColorPrimitive2D class - - This primitive defines a PolyPolygon filled with a single color. - This is one of the non-decomposable primitives, so a renderer - should proccess it. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonColorPrimitive2D : public BasePrimitive2D - { - private: - /// the PolyPolygon geometry - basegfx::B2DPolyPolygon maPolyPolygon; - - /// the polygon fill color - basegfx::BColor maBColor; - - public: - /// constructor - PolyPolygonColorPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const basegfx::BColor& rBColor); - - /// data read access - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } - const basegfx::BColor& getBColor() const { return maBColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolyPolygonGradientPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolyPolygonColorPrimitive2D class - - This primitive defines a PolyPolygon filled with a gradient. The - decomosition will create a MaskPrimitive2D containing a - FillGradientPrimitive2D. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonGradientPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the PolyPolygon geometry - basegfx::B2DPolyPolygon maPolyPolygon; - - /// the gradient definition - attribute::FillGradientAttribute maFillGradient; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolyPolygonGradientPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::FillGradientAttribute& rFillGradient); - - /// data read access - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } - const attribute::FillGradientAttribute& getFillGradient() const { return maFillGradient; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolyPolygonHatchPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolyPolygonHatchPrimitive2D class - - This primitive defines a PolyPolygon filled with a hatch. The - decomosition will create a MaskPrimitive2D containing a - FillHatchPrimitive2D. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonHatchPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the PolyPolygon geometry - basegfx::B2DPolyPolygon maPolyPolygon; - - /// the hatch background color (if used) - basegfx::BColor maBackgroundColor; - - /// the hatch definition - attribute::FillHatchAttribute maFillHatch; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolyPolygonHatchPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const basegfx::BColor& rBackgroundColor, - const attribute::FillHatchAttribute& rFillHatch); - - /// data read access - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } - const basegfx::BColor& getBackgroundColor() const { return maBackgroundColor; } - const attribute::FillHatchAttribute& getFillHatch() const { return maFillHatch; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// PolyPolygonBitmapPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** PolyPolygonBitmapPrimitive2D class - - This primitive defines a PolyPolygon filled with bitmap data - (including transparence). The decomosition will create a MaskPrimitive2D - containing a FillBitmapPrimitive2D. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonBitmapPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the PolyPolygon geometry - basegfx::B2DPolyPolygon maPolyPolygon; - - /// the bitmap fill definition (may include tiling) - attribute::FillBitmapAttribute maFillBitmap; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - PolyPolygonBitmapPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::FillBitmapAttribute& rFillBitmap); - - /// data read access - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } - const attribute::FillBitmapAttribute& getFillBitmap() const { return maFillBitmap; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_POLYPOLYGONPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx deleted file mode 100644 index 6b0e001658..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/primitivetools2d.hxx +++ /dev/null @@ -1,204 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PRIMITIVE2DTOOLS_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PRIMITIVE2DTOOLS_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** DiscreteMetricDependentPrimitive2D class - - tooling class for BufferedDecompositionPrimitive2D baseed classes which are view-dependent - regarding the size of a discrete unit. The implementation of get2DDecomposition - guards the buffered local decomposition and ensures that a create2DDecomposition - implementation may use an up-to-date DiscreteUnit accessible using getDiscreteUnit() - */ - class DRAWINGLAYER_DLLPUBLIC DiscreteMetricDependentPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /** the last used fDiscreteUnit definitions for decomposition. Since this - is checked and updated from get2DDecomposition() it will be current and - usable in create2DDecomposition() - */ - double mfDiscreteUnit; - - public: - /// constructor - DiscreteMetricDependentPrimitive2D() - : BufferedDecompositionPrimitive2D(), - mfDiscreteUnit(0.0) - { - } - - /// data read access - double getDiscreteUnit() const { return mfDiscreteUnit; } - - /// get local decomposition. Overloaded since this decomposition is view-dependent - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** ViewportDependentPrimitive2D class - - tooling class for BufferedDecompositionPrimitive2D baseed classes which are view-dependent - regarding the viewport. The implementation of get2DDecomposition - guards the buffered local decomposition and ensures that a create2DDecomposition - implementation may use an up-to-date Viewport accessible using getViewport() - */ - class DRAWINGLAYER_DLLPUBLIC ViewportDependentPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /** the last used Viewport definition for decomposition. Since this - is checked and updated from get2DDecomposition() it will be current and - usable in create2DDecomposition() - */ - basegfx::B2DRange maViewport; - - public: - /// constructor - ViewportDependentPrimitive2D() - : BufferedDecompositionPrimitive2D(), - maViewport() - { - } - - /// data read access - const basegfx::B2DRange& getViewport() const { return maViewport; } - - /// get local decomposition. Overloaded since this decomposition is view-dependent - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** ViewTransformationDependentPrimitive2D class - - tooling class for BufferedDecompositionPrimitive2D based classes which are view-dependent - regarding the complete Viewtransformation. The implementation of get2DDecomposition - guards the buffered local decomposition and ensures that a create2DDecomposition - implementation may use an up-to-date ViewTransformation accessible using getViewTransformation() - */ - class DRAWINGLAYER_DLLPUBLIC ViewTransformationDependentPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /** the last used ViewTransformation definition for decomposition. Since this - is checked and updated from get2DDecomposition() it will be current and - usable in create2DDecomposition() - */ - basegfx::B2DHomMatrix maViewTransformation; - - public: - /// constructor - ViewTransformationDependentPrimitive2D() - : BufferedDecompositionPrimitive2D(), - maViewTransformation() - { - } - - /// data read access - const basegfx::B2DHomMatrix& getViewTransformation() const { return maViewTransformation; } - - /// get local decomposition. Overloaded since this decomposition is view-dependent - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** ObjectAndViewTransformationDependentPrimitive2D class - - tooling class for BufferedDecompositionPrimitive2D based classes which are view-dependent - and Object-Transform dependent. The implementation of get2DDecomposition - guards the buffered local decomposition and ensures that a create2DDecomposition - implementation may use an up-to-date ViewTransformation accessible using getViewTransformation() - and an object transformation via getObjectTransformation() - */ - class DRAWINGLAYER_DLLPUBLIC ObjectAndViewTransformationDependentPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /** the last used ViewTransformation and the last ObjectTransformation - definition for decomposition. Since this is checked and updated from - get2DDecomposition() it will be current and usable in create2DDecomposition() - */ - basegfx::B2DHomMatrix maViewTransformation; - basegfx::B2DHomMatrix maObjectTransformation; - - public: - /// constructor - ObjectAndViewTransformationDependentPrimitive2D() - : BufferedDecompositionPrimitive2D(), - maViewTransformation(), - maObjectTransformation() - { - } - - /// data read access - const basegfx::B2DHomMatrix& getViewTransformation() const { return maViewTransformation; } - const basegfx::B2DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } - - /// get local decomposition. Overloaded since this decomposition is view-dependent - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_PRIMITIVE2DTOOLS_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/rendergraphicprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/rendergraphicprimitive2d.hxx deleted file mode 100644 index 1904394429..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/rendergraphicprimitive2d.hxx +++ /dev/null @@ -1,95 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_RENDERGRAPHICPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_RENDERGRAPHICPRIMITIVE2D_HXX - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <vcl/rendergraphic.hxx> -#include <memory> - -////////////////////////////////////////////////////////////////////////////// -// RenderGraphicPrimitive2D class - -namespace vcl { class RenderGraphicRasterizer; } - -namespace drawinglayer -{ - namespace primitive2d - { - /** RenderGraphicPrimitive2D class - - This class is the central primitive for RenderGraphic-based primitives. - */ - class RenderGraphicPrimitive2D : public BasePrimitive2D - { - private: - /// the RenderGraphic data - vcl::RenderGraphic maRenderGraphic; - mutable std::auto_ptr< vcl::RenderGraphicRasterizer > mapCurrentRasterizer; - - /** the object transformation from unit coordinates, defining - size, shear, rotate and position - */ - basegfx::B2DHomMatrix maTransform; - - public: - /// constructor - RenderGraphicPrimitive2D( - const vcl::RenderGraphic& rRenderGraphic, - const basegfx::B2DHomMatrix& rTransform); - - /// data read access - inline const vcl::RenderGraphic& getRenderGraphic() const { return maRenderGraphic; } - inline const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } - - // access to latest used vcl::GraphicRasterizer for possibly reusing - // an already rendered vcl::RenderGraphic with the same transform - // properties during the next rendering process - void setCurrentRasterizer() const; - void setCurrentRasterizer( const vcl::RenderGraphicRasterizer& rCurrentGraphicRasterizer ) const; - inline const vcl::RenderGraphicRasterizer* getCurrentRasterizer() const { return( mapCurrentRasterizer.get() ); } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_RENDERGRAPHICPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof diff --git a/drawinglayer/inc/drawinglayer/primitive2d/sceneprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/sceneprimitive2d.hxx deleted file mode 100644 index b21f248153..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/sceneprimitive2d.hxx +++ /dev/null @@ -1,171 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SCENEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SCENEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <drawinglayer/geometry/viewinformation3d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <vcl/bitmapex.hxx> -#include <drawinglayer/attribute/sdrsceneattribute3d.hxx> -#include <drawinglayer/attribute/sdrlightingattribute3d.hxx> -#include <drawinglayer/attribute/sdrlightattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** ScenePrimitive2D class - - This primitive defines a 3D scene as a 2D primitive and is the anchor point - for a 3D visualisation. The decomposition is view-dependent and will try to - re-use already rendered 3D content. - - The rendering is done using the default-3D renderer from basegfx which supports - AntiAliasing. - - The 2D primitive's geometric range is defined completely by the - ObjectTransformation combined with evtl. 2D shadows from the 3D objects. The - shadows of 3D objects are 2D polygons, projected with the 3D transformation. - - This is the class a renderer may process directly when he wants to implement - an own (e.g. system-specific) 3D renderer. - */ - class DRAWINGLAYER_DLLPUBLIC ScenePrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the 3D geometry definition - primitive3d::Primitive3DSequence mxChildren3D; - - /// 3D scene attribute set - attribute::SdrSceneAttribute maSdrSceneAttribute; - - /// lighting attribute set - attribute::SdrLightingAttribute maSdrLightingAttribute; - - /// object transformation for scene for 2D definition - basegfx::B2DHomMatrix maObjectTransformation; - - /// scene transformation set and object transformation - geometry::ViewInformation3D maViewInformation3D; - - /// the primitiveSequence for on-demand created shadow primitives (see mbShadow3DChecked) - Primitive2DSequence maShadowPrimitives; - - /// bitfield - /** flag if given 3D geometry is already cheched for shadow definitions and 2d shadows - are created in maShadowPrimitives - */ - unsigned mbShadow3DChecked : 1; - - /// the last used NewDiscreteSize and NewUnitVisiblePart definitions for decomposition - double mfOldDiscreteSizeX; - double mfOldDiscreteSizeY; - basegfx::B2DRange maOldUnitVisiblePart; - - /** the last created BitmapEx, e.g. for fast HitTest. This does not really need - memory since BitmapEx is internally RefCounted - */ - BitmapEx maOldRenderedBitmap; - - /// private helpers - bool impGetShadow3D(const geometry::ViewInformation2D& rViewInformation) const; - void calculateDiscreteSizes( - const geometry::ViewInformation2D& rViewInformation, - basegfx::B2DRange& rDiscreteRange, - basegfx::B2DRange& rVisibleDiscreteRange, - basegfx::B2DRange& rUnitVisibleRange) const; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// public helpers - /** Geometry extractor. Shadow will be added as in create2DDecomposition, but - the 3D content is not converted to a bitmap visualisation but to projected 2D gemetry. This - helper is useful e.g. for Contour extraction or HitTests. - */ - Primitive2DSequence getGeometry2D() const; - Primitive2DSequence getShadow2D(const geometry::ViewInformation2D& rViewInformation) const; - - /** Fast HitTest which uses the last buffered BitmapEx from the last - rendered area if available. The return value describes if the check - could be done with the current information, so do NOT use o_rResult - when it returns false. o_rResult will be changed on return true and - then contains a definitive answer if content of this scene is hit or - not. On return false, it is normally necessary to use the geometric - HitTest (see CutFindProcessor usages). The given HitPoint - has to be in logic coordinates in scene's ObjectCoordinateSystem. - */ - bool tryToCheckLastVisualisationDirectHit(const basegfx::B2DPoint& rLogicHitPoint, bool& o_rResult) const; - - /// constructor - ScenePrimitive2D( - const primitive3d::Primitive3DSequence& rxChildren3D, - const attribute::SdrSceneAttribute& rSdrSceneAttribute, - const attribute::SdrLightingAttribute& rSdrLightingAttribute, - const basegfx::B2DHomMatrix& rObjectTransformation, - const geometry::ViewInformation3D& rViewInformation3D); - - /// data read access - const primitive3d::Primitive3DSequence& getChildren3D() const { return mxChildren3D; } - const attribute::SdrSceneAttribute& getSdrSceneAttribute() const { return maSdrSceneAttribute; } - const attribute::SdrLightingAttribute& getSdrLightingAttribute() const { return maSdrLightingAttribute; } - const basegfx::B2DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } - const geometry::ViewInformation3D& getViewInformation3D() const { return maViewInformation3D; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - - /// get local decomposition. Overloaded since this decomposition is view-dependent - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SCENEPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/sdrdecompositiontools2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/sdrdecompositiontools2d.hxx deleted file mode 100644 index 005b7766af..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/sdrdecompositiontools2d.hxx +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class B2DPolyPolygon; - class B2DHomMatrix; -} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - // helpers to create HitTestPrimitives Line - Primitive2DReference DRAWINGLAYER_DLLPUBLIC createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DHomMatrix& rMatrix); - - Primitive2DReference DRAWINGLAYER_DLLPUBLIC createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DPolyPolygon& rPolygon); - - Primitive2DReference DRAWINGLAYER_DLLPUBLIC createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DRange& rRange); - - Primitive2DReference DRAWINGLAYER_DLLPUBLIC createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DRange& rRange, - const basegfx::B2DHomMatrix& rMatrix); - - Primitive2DReference DRAWINGLAYER_DLLPUBLIC createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DPolyPolygon& rPolygon, - const basegfx::B2DHomMatrix& rMatrix); - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/shadowprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/shadowprimitive2d.hxx deleted file mode 100644 index e875ab5dd6..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/shadowprimitive2d.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SHADOWPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SHADOWPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** ShadowPrimitive2D class - - This primitive defines a generic shadow geometry construction - for 2D objects. It decomposes to a TransformPrimitive2D embedded - into a ModifiedColorPrimitive2D. - - It's for primtive usage convenience, so that not everyone has - to implement the generic shadow construction by himself. - - The same geometry as sequence of primitives is used as geometry and - as shadow. Since these are RefCounted Uno-Api objects, no extra objects - are needed for the shadow itself; all the local decompositions of the - original geometry can be reused from the renderer for shadow visualisation. - */ - class DRAWINGLAYER_DLLPUBLIC ShadowPrimitive2D : public GroupPrimitive2D - { - private: - /// the shadow transformation, normally just an offset - basegfx::B2DHomMatrix maShadowTransform; - - /// the shadow color to which all geometry is to be forced - basegfx::BColor maShadowColor; - - public: - /// constructor - ShadowPrimitive2D( - const basegfx::B2DHomMatrix& rShadowTransform, - const basegfx::BColor& rShadowColor, - const Primitive2DSequence& rChildren); - - /// data read access - const basegfx::B2DHomMatrix& getShadowTransform() const { return maShadowTransform; } - const basegfx::BColor& getShadowColor() const { return maShadowColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// create decomposition - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_SHADOWPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/structuretagprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/structuretagprimitive2d.hxx deleted file mode 100644 index bdda8e9747..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/structuretagprimitive2d.hxx +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_STRUCTURETAGPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_STRUCTURETAGPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <vcl/pdfwriter.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** StructureTagPrimitive2D class - - This class is used to provode simple support for adding grouped - pdf writer structured element information like used in sd from - unomodel.cxx where a ViewObjectContactRedirector is used to add - such information for diverse objects. - This primitive encapsulates these and the VCLPdfRenderer uses it - to apply the needed infos directly to the pdf export in a compatible - way. - If a renderer ignores this, it just decomposes to it's child - content. - */ - class DRAWINGLAYER_DLLPUBLIC StructureTagPrimitive2D : public GroupPrimitive2D - { - private: - /// the PDF structure element this grouping represents - vcl::PDFWriter::StructElement maStructureElement; - - public: - /// constructor - StructureTagPrimitive2D( - const vcl::PDFWriter::StructElement& rStructureElement, - const Primitive2DSequence& rChildren); - - /// data read access - const vcl::PDFWriter::StructElement& getStructureElement() const { return maStructureElement; } - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_STRUCTURETAGPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/textdecoratedprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/textdecoratedprimitive2d.hxx deleted file mode 100644 index fd00a2852e..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/textdecoratedprimitive2d.hxx +++ /dev/null @@ -1,162 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTDECORATEDPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTDECORATEDPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <drawinglayer/primitive2d/textenumsprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -namespace basegfx { namespace tools { - class B2DHomMatrixBufferedOnDemandDecompose; -}} - -namespace com { namespace sun { namespace star { namespace i18n { - struct Boundary; -}}}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextDecoratedPortionPrimitive2D class - - This primitive expands the TextSimplePortionPrimitive2D by common - decorations used in the office. It can be decomposed and will create - a TextSimplePortionPrimitive2D and all the contained decorations (if used) - as geometry. - */ - class DRAWINGLAYER_DLLPUBLIC TextDecoratedPortionPrimitive2D : public TextSimplePortionPrimitive2D - { - private: - /// decoration definitions - basegfx::BColor maOverlineColor; - basegfx::BColor maTextlineColor; - TextLine meFontOverline; - TextLine meFontUnderline; - TextStrikeout meTextStrikeout; - TextEmphasisMark meTextEmphasisMark; - TextRelief meTextRelief; - - /// bitfield - unsigned mbUnderlineAbove : 1; - unsigned mbWordLineMode : 1; - unsigned mbEmphasisMarkAbove : 1; - unsigned mbEmphasisMarkBelow : 1; - unsigned mbShadow : 1; - - /// helper methods - void impCreateGeometryContent( - std::vector< Primitive2DReference >& rTarget, - basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose& rDecTrans, - const String& rText, - xub_StrLen aTextPosition, - xub_StrLen aTextLength, - const ::std::vector< double >& rDXArray, - const attribute::FontAttribute& rFontAttribute) const; - - void impCorrectTextBoundary( - ::com::sun::star::i18n::Boundary& rNextWordBoundary) const; - - void impSplitSingleWords( - std::vector< Primitive2DReference >& rTarget, - basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose& rDecTrans) const; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - TextDecoratedPortionPrimitive2D( - - /// TextSimplePortionPrimitive2D parameters - const basegfx::B2DHomMatrix& rNewTransform, - const String& rText, - xub_StrLen aTextPosition, - xub_StrLen aTextLength, - const ::std::vector< double >& rDXArray, - const attribute::FontAttribute& rFontAttribute, - const ::com::sun::star::lang::Locale& rLocale, - const basegfx::BColor& rFontColor, - - /// local parameters - const basegfx::BColor& rOverlineColor, - const basegfx::BColor& rTextlineColor, - TextLine eFontOverline = TEXT_LINE_NONE, - TextLine eFontUnderline = TEXT_LINE_NONE, - bool bUnderlineAbove = false, - TextStrikeout eTextStrikeout = TEXT_STRIKEOUT_NONE, - bool bWordLineMode = false, - TextEmphasisMark eTextEmphasisMark = TEXT_EMPHASISMARK_NONE, - bool bEmphasisMarkAbove = true, - bool bEmphasisMarkBelow = false, - TextRelief eTextRelief = TEXT_RELIEF_NONE, - bool bShadow = false); - - /// data read access - TextLine getFontOverline() const { return meFontOverline; } - TextLine getFontUnderline() const { return meFontUnderline; } - TextStrikeout getTextStrikeout() const { return meTextStrikeout; } - TextEmphasisMark getTextEmphasisMark() const { return meTextEmphasisMark; } - TextRelief getTextRelief() const { return meTextRelief; } - const basegfx::BColor& getOverlineColor() const { return maOverlineColor; } - const basegfx::BColor& getTextlineColor() const { return maTextlineColor; } - bool getUnderlineAbove() const { return mbUnderlineAbove; } - bool getWordLineMode() const { return mbWordLineMode; } - bool getEmphasisMarkAbove() const { return mbEmphasisMarkAbove; } - bool getEmphasisMarkBelow() const { return mbEmphasisMarkBelow; } - bool getShadow() const { return mbShadow; } - - /// compare operator - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTDECORATEDPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/texteffectprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/texteffectprimitive2d.hxx deleted file mode 100644 index b94f7291c9..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/texteffectprimitive2d.hxx +++ /dev/null @@ -1,118 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTEFFECTPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTEFFECTPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextEffectStyle2D definition */ - enum TextEffectStyle2D - { - TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT, - TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED_DEFAULT, - TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED, - TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED, - TEXTEFFECTSTYLE2D_OUTLINE - }; - - /** TextEffectPrimitive2D class - - This primitive embeds text primitives (normally, as can be seen can - also be used for any other primitives) which have some TextEffect applied - and create the needed geometry and embedding on decomposition. - */ - class DRAWINGLAYER_DLLPUBLIC TextEffectPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// the text (or other) content - Primitive2DSequence maTextContent; - - /// the style to apply, the direction and the rotation center - const basegfx::B2DPoint maRotationCenter; - double mfDirection; - TextEffectStyle2D meTextEffectStyle2D; - - /** the last used object to view transformtion used from getDecomposition - for decide buffering - */ - basegfx::B2DHomMatrix maLastObjectToViewTransformation; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// construcor - TextEffectPrimitive2D( - const Primitive2DSequence& rTextContent, - const basegfx::B2DPoint& rRotationCenter, - double fDirection, - TextEffectStyle2D eTextEffectStyle2D); - - /// data read access - const Primitive2DSequence& getTextContent() const { return maTextContent; } - const basegfx::B2DPoint& getRotationCenter() const { return maRotationCenter; } - double getDirection() const { return mfDirection; } - TextEffectStyle2D getTextEffectStyle2D() const { return meTextEffectStyle2D; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /** own get range implementation to solve more effective. Content is by definition displaced - by a fixed discrete unit, thus the contained geometry needs only once be asked for it's - own basegfx::B2DRange - */ - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - - /// Overload standard getDecomposition call to be view-dependent here - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTEFFECTPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/textenumsprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/textenumsprimitive2d.hxx deleted file mode 100644 index 987e713a67..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/textenumsprimitive2d.hxx +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTENUMSPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTENUMSPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <vcl/vclenum.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextLine definition - - This is used for both underline and overline - */ - enum TextLine - { - TEXT_LINE_NONE, - TEXT_LINE_SINGLE, - TEXT_LINE_DOUBLE, - TEXT_LINE_DOTTED, - TEXT_LINE_DASH, - TEXT_LINE_LONGDASH, - TEXT_LINE_DASHDOT, - TEXT_LINE_DASHDOTDOT, - TEXT_LINE_SMALLWAVE, - TEXT_LINE_WAVE, - TEXT_LINE_DOUBLEWAVE, - TEXT_LINE_BOLD, - TEXT_LINE_BOLDDOTTED, - TEXT_LINE_BOLDDASH, - TEXT_LINE_BOLDLONGDASH, - TEXT_LINE_BOLDDASHDOT, - TEXT_LINE_BOLDDASHDOTDOT, - TEXT_LINE_BOLDWAVE - }; - - /** helper to convert LineStyle */ - TextLine DRAWINGLAYER_DLLPUBLIC mapFontUnderlineToTextLine(FontUnderline eLineStyle); - FontUnderline DRAWINGLAYER_DLLPUBLIC mapTextLineToFontUnderline(TextLine eLineStyle); - - /** FontStrikeout definition */ - enum TextStrikeout - { - TEXT_STRIKEOUT_NONE, - TEXT_STRIKEOUT_SINGLE, - TEXT_STRIKEOUT_DOUBLE, - TEXT_STRIKEOUT_BOLD, - TEXT_STRIKEOUT_SLASH, - TEXT_STRIKEOUT_X - }; - - /** helper to convert FontStrikeout */ - TextStrikeout DRAWINGLAYER_DLLPUBLIC mapFontStrikeoutToTextStrikeout(::FontStrikeout eFontStrikeout); - ::FontStrikeout DRAWINGLAYER_DLLPUBLIC mapTextStrikeoutToFontStrikeout(TextStrikeout eFontStrikeout); - - /** TextEmphasisMark definition */ - enum TextEmphasisMark - { - TEXT_EMPHASISMARK_NONE, - TEXT_EMPHASISMARK_DOT, - TEXT_EMPHASISMARK_CIRCLE, - TEXT_EMPHASISMARK_DISC, - TEXT_EMPHASISMARK_ACCENT - }; - - /** TextRelief definition */ - enum TextRelief - { - TEXT_RELIEF_NONE, - TEXT_RELIEF_EMBOSSED, - TEXT_RELIEF_ENGRAVED - }; - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTENUMSPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/texthierarchyprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/texthierarchyprimitive2d.hxx deleted file mode 100644 index ff78b05cbf..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/texthierarchyprimitive2d.hxx +++ /dev/null @@ -1,224 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTHIERARCHYPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTHIERARCHYPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <tools/string.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextHierarchyLinePrimitive2D class - - Text format hierarchy helper class. It decomposes to it's - content, so all direct renderers may ignore it. If You need - to know more about line hierarchies You may react on it and - also need to take care that the source of data uses it. - - This primitive encapsulates text lines. - */ - class DRAWINGLAYER_DLLPUBLIC TextHierarchyLinePrimitive2D : public GroupPrimitive2D - { - private: - public: - /// constructor - TextHierarchyLinePrimitive2D(const Primitive2DSequence& rChildren); - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextHierarchyBulletPrimitive2D class - - This primitive encapsulates text bullets. - */ - class DRAWINGLAYER_DLLPUBLIC TextHierarchyBulletPrimitive2D : public GroupPrimitive2D - { - private: - public: - /// constructor - TextHierarchyBulletPrimitive2D(const Primitive2DSequence& rChildren); - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextHierarchyParagraphPrimitive2D class - - This primitive encapsulates text paragraphs. - */ - class DRAWINGLAYER_DLLPUBLIC TextHierarchyParagraphPrimitive2D : public GroupPrimitive2D - { - private: - public: - /// constructor - TextHierarchyParagraphPrimitive2D(const Primitive2DSequence& rChildren); - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextHierarchyBlockPrimitive2D class - - This primitive encapsulates text blocks. - */ - class DRAWINGLAYER_DLLPUBLIC TextHierarchyBlockPrimitive2D : public GroupPrimitive2D - { - private: - public: - /// constructor - TextHierarchyBlockPrimitive2D(const Primitive2DSequence& rChildren); - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** FieldType definition */ - enum FieldType - { - /** unspecified. If more info is needed for a FieldType, - create a new type and it's handling - */ - FIELD_TYPE_COMMON, - - /** uses "FIELD_SEQ_BEGIN;PageField" -> special handling */ - FIELD_TYPE_PAGE, - - /** uses URL as string -> special handling */ - FIELD_TYPE_URL - }; - - /** TextHierarchyFieldPrimitive2D class - - This primitive encapsulates text fields. - Also: This type uses a type enum to transport the encapsulated field - type. Also added is a String which is type-dependent. E.g. for URL - fields, it contains the URL. - */ - class DRAWINGLAYER_DLLPUBLIC TextHierarchyFieldPrimitive2D : public GroupPrimitive2D - { - private: - FieldType meType; - rtl::OUString maString; - - public: - /// constructor - TextHierarchyFieldPrimitive2D( - const Primitive2DSequence& rChildren, - const FieldType& rFieldType, - const rtl::OUString& rString); - - /// data read access - FieldType getType() const { return meType; } - const rtl::OUString& getString() const { return maString; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextHierarchyEditPrimitive2D class - - #i97628# - Primitive to encapsulate text from an active text edit; some - renderers need to suppress this output due to painting the - edited text in e.g. an OutlinerEditView. It's derived from - GroupPrimitive2D, so the implicit decomposition will use the - content. To suppress, this primitive needs to be parsed by - the renderer without taking any action. - */ - class DRAWINGLAYER_DLLPUBLIC TextHierarchyEditPrimitive2D : public GroupPrimitive2D - { - private: - public: - /// constructor - TextHierarchyEditPrimitive2D(const Primitive2DSequence& rChildren); - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTHIERARCHYPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/textlayoutdevice.hxx b/drawinglayer/inc/drawinglayer/primitive2d/textlayoutdevice.hxx deleted file mode 100644 index b581bb7205..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/textlayoutdevice.hxx +++ /dev/null @@ -1,169 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_TEXTLAYOUTDEVICE_HXX -#define INCLUDED_DRAWINGLAYER_TEXTLAYOUTDEVICE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <sal/types.h> -#include <tools/solar.h> -#include <tools/poly.hxx> -#include <basegfx/range/b2drange.hxx> -#include <vector> -#include <com/sun/star/lang/Locale.hpp> - -////////////////////////////////////////////////////////////////////////////// -// predefines -class VirtualDevice; -class Font; -class String; -class OutputDevice; -class GDIMetaFile; - -namespace drawinglayer { namespace attribute { - class FontAttribute; -}} - -namespace basegfx { - class B2DPolyPolygon; - typedef ::std::vector< B2DPolyPolygon > B2DPolyPolygonVector; -} - -////////////////////////////////////////////////////////////////////////////// -// access to one global impTimedRefDev incarnation in namespace drawinglayer::primitive - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextLayouterDevice class - - This helper class exists to isolate all accesses to VCL - text formatting/handling functionality for primitive implementations. - When in the future FontHandling may move to an own library independent - from VCL, primitives will be prepared. - */ - class DRAWINGLAYER_DLLPUBLIC TextLayouterDevice - { - /// internally used VirtualDevice - VirtualDevice& mrDevice; - - public: - /// constructor/destructor - TextLayouterDevice(); - ~TextLayouterDevice(); - - /// tooling methods - void setFont(const Font& rFont); - void setFontAttribute( - const attribute::FontAttribute& rFontAttribute, - double fFontScaleX, - double fFontScaleY, - const ::com::sun::star::lang::Locale & rLocale); - - double getTextHeight() const; - double getOverlineHeight() const; - double getOverlineOffset() const; - double getUnderlineHeight() const; - double getUnderlineOffset() const; - double getStrikeoutOffset() const; - - double getTextWidth( - const String& rText, - sal_uInt32 nIndex, - sal_uInt32 nLength) const; - - bool getTextOutlines( - basegfx::B2DPolyPolygonVector&, - const String& rText, - sal_uInt32 nIndex, - sal_uInt32 nLength, - const ::std::vector< double >& rDXArray) const; - - basegfx::B2DRange getTextBoundRect( - const String& rText, - sal_uInt32 nIndex, - sal_uInt32 nLength) const; - - double getFontAscent() const; - double getFontDescent() const; - - void addTextRectActions( - const Rectangle& rRectangle, - const String& rText, - sal_uInt16 nStyle, - GDIMetaFile& rGDIMetaFile) const; - - ::std::vector< double > getTextArray( - const String& rText, - sal_uInt32 nIndex, - sal_uInt32 nLength) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// helper methods for vcl font handling - -namespace drawinglayer -{ - namespace primitive2d - { - /** Create a VCL-Font based on the definitions in FontAttribute - and the given FontScaling. The FontScaling defines the FontHeight - (fFontScaleY) and the FontWidth (fFontScaleX). The combination of - both defines FontStretching, where no stretching happens at - fFontScaleY == fFontScaleX - */ - Font DRAWINGLAYER_DLLPUBLIC getVclFontFromFontAttribute( - const attribute::FontAttribute& rFontAttribute, - double fFontScaleX, - double fFontScaleY, - double fFontRotation, - const ::com::sun::star::lang::Locale & rLocale); - - /** Generate FontAttribute DataSet derived from the given VCL-Font. - The FontScaling with fFontScaleY, fFontScaleX relationship (see - above) will be set in return parameter o_rSize to allow further - processing - */ - attribute::FontAttribute DRAWINGLAYER_DLLPUBLIC getFontAttributeFromVclFont( - basegfx::B2DVector& o_rSize, - const Font& rFont, - bool bRTL, - bool bBiDiStrong); - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //_DRAWINGLAYER_TEXTLAYOUTDEVICE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/textlineprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/textlineprimitive2d.hxx deleted file mode 100644 index 99ee53ba7e..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/textlineprimitive2d.hxx +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTLINEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTLINEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/primitive2d/textenumsprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - class DRAWINGLAYER_DLLPUBLIC TextLinePrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// geometric definitions - basegfx::B2DHomMatrix maObjectTransformation; - double mfWidth; - double mfOffset; - double mfHeight; - - /// decoration definitions - TextLine meTextLine; - basegfx::BColor maLineColor; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - TextLinePrimitive2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - double fWidth, - double fOffset, - double fHeight, - TextLine eTextLine, - const basegfx::BColor& rLineColor); - - /// data read access - const basegfx::B2DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } - double getWidth() const { return mfWidth; } - double getOffset() const { return mfOffset; } - double getHeight() const { return mfHeight; } - TextLine getTextLine() const { return meTextLine; } - const basegfx::BColor& getLineColor() const { return maLineColor; } - - /// compare operator - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTLINEPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/textprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/textprimitive2d.hxx deleted file mode 100644 index d287035639..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/textprimitive2d.hxx +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <tools/string.hxx> -#include <vcl/font.hxx> -#include <basegfx/color/bcolor.hxx> -#include <vector> -#include <com/sun/star/lang/Locale.hpp> -#include <drawinglayer/attribute/fontattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class B2DPolyPolygon; - typedef ::std::vector< B2DPolyPolygon > B2DPolyPolygonVector; -} - -class OutputDevice; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TextSimplePortionPrimitive2D class - - This is the basic primitive for representing a text portion. It contains - all needed information. If it is not handled by a renderer, it's decomposition - will provide the text PolyPolygon outlines as filled polygons, correctly - transformed. - - To get better text quality, it is suggested to handle tis primitive directly - in a renderer. In that case, e.g. hintings on the system can be supported. - - @param maTextTransform - The text transformation contains the text start position (always baselined) - as translation, the FontSize as scale (where width relative to height defines - font scaling and width == height means no font scaling) and the font rotation - and shear. - When shear is used and a renderer does not support it, it may be better to use - the decomposition which will do everything correctly. Same is true for mirroring - which would be expressed as negative scalings. - - @param rText - The text to be used. Only a part may be used, but a bigger part of the string - may be necessary for correct layouting (e.g. international) - - @param aTextPosition - The index to the first character to use from rText - - @param aTextLength - The number of characters to use from rText - - @param rDXArray - The distances between the characters. This parameter may be empty, in that case - the renderer is responsible to do something useful. If it is given, it has to be of - the size aTextLength. Its values are in logical coordinates and describe the - distance for each character to use. This is independent from the font width which - is given with maTextTransform. The first value is the offset to use from the start - point in FontCoordinateSystem X-Direction (given by maTextTransform) to the start - point of the second character - - @param rFontAttribute - The font definition - - @param rLocale - The locale to use - - @param rFontColor - The font color to use - */ - class DRAWINGLAYER_DLLPUBLIC TextSimplePortionPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// text transformation (FontCoordinateSystem) - basegfx::B2DHomMatrix maTextTransform; - - /// The text, used from maTextPosition up to maTextPosition + maTextLength - String maText; - - /// The index from where on maText is used - xub_StrLen maTextPosition; - - /// The length for maText usage, starting from maTextPosition - xub_StrLen maTextLength; - - /// The DX array in logic units - ::std::vector< double > maDXArray; - - /// The font definition - attribute::FontAttribute maFontAttribute; - - /// The Locale for the text - ::com::sun::star::lang::Locale maLocale; - - /// font color - basegfx::BColor maFontColor; - - /// #i96669# internal: add simple range buffering for this primitive - basegfx::B2DRange maB2DRange; - bool mbFilled; // Whether to fill a given width with the text - long mnWidthToFill; // the width to fill - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - TextSimplePortionPrimitive2D( - const basegfx::B2DHomMatrix& rNewTransform, - const String& rText, - xub_StrLen aTextPosition, - xub_StrLen aTextLength, - const ::std::vector< double >& rDXArray, - const attribute::FontAttribute& rFontAttribute, - const ::com::sun::star::lang::Locale& rLocale, - const basegfx::BColor& rFontColor, - bool bFilled = false, - long nWidthToFill = 0); - - /// helpers - /** get text outlines as polygons and their according ObjectTransformation. Handles all - the necessary VCL outline extractins, scaling adaptions and other stuff. - */ - void getTextOutlinesAndTransformation(basegfx::B2DPolyPolygonVector& rTarget, basegfx::B2DHomMatrix& rTransformation) const; - - /// data read access - const basegfx::B2DHomMatrix& getTextTransform() const { return maTextTransform; } - const String& getText() const { return maText; } - xub_StrLen getTextPosition() const { return maTextPosition; } - xub_StrLen getTextLength() const { return maTextLength; } - const ::std::vector< double >& getDXArray() const { return maDXArray; } - const attribute::FontAttribute& getFontAttribute() const { return maFontAttribute; } - const ::com::sun::star::lang::Locale& getLocale() const { return maLocale; } - const basegfx::BColor& getFontColor() const { return maFontColor; } - bool isFilled() const { return mbFilled; } - long getWidthToFill() const { return mnWidthToFill; } - - /// compare operator - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - - /// small helper to have a compare operator for Locale - bool DRAWINGLAYER_DLLPUBLIC LocalesAreEqual(const ::com::sun::star::lang::Locale& rA, const ::com::sun::star::lang::Locale& rB); - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx deleted file mode 100644 index 03daf74afe..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx +++ /dev/null @@ -1,164 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTSTRIKEOUTPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTSTRIKEOUTPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/primitive2d/textenumsprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/color/bcolor.hxx> -#include <drawinglayer/attribute/fontattribute.hxx> -#include <com/sun/star/lang/Locale.hpp> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - class DRAWINGLAYER_DLLPUBLIC BaseTextStrikeoutPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// geometric definitions - basegfx::B2DHomMatrix maObjectTransformation; - double mfWidth; - - /// decoration definitions - basegfx::BColor maFontColor; - - public: - /// constructor - BaseTextStrikeoutPrimitive2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - double fWidth, - const basegfx::BColor& rFontColor); - - /// data read access - const basegfx::B2DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } - double getWidth() const { return mfWidth; } - const basegfx::BColor& getFontColor() const { return maFontColor; } - - /// compare operator - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - class DRAWINGLAYER_DLLPUBLIC TextCharacterStrikeoutPrimitive2D : public BaseTextStrikeoutPrimitive2D - { - private: - sal_Unicode maStrikeoutChar; - attribute::FontAttribute maFontAttribute; - ::com::sun::star::lang::Locale maLocale; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - TextCharacterStrikeoutPrimitive2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - double fWidth, - const basegfx::BColor& rFontColor, - sal_Unicode aStrikeoutChar, - const attribute::FontAttribute& rFontAttribute, - const ::com::sun::star::lang::Locale& rLocale); - - /// data read access - sal_Unicode getStrikeoutChar() const { return maStrikeoutChar; } - const attribute::FontAttribute& getFontAttribute() const { return maFontAttribute; } - const ::com::sun::star::lang::Locale& getLocale() const { return maLocale; } - - /// compare operator - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - class DRAWINGLAYER_DLLPUBLIC TextGeometryStrikeoutPrimitive2D : public BaseTextStrikeoutPrimitive2D - { - private: - double mfHeight; - double mfOffset; - TextStrikeout meTextStrikeout; - - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - TextGeometryStrikeoutPrimitive2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - double fWidth, - const basegfx::BColor& rFontColor, - double fHeight, - double fOffset, - TextStrikeout eTextStrikeout); - - /// data read access - double getHeight() const { return mfHeight; } - double getOffset() const { return mfOffset; } - TextStrikeout getTextStrikeout() const { return meTextStrikeout; } - - /// compare operator - virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TEXTSTRIKEOUTPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/transformprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/transformprimitive2d.hxx deleted file mode 100644 index db3c7db6c9..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/transformprimitive2d.hxx +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TRANSFORMPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TRANSFORMPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TransformPrimitive2D class - - This is one of the basic grouping primitives and it provides - embedding a sequence of primitives (a geometry) into a - transformation. All renderers have to handle this, usually by - building a current transformation stack (linear combination) - and applying this to all to-be-rendered geometry. If not handling - this, the output will be mostly wrong since this primitive is - widely used. - - It does transform by embedding an existing geometry into a - transformation as Child-content. This allows re-usage of the - refcounted Uno-Api primitives and their existung, buffered - decompositions. - - It could e.g. be used to show a single object geometry in 1000 - different, transformed states without the need to create those - thousand primitive contents. - */ - class DRAWINGLAYER_DLLPUBLIC TransformPrimitive2D : public GroupPrimitive2D - { - private: - // the transformation to apply to the child geometry - basegfx::B2DHomMatrix maTransformation; - - public: - /// constructor - TransformPrimitive2D( - const basegfx::B2DHomMatrix& rTransformation, - const Primitive2DSequence& rChildren); - - /// data read access - const basegfx::B2DHomMatrix& getTransformation() const { return maTransformation; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TRANSFORMPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/transparenceprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/transparenceprimitive2d.hxx deleted file mode 100644 index b2e7d2b6af..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/transparenceprimitive2d.hxx +++ /dev/null @@ -1,102 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TRANSPARENCEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TRANSPARENCEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** TransparencePrimitive2D class - - This is the basic primitive for applying freely defined transparence - to freely defined content. The basic idea is to associate a content - which is defined as a sequence of primitives and hold as child content - in the GroupPrimitive2D with a transparence channel also defined as a sequence - of primitives and hold in the transparence member. - - The basic definition is to use the transparence content as transparence-Mask by - interpreting the transparence-content not as RGB, but as Luminance transparence mask - using the common RGB_to_luminance definition as e.g. used by VCL. - - The defining geometry is the Range of the child primitive sequence, - this means the renderers will/shall use this geometric information for - rendering, not the transparent one. The transparent one should/will be clipped - accordingly. - */ - class DRAWINGLAYER_DLLPUBLIC TransparencePrimitive2D : public GroupPrimitive2D - { - private: - /// The transparence-Mask who's RGB-Values are interpreted as Luminance - Primitive2DSequence maTransparence; - - public: - /** constructor - - @param rChildren - The content which is defined to have a transparency. The - range of this primitive is defined by this content - - @param rTransparence - The definition of the Transparence-channel for this primitive. It - will be interpreted as mask by interpreting as gray values - using the common RGB_to_luminance definitions - */ - TransparencePrimitive2D( - const Primitive2DSequence& rChildren, - const Primitive2DSequence& rTransparence); - - /// data read access - const Primitive2DSequence& getTransparence() const { return maTransparence; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_TRANSPARENCEPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx deleted file mode 100644 index 1f5d0eb85f..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_UNIFIEDTRANSPARENCEPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_UNIFIEDTRANSPARENCEPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** UnifiedTransparencePrimitive2D class - - This primitive encapsualtes a child hierarchy and defines - that it shall be visualized with the given transparency. That - transparency is unique for all contained geometry, so that - e.g. overlapping polygons in the child geometry will not show - regions of combined transparency, but be all rendered with the - defined, single transparency. - */ - class DRAWINGLAYER_DLLPUBLIC UnifiedTransparencePrimitive2D : public GroupPrimitive2D - { - private: - /// the unified transparence - double mfTransparence; - - public: - /// constructor - UnifiedTransparencePrimitive2D( - const Primitive2DSequence& rChildren, - double fTransparence); - - /// data read access - double getTransparence() const { return mfTransparence; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// own getB2DRange implementation to include transparent geometries to BoundRect calculations - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// create decomposition - virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_UNIFIEDTRANSPARENCEPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/wallpaperprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/wallpaperprimitive2d.hxx deleted file mode 100644 index 626e8b3a3d..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/wallpaperprimitive2d.hxx +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_WALLPAPERPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_WALLPAPERPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/primitivetools2d.hxx> -#include <vcl/bitmapex.hxx> -#include <vcl/wall.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** WallpaperBitmapPrimitive2D class - - This is a specialized primtive for the Wallpaper definitions included in - VCL and Metafiles. The extraordinary about the bitmap definition part of - the Wallpaper is that it uses PIXEL size of the given Bitmap and not - the logic and/or discrete size derived by PrefMapMode/PrefSize methods. - To emulate this, a ViewTransformation dependent primitive is needed which - takes over the correct scaling(s). - - Since a specialized primitive is needed anyways, i opted to also add the - layouting which is dependent from WallpaperStyle; thus it does not need - to be handled anywhere else in the future. - */ - class DRAWINGLAYER_DLLPUBLIC WallpaperBitmapPrimitive2D : public ViewTransformationDependentPrimitive2D - { - private: - basegfx::B2DRange maObjectRange; - BitmapEx maBitmapEx; - WallpaperStyle meWallpaperStyle; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - WallpaperBitmapPrimitive2D( - const basegfx::B2DRange& rObjectRange, - const BitmapEx& rBitmapEx, - WallpaperStyle eWallpaperStyle); - - /// data read access - const basegfx::B2DRange& getLocalObjectRange() const { return maObjectRange; } - const BitmapEx& getBitmapEx() const { return maBitmapEx ; } - WallpaperStyle getWallpaperStyle() const { return meWallpaperStyle; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// get B2Drange - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PRIMITIVE2D_WALLPAPERPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive2d/wrongspellprimitive2d.hxx b/drawinglayer/inc/drawinglayer/primitive2d/wrongspellprimitive2d.hxx deleted file mode 100644 index 06199bd95c..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive2d/wrongspellprimitive2d.hxx +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_WRONGSPELLPRIMITIVE2D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_WRONGSPELLPRIMITIVE2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// -// WrongSpellPrimitive2D class - -namespace drawinglayer -{ - namespace primitive2d - { - /** WrongSpellPrimitive2D class - - This is a helper primitive to hold evtl. WrongSpell visualisations - in the sequence of primitives. The primitive holds this information - separated form the TextPortions to where it belongs to tot expand the - TextSimplePortionPrimitive2D more as needed. - - A renderer who does not want to visualize this (if contained at all) - can detect and ignore this primitive. If it's decomposition is used, - it will be visualized as red wavelines. - - The geometric definition defines a line on the X-Axis (no Y-coordinates) - which will when transformed by Transformation, create the coordinate data. - */ - class DRAWINGLAYER_DLLPUBLIC WrongSpellPrimitive2D : public BufferedDecompositionPrimitive2D - { - private: - /// geometry definition - basegfx::B2DHomMatrix maTransformation; - double mfStart; - double mfStop; - - /// color (usually red) - basegfx::BColor maColor; - - protected: - /// create local decomposition - virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - WrongSpellPrimitive2D( - const basegfx::B2DHomMatrix& rTransformation, - double fStart, - double fStop, - const basegfx::BColor& rColor); - - /// data read access - const basegfx::B2DHomMatrix& getTransformation() const { return maTransformation; } - double getStart() const { return mfStart; } - double getStop() const { return mfStop; } - const basegfx::BColor& getColor() const { return maColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive2DIDBlock() - }; - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_WRONGSPELLPRIMITIVE2D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/baseprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/baseprimitive3d.hxx deleted file mode 100644 index 7ad394c064..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/baseprimitive3d.hxx +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_BASEPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_BASEPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <cppuhelper/compbase1.hxx> -#include <boost/utility.hpp> -#include <com/sun/star/graphic/XPrimitive3D.hpp> -#include <comphelper/broadcasthelper.hxx> -#include <basegfx/range/b3drange.hxx> - -////////////////////////////////////////////////////////////////////////////// -/** defines for DeclPrimitrive3DIDBlock and ImplPrimitrive3DIDBlock - Added to be able to simply change identification stuff later, e.g. add - a identification string and/or ID to the interface and to the implementation - ATM used to delclare implement getPrimitive3DID() - */ - -#define DeclPrimitrive3DIDBlock() \ - virtual sal_uInt32 getPrimitive3DID() const; - -#define ImplPrimitrive3DIDBlock(TheClass, TheID) \ - sal_uInt32 TheClass::getPrimitive3DID() const { return TheID; } - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace geometry { - class ViewInformation3D; -}} - -namespace drawinglayer { namespace primitive3d { - /// typedefs for basePrimitive3DImplBase, Primitive3DSequence and Primitive3DReference - typedef cppu::WeakComponentImplHelper1< ::com::sun::star::graphic::XPrimitive3D > BasePrimitive3DImplBase; - typedef ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XPrimitive3D > Primitive3DReference; - typedef ::com::sun::star::uno::Sequence< Primitive3DReference > Primitive3DSequence; -}} - -////////////////////////////////////////////////////////////////////////////// -// basePrimitive3D class - -namespace drawinglayer -{ - namespace primitive3d - { - /** BasePrimitive3D class - - Baseclass for all C++ implementations of com::sun::star::graphic::XPrimitive2D - - The description/functionality is identical with the 2D case in baseprimitive2d.hxx, - please see there for detailed information. - - Current Basic 3D Primitives are: - - - PolygonHairlinePrimitive3D (for 3D hairlines) - - PolyPolygonMaterialPrimitive3D (for 3D filled plane polygons) - - That's all for 3D! - */ - class DRAWINGLAYER_DLLPUBLIC BasePrimitive3D - : private boost::noncopyable, - protected comphelper::OBaseMutex, - public BasePrimitive3DImplBase - { - private: - protected: - public: - // constructor/destructor - BasePrimitive3D(); - virtual ~BasePrimitive3D(); - - /** the ==operator is mainly needed to allow testing newly-created high level primitives against their last - incarnation which buffers/holds the decompositionsThe default implementation - uses getPrimitive3DID()-calls to test if it's the same ID at last. Overloaded implementation are then - based on this implementation. - */ - virtual bool operator==( const BasePrimitive3D& rPrimitive ) const; - bool operator!=( const BasePrimitive3D& rPrimitive ) const { return !operator==(rPrimitive); } - - /** This method is for places where using the C++ implementation directly is possible. The subprocessing - and range merging is more efficient when working directly on basegfx::B3DRange. The default implementation - will use getDecomposition results to create the range - */ - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /** provide unique ID for fast identifying of known primitive implementations in renderers. These use - the the defines from primitivetypes3d.hxx to define unique IDs. - */ - virtual sal_uInt32 getPrimitive3DID() const = 0; - - /// The default implementation returns an empty sequence - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - // - // Methods from XPrimitive3D - // - - /** The getDecomposition implementation for UNO API will use getDecomposition from this implementation. It - will get the ViewInformation from the ViewParameters for that purpose - */ - virtual Primitive3DSequence SAL_CALL getDecomposition( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rViewParameters ) throw ( ::com::sun::star::uno::RuntimeException ); - - /** the getRange default implemenation will use getDecomposition to create the range information from merging - getRange results from the single local decomposition primitives. - */ - virtual ::com::sun::star::geometry::RealRectangle3D SAL_CALL getRange( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rViewParameters ) throw ( ::com::sun::star::uno::RuntimeException ); - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// BufferedDecompositionPrimitive3D class - -namespace drawinglayer -{ - namespace primitive3d - { - /** BufferedDecompositionPrimitive3D class - - Baseclass for all C++ implementations of com::sun::star::graphic::XPrimitive2D - - The description/functionality is identical with the 2D case in baseprimitive2d.hxx, - please see there for detailed information - */ - class DRAWINGLAYER_DLLPUBLIC BufferedDecompositionPrimitive3D - : public BasePrimitive3D - { - private: - /// a sequence used for buffering the last create3DDecomposition() result - Primitive3DSequence maBuffered3DDecomposition; - - protected: - /** access methods to maBuffered3DDecomposition. The usage of this methods may allow - later thread-safe stuff to be added if needed. Only to be used by getDecomposition() - implementations for buffering the last decomposition. - */ - const Primitive3DSequence& getBuffered3DDecomposition() const { return maBuffered3DDecomposition; } - void setBuffered3DDecomposition(const Primitive3DSequence& rNew) { maBuffered3DDecomposition = rNew; } - - /** method which is to be used to implement the local decomposition of a 2D primitive. The default - implementation will just return an empty decomposition - */ - virtual Primitive3DSequence create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - public: - // constructor - BufferedDecompositionPrimitive3D(); - - /** The getDecomposition default implementation will on demand use create3DDecomposition() if - maBuffered3DDecomposition is empty. It will set maBuffered3DDecomposition to this obtained decomposition - to buffer it. If the decomposition is also ViewInformation-dependent, this method needs to be - overloaded and the ViewInformation for the last decomposition needs to be remembered, too, and - be used in the next call to decide if the buffered decomposition may be reused or not. - */ - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// tooling - -namespace drawinglayer -{ - namespace primitive3d - { - /// get B3DRange from a given Primitive3DReference - basegfx::B3DRange DRAWINGLAYER_DLLPUBLIC getB3DRangeFromPrimitive3DReference(const Primitive3DReference& rCandidate, const geometry::ViewInformation3D& aViewInformation); - - /// get range3D from a given Primitive3DSequence - basegfx::B3DRange DRAWINGLAYER_DLLPUBLIC getB3DRangeFromPrimitive3DSequence(const Primitive3DSequence& rCandidate, const geometry::ViewInformation3D& aViewInformation); - - /** compare two Primitive2DReferences for equality, including trying to get implementations (BasePrimitive2D) - and using compare operator - */ - bool DRAWINGLAYER_DLLPUBLIC arePrimitive3DReferencesEqual(const Primitive3DReference& rA, const Primitive3DReference& rB); - - /// compare two Primitive3DReferences for equality, uses arePrimitive3DReferencesEqual internally - bool DRAWINGLAYER_DLLPUBLIC arePrimitive3DSequencesEqual(const Primitive3DSequence& rA, const Primitive3DSequence& rB); - - /// concatenate sequence - void DRAWINGLAYER_DLLPUBLIC appendPrimitive3DSequenceToPrimitive3DSequence(Primitive3DSequence& rDest, const Primitive3DSequence& rSource); - - /// concatenate single Primitive3D - void DRAWINGLAYER_DLLPUBLIC appendPrimitive3DReferenceToPrimitive3DSequence(Primitive3DSequence& rDest, const Primitive3DReference& rSource); - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_BASEPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx deleted file mode 100644 index 2f6aeb8c93..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_PRIMITIVETYPES3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_PRIMITIVETYPES3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// define ranges for other libraries - -#define PRIMITIVE3D_ID_RANGE_DRAWINGLAYER (0 << 16) -// #define PRIMITIVE3D_ID_RANGE_SVX (1 << 16) - -////////////////////////////////////////////////////////////////////////////// -// local primitives - -#define PRIMITIVE3D_ID_GROUPPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 0) -#define PRIMITIVE3D_ID_HATCHTEXTUREPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 1) -#define PRIMITIVE3D_ID_MODIFIEDCOLORPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 2) -#define PRIMITIVE3D_ID_POLYGONHAIRLINEPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 3) -#define PRIMITIVE3D_ID_POLYGONSTROKEPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 4) -#define PRIMITIVE3D_ID_POLYGONTUBEPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 5) -#define PRIMITIVE3D_ID_POLYPOLYGONMATERIALPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 6) -#define PRIMITIVE3D_ID_SDRCUBEPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 7) -#define PRIMITIVE3D_ID_SDREXTRUDEPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 8) -#define PRIMITIVE3D_ID_SDRLATHEPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 9) -#define PRIMITIVE3D_ID_SDRPOLYPOLYGONPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 10) -#define PRIMITIVE3D_ID_SDRSPHEREPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 11) -#define PRIMITIVE3D_ID_SHADOWPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 12) -#define PRIMITIVE3D_ID_UNIFIEDTRANSPARENCETEXTUREPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 13) -#define PRIMITIVE3D_ID_GRADIENTTEXTUREPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 14) -#define PRIMITIVE3D_ID_BITMAPTEXTUREPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 15) -#define PRIMITIVE3D_ID_TRANSPARENCETEXTUREPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 16) -#define PRIMITIVE3D_ID_TRANSFORMPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 17) -#define PRIMITIVE3D_ID_HIDDENGEOMETRYPRIMITIVE3D (PRIMITIVE3D_ID_RANGE_DRAWINGLAYER| 18) - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_PRIMITIVETYPES3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/groupprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/groupprimitive3d.hxx deleted file mode 100644 index 106beb9f95..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/groupprimitive3d.hxx +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_GROUPPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_GROUPPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** GroupPrimitive3D class - - Baseclass for all grouping 3D primitives - - The description/functionality is identical with the 2D case in groupprimitive2d.hxx, - please see there for detailed information. - - Current Basic 3D StatePrimitives are: - - - ModifiedColorPrimitive3D (for a stack of color modifications) - - ShadowPrimitive3D (for 3D objects with shadow; this is a special case - since the shadow of a 3D primitive is a 2D primitive set) - - TexturePrimitive3D (with the following variations) - - GradientTexturePrimitive3D (for 3D gradient fill) - - BitmapTexturePrimitive3D (for 3D Bitmap fill) - - TransparenceTexturePrimitive3D (for 3D transparence) - - HatchTexturePrimitive3D (for 3D hatch fill) - - TransformPrimitive3D (for a transformation stack) - */ - class DRAWINGLAYER_DLLPUBLIC GroupPrimitive3D : public BasePrimitive3D - { - private: - /// the children. Declared private since this shall never be changed at all after construction - Primitive3DSequence maChildren; - - public: - /// constructor - GroupPrimitive3D(const Primitive3DSequence& rChildren); - - /// data read access - Primitive3DSequence getChildren() const { return maChildren; } - - /// compare operator - virtual bool operator==( const BasePrimitive3D& rPrimitive ) const; - - /// local decomposition. Implementation will just return children - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_GROUPPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/hatchtextureprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/hatchtextureprimitive3d.hxx deleted file mode 100644 index 9a7a4f7edc..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/hatchtextureprimitive3d.hxx +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_HATCHTEXTUREPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_HATCHTEXTUREPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/textureprimitive3d.hxx> -#include <drawinglayer/attribute/fillhatchattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** HatchTexturePrimitive3D class - - HatchTexturePrimitive3D is derived from GroupPrimitive3D, but implements - a decomposition which is complicated enough for buffering. Since the group - primitive has no default buffering, it is necessary here to add a local - buffering mechanism for the decomposition - */ - class DRAWINGLAYER_DLLPUBLIC HatchTexturePrimitive3D : public TexturePrimitive3D - { - private: - /// the hatch definition - attribute::FillHatchAttribute maHatch; - - /// the buffered decomposed hatch - Primitive3DSequence maBuffered3DDecomposition; - - protected: - /// helper: local decomposition - Primitive3DSequence impCreate3DDecomposition() const; - - /// local access methods to maBufferedDecomposition - const Primitive3DSequence& getBuffered3DDecomposition() const { return maBuffered3DDecomposition; } - void setBuffered3DDecomposition(const Primitive3DSequence& rNew) { maBuffered3DDecomposition = rNew; } - - public: - /// constructor - HatchTexturePrimitive3D( - const attribute::FillHatchAttribute& rHatch, - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize, - bool bModulate, - bool bFilter); - - /// data read access - const attribute::FillHatchAttribute& getHatch() const { return maHatch; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// local decomposition. - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_HATCHTEXTUREPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx deleted file mode 100644 index 8be76b30d2..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_HIDDENGEOMETRYPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_HIDDENGEOMETRYPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/groupprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - // This primitive is used to represent geometry for non-visible objects, - // e.g. a 3D cube without fill attributes. To still be able to use - // primitives for HitTest functionality, the 3d decompositions produce - // an as much as possible simplified fill geometry encapsulated in this - // primtive when there is no fill geometry. Currently, the 3d hit test - // uses only areas, so maybe in a further enchanced version this will change - // to 'if neither filled nor lines' creation criteria. The whole primitive - // decomposes to nothing, so no one not knowing it will be influenced. Only - // helper processors for hit test (and maybe BoundRect extractors) will - // use it and it's children subcontent. - class DRAWINGLAYER_DLLPUBLIC HiddenGeometryPrimitive3D : public GroupPrimitive3D - { - public: - HiddenGeometryPrimitive3D(const Primitive3DSequence& rChildren); - - // despite returning an empty decomposition since it's no visualisation data, - // range calculation is intended to use hidden geometry, so - // the local implementation will return the children's range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// The default implementation returns an empty sequence - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - // provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_HIDDENGEOMETRYPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx deleted file mode 100644 index d128be0f7d..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_MODIFIEDCOLORPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_MODIFIEDCOLORPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/groupprimitive3d.hxx> -#include <basegfx/color/bcolormodifier.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** ModifiedColorPrimitive3D class - - This primitive is a grouping primitive and allows to define - how the colors of it's child content shall be modified for - visualisation. Please see the ModifiedColorPrimitive2D - description for more info. - */ - class DRAWINGLAYER_DLLPUBLIC ModifiedColorPrimitive3D : public GroupPrimitive3D - { - private: - /// The ColorModifier to use - basegfx::BColorModifier maColorModifier; - - public: - /// constructor - ModifiedColorPrimitive3D( - const Primitive3DSequence& rChildren, - const basegfx::BColorModifier& rColorModifier); - - /// data read access - const basegfx::BColorModifier& getColorModifier() const { return maColorModifier; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_MODIFIEDCOLORPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/polygonprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/polygonprimitive3d.hxx deleted file mode 100644 index 69b5755b17..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/polygonprimitive3d.hxx +++ /dev/null @@ -1,146 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYGONPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYGONPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <drawinglayer/attribute/lineattribute.hxx> -#include <drawinglayer/attribute/strokeattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** PolygonHairlinePrimitive3D class - - This primitive defines a Hairline in 3D. Since hairlines are view-dependent, - this primitive is view-dependent, too. - - This is one of the non-decomposable 3D primitives, so a renderer - should proccess it. - */ - class DRAWINGLAYER_DLLPUBLIC PolygonHairlinePrimitive3D : public BasePrimitive3D - { - private: - /// the hairline geometry - basegfx::B3DPolygon maPolygon; - - /// the hairline color - basegfx::BColor maBColor; - - public: - /// constructor - PolygonHairlinePrimitive3D( - const basegfx::B3DPolygon& rPolygon, - const basegfx::BColor& rBColor); - - /// data read access - const basegfx::B3DPolygon& getB3DPolygon() const { return maPolygon; } - const basegfx::BColor& getBColor() const { return maBColor; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// get range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** PolygonStrokePrimitive3D class - - This primitive defines a 3D line with line width, line join, line color - and stroke attributes. It will be decomposed dependent on the definition - to the needed primitives, e.g. filled Tubes for fat lines. - */ - class DRAWINGLAYER_DLLPUBLIC PolygonStrokePrimitive3D : public BufferedDecompositionPrimitive3D - { - private: - /// the line geometry - basegfx::B3DPolygon maPolygon; - - /// the line attributes like width, join and color - attribute::LineAttribute maLineAttribute; - - /// the line stroking (if used) - attribute::StrokeAttribute maStrokeAttribute; - - protected: - /// local decomposition. - virtual Primitive3DSequence create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - public: - /// constructor - PolygonStrokePrimitive3D( - const basegfx::B3DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute); - - /// constructor without stroking - PolygonStrokePrimitive3D( - const basegfx::B3DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute); - - /// data read access - basegfx::B3DPolygon getB3DPolygon() const { return maPolygon; } - const attribute::LineAttribute& getLineAttribute() const { return maLineAttribute; } - const attribute::StrokeAttribute& getStrokeAttribute() const { return maStrokeAttribute; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYGONPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/polygontubeprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/polygontubeprimitive3d.hxx deleted file mode 100644 index 0d57f52c0f..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/polygontubeprimitive3d.hxx +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYGONTUBEPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYGONTUBEPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/polygonprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class B3DPolyPolygon; - class B3DHomMatrix; -} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** PolygonStrokePrimitive3D class - - This 3D primitive extends a 3D hairline to a 3D tube which is - e.g. used for fat lines in 3D. It's decomposition will create all - 3D objects needed for the line tubes and the edge roundings - in full 3D. - */ - class DRAWINGLAYER_DLLPUBLIC PolygonTubePrimitive3D : public PolygonHairlinePrimitive3D - { - private: - /// hold the last decompositon since it's expensive - Primitive3DSequence maLast3DDecomposition; - - /// visualisation parameters - double mfRadius; - double mfDegreeStepWidth; - double mfMiterMinimumAngle; - basegfx::B2DLineJoin maLineJoin; - - protected: - /** access methods to maLast3DDecomposition. The usage of this methods may allow - later thread-safe stuff to be added if needed. Only to be used by getDecomposition() - implementations for buffering the last decomposition. - */ - const Primitive3DSequence& getLast3DDecomposition() const { return maLast3DDecomposition; } - void setLast3DDecomposition(const Primitive3DSequence& rNew) { maLast3DDecomposition = rNew; } - - /// local decomposition. - Primitive3DSequence impCreate3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - public: - /// constructor - PolygonTubePrimitive3D( - const basegfx::B3DPolygon& rPolygon, - const basegfx::BColor& rBColor, - double fRadius, basegfx::B2DLineJoin aLineJoin, - double fDegreeStepWidth = 10.0 * F_PI180, - double fMiterMinimumAngle = 15.0 * F_PI180); - - /// data read access - double getRadius() const { return mfRadius; } - double getDegreeStepWidth() const { return mfDegreeStepWidth; } - double getMiterMinimumAngle() const { return mfMiterMinimumAngle; } - basegfx::B2DLineJoin getLineJoin() const { return maLineJoin; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /** local decomposition. Use own buffering since we are not derived from - BufferedDecompositionPrimitive3D - */ - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYGONTUBEPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/polypolygonprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/polypolygonprimitive3d.hxx deleted file mode 100644 index 557a7ec44a..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/polypolygonprimitive3d.hxx +++ /dev/null @@ -1,95 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYPOLYGONPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYPOLYGONPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <basegfx/polygon/b3dpolypolygon.hxx> -#include <drawinglayer/attribute/materialattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** PolyPolygonMaterialPrimitive3D class - - This primitive defines a planar 3D PolyPolygon filled with a single color. - This is one of the non-decomposable primitives, so a renderer - should proccess it. - - It is assumed here that the PolyPolgon is a single plane in 3D. - */ - class DRAWINGLAYER_DLLPUBLIC PolyPolygonMaterialPrimitive3D : public BasePrimitive3D - { - private: - /// the PolyPolygon geometry - basegfx::B3DPolyPolygon maPolyPolygon; - - /// the fill parameters - attribute::MaterialAttribute3D maMaterial; - - /// bitfield - unsigned mbDoubleSided : 1; - - public: - /// constructor - PolyPolygonMaterialPrimitive3D( - const basegfx::B3DPolyPolygon& rPolyPolygon, - const attribute::MaterialAttribute3D& rMaterial, - bool bDoubleSided); - - /// data read access - const basegfx::B3DPolyPolygon& getB3DPolyPolygon() const { return maPolyPolygon; } - const attribute::MaterialAttribute3D& getMaterial() const { return maMaterial; } - bool getDoubleSided() const { return mbDoubleSided; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// get range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_POLYPOLYGONPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/sdrcubeprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/sdrcubeprimitive3d.hxx deleted file mode 100644 index 8ceed88890..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/sdrcubeprimitive3d.hxx +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRCUBEPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRCUBEPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/sdrprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** SdrCubePrimitive3D class - - This 3D primitive expands the SdrPrimitive3D to a 3D cube definition. - The cube is implicitely in unit coordinates and the given transformation - defines it's geometry in space. - */ - class DRAWINGLAYER_DLLPUBLIC SdrCubePrimitive3D : public SdrPrimitive3D - { - protected: - /// local decomposition. - virtual Primitive3DSequence create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - public: - /// constructor - SdrCubePrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute); - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// get range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRCUBEPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/sdrdecompositiontools3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/sdrdecompositiontools3d.hxx deleted file mode 100644 index 4dae581c84..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/sdrdecompositiontools3d.hxx +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRDECOMPOSITIONTOOLS3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRDECOMPOSITIONTOOLS3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <com/sun/star/drawing/TextureProjectionMode.hpp> -#include <vector> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class B3DPolygon; - class B3DPolyPolygon; - class B3DHomMatrix; - class B2DVector; -} - -namespace drawinglayer { namespace attribute { - class SdrLineAttribute; - class SdrFillAttribute; - class Sdr3DObjectAttribute; - class FillGradientAttribute; - class SdrShadowAttribute; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - // #i98295# - basegfx::B3DRange DRAWINGLAYER_DLLPUBLIC getRangeFrom3DGeometry(::std::vector< basegfx::B3DPolyPolygon >& rFill); - void DRAWINGLAYER_DLLPUBLIC applyNormalsKindSphereTo3DGeometry(::std::vector< basegfx::B3DPolyPolygon >& rFill, const basegfx::B3DRange& rRange); - void DRAWINGLAYER_DLLPUBLIC applyNormalsKindFlatTo3DGeometry(::std::vector< basegfx::B3DPolyPolygon >& rFill); - void DRAWINGLAYER_DLLPUBLIC applyNormalsInvertTo3DGeometry(::std::vector< basegfx::B3DPolyPolygon >& rFill); - - // #i98314# - void DRAWINGLAYER_DLLPUBLIC applyTextureTo3DGeometry( - ::com::sun::star::drawing::TextureProjectionMode eModeX, - ::com::sun::star::drawing::TextureProjectionMode eModeY, - ::std::vector< basegfx::B3DPolyPolygon >& rFill, - const basegfx::B3DRange& rRange, - const basegfx::B2DVector& rTextureSize); - - Primitive3DSequence DRAWINGLAYER_DLLPUBLIC create3DPolyPolygonLinePrimitives( - const basegfx::B3DPolyPolygon& rUnitPolyPolygon, - const basegfx::B3DHomMatrix& rObjectTransform, - const attribute::SdrLineAttribute& rLine); - - Primitive3DSequence DRAWINGLAYER_DLLPUBLIC create3DPolyPolygonFillPrimitives( - const ::std::vector< basegfx::B3DPolyPolygon >& r3DPolyPolygonVector, - const basegfx::B3DHomMatrix& rObjectTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::Sdr3DObjectAttribute& aSdr3DObjectAttribute, - const attribute::SdrFillAttribute& rFill, - const attribute::FillGradientAttribute& rFillGradient); - - Primitive3DSequence DRAWINGLAYER_DLLPUBLIC createShadowPrimitive3D( - const Primitive3DSequence& rSource, - const attribute::SdrShadowAttribute& rShadow, - bool bShadow3D); - - Primitive3DSequence DRAWINGLAYER_DLLPUBLIC createHiddenGeometryPrimitives3D( - const ::std::vector< basegfx::B3DPolyPolygon >& r3DPolyPolygonVector, - const basegfx::B3DHomMatrix& rObjectTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::Sdr3DObjectAttribute& aSdr3DObjectAttribute); - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //_DRAWINGLAYER_PRIMITIVE3D_SDRDECOMPOSITIONTOOLS3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/sdrextrudelathetools3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/sdrextrudelathetools3d.hxx deleted file mode 100644 index 1bfe7a1e00..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/sdrextrudelathetools3d.hxx +++ /dev/null @@ -1,148 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDREXTRUDELATHETOOLS3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDREXTRUDELATHETOOLS3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <basegfx/polygon/b3dpolypolygon.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <vector> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace drawinglayer { namespace geometry { - class ViewInformation3D; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** SliceType3D definition */ - enum SliceType3D - { - SLICETYPE3D_REGULAR, // normal geoemtry Slice3D - SLICETYPE3D_FRONTCAP, // front cap - SLICETYPE3D_BACKCAP // back cap - }; - - /// class to hold one Slice3D - class DRAWINGLAYER_DLLPUBLIC Slice3D - { - protected: - basegfx::B3DPolyPolygon maPolyPolygon; - SliceType3D maSliceType; - - public: - Slice3D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const basegfx::B3DHomMatrix& aTransform, - SliceType3D aSliceType = SLICETYPE3D_REGULAR) - : maPolyPolygon(basegfx::tools::createB3DPolyPolygonFromB2DPolyPolygon(rPolyPolygon)), - maSliceType(aSliceType) - { - maPolyPolygon.transform(aTransform); - } - - Slice3D( - const basegfx::B3DPolyPolygon& rPolyPolygon, - SliceType3D aSliceType = SLICETYPE3D_REGULAR) - : maPolyPolygon(rPolyPolygon), - maSliceType(aSliceType) - { - } - - // data access - const basegfx::B3DPolyPolygon& getB3DPolyPolygon() const { return maPolyPolygon; } - SliceType3D getSliceType() const { return maSliceType; } - }; - - /// typedef for a group of Slice3Ds - typedef ::std::vector< Slice3D > Slice3DVector; - - /// helpers for creation - void DRAWINGLAYER_DLLPUBLIC createLatheSlices( - Slice3DVector& rSliceVector, - const basegfx::B2DPolyPolygon& rSource, - double fBackScale, - double fDiagonal, - double fRotation, - sal_uInt32 nSteps, - bool bCharacterMode, - bool bCloseFront, - bool bCloseBack); - - void DRAWINGLAYER_DLLPUBLIC createExtrudeSlices( - Slice3DVector& rSliceVector, - const basegfx::B2DPolyPolygon& rSource, - double fBackScale, - double fDiagonal, - double fDepth, - bool bCharacterMode, - bool bCloseFront, - bool bCloseBack); - - /// helpers for geometry extraction - basegfx::B3DPolyPolygon DRAWINGLAYER_DLLPUBLIC extractHorizontalLinesFromSlice(const Slice3DVector& rSliceVector, bool bCloseHorLines); - basegfx::B3DPolyPolygon DRAWINGLAYER_DLLPUBLIC extractVerticalLinesFromSlice(const Slice3DVector& rSliceVector); - - void DRAWINGLAYER_DLLPUBLIC extractPlanesFromSlice( - ::std::vector< basegfx::B3DPolyPolygon >& rFill, - const Slice3DVector& rSliceVector, - bool bCreateNormals, - bool bSmoothHorizontalNormals, - bool bSmoothNormals, - bool bSmoothLids, - bool bClosed, - double fSmoothNormalsMix, - double fSmoothLidsMix, - bool bCreateTextureCoordinates, - const basegfx::B2DHomMatrix& rTexTransform); - - void DRAWINGLAYER_DLLPUBLIC createReducedOutlines( - const geometry::ViewInformation3D& rViewInformation, - const basegfx::B3DHomMatrix& rObjectTransform, - const basegfx::B3DPolygon& rLoopA, - const basegfx::B3DPolygon& rLoopB, - basegfx::B3DPolyPolygon& rTarget); - - } // end of namespace overlay -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //_DRAWINGLAYER_PRIMITIVE3D_SDREXTRUDELATHETOOLS3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/sdrextrudeprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/sdrextrudeprimitive3d.hxx deleted file mode 100644 index 383810128b..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/sdrextrudeprimitive3d.hxx +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDREXTRUDEPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDREXTRUDEPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/sdrprimitive3d.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** SdrExtrudePrimitive3D class - - This 3D primitive expands the SdrPrimitive3D to a 3D extrude definition. - The given 2D PolyPolygon geometry is imagined as lying on the XY-plane in 3D - and gets extruded in Z-Direction by Depth. - - Various possibilities e.g. for creating diagonals (edge roudings in 3D) - and similar are given. - - The decomposition will create all necessary 3D planes for visualisation. - */ - class DRAWINGLAYER_DLLPUBLIC SdrExtrudePrimitive3D : public SdrPrimitive3D - { - private: - /// geometry helper for slices - basegfx::B2DPolyPolygon maCorrectedPolyPolygon; - Slice3DVector maSlices; - - /// primitive geometry data - basegfx::B2DPolyPolygon maPolyPolygon; - double mfDepth; - double mfDiagonal; - double mfBackScale; - - /// decomposition data when ReducedLineGeometry is used, see get3DDecomposition - geometry::ViewInformation3D* mpLastRLGViewInformation; - - /// bitfield - unsigned mbSmoothNormals : 1; // Plane self - unsigned mbSmoothHorizontalNormals : 1; // always - unsigned mbSmoothLids : 1; // Front/back - unsigned mbCharacterMode : 1; - unsigned mbCloseFront : 1; - unsigned mbCloseBack : 1; - - /// create slices - void impCreateSlices(); - - /// get (evtl. create) slices - const Slice3DVector& getSlices() const; - - protected: - /// local decomposition. - virtual Primitive3DSequence create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - public: - /// constructor - SdrExtrudePrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute, - const basegfx::B2DPolyPolygon& rPolyPolygon, - double fDepth, - double fDiagonal, - double fBackScale, - bool bSmoothNormals, - bool bSmoothHorizontalNormals, - bool bSmoothLids, - bool bCharacterMode, - bool bCloseFront, - bool bCloseBack); - virtual ~SdrExtrudePrimitive3D(); - - /// data read access - const basegfx::B2DPolyPolygon& getPolyPolygon() const { return maPolyPolygon; } - double getDepth() const { return mfDepth; } - double getDiagonal() const { return mfDiagonal; } - double getBackScale() const { return mfBackScale; } - bool getSmoothNormals() const { return mbSmoothNormals; } - bool getSmoothHorizontalNormals() const { return mbSmoothHorizontalNormals; } - bool getSmoothLids() const { return mbSmoothLids; } - bool getCharacterMode() const { return mbCharacterMode; } - bool getCloseFront() const { return mbCloseFront; } - bool getCloseBack() const { return mbCloseBack; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// get range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// Overloaded to allow for reduced line mode to decide if to buffer decomposition or not - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDREXTRUDEPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/sdrlatheprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/sdrlatheprimitive3d.hxx deleted file mode 100644 index fd901aba89..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/sdrlatheprimitive3d.hxx +++ /dev/null @@ -1,159 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRLATHEPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRLATHEPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/sdrprimitive3d.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** SdrLathePrimitive3D class - - This 3D primitive expands the SdrPrimitive3D to a 3D rotation definition. - The given 2D PolyPolygon geometry is imagined as lying on the XY-plane in 3D - and gets rotated around the Y-Axis. - - Various possibilities e.g. for creating diagonals (edge roudings in 3D) - and similar are given. - - The decomposition will create all necessary 3D planes for visualisation. - */ - class DRAWINGLAYER_DLLPUBLIC SdrLathePrimitive3D : public SdrPrimitive3D - { - private: - /// geometry helper for slices - basegfx::B2DPolyPolygon maCorrectedPolyPolygon; - Slice3DVector maSlices; - - /// primitive geometry data - basegfx::B2DPolyPolygon maPolyPolygon; - sal_uInt32 mnHorizontalSegments; - sal_uInt32 mnVerticalSegments; - double mfDiagonal; - double mfBackScale; - double mfRotation; - - /// decomposition data when ReducedLineGeometry is used, see get3DDecomposition - geometry::ViewInformation3D* mpLastRLGViewInformation; - - /// bitfield - unsigned mbSmoothNormals : 1; // Plane self - unsigned mbSmoothHorizontalNormals : 1; // always - unsigned mbSmoothLids : 1; // Front/back - unsigned mbCharacterMode : 1; - unsigned mbCloseFront : 1; - unsigned mbCloseBack : 1; - - /// create slices - void impCreateSlices(); - - /// get (evtl. create) slices - const Slice3DVector& getSlices() const; - - protected: - /// local helpers - void impCreateOutlines( - const geometry::ViewInformation3D& rViewInformation, - const basegfx::B3DPolygon& rLoopA, - const basegfx::B3DPolygon& rLoopB, - basegfx::B3DPolyPolygon& rTarget) const; - - bool impHasCutWith( - const basegfx::B2DPolygon& rPoly, - const basegfx::B2DPoint& rStart, - const basegfx::B2DPoint& rEnd) const; - - /// local decomposition. - virtual Primitive3DSequence create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - public: - /// constructor - SdrLathePrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute, - const basegfx::B2DPolyPolygon& rPolyPolygon, - sal_uInt32 nHorizontalSegments, - sal_uInt32 nVerticalSegments, - double fDiagonal, - double fBackScale, - double fRotation, - bool bSmoothNormals, - bool bSmoothHorizontalNormals, - bool bSmoothLids, - bool bCharacterMode, - bool bCloseFront, - bool bCloseBack); - virtual ~SdrLathePrimitive3D(); - - /// data read access - const basegfx::B2DPolyPolygon& getPolyPolygon() const { return maPolyPolygon; } - sal_uInt32 getHorizontalSegments() const { return mnHorizontalSegments; } - sal_uInt32 getVerticalSegments() const { return mnVerticalSegments; } - double getDiagonal() const { return mfDiagonal; } - double getBackScale() const { return mfBackScale; } - double getRotation() const { return mfRotation; } - bool getSmoothNormals() const { return mbSmoothNormals; } - bool getSmoothHorizontalNormals() const { return mbSmoothHorizontalNormals; } - bool getSmoothLids() const { return mbSmoothLids; } - bool getCharacterMode() const { return mbCharacterMode; } - bool getCloseFront() const { return mbCloseFront; } - bool getCloseBack() const { return mbCloseBack; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// get range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// Overloaded to allow for reduced line mode to decide if to buffer decomposition or not - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRLATHEPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/sdrpolypolygonprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/sdrpolypolygonprimitive3d.hxx deleted file mode 100644 index 019279ac44..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/sdrpolypolygonprimitive3d.hxx +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRPOLYPOLYGONPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRPOLYPOLYGONPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/sdrprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** SdrPolyPolygonPrimitive3D class - - This 3D primitive defines a PolyPolgon in space which may have - Line- and FillStyles and extra 3D surface attributes. It is assumed - that the given 3D PolyPolgon (which may contain texture and normal - information) is planar in 3D. - - The decomposition will include all needed 3D data for visualisation, - including FatLines and fill styles. - */ - class DRAWINGLAYER_DLLPUBLIC SdrPolyPolygonPrimitive3D : public SdrPrimitive3D - { - private: - /// the planar polyPolygon evtl with normals and texture coordinates - basegfx::B3DPolyPolygon maPolyPolygon3D; - - protected: - /// local decomposition. - virtual Primitive3DSequence create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - public: - /// constructor - SdrPolyPolygonPrimitive3D( - const basegfx::B3DPolyPolygon& rPolyPolygon3D, - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute); - - /// data access - const basegfx::B3DPolyPolygon& getPolyPolygon3D() const { return maPolyPolygon3D; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// get range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRPOLYPOLYGONPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/sdrprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/sdrprimitive3d.hxx deleted file mode 100644 index 6ce6107948..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/sdrprimitive3d.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <drawinglayer/attribute/sdrallattribute3d.hxx> -#include <drawinglayer/primitive3d/sdrextrudelathetools3d.hxx> -#include <drawinglayer/attribute/sdrobjectattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - /** SdrPrimitive3D class - - Base class for the more complicated geometric primitives, so - derive from buffered primitive to allow overloading of - create3DDecomposition there. - */ - namespace primitive3d - { - class DRAWINGLAYER_DLLPUBLIC SdrPrimitive3D : public BufferedDecompositionPrimitive3D - { - private: - /// object surface attributes - basegfx::B3DHomMatrix maTransform; - basegfx::B2DVector maTextureSize; - attribute::SdrLineFillShadowAttribute3D maSdrLFSAttribute; - attribute::Sdr3DObjectAttribute maSdr3DObjectAttribute; - - protected: - /** Standard implementation for primitive3D which - will use maTransform as range and expand by evtl. line width / 2 - */ - basegfx::B3DRange getStandard3DRange() const; - - /** implementation for primitive3D which - will use given Slice3Ds and expand by evtl. line width / 2 - */ - basegfx::B3DRange get3DRangeFromSlices(const Slice3DVector& rSlices) const; - - public: - /// constructor - SdrPrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute); - - /// data read access - const basegfx::B3DHomMatrix& getTransform() const { return maTransform; } - const basegfx::B2DVector& getTextureSize() const { return maTextureSize; } - const attribute::SdrLineFillShadowAttribute3D& getSdrLFSAttribute() const { return maSdrLFSAttribute; } - const attribute::Sdr3DObjectAttribute getSdr3DObjectAttribute() const { return maSdr3DObjectAttribute; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/sdrsphereprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/sdrsphereprimitive3d.hxx deleted file mode 100644 index 924f05402a..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/sdrsphereprimitive3d.hxx +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRSPHEREPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRSPHEREPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/sdrprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** SdrSpherePrimitive3D class - - This 3D primitive expands the SdrPrimitive3D to a 3D sphere definition. - The sphere is implicitely in unit coordinates and the given transformation - defines it's geometry in space. - */ - class DRAWINGLAYER_DLLPUBLIC SdrSpherePrimitive3D : public SdrPrimitive3D - { - private: - /// additional geometry definitions - sal_uInt32 mnHorizontalSegments; - sal_uInt32 mnVerticalSegments; - - protected: - /// local decomposition. - virtual Primitive3DSequence create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - public: - /// constructor - SdrSpherePrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute, - sal_uInt32 nHorizontalSegments, - sal_uInt32 nVerticalSegments); - - /// data read access - sal_uInt32 getHorizontalSegments() const { return mnHorizontalSegments; } - sal_uInt32 getVerticalSegments() const { return mnVerticalSegments; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// get range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SDRSPHEREPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/shadowprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/shadowprimitive3d.hxx deleted file mode 100644 index 3ecee686c0..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/shadowprimitive3d.hxx +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SHADOWPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SHADOWPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/groupprimitive3d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** ShadowPrimitive3D class - - This 3D grouping primitive is used to define a shadow for - 3d geometry by embedding it. The shadow of 3D objects are - 2D polygons, so the shadow transformation is a 2D transformation. - - If the Shadow3D flag is set, the shadow definition has to be - combined with the scene and camera definition to create the correct - projected shadow 2D-Polygons. - */ - class DRAWINGLAYER_DLLPUBLIC ShadowPrimitive3D : public GroupPrimitive3D - { - protected: - /// 2D shadow definition - basegfx::B2DHomMatrix maShadowTransform; - basegfx::BColor maShadowColor; - double mfShadowTransparence; - - /// bitfield - unsigned mbShadow3D : 1; - - public: - /// constructor - ShadowPrimitive3D( - const basegfx::B2DHomMatrix& rShadowTransform, - const basegfx::BColor& rShadowColor, - double fShadowTransparence, - bool bShadow3D, - const Primitive3DSequence& rChildren); - - /// data read access - const basegfx::B2DHomMatrix& getShadowTransform() const { return maShadowTransform; } - const basegfx::BColor& getShadowColor() const { return maShadowColor; } - double getShadowTransparence() const { return mfShadowTransparence; } - bool getShadow3D() const { return mbShadow3D; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_SHADOWPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/textureprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/textureprimitive3d.hxx deleted file mode 100644 index 32d79b70ac..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/textureprimitive3d.hxx +++ /dev/null @@ -1,242 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_TEXTUREPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_TEXTUREPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/groupprimitive3d.hxx> -#include <drawinglayer/attribute/fillbitmapattribute.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <drawinglayer/attribute/fillgradientattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** TexturePrimitive3D class - - This 3D grouping primitive is used to define a texture for - 3d geometry by embedding it. It is used as bae class for - extended texture definitions - */ - class DRAWINGLAYER_DLLPUBLIC TexturePrimitive3D : public GroupPrimitive3D - { - private: - /// texture geometry definition - basegfx::B2DVector maTextureSize; - - /// bitfield - /// flag if texture shall be modulated with white interpolated color - unsigned mbModulate : 1; - - /// flag if texture shall be filtered - unsigned mbFilter : 1; - - public: - /// constructor - TexturePrimitive3D( - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize, - bool bModulate, - bool bFilter); - - /// data read access - const basegfx::B2DVector& getTextureSize() const { return maTextureSize; } - bool getModulate() const { return mbModulate; } - bool getFilter() const { return mbFilter; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** UnifiedTransparenceTexturePrimitive3D class - - This 3D primitive expands TexturePrimitive3D to a unified - transparence texture definition. All 3D primitives - embedded here will be shown with the given transparency. - */ - class DRAWINGLAYER_DLLPUBLIC UnifiedTransparenceTexturePrimitive3D : public TexturePrimitive3D - { - private: - /// transparency definition - double mfTransparence; - - public: - /// constructor - UnifiedTransparenceTexturePrimitive3D( - double fTransparence, - const Primitive3DSequence& rChildren); - - /// data read access - double getTransparence() const { return mfTransparence; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// own getB3DRange implementation to include transparent geometries to BoundRect calculations - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// local decomposition. - virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** GradientTexturePrimitive3D class - - This 3D primitive expands TexturePrimitive3D to a gradient texture - definition. All 3D primitives embedded here will be shown with the - defined gradient. - */ - class DRAWINGLAYER_DLLPUBLIC GradientTexturePrimitive3D : public TexturePrimitive3D - { - private: - /// the gradient definition - attribute::FillGradientAttribute maGradient; - - public: - /// constructor - GradientTexturePrimitive3D( - const attribute::FillGradientAttribute& rGradient, - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize, - bool bModulate, - bool bFilter); - - /// data read access - const attribute::FillGradientAttribute& getGradient() const { return maGradient; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** BitmapTexturePrimitive3D class - - This 3D primitive expands TexturePrimitive3D to a bitmap texture - definition. All 3D primitives embedded here will be shown with the - defined bitmap (maybe tiled if defined). - */ - class DRAWINGLAYER_DLLPUBLIC BitmapTexturePrimitive3D : public TexturePrimitive3D - { - private: - /// bitmap fill attribute - attribute::FillBitmapAttribute maFillBitmapAttribute; - - public: - /// constructor - BitmapTexturePrimitive3D( - const attribute::FillBitmapAttribute& rFillBitmapAttribute, - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize, - bool bModulate, - bool bFilter); - - /// data read access - const attribute::FillBitmapAttribute& getFillBitmapAttribute() const { return maFillBitmapAttribute; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** TransparenceTexturePrimitive3D class - - This 3D primitive expands TexturePrimitive3D to a transparence texture - definition. For transparence definition, a gradient is used. The values in - that gradient will be interpreted as luminance Transparence-Values. All 3D - primitives embedded here will be shown with the defined transparence. - */ - class DRAWINGLAYER_DLLPUBLIC TransparenceTexturePrimitive3D : public GradientTexturePrimitive3D - { - public: - /// constructor - TransparenceTexturePrimitive3D( - const attribute::FillGradientAttribute& rGradient, - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize); - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_TEXTUREPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/primitive3d/transformprimitive3d.hxx b/drawinglayer/inc/drawinglayer/primitive3d/transformprimitive3d.hxx deleted file mode 100644 index fcf749df27..0000000000 --- a/drawinglayer/inc/drawinglayer/primitive3d/transformprimitive3d.hxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE3D_TRANSFORMPRIMITIVE3D_HXX -#define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_TRANSFORMPRIMITIVE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/groupprimitive3d.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - /** TransformPrimitive3D class - - This is one of the basic grouping 3D primitives and it provides - embedding a sequence of primitives (a geometry) into a - 3D transformation. - - Please see the description for TransformPrimitive2D since these - primitives are pretty similar. - */ - class DRAWINGLAYER_DLLPUBLIC TransformPrimitive3D : public GroupPrimitive3D - { - private: - // the 3D transformation to apply - basegfx::B3DHomMatrix maTransformation; - - public: - /// constructor - TransformPrimitive3D( - const basegfx::B3DHomMatrix& rTransformation, - const Primitive3DSequence& rChildren); - - /// data read access - const basegfx::B3DHomMatrix& getTransformation() const { return maTransformation; } - - /// compare operator - virtual bool operator==(const BasePrimitive3D& rPrimitive) const; - - /// get range - virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const; - - /// provide unique ID - DeclPrimitrive3DIDBlock() - }; - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_TRANSFORMPRIMITIVE3D_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/baseprocessor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/baseprocessor2d.hxx deleted file mode 100644 index df9045dcad..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/baseprocessor2d.hxx +++ /dev/null @@ -1,207 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_BASEPROCESSOR2D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_BASEPROCESSOR2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /** BaseProcessor2D class - - Baseclass for all C++ implementations of instances which process - primitives. - - Instances which process primitives can be renderers, but also stuff - for HitTests, BoundRect calculations and/or animation processing. The - main usage are renderers, but they are supposed to handle any primitive - processing. - - The base implementation is constructed with a ViewInformation2D which - is accessible throughout the processor implementations. The idea is - to construct any processor with a given ViewInformation2D. To be able - to handle primitives which need to change the current transformation - (as e.g. TransformPrimitive2D) it is allowed for the processor implementation - to change tis local value using updateViewInformation. - - The basic processing method is process(..) which gets handed over the - sequence of primitives to process. For convenience of the C++ implementations, - the default implementation of process(..) maps all accesses to primitives to - single calls to processBasePrimitive2D(..) where the primitive in question is - already casted to the C++ implementation class. - - The process(..) implementation makes a complete iteration over the given - sequence of primitives. If the Primitive is not derived from BasePrimitive2D - and thus not part of the C++ implementations, it converts ViewInformation2D - to the corresponding API implementation (an uno::Sequence< beans::PropertyValue >) - and recursively calls the method process(..) at the primitive with the decomposition - derived from that primitive. This is the preparation to handle unknown implementations - of the com::sun::star::graphic::XPrimitive2D interface in the future. - - So, to implement a basic processor, it is necessary to overload and implement the - processBasePrimitive2D(..) method. A minimal renderer has to support the - Basic Primitives (see baseprimitive2d.hxx) and the Grouping Primitives (see - groupprimitive2d.hxx). These are (currently): - - Basic Primitives: - - - BitmapPrimitive2D (bitmap data, evtl. with transparence) - - PointArrayPrimitive2D (single points) - - PolygonHairlinePrimitive2D (hairline curves/polygons) - - PolyPolygonColorPrimitive2D (colored polygons) - - Grouping Primitives: - - - TransparencePrimitive2D (objects with freely defined transparence) - - InvertPrimitive2D (for XOR) - - MaskPrimitive2D (for masking) - - ModifiedColorPrimitive2D (for a stack of color modifications) - - TransformPrimitive2D (for a transformation stack) - - A processor doing so is a minimal processor. Of course a processor may - handle any higher-level prmitive (that has a decomposition implementation) - for more direct data access or performance reasons, too. - - The main part of a processBasePrimitive2D implementation is a switch..case - construct, looking like the following: - - void foo::processBasePrimitive2D(const BasePrimitive2D& rCandidate) - { - switch(rCandidate.getPrimitive2DID()) - { - case PRIMITIVE2D_ID_??? : - { - // process PRIMITIVE2D_ID_??? here... - - ... - - break; - } - - ... - - default : - { - // process recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - break; - } - } - } - - The default case makes the processor work with all complex primitives - by recursively using their decomposition. - - You can also add a case for ignoring primitives by using: - - case PRIMITIVE2D_ID_...IGNORE.A.. : - case PRIMITIVE2D_ID_...IGNORE.B.. : - case PRIMITIVE2D_ID_...IGNORE.C.. : - { - // ignore these primitives by neither processing nor - // recursively processing their decomposition - break; - } - - Another useful case is embedding the processing of a complex primitive by - bracketing it with some actions: - - case PRIMITIVE2D_ID_SOME_TEXT : - { - // encapsulate e.g. with changing local varibles, e.g. - // sometimes it's good to know if a basic primitive is - // part of a text, especially when not handling the text - // self but by purpose want to handle the decomposed - // geometries in the processor - startText(); - process(rCandidate.get2DDecomposition(getViewInformation2D())); - endText(); - break; - } - - As an example a processor collecting the outlines of a sequence of primitives - only needs to handle some Basic Primitives and create outline and collect - outline polygons e.g. for primitives with area like BitmapPrimitive2D (a - rectangle) and PolyPolygonColorPrimitive2D. When also handling the Grouping - Primitives MaskPrimitive2D (e.g. ignoring it's content, using the mask polyPolygon) - and TransformPrimitive2D (to have the correct local transformation), a processor - creating the outline can be written using just four (4) primitives. As a tipp, it can - be helpful to add many for the purpose not interesting higher level primitives - to not force their decomposition to be created and/or parsed. - */ - class DRAWINGLAYER_DLLPUBLIC BaseProcessor2D - { - private: - /// The ViewInformation2D itself. It's private to isolate accesses to it - geometry::ViewInformation2D maViewInformation2D; - - protected: - /* access method to allow the implementations to change the current - ViewInformation2D if needed. This allows isolating these accesses - later if needed - */ - void updateViewInformation(const geometry::ViewInformation2D& rViewInformation2D) - { - maViewInformation2D = rViewInformation2D; - } - - /* as tooling, the process() implementation takes over API handling and calls this - virtual render method when the primitive implementation is BasePrimitive2D-based. - Default implementation does nothing - */ - virtual void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); - - public: - /// constructor/destructor - BaseProcessor2D(const geometry::ViewInformation2D& rViewInformation); - virtual ~BaseProcessor2D(); - - /// the central processing method - virtual void process(const primitive2d::Primitive2DSequence& rSource); - - /// data read access - const geometry::ViewInformation2D& getViewInformation2D() const { return maViewInformation2D; } - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PROCESSOR2D_BASEPROCESSOR2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/canvasprocessor.hxx b/drawinglayer/inc/drawinglayer/processor2d/canvasprocessor.hxx deleted file mode 100644 index c54e3138f9..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/canvasprocessor.hxx +++ /dev/null @@ -1,139 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _DRAWINGLAYER_PROCESSOR_CANVASPROCESSOR_HXX -#define _DRAWINGLAYER_PROCESSOR_CANVASPROCESSOR_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor2d/baseprocessor2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/color/bcolormodifier.hxx> -#include <svtools/optionsdrawinglayer.hxx> -#include <com/sun/star/rendering/ViewState.hpp> -#include <com/sun/star/rendering/RenderState.hpp> -#include <i18npool/lang.h> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <vcl/mapmod.hxx> - -////////////////////////////////////////////////////////////////////////////// -// forward declaration - -namespace basegfx { - class BColor; - class B2DPolygon; -} - -namespace com { namespace sun { namespace star { namespace rendering { - class XCanvas; - class XPolyPolygon2D; -}}}} - -namespace drawinglayer { namespace primitive2d { - class MaskPrimitive2D; - class MetafilePrimitive2D; - class TextSimplePortionPrimitive2D; - class BitmapPrimitive2D; - class RenderGraphicPrimitive2D; - class TransparencePrimitive2D; - class PolygonStrokePrimitive2D; - class FillBitmapPrimitive2D; - class UnifiedTransparencePrimitive2D; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /** canvasProcessor2D class - - A basic implementation of a renderer for com::sun::star::rendering::XCanvas - as a target - */ - class DRAWINGLAYER_DLLPUBLIC canvasProcessor2D : public BaseProcessor2D - { - private: - // The Pixel renderer resets the original MapMode from the OutputDevice. - // For some situations it is necessary to get it again, so it is rescued here - MapMode maOriginalMapMode; - - // the (current) destination OutDev and canvas - OutputDevice* mpOutputDevice; - com::sun::star::uno::Reference< com::sun::star::rendering::XCanvas > mxCanvas; - com::sun::star::rendering::ViewState maViewState; - com::sun::star::rendering::RenderState maRenderState; - - // the modifiedColorPrimitive stack - basegfx::BColorModifierStack maBColorModifierStack; - - // SvtOptionsDrawinglayer incarnation to react on diverse settings - const SvtOptionsDrawinglayer maDrawinglayerOpt; - - // the current clipping PolyPolygon from MaskPrimitive2D, always in - // object coordinates - basegfx::B2DPolyPolygon maClipPolyPolygon; - - // determined LanguageType - LanguageType meLang; - - // as tooling, the process() implementation takes over API handling and calls this - // virtual render method when the primitive implementation is BasePrimitive2D-based. - virtual void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); - - // direct primitive renderer support - void impRenderMaskPrimitive2D(const primitive2d::MaskPrimitive2D& rMaskCandidate); - void impRenderMetafilePrimitive2D(const primitive2d::MetafilePrimitive2D& rMetaCandidate); - void impRenderTextSimplePortionPrimitive2D(const primitive2d::TextSimplePortionPrimitive2D& rTextCandidate); - void impRenderBitmapPrimitive2D(const primitive2d::BitmapPrimitive2D& rBitmapCandidate); - void impRenderRenderGraphicPrimitive2D(const primitive2d::RenderGraphicPrimitive2D& rRenderGraphicCandidate); - void impRenderTransparencePrimitive2D(const primitive2d::TransparencePrimitive2D& rTransparenceCandidate); - void impRenderPolygonStrokePrimitive2D(const primitive2d::PolygonStrokePrimitive2D& rPolygonStrokePrimitive); - void impRenderFillBitmapPrimitive2D(const primitive2d::FillBitmapPrimitive2D& rFillBitmapPrimitive2D); - void impRenderUnifiedTransparencePrimitive2D(const primitive2d::UnifiedTransparencePrimitive2D& rUniTransparenceCandidate); - - public: - canvasProcessor2D( - const geometry::ViewInformation2D& rViewInformation, - OutputDevice& rOutDev); - virtual ~canvasProcessor2D(); - - // access to Drawinglayer configuration options - const SvtOptionsDrawinglayer& getOptionsDrawinglayer() const { return maDrawinglayerOpt; } - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //_DRAWINGLAYER_PROCESSOR_CANVASPROCESSOR_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx deleted file mode 100644 index 8a76e98622..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/contourextractor2d.hxx +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_CONTOUREXTRACTOR2D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_CONTOUREXTRACTOR2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor2d/baseprocessor2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /** ContourExtractor2D class - - A processor who extracts the contour of the primtives feeded to it - in the single local PolyPolygon - */ - class DRAWINGLAYER_DLLPUBLIC ContourExtractor2D : public BaseProcessor2D - { - private: - /// the extracted contour - std::vector< basegfx::B2DPolyPolygon > maExtractedContour; - - /// tooling methods - void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); - - public: - ContourExtractor2D(const geometry::ViewInformation2D& rViewInformation); - virtual ~ContourExtractor2D(); - - const std::vector< basegfx::B2DPolyPolygon >& getExtractedContour() const { return maExtractedContour; } - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_CONTOUREXTRACTOR2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/hittestprocessor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/hittestprocessor2d.hxx deleted file mode 100644 index 7315583ca3..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/hittestprocessor2d.hxx +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_HITTESTPROCESSOR2D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_HITTESTPROCESSOR2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor2d/baseprocessor2d.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -namespace basegfx { class B2DPolygon; } -namespace basegfx { class B2DPolyPolygon; } -namespace drawinglayer { namespace primitive2d { class ScenePrimitive2D; }} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /** HitTestProcessor2D class - - This processor implements a HitTest with the feeded primitives, - given tolerance and extras - */ - class DRAWINGLAYER_DLLPUBLIC HitTestProcessor2D : public BaseProcessor2D - { - private: - /// discrete HitTest position - basegfx::B2DPoint maDiscreteHitPosition; - - /// discrete HitTolerance - double mfDiscreteHitTolerance; - - /// bitfield - unsigned mbHit : 1; - unsigned mbHitToleranceUsed : 1; - - /* this flag decides if primitives which are embedded to an - UnifiedTransparencePrimitive2D and are invisible will be taken into account for - HitTesting or not. Those primitives are created for objects which are else - completely invisible and normally their content exists of hairline - primitives describing the object's contour - */ - unsigned mbUseInvisiblePrimitiveContent : 1; - - /// flag to concentraze on text hits only - unsigned mbHitTextOnly : 1; - - /// tooling methods - void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); - bool checkHairlineHitWithTolerance( - const basegfx::B2DPolygon& rPolygon, - double fDiscreteHitTolerance); - bool checkFillHitWithTolerance( - const basegfx::B2DPolyPolygon& rPolyPolygon, - double fDiscreteHitTolerance); - void check3DHit(const primitive2d::ScenePrimitive2D& rCandidate); - - public: - HitTestProcessor2D( - const geometry::ViewInformation2D& rViewInformation, - const basegfx::B2DPoint& rLogicHitPosition, - double fLogicHitTolerance, - bool bHitTextOnly); - virtual ~HitTestProcessor2D(); - - /// data write access - void setUseInvisiblePrimitiveContent(bool bNew) - { - if((bool)mbUseInvisiblePrimitiveContent != bNew) mbUseInvisiblePrimitiveContent = bNew; - } - - /// data read access - const basegfx::B2DPoint& getDiscreteHitPosition() const { return maDiscreteHitPosition; } - double getDiscreteHitTolerance() const { return mfDiscreteHitTolerance; } - bool getHit() const { return mbHit; } - bool getHitToleranceUsed() const { return mbHitToleranceUsed; } - bool getUseInvisiblePrimitiveContent() const { return mbUseInvisiblePrimitiveContent;} - bool getHitTextOnly() const { return mbHitTextOnly; } - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_HITTESTPROCESSOR2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/linegeometryextractor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/linegeometryextractor2d.hxx deleted file mode 100644 index 54cea5ae27..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/linegeometryextractor2d.hxx +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_LINEGEOMETRYEXTRACTOR2D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_LINEGEOMETRYEXTRACTOR2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor2d/baseprocessor2d.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /** LineGeometryExtractor2D class - - This processor can extract the line geometry from feeded primpitives. The - hairlines and the fille geometry from fat lines are separated. - */ - class DRAWINGLAYER_DLLPUBLIC LineGeometryExtractor2D : public BaseProcessor2D - { - private: - std::vector< basegfx::B2DPolygon > maExtractedHairlines; - std::vector< basegfx::B2DPolyPolygon > maExtractedLineFills; - - /// bitfield - unsigned mbInLineGeometry : 1; - - /// tooling methods - void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); - - public: - LineGeometryExtractor2D(const geometry::ViewInformation2D& rViewInformation); - virtual ~LineGeometryExtractor2D(); - - const std::vector< basegfx::B2DPolygon >& getExtractedHairlines() const { return maExtractedHairlines; } - const std::vector< basegfx::B2DPolyPolygon >& getExtractedLineFills() const { return maExtractedLineFills; } - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_LINEGEOMETRYEXTRACTOR2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/textaspolygonextractor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/textaspolygonextractor2d.hxx deleted file mode 100644 index ecae326eea..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/textaspolygonextractor2d.hxx +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_TEXTASPOLYGONEXTRACTOR2D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_TEXTASPOLYGONEXTRACTOR2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor2d/baseprocessor2d.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/color/bcolormodifier.hxx> -#include <vector> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /// helper data structure for returning the result - struct TextAsPolygonDataNode - { - private: - basegfx::B2DPolyPolygon maB2DPolyPolygon; - basegfx::BColor maBColor; - bool mbIsFilled; - - public: - TextAsPolygonDataNode( - const basegfx::B2DPolyPolygon& rB2DPolyPolygon, - const basegfx::BColor& rBColor, - bool bIsFilled) - : maB2DPolyPolygon(rB2DPolyPolygon), - maBColor(rBColor), - mbIsFilled(bIsFilled) - { - } - - // data read access - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maB2DPolyPolygon; } - const basegfx::BColor& getBColor() const { return maBColor; } - bool getIsFilled() const { return mbIsFilled; } - }; - - /// typedef for a vector of that helper data - typedef ::std::vector< TextAsPolygonDataNode > TextAsPolygonDataNodeVector; - - /** TextAsPolygonExtractor2D class - - This processor extracts text in the feeded primitives to filled polygons - */ - class DRAWINGLAYER_DLLPUBLIC TextAsPolygonExtractor2D : public BaseProcessor2D - { - private: - // extraction target - TextAsPolygonDataNodeVector maTarget; - - // the modifiedColorPrimitive stack - basegfx::BColorModifierStack maBColorModifierStack; - - // flag if we are in a decomposed text - sal_uInt32 mnInText; - - // tooling methods - void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); - - public: - TextAsPolygonExtractor2D(const geometry::ViewInformation2D& rViewInformation); - virtual ~TextAsPolygonExtractor2D(); - - // data read access - const TextAsPolygonDataNodeVector& getTarget() const { return maTarget; } - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_TEXTASPOLYGONEXTRACTOR2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/vclmetafileprocessor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/vclmetafileprocessor2d.hxx deleted file mode 100644 index 3c3ba892b0..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/vclmetafileprocessor2d.hxx +++ /dev/null @@ -1,159 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLMETAFILEPROCESSOR2D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLMETAFILEPROCESSOR2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor2d/vclprocessor2d.hxx> -#include <com/sun/star/i18n/XBreakIterator.hpp> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// -// vcl::PDFExtOutDevData support - -#include <vcl/pdfextoutdevdata.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -class GDIMetaFile; -class Rectangle; -class Gradient; -class SvtGraphicFill; -class SvtGraphicStroke; - -namespace drawinglayer { namespace attribute { - class FillGradientAttribute; - class LineAttribute; - class StrokeAttribute; - class LineStartEndAttribute; -}} - -namespace basegfx { - class BColor; -} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /** VclMetafileProcessor2D class - - This processor derived from VclProcessor2D is the base class for rendering - all feeded primitives to a classical VCL-Metafile, including all over the - time grown extra data in comments and PDF exception data creations. Also - printing needs some exception stuff. - - All in all it is needed to emulate the old ::paint output from the old - Drawinglayer as long as exporters and/or filters still use the Metafile - and the extra-data added to it (which can be seen mostly as 'extensions' - or simply as 'hacks'). - */ - class DRAWINGLAYER_DLLPUBLIC VclMetafileProcessor2D : public VclProcessor2D - { - private: - /// local helper(s) - Rectangle impDumpToMetaFile( - const primitive2d::Primitive2DSequence& rContent, - GDIMetaFile& o_rContentMetafile); - void impConvertFillGradientAttributeToVCLGradient( - Gradient& o_rVCLGradient, - const attribute::FillGradientAttribute& rFiGrAtt, - bool bIsTransparenceGradient); - void impStartSvtGraphicFill(SvtGraphicFill* pSvtGraphicFill); - void impEndSvtGraphicFill(SvtGraphicFill* pSvtGraphicFill); - SvtGraphicStroke* impTryToCreateSvtGraphicStroke( - const basegfx::B2DPolygon& rB2DPolygon, - const basegfx::BColor* pColor, - const attribute::LineAttribute* pLineAttribute, - const attribute::StrokeAttribute* pStrokeAttribute, - const attribute::LineStartEndAttribute* pStart, - const attribute::LineStartEndAttribute* pEnd); - void impStartSvtGraphicStroke(SvtGraphicStroke* pSvtGraphicStroke); - void impEndSvtGraphicStroke(SvtGraphicStroke* pSvtGraphicStroke); - - /// the current clipping PolyPolygon from MaskPrimitive2D - basegfx::B2DPolyPolygon maClipPolyPolygon; - - /// the target MetaFile - GDIMetaFile* mpMetaFile; - - /* do not allow embedding SvtGraphicFills into each other, - use a counter to prevent that - */ - sal_uInt32 mnSvtGraphicFillCount; - - /// same for SvtGraphicStroke - sal_uInt32 mnSvtGraphicStrokeCount; - - /* hold the last unified transparence value to have it handy - on SvtGraphicStroke creation - */ - double mfCurrentUnifiedTransparence; - - /* break iterator support - made static so it only needs to be fetched once, even with many single - constructed VclMetafileProcessor2D. It's still incarnated on demand, - but exists for OOo runtime now by purpose. - */ - static ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XBreakIterator > mxBreakIterator; - - /* vcl::PDFExtOutDevData support - For the first step, some extra actions at vcl::PDFExtOutDevData need to - be emulated with the VclMetafileProcessor2D. These are potentially temporarily - since PDF export may use PrimitiveSequences one day directly. - */ - vcl::PDFExtOutDevData* mpPDFExtOutDevData; - - protected: - /* the local processor for BasePrinitive2D-Implementation based primitives, - called from the common process()-implementation - */ - virtual void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); - - public: - /// constructor/destructor - VclMetafileProcessor2D( - const geometry::ViewInformation2D& rViewInformation, - OutputDevice& rOutDev); - virtual ~VclMetafileProcessor2D(); - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLMETAFILEPROCESSOR2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx deleted file mode 100644 index 9dab13ff84..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/vclpixelprocessor2d.hxx +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLPIXELPROCESSOR2D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLPIXELPROCESSOR2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor2d/vclprocessor2d.hxx> -#include <vcl/outdev.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /** VclPixelProcessor2D class - - This processor derived from VclProcessor2D is the base class for rendering - all feeded primitives to a VCL Window. It is the currently used renderer - for all VCL editing output from the DrawingLayer. - */ - class DRAWINGLAYER_DLLPUBLIC VclPixelProcessor2D : public VclProcessor2D - { - private: - /* The Pixel renderer resets the original MapMode from the OutputDevice. - For some situations it is necessary to get it again, so it is rescued here - */ - MapMode maOriginalMapMode; - - protected: - /* the local processor for BasePrinitive2D-Implementation based primitives, - called from the common process()-implementation - */ - virtual void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate); - - public: - /// constructor/destructor - VclPixelProcessor2D( - const geometry::ViewInformation2D& rViewInformation, - OutputDevice& rOutDev); - virtual ~VclPixelProcessor2D(); - - /// data read access - const MapMode& getOriginalMapMode() const { return maOriginalMapMode; } - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLPIXELPROCESSOR2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx b/drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx deleted file mode 100644 index 0f1197113a..0000000000 --- a/drawinglayer/inc/drawinglayer/processor2d/vclprocessor2d.hxx +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLPROCESSOR2D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLPROCESSOR2D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor2d/baseprocessor2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/color/bcolormodifier.hxx> -#include <svtools/optionsdrawinglayer.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines -class OutputDevice; - -namespace drawinglayer { namespace primitive2d { - class TextSimplePortionPrimitive2D; - class PolygonHairlinePrimitive2D; - class BitmapPrimitive2D; - class RenderGraphicPrimitive2D; - class FillBitmapPrimitive2D; - class PolyPolygonGradientPrimitive2D; - class PolyPolygonBitmapPrimitive2D; - class PolyPolygonColorPrimitive2D; - class MetafilePrimitive2D; - class MaskPrimitive2D; - class UnifiedTransparencePrimitive2D; - class TransparencePrimitive2D; - class TransformPrimitive2D; - class MarkerArrayPrimitive2D; - class PointArrayPrimitive2D; - class ModifiedColorPrimitive2D; - class PolygonStrokePrimitive2D; - class ControlPrimitive2D; - class PagePreviewPrimitive2D; - class EpsPrimitive2D; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - /** VclProcessor2D class - - This processor is the base class for VCL-Based processors. It has no - processBasePrimitive2D implementation and thus is not usable directly. - */ - class DRAWINGLAYER_DLLPUBLIC VclProcessor2D : public BaseProcessor2D - { - protected: - // the destination OutDev - OutputDevice* mpOutputDevice; - - // the modifiedColorPrimitive stack - basegfx::BColorModifierStack maBColorModifierStack; - - // the current transformation. Since VCL pixel renderer transforms to pixels - // and VCL MetaFile renderer to World (logic) coordinates, the local - // ViewInformation2D cannot directly be used, but needs to be kept up to date - basegfx::B2DHomMatrix maCurrentTransformation; - - // SvtOptionsDrawinglayer incarnation to react on diverse settings - const SvtOptionsDrawinglayer maDrawinglayerOpt; - - // stack value (increment and decrement) to count how deep we are in - // PolygonStrokePrimitive2D's decompositions (normally only one) - sal_uInt32 mnPolygonStrokePrimitive2D; - - ////////////////////////////////////////////////////////////////////////////// - // common VCL rendering support - - void RenderTextSimpleOrDecoratedPortionPrimitive2D(const primitive2d::TextSimplePortionPrimitive2D& rTextCandidate); - void RenderPolygonHairlinePrimitive2D(const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate, bool bPixelBased); - void RenderBitmapPrimitive2D(const primitive2d::BitmapPrimitive2D& rBitmapCandidate); - void RenderRenderGraphicPrimitive2D(const primitive2d::RenderGraphicPrimitive2D& rRenderGraphicCandidate); - void RenderFillBitmapPrimitive2D(const primitive2d::FillBitmapPrimitive2D& rFillBitmapCandidate); - void RenderPolyPolygonGradientPrimitive2D(const primitive2d::PolyPolygonGradientPrimitive2D& rPolygonCandidate); - void RenderPolyPolygonBitmapPrimitive2D(const primitive2d::PolyPolygonBitmapPrimitive2D& rPolygonCandidate); - void RenderPolyPolygonColorPrimitive2D(const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate); - void RenderMetafilePrimitive2D(const primitive2d::MetafilePrimitive2D& rPolygonCandidate); - void RenderMaskPrimitive2DPixel(const primitive2d::MaskPrimitive2D& rMaskCandidate); - void RenderModifiedColorPrimitive2D(const primitive2d::ModifiedColorPrimitive2D& rModifiedCandidate); - void RenderUnifiedTransparencePrimitive2D(const primitive2d::UnifiedTransparencePrimitive2D& rTransCandidate); - void RenderTransparencePrimitive2D(const primitive2d::TransparencePrimitive2D& rTransCandidate); - void RenderTransformPrimitive2D(const primitive2d::TransformPrimitive2D& rTransformCandidate); - void RenderPagePreviewPrimitive2D(const primitive2d::PagePreviewPrimitive2D& rPagePreviewCandidate); - void RenderMarkerArrayPrimitive2D(const primitive2d::MarkerArrayPrimitive2D& rMarkerArrayCandidate); - void RenderPointArrayPrimitive2D(const primitive2d::PointArrayPrimitive2D& rPointArrayCandidate); - void RenderPolygonStrokePrimitive2D(const primitive2d::PolygonStrokePrimitive2D& rPolygonStrokeCandidate); - void RenderEpsPrimitive2D(const primitive2d::EpsPrimitive2D& rEpsPrimitive2D); - - ///////////////////////////////////////////////////////////////////////////// - // DrawMode adaption support - void adaptLineToFillDrawMode() const; - void adaptTextToFillDrawMode() const; - - public: - // constructor/destructor - VclProcessor2D( - const geometry::ViewInformation2D& rViewInformation, - OutputDevice& rOutDev); - virtual ~VclProcessor2D(); - - // access to Drawinglayer configuration options - const SvtOptionsDrawinglayer& getOptionsDrawinglayer() const { return maDrawinglayerOpt; } - }; - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLPROCESSOR2D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor3d/baseprocessor3d.hxx b/drawinglayer/inc/drawinglayer/processor3d/baseprocessor3d.hxx deleted file mode 100644 index 0b71587743..0000000000 --- a/drawinglayer/inc/drawinglayer/processor3d/baseprocessor3d.hxx +++ /dev/null @@ -1,124 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_BASEPROCESSOR3D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR3D_BASEPROCESSOR3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <drawinglayer/geometry/viewinformation3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - /** BaseProcessor3D class - - Baseclass for all C++ implementations of instances which process - primitives. - - Please have a look at baseprocessor2d.hxx for more comments. - */ - class DRAWINGLAYER_DLLPUBLIC BaseProcessor3D - { - private: - geometry::ViewInformation3D maViewInformation3D; - - protected: - void updateViewInformation(const geometry::ViewInformation3D& rViewInformation3D) - { - maViewInformation3D = rViewInformation3D; - } - - /* as tooling, the process() implementation takes over API handling and calls this - virtual render method when the primitive implementation is BasePrimitive3D-based. - Default implementation does nothing - */ - virtual void processBasePrimitive3D(const primitive3d::BasePrimitive3D& rCandidate); - - public: - BaseProcessor3D(const geometry::ViewInformation3D& rViewInformation); - virtual ~BaseProcessor3D(); - - // the central processing method - virtual void process(const primitive3d::Primitive3DSequence& rSource); - - // data access - const geometry::ViewInformation3D& getViewInformation3D() const { return maViewInformation3D; } - }; - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - /** CollectingProcessor3D class - - A processor which just collects all primitives given to it in - process(..) calls to maPrimitive3DSequence. This can e.g. be used to - hand around as instance over various methods where every called - method can add graphic content to it. - */ - class DRAWINGLAYER_DLLPUBLIC CollectingProcessor3D : public BaseProcessor3D - { - private: - primitive3d::Primitive3DSequence maPrimitive3DSequence; - - public: - CollectingProcessor3D(const geometry::ViewInformation3D& rViewInformation); - virtual ~CollectingProcessor3D(); - - /// the central processing method - virtual void process(const primitive3d::Primitive3DSequence& rSource); - - /// helpers for adding to local sequence - void appendPrimitive3DReference(const primitive3d::Primitive3DReference& rSource) - { - primitive3d::appendPrimitive3DReferenceToPrimitive3DSequence(maPrimitive3DSequence, rSource); - } - - /// data access and reset - const primitive3d::Primitive3DSequence& getPrimitive3DSequence() const { return maPrimitive3DSequence; } - void reset() { maPrimitive3DSequence = primitive3d::Primitive3DSequence(); } - }; - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //_DRAWINGLAYER_PROCESSOR3D_BASEPROCESSOR3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor3d/cutfindprocessor3d.hxx b/drawinglayer/inc/drawinglayer/processor3d/cutfindprocessor3d.hxx deleted file mode 100644 index af51cd354c..0000000000 --- a/drawinglayer/inc/drawinglayer/processor3d/cutfindprocessor3d.hxx +++ /dev/null @@ -1,102 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_CUTFINDPROCESSOR3D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR3D_CUTFINDPROCESSOR3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor3d/defaultprocessor3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - /** CutFindProcessor class - - This processor extracts all cuts of 3D plane geometries in the feeded primitives - with the given cut vector, based on the ViewInformation3D given. - */ - class DRAWINGLAYER_DLLPUBLIC CutFindProcessor : public BaseProcessor3D - { - private: - /// the start and stop point for the cut vector - basegfx::B3DPoint maFront; - basegfx::B3DPoint maBack; - - /// the found cut points - ::std::vector< basegfx::B3DPoint > maResult; - - /* #i102956# the transformation change from TransformPrimitive3D processings - needs to be remembered to be able to transform found cuts to the - basic coordinate system the processor starts with - */ - basegfx::B3DHomMatrix maCombinedTransform; - - /// bitfield - bool mbAnyHit : 1; - - /* this flag decides if primitives which are invisible will be taken into account for - HitTesting or not. - */ - bool mbUseInvisiblePrimitiveContent : 1; - - /* as tooling, the process() implementation takes over API handling and calls this - virtual render method when the primitive implementation is BasePrimitive3D-based. - */ - virtual void processBasePrimitive3D(const primitive3d::BasePrimitive3D& rCandidate); - - public: - CutFindProcessor(const geometry::ViewInformation3D& rViewInformation, - const basegfx::B3DPoint& rFront, - const basegfx::B3DPoint& rBack, - bool bAnyHit); - - /// data write access - void setUseInvisiblePrimitiveContent(bool bNew) - { - if((bool)mbUseInvisiblePrimitiveContent != bNew) mbUseInvisiblePrimitiveContent = bNew; - } - - /// data read access - const ::std::vector< basegfx::B3DPoint >& getCutPoints() const { return maResult; } - bool getAnyHit() const { return mbAnyHit; } - bool getUseInvisiblePrimitiveContent() const { return mbUseInvisiblePrimitiveContent;} - }; - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PROCESSOR3D_CUTFINDPROCESSOR3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor3d/defaultprocessor3d.hxx b/drawinglayer/inc/drawinglayer/processor3d/defaultprocessor3d.hxx deleted file mode 100644 index 85aef2c16e..0000000000 --- a/drawinglayer/inc/drawinglayer/processor3d/defaultprocessor3d.hxx +++ /dev/null @@ -1,169 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor3d/baseprocessor3d.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/color/bcolormodifier.hxx> -#include <svtools/optionsdrawinglayer.hxx> -#include <boost/shared_ptr.hpp> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BZPixelRaster; - class B3DPolygon; - class B3DPolyPolygon; -} - -namespace drawinglayer { namespace attribute { - class SdrSceneAttribute; - class SdrLightingAttribute; - class MaterialAttribute3D; -}} - -namespace drawinglayer { namespace primitive3d { - class PolygonHairlinePrimitive3D; - class PolyPolygonMaterialPrimitive3D; - class GradientTexturePrimitive3D; - class HatchTexturePrimitive3D; - class BitmapTexturePrimitive3D; - class TransformPrimitive3D; - class ModifiedColorPrimitive3D; -}} - -namespace drawinglayer { namespace texture { - class GeoTexSvx; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - /** DefaultProcessor3D class - - This processor renders all feeded primitives to a 2D raster where for all - primitives the two basic methods rasterconvertB3DPolygon for hairlines and - rasterconvertB3DPolyPolygon for filled geometry is called. It is a beseclass to - e.g. base a Z-Buffer supported renderer on the 3D primitive processing. - */ - class DRAWINGLAYER_DLLPUBLIC DefaultProcessor3D : public BaseProcessor3D - { - protected: - /// read-only scene infos (normal handling, etc...) - const attribute::SdrSceneAttribute& mrSdrSceneAttribute; - - /// read-only light infos (lights, etc...) - const attribute::SdrLightingAttribute& mrSdrLightingAttribute; - - /// renderer range. Need to be correctly set by the derived implementations - /// normally the (0, 0, W, H) range from mpBZPixelRaster - basegfx::B2DRange maRasterRange; - - /// the modifiedColorPrimitive stack - basegfx::BColorModifierStack maBColorModifierStack; - - /// the current active texture - boost::shared_ptr< texture::GeoTexSvx > mpGeoTexSvx; - - /// the current active transparence texture - boost::shared_ptr< texture::GeoTexSvx > mpTransparenceGeoTexSvx; - - /// SvtOptionsDrawinglayer incarnation to react on diverse settings - const SvtOptionsDrawinglayer maDrawinglayerOpt; - - /// counter for entered transparence textures - sal_uInt32 mnTransparenceCounter; - - /// bitfield - unsigned mbModulate : 1; - unsigned mbFilter : 1; - unsigned mbSimpleTextureActive : 1; - - ////////////////////////////////////////////////////////////////////////////// - // rendering support - - void impRenderGradientTexturePrimitive3D(const primitive3d::GradientTexturePrimitive3D& rPrimitive, bool bTransparence); - void impRenderHatchTexturePrimitive3D(const primitive3d::HatchTexturePrimitive3D& rPrimitive); - void impRenderBitmapTexturePrimitive3D(const primitive3d::BitmapTexturePrimitive3D& rPrimitive); - void impRenderModifiedColorPrimitive3D(const primitive3d::ModifiedColorPrimitive3D& rModifiedCandidate); - void impRenderPolygonHairlinePrimitive3D(const primitive3d::PolygonHairlinePrimitive3D& rPrimitive); - void impRenderPolyPolygonMaterialPrimitive3D(const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive); - void impRenderTransformPrimitive3D(const primitive3d::TransformPrimitive3D& rTransformCandidate); - - ////////////////////////////////////////////////////////////////////////////// - // rasterconversions for filled and non-filled polygons. These NEED to be - // implemented from derivations - - virtual void rasterconvertB3DPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolygon& rHairline) const = 0; - virtual void rasterconvertB3DPolyPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolyPolygon& rFill) const = 0; - - // the processing method for a single, known primitive - virtual void processBasePrimitive3D(const primitive3d::BasePrimitive3D& rBasePrimitive); - - public: - DefaultProcessor3D( - const geometry::ViewInformation3D& rViewInformation, - const attribute::SdrSceneAttribute& rSdrSceneAttribute, - const attribute::SdrLightingAttribute& rSdrLightingAttribute); - virtual ~DefaultProcessor3D(); - - /// data read access - const attribute::SdrSceneAttribute& getSdrSceneAttribute() const { return mrSdrSceneAttribute; } - const attribute::SdrLightingAttribute& getSdrLightingAttribute() const { return mrSdrLightingAttribute; } - - /// data read access renderer stuff - const basegfx::BColorModifierStack& getBColorModifierStack() const { return maBColorModifierStack; } - const boost::shared_ptr< texture::GeoTexSvx >& getGeoTexSvx() const { return mpGeoTexSvx; } - const boost::shared_ptr< texture::GeoTexSvx >& getTransparenceGeoTexSvx() const { return mpTransparenceGeoTexSvx; } - sal_uInt32 getTransparenceCounter() const { return mnTransparenceCounter; } - bool getModulate() const { return mbModulate; } - bool getFilter() const { return mbFilter; } - bool getSimpleTextureActive() const { return mbSimpleTextureActive; } - - /// access to Drawinglayer configuration options - const SvtOptionsDrawinglayer& getOptionsDrawinglayer() const { return maDrawinglayerOpt; } - }; - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor3d/geometry2dextractor.hxx b/drawinglayer/inc/drawinglayer/processor3d/geometry2dextractor.hxx deleted file mode 100644 index 52f5787d2e..0000000000 --- a/drawinglayer/inc/drawinglayer/processor3d/geometry2dextractor.hxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_GEOMETRY2DEXTRACTOR_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR3D_GEOMETRY2DEXTRACTOR_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor3d/baseprocessor3d.hxx> -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <basegfx/color/bcolormodifier.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - /** Geometry2DExtractingProcessor class - - This processor extracts the 2D geometry (projected geometry) of all feeded primitives. - It is e.g. used as sub-processor for contour extraction where 3D geometry is only - useful as 2D projected geometry. - */ - class DRAWINGLAYER_DLLPUBLIC Geometry2DExtractingProcessor : public BaseProcessor3D - { - private: - /// result holding vector (2D) - primitive2d::Primitive2DSequence maPrimitive2DSequence; - - /// object transformation for scene for 2d definition - basegfx::B2DHomMatrix maObjectTransformation; - - /// the modifiedColorPrimitive stack - basegfx::BColorModifierStack maBColorModifierStack; - - /* as tooling, the process() implementation takes over API handling and calls this - virtual render method when the primitive implementation is BasePrimitive3D-based. - */ - virtual void processBasePrimitive3D(const primitive3d::BasePrimitive3D& rCandidate); - - public: - Geometry2DExtractingProcessor( - const geometry::ViewInformation3D& rViewInformation, - const basegfx::B2DHomMatrix& rObjectTransformation); - - // data read access - const primitive2d::Primitive2DSequence& getPrimitive2DSequence() const { return maPrimitive2DSequence; } - const basegfx::B2DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } - const basegfx::BColorModifierStack& getBColorModifierStack() const { return maBColorModifierStack; } - }; - } // end of namespace processor3d -} // end of namespace drawinglayer - -#endif //INCLUDED_DRAWINGLAYER_PROCESSOR3D_GEOMETRY2DEXTRACTOR_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor3d/shadow3dextractor.hxx b/drawinglayer/inc/drawinglayer/processor3d/shadow3dextractor.hxx deleted file mode 100644 index 8e5168e971..0000000000 --- a/drawinglayer/inc/drawinglayer/processor3d/shadow3dextractor.hxx +++ /dev/null @@ -1,128 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_SHADOW3DEXTRACTOR_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR3D_SHADOW3DEXTRACTOR_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor3d/baseprocessor3d.hxx> -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/polygon/b3dpolypolygon.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - /** Shadow3DExtractingProcessor class - - This processor extracts the 2D shadow geometry (projected geometry) of all feeded primitives. - It is used to create the shadow of 3D objects which consists of 2D geometry. It needs quite - some data to do so since we do not only offer flat projected 2D shadow, but also projections - dependent on the light source - */ - class DRAWINGLAYER_DLLPUBLIC Shadow3DExtractingProcessor : public BaseProcessor3D - { - private: - /// typedef for data handling - typedef std::vector< primitive2d::BasePrimitive2D* > BasePrimitive2DVector; - - /// result holding vector (2D) and target vector for stacking (inited to &maPrimitive2DSequence) - BasePrimitive2DVector maPrimitive2DSequence; - BasePrimitive2DVector* mpPrimitive2DSequence; - - /// object transformation for scene for 2d definition - basegfx::B2DHomMatrix maObjectTransformation; - - /// prepared data (transformations) for 2D/3D shadow calculations - basegfx::B3DHomMatrix maWorldToEye; - basegfx::B3DHomMatrix maEyeToView; - basegfx::B3DVector maLightNormal; - basegfx::B3DVector maShadowPlaneNormal; - basegfx::B3DPoint maPlanePoint; - double mfLightPlaneScalar; - - /* the shadow color used for sub-primitives. Can stay at black since - the encapsulating 2d shadow primitive will contain the color - */ - basegfx::BColor maPrimitiveColor; - - /// bitfield - /// flag if shadow plane projection preparation leaded to valid results - unsigned mbShadowProjectionIsValid : 1; - - /// flag if conversion is switched on - unsigned mbConvert : 1; - - /// flag if conversion shall use projection - unsigned mbUseProjection : 1; - - /// local helpers - basegfx::B2DPolygon impDoShadowProjection(const basegfx::B3DPolygon& rSource); - basegfx::B2DPolyPolygon impDoShadowProjection(const basegfx::B3DPolyPolygon& rSource); - - /* as tooling, the process() implementation takes over API handling and calls this - virtual render method when the primitive implementation is BasePrimitive3D-based. - */ - virtual void processBasePrimitive3D(const primitive3d::BasePrimitive3D& rCandidate); - - /// helper to convert from BasePrimitive2DVector to primitive2d::Primitive2DSequence - const primitive2d::Primitive2DSequence getPrimitive2DSequenceFromBasePrimitive2DVector( - const BasePrimitive2DVector& rVector) const; - - public: - Shadow3DExtractingProcessor( - const geometry::ViewInformation3D& rViewInformation, - const basegfx::B2DHomMatrix& rObjectTransformation, - const basegfx::B3DVector& rLightNormal, - double fShadowSlant, - const basegfx::B3DRange& rContained3DRange); - virtual ~Shadow3DExtractingProcessor(); - - /// data read access - const primitive2d::Primitive2DSequence getPrimitive2DSequence() const; - const basegfx::B2DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } - const basegfx::B3DHomMatrix& getWorldToEye() const { return maWorldToEye; } - const basegfx::B3DHomMatrix& getEyeToView() const { return maEyeToView; } - }; - } // end of namespace processor3d -} // end of namespace drawinglayer - -#endif //_DRAWINGLAYER_PROCESSOR3D_SHADOW3DEXTRACTOR_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/processor3d/zbufferprocessor3d.hxx b/drawinglayer/inc/drawinglayer/processor3d/zbufferprocessor3d.hxx deleted file mode 100644 index 1531818e10..0000000000 --- a/drawinglayer/inc/drawinglayer/processor3d/zbufferprocessor3d.hxx +++ /dev/null @@ -1,124 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_ZBUFFERPROCESSOR3D_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR3D_ZBUFFERPROCESSOR3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/processor3d/defaultprocessor3d.hxx> -#include <vcl/bitmapex.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class BZPixelRaster; -} - -namespace drawinglayer { - namespace attribute { - class SdrSceneAttribute; - class SdrLightingAttribute; - class MaterialAttribute3D; - } - namespace geometry { - class ViewInformation2D; - } -} - -class ZBufferRasterConverter3D; -class RasterPrimitive3D; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - /** ZBufferProcessor3D class - - This 3D renderer derived from DefaultProcessor3D renders all feeded primitives to a 2D - raster bitmap using a Z-Buffer based approach. It is able to supersample and to handle - transparent content. - */ - class DRAWINGLAYER_DLLPUBLIC ZBufferProcessor3D : public DefaultProcessor3D - { - private: - /// the raster target, a Z-Buffer - basegfx::BZPixelRaster* mpBZPixelRaster; - - /// inverse of EyeToView for rasterconversion with evtl. Phong shading - basegfx::B3DHomMatrix maInvEyeToView; - - /// The raster converter for Z-Buffer - ZBufferRasterConverter3D* mpZBufferRasterConverter3D; - - /* AA value. Defines how many oversámples will be used in X and Y. Values 0, 1 - will switch it off while e.g. 2 will use 2x2 pixels for each pixel to create - */ - sal_uInt16 mnAntiAlialize; - - /* remembered RasterPrimitive3D's which need to be painted back to front - for transparent 3D parts - */ - std::vector< RasterPrimitive3D >* mpRasterPrimitive3Ds; - - ////////////////////////////////////////////////////////////////////////////// - // rasterconversions for filled and non-filled polygons - - virtual void rasterconvertB3DPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolygon& rHairline) const; - virtual void rasterconvertB3DPolyPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolyPolygon& rFill) const; - - public: - ZBufferProcessor3D( - const geometry::ViewInformation3D& rViewInformation3D, - const geometry::ViewInformation2D& rViewInformation2D, - const attribute::SdrSceneAttribute& rSdrSceneAttribute, - const attribute::SdrLightingAttribute& rSdrLightingAttribute, - double fSizeX, - double fSizeY, - const basegfx::B2DRange& rVisiblePart, - sal_uInt16 nAntiAlialize); - virtual ~ZBufferProcessor3D(); - - void finish(); - - /// get the result as bitmapEx - BitmapEx getBitmapEx() const; - }; - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //INCLUDED_DRAWINGLAYER_PROCESSOR3D_ZBUFFERPROCESSOR3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/texture/texture.hxx b/drawinglayer/inc/drawinglayer/texture/texture.hxx deleted file mode 100644 index b83d654486..0000000000 --- a/drawinglayer/inc/drawinglayer/texture/texture.hxx +++ /dev/null @@ -1,271 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_TEXTURE_TEXTURE_HXX -#define INCLUDED_DRAWINGLAYER_TEXTURE_TEXTURE_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/tools/gradienttools.hxx> -#include <vector> - -////////////////////////////////////////////////////////////////////////////// -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvx - { - public: - GeoTexSvx(); - virtual ~GeoTexSvx(); - - // compare operator - virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const; - bool operator!=(const GeoTexSvx& rGeoTexSvx) const { return !operator==(rGeoTexSvx); } - - // virtual base methods - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - virtual void modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradient : public GeoTexSvx - { - protected: - basegfx::ODFGradientInfo maGradientInfo; - basegfx::B2DRange maTargetRange; - basegfx::BColor maStart; - basegfx::BColor maEnd; - double mfBorder; - - // helpers - void impAppendMatrix(::std::vector< basegfx::B2DHomMatrix >& rMatrices, const basegfx::B2DRange& rRange); - void impAppendColorsRadial(::std::vector< basegfx::BColor >& rColors); - - public: - GeoTexSvxGradient(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder); - virtual ~GeoTexSvxGradient(); - - // compare operator - virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const; - - // virtual base methods - virtual void appendColors(::std::vector< basegfx::BColor >& rColors) = 0; - - // data access - const basegfx::BColor& getStart() const { return maStart; } - const basegfx::BColor& getEnd() const { return maEnd; } - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientLinear : public GeoTexSvxGradient - { - public: - GeoTexSvxGradientLinear(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fAngle); - virtual ~GeoTexSvxGradientLinear(); - - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - virtual void appendColors(::std::vector< basegfx::BColor >& rColors); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientAxial : public GeoTexSvxGradient - { - public: - GeoTexSvxGradientAxial(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fAngle); - virtual ~GeoTexSvxGradientAxial(); - - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - virtual void appendColors(::std::vector< basegfx::BColor >& rColors); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientRadial : public GeoTexSvxGradient - { - public: - GeoTexSvxGradientRadial(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fOffsetX, double fOffsetY); - virtual ~GeoTexSvxGradientRadial(); - - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - virtual void appendColors(::std::vector< basegfx::BColor >& rColors); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientElliptical : public GeoTexSvxGradient - { - public: - GeoTexSvxGradientElliptical(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fOffsetX, double fOffsetY, double fAngle); - virtual ~GeoTexSvxGradientElliptical(); - - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - virtual void appendColors(::std::vector< basegfx::BColor >& rColors); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientSquare : public GeoTexSvxGradient - { - public: - GeoTexSvxGradientSquare(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fOffsetX, double fOffsetY, double fAngle); - virtual ~GeoTexSvxGradientSquare(); - - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - virtual void appendColors(::std::vector< basegfx::BColor >& rColors); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxGradientRect : public GeoTexSvxGradient - { - public: - GeoTexSvxGradientRect(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fOffsetX, double fOffsetY, double fAngle); - virtual ~GeoTexSvxGradientRect(); - - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - virtual void appendColors(::std::vector< basegfx::BColor >& rColors); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxHatch : public GeoTexSvx - { - protected: - basegfx::B2DHomMatrix maTextureTransform; - basegfx::B2DHomMatrix maBackTextureTransform; - double mfDistance; - double mfAngle; - sal_uInt32 mnSteps; - - public: - GeoTexSvxHatch(const basegfx::B2DRange& rTargetRange, double fDistance, double fAngle); - virtual ~GeoTexSvxHatch(); - - // compare operator - virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const; - - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - double getDistanceToHatch(const basegfx::B2DPoint& rUV) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxTiled : public GeoTexSvx - { - protected: - basegfx::B2DPoint maTopLeft; - basegfx::B2DVector maSize; - - public: - GeoTexSvxTiled(const basegfx::B2DPoint& rTopLeft, const basegfx::B2DVector& rSize); - virtual ~GeoTexSvxTiled(); - - // compare operator - virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const; - - virtual void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices); - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif //_DRAWINGLAYER_TEXTURE_TEXTURE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/drawinglayer/texture/texture3d.hxx b/drawinglayer/inc/drawinglayer/texture/texture3d.hxx deleted file mode 100644 index 5236eb6f24..0000000000 --- a/drawinglayer/inc/drawinglayer/texture/texture3d.hxx +++ /dev/null @@ -1,170 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_TEXTURE_TEXTURE3D_HXX -#define INCLUDED_DRAWINGLAYER_TEXTURE_TEXTURE3D_HXX - -#include <drawinglayer/drawinglayerdllapi.h> - -#include <drawinglayer/texture/texture.hxx> -#include <vcl/bitmap.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -namespace drawinglayer { namespace primitive3d { - class HatchTexturePrimitive3D; -}} - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxMono : public GeoTexSvx - { - protected: - basegfx::BColor maSingleColor; - double mfOpacity; - - public: - GeoTexSvxMono(const basegfx::BColor& rSingleColor, double fOpacity); - - // compare operator - virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const; - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - virtual void modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxBitmap : public GeoTexSvx - { - protected: - Bitmap maBitmap; - BitmapReadAccess* mpRead; - basegfx::B2DPoint maTopLeft; - basegfx::B2DVector maSize; - double mfMulX; - double mfMulY; - - // helpers - bool impIsValid(const basegfx::B2DPoint& rUV, sal_Int32& rX, sal_Int32& rY) const; - - public: - GeoTexSvxBitmap(const Bitmap& rBitmap, const basegfx::B2DPoint& rTopLeft, const basegfx::B2DVector& rSize); - virtual ~GeoTexSvxBitmap(); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - virtual void modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxBitmapTiled : public GeoTexSvxBitmap - { - protected: - // helpers - basegfx::B2DPoint impGetCorrected(const basegfx::B2DPoint& rUV) const - { - double fX(fmod(rUV.getX() - maTopLeft.getX(), maSize.getX())); - double fY(fmod(rUV.getY() - maTopLeft.getY(), maSize.getY())); - - if(fX < 0.0) - { - fX += maSize.getX(); - } - - if(fY < 0.0) - { - fY += maSize.getY(); - } - - return basegfx::B2DPoint(fX + maTopLeft.getX(), fY + maTopLeft.getY()); - } - - public: - GeoTexSvxBitmapTiled(const Bitmap& rBitmap, const basegfx::B2DPoint& rTopLeft, const basegfx::B2DVector& rSize); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - virtual void modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const; - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - class DRAWINGLAYER_DLLPUBLIC GeoTexSvxMultiHatch : public GeoTexSvx - { - protected: - basegfx::BColor maColor; - double mfLogicPixelSize; - GeoTexSvxHatch* mp0; - GeoTexSvxHatch* mp1; - GeoTexSvxHatch* mp2; - - // bitfield - unsigned mbFillBackground : 1; - - // helpers - bool impIsOnHatch(const basegfx::B2DPoint& rUV) const; - - public: - GeoTexSvxMultiHatch(const primitive3d::HatchTexturePrimitive3D& rPrimitive, double fLogicPixelSize); - virtual ~GeoTexSvxMultiHatch(); - virtual void modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const; - virtual void modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const; - - // dada access - bool getFillBackground() const { return mbFillBackground; } - }; - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_TEXTURE_TEXTURE3D_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/pch/precompiled_drawinglayer.cxx b/drawinglayer/inc/pch/precompiled_drawinglayer.cxx deleted file mode 100644 index e86aca2cf3..0000000000 --- a/drawinglayer/inc/pch/precompiled_drawinglayer.cxx +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include "precompiled_drawinglayer.hxx" - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/inc/pch/precompiled_drawinglayer.hxx b/drawinglayer/inc/pch/precompiled_drawinglayer.hxx deleted file mode 100644 index 72f6f137b8..0000000000 --- a/drawinglayer/inc/pch/precompiled_drawinglayer.hxx +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): Generated on 2006-09-01 17:49:30.796084 - -#ifdef PRECOMPILED_HEADERS -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/prj/build.lst b/drawinglayer/prj/build.lst deleted file mode 100644 index 9f9697ba06..0000000000 --- a/drawinglayer/prj/build.lst +++ /dev/null @@ -1,4 +0,0 @@ -dl drawinglayer : sal vcl basegfx offapi cppuhelper cppu svtools avmedia canvas cppcanvas NULL -dl drawinglayer usr1 - all dl_mkout NULL -dl drawinglayer\prj nmake - all dl_prj NULL - diff --git a/drawinglayer/prj/d.lst b/drawinglayer/prj/d.lst deleted file mode 100644 index b384ab67c0..0000000000 --- a/drawinglayer/prj/d.lst +++ /dev/null @@ -1,2 +0,0 @@ - -..\inc\drawinglayer\primitive2d\rendergraphicprimitive2d.hxx %_DEST%\inc\drawinglayer\primitive2d\rendergraphicprimitive2d.hxx
\ No newline at end of file diff --git a/drawinglayer/prj/makefile.mk b/drawinglayer/prj/makefile.mk deleted file mode 100755 index e312a7ccab..0000000000 --- a/drawinglayer/prj/makefile.mk +++ /dev/null @@ -1,40 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. -TARGET=prj - -.INCLUDE : settings.mk - -.IF "$(VERBOSE)"!="" -VERBOSEFLAG := -.ELSE -VERBOSEFLAG := -s -.ENDIF - -all: - cd $(PRJ) && $(GNUMAKE) $(VERBOSEFLAG) -r -j$(MAXPROCESS) $(gb_MAKETARGET) && $(GNUMAKE) $(VERBOSEFLAG) -r deliverlog diff --git a/drawinglayer/source/animation/animationtiming.cxx b/drawinglayer/source/animation/animationtiming.cxx deleted file mode 100644 index 856005cb92..0000000000 --- a/drawinglayer/source/animation/animationtiming.cxx +++ /dev/null @@ -1,373 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/animation/animationtiming.hxx> -#include <basegfx/numeric/ftools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace animation - { - ////////////////////////////////////////////////////////////////////////////// - - AnimationEntry::AnimationEntry() - { - } - - AnimationEntry::~AnimationEntry() - { - } - - ////////////////////////////////////////////////////////////////////////////// - - AnimationEntryFixed::AnimationEntryFixed(double fDuration, double fState) - : mfDuration(fDuration), - mfState(fState) - { - } - - AnimationEntryFixed::~AnimationEntryFixed() - { - } - - AnimationEntry* AnimationEntryFixed::clone() const - { - return new AnimationEntryFixed(mfDuration, mfState); - } - - bool AnimationEntryFixed::operator==(const AnimationEntry& rCandidate) const - { - const AnimationEntryFixed* pCompare = dynamic_cast< const AnimationEntryFixed* >(&rCandidate); - - return (pCompare - && basegfx::fTools::equal(mfDuration, pCompare->mfDuration) - && basegfx::fTools::equal(mfState, pCompare->mfState)); - } - - double AnimationEntryFixed::getDuration() const - { - return mfDuration; - } - - double AnimationEntryFixed::getStateAtTime(double /*fTime*/) const - { - return mfState; - } - - double AnimationEntryFixed::getNextEventTime(double fTime) const - { - if(basegfx::fTools::less(fTime, mfDuration)) - { - return mfDuration; - } - else - { - return 0.0; - } - } - - ////////////////////////////////////////////////////////////////////////////// - - AnimationEntryLinear::AnimationEntryLinear(double fDuration, double fFrequency, double fStart, double fStop) - : mfDuration(fDuration), - mfFrequency(fFrequency), - mfStart(fStart), - mfStop(fStop) - { - } - - AnimationEntryLinear::~AnimationEntryLinear() - { - } - - AnimationEntry* AnimationEntryLinear::clone() const - { - return new AnimationEntryLinear(mfDuration, mfFrequency, mfStart, mfStop); - } - - bool AnimationEntryLinear::operator==(const AnimationEntry& rCandidate) const - { - const AnimationEntryLinear* pCompare = dynamic_cast< const AnimationEntryLinear* >(&rCandidate); - - return (pCompare - && basegfx::fTools::equal(mfDuration, pCompare->mfDuration) - && basegfx::fTools::equal(mfStart, pCompare->mfStart) - && basegfx::fTools::equal(mfStop, pCompare->mfStop)); - } - - double AnimationEntryLinear::getDuration() const - { - return mfDuration; - } - - double AnimationEntryLinear::getStateAtTime(double fTime) const - { - if(basegfx::fTools::more(mfDuration, 0.0)) - { - const double fFactor(fTime / mfDuration); - - if(fFactor > 1.0) - { - return mfStop; - } - else - { - return mfStart + ((mfStop - mfStart) * fFactor); - } - } - else - { - return mfStart; - } - } - - double AnimationEntryLinear::getNextEventTime(double fTime) const - { - if(basegfx::fTools::less(fTime, mfDuration)) - { - // use the simple solution: just add the frequency. More correct (but also more - // complicated) would be to calculate the slice of time we are in and when this - // slice will end. For the animations, this makes no quality difference. - fTime += mfFrequency; - - if(basegfx::fTools::more(fTime, mfDuration)) - { - fTime = mfDuration; - } - - return fTime; - } - else - { - return 0.0; - } - } - - ////////////////////////////////////////////////////////////////////////////// - - sal_uInt32 AnimationEntryList::impGetIndexAtTime(double fTime, double &rfAddedTime) const - { - sal_uInt32 nIndex(0L); - - while(nIndex < maEntries.size() && basegfx::fTools::lessOrEqual(rfAddedTime + maEntries[nIndex]->getDuration(), fTime)) - { - rfAddedTime += maEntries[nIndex++]->getDuration(); - } - - return nIndex; - } - - AnimationEntryList::AnimationEntryList() - : mfDuration(0.0) - { - } - - AnimationEntryList::~AnimationEntryList() - { - for(sal_uInt32 a(0L); a < maEntries.size(); a++) - { - delete maEntries[a]; - } - } - - AnimationEntry* AnimationEntryList::clone() const - { - AnimationEntryList* pNew = new AnimationEntryList(); - - for(sal_uInt32 a(0L); a < maEntries.size(); a++) - { - pNew->append(*maEntries[a]); - } - - return pNew; - } - - bool AnimationEntryList::operator==(const AnimationEntry& rCandidate) const - { - const AnimationEntryList* pCompare = dynamic_cast< const AnimationEntryList* >(&rCandidate); - - if(pCompare && mfDuration == pCompare->mfDuration) - { - for(sal_uInt32 a(0L); a < maEntries.size(); a++) - { - if(!(*maEntries[a] == *pCompare->maEntries[a])) - { - return false; - } - } - - return true; - } - - return false; - } - - void AnimationEntryList::append(const AnimationEntry& rCandidate) - { - const double fDuration(rCandidate.getDuration()); - - if(!basegfx::fTools::equalZero(fDuration)) - { - maEntries.push_back(rCandidate.clone()); - mfDuration += fDuration; - } - } - - double AnimationEntryList::getDuration() const - { - return mfDuration; - } - - double AnimationEntryList::getStateAtTime(double fTime) const - { - if(!basegfx::fTools::equalZero(mfDuration)) - { - double fAddedTime(0.0); - const sal_uInt32 nIndex(impGetIndexAtTime(fTime, fAddedTime)); - - if(nIndex < maEntries.size()) - { - return maEntries[nIndex]->getStateAtTime(fTime - fAddedTime); - } - } - - return 0.0; - } - - double AnimationEntryList::getNextEventTime(double fTime) const - { - double fNewTime(0.0); - - if(!basegfx::fTools::equalZero(mfDuration)) - { - double fAddedTime(0.0); - const sal_uInt32 nIndex(impGetIndexAtTime(fTime, fAddedTime)); - - if(nIndex < maEntries.size()) - { - fNewTime = maEntries[nIndex]->getNextEventTime(fTime - fAddedTime) + fAddedTime; - } - } - - return fNewTime; - } - - ////////////////////////////////////////////////////////////////////////////// - - AnimationEntryLoop::AnimationEntryLoop(sal_uInt32 nRepeat) - : AnimationEntryList(), - mnRepeat(nRepeat) - { - } - - AnimationEntryLoop::~AnimationEntryLoop() - { - } - - AnimationEntry* AnimationEntryLoop::clone() const - { - AnimationEntryLoop* pNew = new AnimationEntryLoop(mnRepeat); - - for(sal_uInt32 a(0L); a < maEntries.size(); a++) - { - pNew->append(*maEntries[a]); - } - - return pNew; - } - - bool AnimationEntryLoop::operator==(const AnimationEntry& rCandidate) const - { - const AnimationEntryLoop* pCompare = dynamic_cast< const AnimationEntryLoop* >(&rCandidate); - - return (pCompare - && mnRepeat == pCompare->mnRepeat - && AnimationEntryList::operator==(rCandidate)); - } - - double AnimationEntryLoop::getDuration() const - { - return (mfDuration * (double)mnRepeat); - } - - double AnimationEntryLoop::getStateAtTime(double fTime) const - { - if(mnRepeat && !basegfx::fTools::equalZero(mfDuration)) - { - const sal_uInt32 nCurrentLoop((sal_uInt32)(fTime / mfDuration)); - - if(nCurrentLoop > mnRepeat) - { - return 1.0; - } - else - { - const double fTimeAtLoopStart((double)nCurrentLoop * mfDuration); - const double fRelativeTime(fTime - fTimeAtLoopStart); - return AnimationEntryList::getStateAtTime(fRelativeTime); - } - } - - return 0.0; - } - - double AnimationEntryLoop::getNextEventTime(double fTime) const - { - double fNewTime(0.0); - - if(mnRepeat && !basegfx::fTools::equalZero(mfDuration)) - { - const sal_uInt32 nCurrentLoop((sal_uInt32)(fTime / mfDuration)); - - if(nCurrentLoop <= mnRepeat) - { - const double fTimeAtLoopStart((double)nCurrentLoop * mfDuration); - const double fRelativeTime(fTime - fTimeAtLoopStart); - const double fNextEventAtLoop(AnimationEntryList::getNextEventTime(fRelativeTime)); - - if(!basegfx::fTools::equalZero(fNextEventAtLoop)) - { - fNewTime = fNextEventAtLoop + fTimeAtLoopStart; - } - } - } - - return fNewTime; - } - } // end of namespace animation -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/fillbitmapattribute.cxx b/drawinglayer/source/attribute/fillbitmapattribute.cxx deleted file mode 100644 index 807564da2a..0000000000 --- a/drawinglayer/source/attribute/fillbitmapattribute.cxx +++ /dev/null @@ -1,202 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/fillbitmapattribute.hxx> -#include <vcl/bitmapex.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpFillBitmapAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // data definitions - BitmapEx maBitmapEx; - basegfx::B2DPoint maTopLeft; - basegfx::B2DVector maSize; - - // bitfield - unsigned mbTiling : 1; - - ImpFillBitmapAttribute( - const BitmapEx& rBitmapEx, - const basegfx::B2DPoint& rTopLeft, - const basegfx::B2DVector& rSize, - bool bTiling) - : mnRefCount(0), - maBitmapEx(rBitmapEx), - maTopLeft(rTopLeft), - maSize(rSize), - mbTiling(bTiling) - { - } - - bool operator==(const ImpFillBitmapAttribute& rCandidate) const - { - return (maBitmapEx == rCandidate.maBitmapEx - && maTopLeft == rCandidate.maTopLeft - && maSize == rCandidate.maSize - && mbTiling == rCandidate.mbTiling); - } - - // data read access - const BitmapEx& getBitmapEx() const { return maBitmapEx; } - const basegfx::B2DPoint& getTopLeft() const { return maTopLeft; } - const basegfx::B2DVector& getSize() const { return maSize; } - bool getTiling() const { return mbTiling; } - - static ImpFillBitmapAttribute* get_global_default() - { - static ImpFillBitmapAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpFillBitmapAttribute( - BitmapEx(), - basegfx::B2DPoint(), - basegfx::B2DVector(), - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - FillBitmapAttribute::FillBitmapAttribute( - const BitmapEx& rBitmapEx, - const basegfx::B2DPoint& rTopLeft, - const basegfx::B2DVector& rSize, - bool bTiling) - : mpFillBitmapAttribute(new ImpFillBitmapAttribute( - rBitmapEx, rTopLeft, rSize, bTiling)) - { - } - - FillBitmapAttribute::FillBitmapAttribute() - : mpFillBitmapAttribute(ImpFillBitmapAttribute::get_global_default()) - { - mpFillBitmapAttribute->mnRefCount++; - } - - FillBitmapAttribute::FillBitmapAttribute(const FillBitmapAttribute& rCandidate) - : mpFillBitmapAttribute(rCandidate.mpFillBitmapAttribute) - { - mpFillBitmapAttribute->mnRefCount++; - } - - FillBitmapAttribute::~FillBitmapAttribute() - { - if(mpFillBitmapAttribute->mnRefCount) - { - mpFillBitmapAttribute->mnRefCount--; - } - else - { - delete mpFillBitmapAttribute; - } - } - - bool FillBitmapAttribute::isDefault() const - { - return mpFillBitmapAttribute == ImpFillBitmapAttribute::get_global_default(); - } - - FillBitmapAttribute& FillBitmapAttribute::operator=(const FillBitmapAttribute& rCandidate) - { - if(rCandidate.mpFillBitmapAttribute != mpFillBitmapAttribute) - { - if(mpFillBitmapAttribute->mnRefCount) - { - mpFillBitmapAttribute->mnRefCount--; - } - else - { - delete mpFillBitmapAttribute; - } - - mpFillBitmapAttribute = rCandidate.mpFillBitmapAttribute; - mpFillBitmapAttribute->mnRefCount++; - } - - return *this; - } - - bool FillBitmapAttribute::operator==(const FillBitmapAttribute& rCandidate) const - { - if(rCandidate.mpFillBitmapAttribute == mpFillBitmapAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpFillBitmapAttribute == *mpFillBitmapAttribute); - } - - const BitmapEx& FillBitmapAttribute::getBitmapEx() const - { - return mpFillBitmapAttribute->getBitmapEx(); - } - - const basegfx::B2DPoint& FillBitmapAttribute::getTopLeft() const - { - return mpFillBitmapAttribute->getTopLeft(); - } - - const basegfx::B2DVector& FillBitmapAttribute::getSize() const - { - return mpFillBitmapAttribute->getSize(); - } - - bool FillBitmapAttribute::getTiling() const - { - return mpFillBitmapAttribute->getTiling(); - } - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/fillgradientattribute.cxx b/drawinglayer/source/attribute/fillgradientattribute.cxx deleted file mode 100644 index a67ea41119..0000000000 --- a/drawinglayer/source/attribute/fillgradientattribute.cxx +++ /dev/null @@ -1,247 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/fillgradientattribute.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpFillGradientAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // data definitions - GradientStyle meStyle; - double mfBorder; - double mfOffsetX; - double mfOffsetY; - double mfAngle; - basegfx::BColor maStartColor; - basegfx::BColor maEndColor; - sal_uInt16 mnSteps; - - ImpFillGradientAttribute( - GradientStyle eStyle, - double fBorder, - double fOffsetX, - double fOffsetY, - double fAngle, - const basegfx::BColor& rStartColor, - const basegfx::BColor& rEndColor, - sal_uInt16 nSteps) - : mnRefCount(0), - meStyle(eStyle), - mfBorder(fBorder), - mfOffsetX(fOffsetX), - mfOffsetY(fOffsetY), - mfAngle(fAngle), - maStartColor(rStartColor), - maEndColor(rEndColor), - mnSteps(nSteps) - { - } - - // data read access - GradientStyle getStyle() const { return meStyle; } - double getBorder() const { return mfBorder; } - double getOffsetX() const { return mfOffsetX; } - double getOffsetY() const { return mfOffsetY; } - double getAngle() const { return mfAngle; } - const basegfx::BColor& getStartColor() const { return maStartColor; } - const basegfx::BColor& getEndColor() const { return maEndColor; } - sal_uInt16 getSteps() const { return mnSteps; } - - bool operator==(const ImpFillGradientAttribute& rCandidate) const - { - return (getStyle() == rCandidate.getStyle() - && getBorder() == rCandidate.getBorder() - && getOffsetX() == rCandidate.getOffsetX() - && getOffsetY() == rCandidate.getOffsetY() - && getAngle() == rCandidate.getAngle() - && getStartColor() == rCandidate.getStartColor() - && getEndColor() == rCandidate.getEndColor() - && getSteps() == rCandidate.getSteps()); - } - - static ImpFillGradientAttribute* get_global_default() - { - static ImpFillGradientAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpFillGradientAttribute( - GRADIENTSTYLE_LINEAR, - 0.0, 0.0, 0.0, 0.0, - basegfx::BColor(), - basegfx::BColor(), - 0); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - FillGradientAttribute::FillGradientAttribute( - GradientStyle eStyle, - double fBorder, - double fOffsetX, - double fOffsetY, - double fAngle, - const basegfx::BColor& rStartColor, - const basegfx::BColor& rEndColor, - sal_uInt16 nSteps) - : mpFillGradientAttribute(new ImpFillGradientAttribute( - eStyle, fBorder, fOffsetX, fOffsetY, fAngle, rStartColor, rEndColor, nSteps)) - { - } - - FillGradientAttribute::FillGradientAttribute() - : mpFillGradientAttribute(ImpFillGradientAttribute::get_global_default()) - { - mpFillGradientAttribute->mnRefCount++; - } - - FillGradientAttribute::FillGradientAttribute(const FillGradientAttribute& rCandidate) - : mpFillGradientAttribute(rCandidate.mpFillGradientAttribute) - { - mpFillGradientAttribute->mnRefCount++; - } - - FillGradientAttribute::~FillGradientAttribute() - { - if(mpFillGradientAttribute->mnRefCount) - { - mpFillGradientAttribute->mnRefCount--; - } - else - { - delete mpFillGradientAttribute; - } - } - - bool FillGradientAttribute::isDefault() const - { - return mpFillGradientAttribute == ImpFillGradientAttribute::get_global_default(); - } - - FillGradientAttribute& FillGradientAttribute::operator=(const FillGradientAttribute& rCandidate) - { - if(rCandidate.mpFillGradientAttribute != mpFillGradientAttribute) - { - if(mpFillGradientAttribute->mnRefCount) - { - mpFillGradientAttribute->mnRefCount--; - } - else - { - delete mpFillGradientAttribute; - } - - mpFillGradientAttribute = rCandidate.mpFillGradientAttribute; - mpFillGradientAttribute->mnRefCount++; - } - - return *this; - } - - bool FillGradientAttribute::operator==(const FillGradientAttribute& rCandidate) const - { - if(rCandidate.mpFillGradientAttribute == mpFillGradientAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpFillGradientAttribute == *mpFillGradientAttribute); - } - - const basegfx::BColor& FillGradientAttribute::getStartColor() const - { - return mpFillGradientAttribute->getStartColor(); - } - - const basegfx::BColor& FillGradientAttribute::getEndColor() const - { - return mpFillGradientAttribute->getEndColor(); - } - - double FillGradientAttribute::getBorder() const - { - return mpFillGradientAttribute->getBorder(); - } - - double FillGradientAttribute::getOffsetX() const - { - return mpFillGradientAttribute->getOffsetX(); - } - - double FillGradientAttribute::getOffsetY() const - { - return mpFillGradientAttribute->getOffsetY(); - } - - double FillGradientAttribute::getAngle() const - { - return mpFillGradientAttribute->getAngle(); - } - - GradientStyle FillGradientAttribute::getStyle() const - { - return mpFillGradientAttribute->getStyle(); - } - - sal_uInt16 FillGradientAttribute::getSteps() const - { - return mpFillGradientAttribute->getSteps(); - } - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/fillhatchattribute.cxx b/drawinglayer/source/attribute/fillhatchattribute.cxx deleted file mode 100644 index e3f0070507..0000000000 --- a/drawinglayer/source/attribute/fillhatchattribute.cxx +++ /dev/null @@ -1,216 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/fillhatchattribute.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpFillHatchAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // data definitions - HatchStyle meStyle; - double mfDistance; - double mfAngle; - basegfx::BColor maColor; - - // bitfield - unsigned mbFillBackground : 1; - - ImpFillHatchAttribute( - HatchStyle eStyle, - double fDistance, - double fAngle, - const basegfx::BColor& rColor, - bool bFillBackground) - : mnRefCount(0), - meStyle(eStyle), - mfDistance(fDistance), - mfAngle(fAngle), - maColor(rColor), - mbFillBackground(bFillBackground) - { - } - - // data read access - HatchStyle getStyle() const { return meStyle; } - double getDistance() const { return mfDistance; } - double getAngle() const { return mfAngle; } - const basegfx::BColor& getColor() const { return maColor; } - bool isFillBackground() const { return mbFillBackground; } - - bool operator==(const ImpFillHatchAttribute& rCandidate) const - { - return (getStyle() == rCandidate.getStyle() - && getDistance() == rCandidate.getDistance() - && getAngle() == rCandidate.getAngle() - && getColor() == rCandidate.getColor() - && isFillBackground() == rCandidate.isFillBackground()); - } - - static ImpFillHatchAttribute* get_global_default() - { - static ImpFillHatchAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpFillHatchAttribute( - HATCHSTYLE_SINGLE, - 0.0, 0.0, - basegfx::BColor(), - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - FillHatchAttribute::FillHatchAttribute( - HatchStyle eStyle, - double fDistance, - double fAngle, - const basegfx::BColor& rColor, - bool bFillBackground) - : mpFillHatchAttribute(new ImpFillHatchAttribute( - eStyle, fDistance, fAngle, rColor, bFillBackground)) - { - } - - FillHatchAttribute::FillHatchAttribute() - : mpFillHatchAttribute(ImpFillHatchAttribute::get_global_default()) - { - mpFillHatchAttribute->mnRefCount++; - } - - FillHatchAttribute::FillHatchAttribute(const FillHatchAttribute& rCandidate) - : mpFillHatchAttribute(rCandidate.mpFillHatchAttribute) - { - mpFillHatchAttribute->mnRefCount++; - } - - FillHatchAttribute::~FillHatchAttribute() - { - if(mpFillHatchAttribute->mnRefCount) - { - mpFillHatchAttribute->mnRefCount--; - } - else - { - delete mpFillHatchAttribute; - } - } - - bool FillHatchAttribute::isDefault() const - { - return mpFillHatchAttribute == ImpFillHatchAttribute::get_global_default(); - } - - FillHatchAttribute& FillHatchAttribute::operator=(const FillHatchAttribute& rCandidate) - { - if(rCandidate.mpFillHatchAttribute != mpFillHatchAttribute) - { - if(mpFillHatchAttribute->mnRefCount) - { - mpFillHatchAttribute->mnRefCount--; - } - else - { - delete mpFillHatchAttribute; - } - - mpFillHatchAttribute = rCandidate.mpFillHatchAttribute; - mpFillHatchAttribute->mnRefCount++; - } - - return *this; - } - - bool FillHatchAttribute::operator==(const FillHatchAttribute& rCandidate) const - { - if(rCandidate.mpFillHatchAttribute == mpFillHatchAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpFillHatchAttribute == *mpFillHatchAttribute); - } - - // data read access - HatchStyle FillHatchAttribute::getStyle() const - { - return mpFillHatchAttribute->getStyle(); - } - - double FillHatchAttribute::getDistance() const - { - return mpFillHatchAttribute->getDistance(); - } - - double FillHatchAttribute::getAngle() const - { - return mpFillHatchAttribute->getAngle(); - } - - const basegfx::BColor& FillHatchAttribute::getColor() const - { - return mpFillHatchAttribute->getColor(); - } - - bool FillHatchAttribute::isFillBackground() const - { - return mpFillHatchAttribute->isFillBackground(); - } - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/fontattribute.cxx b/drawinglayer/source/attribute/fontattribute.cxx deleted file mode 100644 index 8f8d42a8af..0000000000 --- a/drawinglayer/source/attribute/fontattribute.cxx +++ /dev/null @@ -1,268 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/fontattribute.hxx> -#include <tools/string.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpFontAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - /// core data - String maFamilyName; // Font Family Name - String maStyleName; // Font Style Name - sal_uInt16 mnWeight; // Font weight - - /// bitfield - unsigned mbSymbol : 1; // Symbol Font Flag - unsigned mbVertical : 1; // Vertical Text Flag - unsigned mbItalic : 1; // Italic Flag - unsigned mbOutline : 1; // Outline Flag - unsigned mbRTL : 1; // RTL Flag - unsigned mbBiDiStrong : 1; // BiDi Flag - unsigned mbMonospaced : 1; - - ImpFontAttribute( - const String& rFamilyName, - const String& rStyleName, - sal_uInt16 nWeight, - bool bSymbol, - bool bVertical, - bool bItalic, - bool bMonospaced, - bool bOutline, - bool bRTL, - bool bBiDiStrong) - : mnRefCount(0), - maFamilyName(rFamilyName), - maStyleName(rStyleName), - mnWeight(nWeight), - mbSymbol(bSymbol), - mbVertical(bVertical), - mbItalic(bItalic), - mbOutline(bOutline), - mbRTL(bRTL), - mbBiDiStrong(bBiDiStrong), - mbMonospaced(bMonospaced) - { - } - - // data read access - const String& getFamilyName() const { return maFamilyName; } - const String& getStyleName() const { return maStyleName; } - sal_uInt16 getWeight() const { return mnWeight; } - bool getSymbol() const { return mbSymbol; } - bool getVertical() const { return mbVertical; } - bool getItalic() const { return mbItalic; } - bool getOutline() const { return mbOutline; } - bool getRTL() const { return mbRTL; } - bool getBiDiStrong() const { return mbBiDiStrong; } - bool getMonospaced() const { return mbMonospaced; } - - bool operator==(const ImpFontAttribute& rCompare) const - { - return (getFamilyName() == rCompare.getFamilyName() - && getStyleName() == rCompare.getStyleName() - && getWeight() == rCompare.getWeight() - && getSymbol() == rCompare.getSymbol() - && getVertical() == rCompare.getVertical() - && getItalic() == rCompare.getItalic() - && getOutline() == rCompare.getOutline() - && getRTL() == rCompare.getRTL() - && getBiDiStrong() == rCompare.getBiDiStrong() - && getMonospaced() == rCompare.getMonospaced()); - } - - static ImpFontAttribute* get_global_default() - { - static ImpFontAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpFontAttribute( - String(), String(), - 0, - false, false, false, false, false, false, false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - FontAttribute::FontAttribute( - const String& rFamilyName, - const String& rStyleName, - sal_uInt16 nWeight, - bool bSymbol, - bool bVertical, - bool bItalic, - bool bMonospaced, - bool bOutline, - bool bRTL, - bool bBiDiStrong) - : mpFontAttribute(new ImpFontAttribute( - rFamilyName, rStyleName, nWeight, bSymbol, bVertical, bItalic, bMonospaced, bOutline, bRTL, bBiDiStrong)) - { - } - - FontAttribute::FontAttribute() - : mpFontAttribute(ImpFontAttribute::get_global_default()) - { - mpFontAttribute->mnRefCount++; - } - - FontAttribute::FontAttribute(const FontAttribute& rCandidate) - : mpFontAttribute(rCandidate.mpFontAttribute) - { - mpFontAttribute->mnRefCount++; - } - - FontAttribute::~FontAttribute() - { - if(mpFontAttribute->mnRefCount) - { - mpFontAttribute->mnRefCount--; - } - else - { - delete mpFontAttribute; - } - } - - bool FontAttribute::isDefault() const - { - return mpFontAttribute == ImpFontAttribute::get_global_default(); - } - - FontAttribute& FontAttribute::operator=(const FontAttribute& rCandidate) - { - if(rCandidate.mpFontAttribute != mpFontAttribute) - { - if(mpFontAttribute->mnRefCount) - { - mpFontAttribute->mnRefCount--; - } - else - { - delete mpFontAttribute; - } - - mpFontAttribute = rCandidate.mpFontAttribute; - mpFontAttribute->mnRefCount++; - } - - return *this; - } - - bool FontAttribute::operator==(const FontAttribute& rCandidate) const - { - if(rCandidate.mpFontAttribute == mpFontAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpFontAttribute == *mpFontAttribute); - } - - const String& FontAttribute::getFamilyName() const - { - return mpFontAttribute->getFamilyName(); - } - - const String& FontAttribute::getStyleName() const - { - return mpFontAttribute->getStyleName(); - } - - sal_uInt16 FontAttribute::getWeight() const - { - return mpFontAttribute->getWeight(); - } - - bool FontAttribute::getSymbol() const - { - return mpFontAttribute->getSymbol(); - } - - bool FontAttribute::getVertical() const - { - return mpFontAttribute->getVertical(); - } - - bool FontAttribute::getItalic() const - { - return mpFontAttribute->getItalic(); - } - - bool FontAttribute::getOutline() const - { - return mpFontAttribute->getOutline(); - } - - bool FontAttribute::getRTL() const - { - return mpFontAttribute->getRTL(); - } - - bool FontAttribute::getBiDiStrong() const - { - return mpFontAttribute->getBiDiStrong(); - } - - bool FontAttribute::getMonospaced() const - { - return mpFontAttribute->getMonospaced(); - } - - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/lineattribute.cxx b/drawinglayer/source/attribute/lineattribute.cxx deleted file mode 100644 index 30646cc692..0000000000 --- a/drawinglayer/source/attribute/lineattribute.cxx +++ /dev/null @@ -1,188 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/lineattribute.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpLineAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // data definitions - basegfx::BColor maColor; // color - double mfWidth; // absolute line width - basegfx::B2DLineJoin meLineJoin; // type of LineJoin - - ImpLineAttribute( - const basegfx::BColor& rColor, - double fWidth, - basegfx::B2DLineJoin aB2DLineJoin) - : mnRefCount(0), - maColor(rColor), - mfWidth(fWidth), - meLineJoin(aB2DLineJoin) - { - } - - // data read access - const basegfx::BColor& getColor() const { return maColor; } - double getWidth() const { return mfWidth; } - basegfx::B2DLineJoin getLineJoin() const { return meLineJoin; } - - bool operator==(const ImpLineAttribute& rCandidate) const - { - return (getColor() == rCandidate.getColor() - && getWidth() == rCandidate.getWidth() - && getLineJoin() == rCandidate.getLineJoin()); - } - - static ImpLineAttribute* get_global_default() - { - static ImpLineAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpLineAttribute( - basegfx::BColor(), - 0.0, - basegfx::B2DLINEJOIN_ROUND); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - LineAttribute::LineAttribute( - const basegfx::BColor& rColor, - double fWidth, - basegfx::B2DLineJoin aB2DLineJoin) - : mpLineAttribute(new ImpLineAttribute( - rColor, fWidth, aB2DLineJoin)) - { - } - - LineAttribute::LineAttribute() - : mpLineAttribute(ImpLineAttribute::get_global_default()) - { - mpLineAttribute->mnRefCount++; - } - - LineAttribute::LineAttribute(const LineAttribute& rCandidate) - : mpLineAttribute(rCandidate.mpLineAttribute) - { - mpLineAttribute->mnRefCount++; - } - - LineAttribute::~LineAttribute() - { - if(mpLineAttribute->mnRefCount) - { - mpLineAttribute->mnRefCount--; - } - else - { - delete mpLineAttribute; - } - } - - bool LineAttribute::isDefault() const - { - return mpLineAttribute == ImpLineAttribute::get_global_default(); - } - - LineAttribute& LineAttribute::operator=(const LineAttribute& rCandidate) - { - if(rCandidate.mpLineAttribute != mpLineAttribute) - { - if(mpLineAttribute->mnRefCount) - { - mpLineAttribute->mnRefCount--; - } - else - { - delete mpLineAttribute; - } - - mpLineAttribute = rCandidate.mpLineAttribute; - mpLineAttribute->mnRefCount++; - } - - return *this; - } - - bool LineAttribute::operator==(const LineAttribute& rCandidate) const - { - if(rCandidate.mpLineAttribute == mpLineAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpLineAttribute == *mpLineAttribute); - } - - const basegfx::BColor& LineAttribute::getColor() const - { - return mpLineAttribute->getColor(); - } - - double LineAttribute::getWidth() const - { - return mpLineAttribute->getWidth(); - } - - basegfx::B2DLineJoin LineAttribute::getLineJoin() const - { - return mpLineAttribute->getLineJoin(); - } - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/linestartendattribute.cxx b/drawinglayer/source/attribute/linestartendattribute.cxx deleted file mode 100644 index 615aef0cab..0000000000 --- a/drawinglayer/source/attribute/linestartendattribute.cxx +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/linestartendattribute.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpLineStartEndAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // data definitions - double mfWidth; // absolute line StartEndGeometry base width - basegfx::B2DPolyPolygon maPolyPolygon; // the StartEndGeometry PolyPolygon - - // bitfield - unsigned mbCentered : 1; // use centered to ineStart/End point? - - ImpLineStartEndAttribute( - double fWidth, - const basegfx::B2DPolyPolygon& rPolyPolygon, - bool bCentered) - : mnRefCount(0), - mfWidth(fWidth), - maPolyPolygon(rPolyPolygon), - mbCentered(bCentered) - { - } - - // data read access - double getWidth() const { return mfWidth; } - const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } - bool isCentered() const { return mbCentered; } - - bool operator==(const ImpLineStartEndAttribute& rCandidate) const - { - return (basegfx::fTools::equal(getWidth(), rCandidate.getWidth()) - && getB2DPolyPolygon() == rCandidate.getB2DPolyPolygon() - && isCentered() == rCandidate.isCentered()); - } - - static ImpLineStartEndAttribute* get_global_default() - { - static ImpLineStartEndAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpLineStartEndAttribute( - 0.0, - basegfx::B2DPolyPolygon(), - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - LineStartEndAttribute::LineStartEndAttribute( - double fWidth, - const basegfx::B2DPolyPolygon& rPolyPolygon, - bool bCentered) - : mpLineStartEndAttribute(new ImpLineStartEndAttribute( - fWidth, rPolyPolygon, bCentered)) - { - } - - LineStartEndAttribute::LineStartEndAttribute() - : mpLineStartEndAttribute(ImpLineStartEndAttribute::get_global_default()) - { - mpLineStartEndAttribute->mnRefCount++; - } - - LineStartEndAttribute::LineStartEndAttribute(const LineStartEndAttribute& rCandidate) - : mpLineStartEndAttribute(rCandidate.mpLineStartEndAttribute) - { - mpLineStartEndAttribute->mnRefCount++; - } - - LineStartEndAttribute::~LineStartEndAttribute() - { - if(mpLineStartEndAttribute->mnRefCount) - { - mpLineStartEndAttribute->mnRefCount--; - } - else - { - delete mpLineStartEndAttribute; - } - } - - bool LineStartEndAttribute::isDefault() const - { - return mpLineStartEndAttribute == ImpLineStartEndAttribute::get_global_default(); - } - - LineStartEndAttribute& LineStartEndAttribute::operator=(const LineStartEndAttribute& rCandidate) - { - if(rCandidate.mpLineStartEndAttribute != mpLineStartEndAttribute) - { - if(mpLineStartEndAttribute->mnRefCount) - { - mpLineStartEndAttribute->mnRefCount--; - } - else - { - delete mpLineStartEndAttribute; - } - - mpLineStartEndAttribute = rCandidate.mpLineStartEndAttribute; - mpLineStartEndAttribute->mnRefCount++; - } - - return *this; - } - - bool LineStartEndAttribute::operator==(const LineStartEndAttribute& rCandidate) const - { - if(rCandidate.mpLineStartEndAttribute == mpLineStartEndAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpLineStartEndAttribute == *mpLineStartEndAttribute); - } - - double LineStartEndAttribute::getWidth() const - { - return mpLineStartEndAttribute->getWidth(); - } - - const basegfx::B2DPolyPolygon& LineStartEndAttribute::getB2DPolyPolygon() const - { - return mpLineStartEndAttribute->getB2DPolyPolygon(); - } - - bool LineStartEndAttribute::isCentered() const - { - return mpLineStartEndAttribute->isCentered(); - } - - bool LineStartEndAttribute::isActive() const - { - return (0.0 != getWidth() - && 0 != getB2DPolyPolygon().count() - && 0 != getB2DPolyPolygon().getB2DPolygon(0).count()); - } - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/materialattribute3d.cxx b/drawinglayer/source/attribute/materialattribute3d.cxx deleted file mode 100644 index 71486765ea..0000000000 --- a/drawinglayer/source/attribute/materialattribute3d.cxx +++ /dev/null @@ -1,210 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/materialattribute3d.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpMaterialAttribute3D - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // materialAttribute3D definitions - basegfx::BColor maColor; // object color - basegfx::BColor maSpecular; // material specular color - basegfx::BColor maEmission; // material emissive color - sal_uInt16 mnSpecularIntensity; // material specular intensity [0..128] - - ImpMaterialAttribute3D(const basegfx::BColor& rColor, const basegfx::BColor& rSpecular, const basegfx::BColor& rEmission, sal_uInt16 nSpecularIntensity) - : mnRefCount(0), - maColor(rColor), - maSpecular(rSpecular), - maEmission(rEmission), - mnSpecularIntensity(nSpecularIntensity) - { - } - - ImpMaterialAttribute3D(const basegfx::BColor& rColor) - : mnRefCount(0), - maColor(rColor), - maSpecular(1.0, 1.0, 1.0), - maEmission(), - mnSpecularIntensity(15) - { - } - - // data read access - const basegfx::BColor& getColor() const { return maColor; } - const basegfx::BColor& getSpecular() const { return maSpecular; } - const basegfx::BColor& getEmission() const { return maEmission; } - sal_uInt16 getSpecularIntensity() const { return mnSpecularIntensity; } - - bool operator==(const ImpMaterialAttribute3D& rCandidate) const - { - return (getColor() == rCandidate.getColor() - && getSpecular() == rCandidate.getSpecular() - && getEmission() == rCandidate.getEmission() - && getSpecularIntensity() == rCandidate.getSpecularIntensity()); - } - - static ImpMaterialAttribute3D* get_global_default() - { - static ImpMaterialAttribute3D* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpMaterialAttribute3D( - basegfx::BColor(), - basegfx::BColor(), - basegfx::BColor(), - 0); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - MaterialAttribute3D::MaterialAttribute3D( - const basegfx::BColor& rColor, - const basegfx::BColor& rSpecular, - const basegfx::BColor& rEmission, - sal_uInt16 nSpecularIntensity) - : mpMaterialAttribute3D(new ImpMaterialAttribute3D( - rColor, rSpecular, rEmission, nSpecularIntensity)) - { - } - - MaterialAttribute3D::MaterialAttribute3D( - const basegfx::BColor& rColor) - : mpMaterialAttribute3D(new ImpMaterialAttribute3D(rColor)) - { - } - - MaterialAttribute3D::MaterialAttribute3D() - : mpMaterialAttribute3D(ImpMaterialAttribute3D::get_global_default()) - { - mpMaterialAttribute3D->mnRefCount++; - } - - MaterialAttribute3D::MaterialAttribute3D(const MaterialAttribute3D& rCandidate) - : mpMaterialAttribute3D(rCandidate.mpMaterialAttribute3D) - { - mpMaterialAttribute3D->mnRefCount++; - } - - MaterialAttribute3D::~MaterialAttribute3D() - { - if(mpMaterialAttribute3D->mnRefCount) - { - mpMaterialAttribute3D->mnRefCount--; - } - else - { - delete mpMaterialAttribute3D; - } - } - - bool MaterialAttribute3D::isDefault() const - { - return mpMaterialAttribute3D == ImpMaterialAttribute3D::get_global_default(); - } - - MaterialAttribute3D& MaterialAttribute3D::operator=(const MaterialAttribute3D& rCandidate) - { - if(rCandidate.mpMaterialAttribute3D != mpMaterialAttribute3D) - { - if(mpMaterialAttribute3D->mnRefCount) - { - mpMaterialAttribute3D->mnRefCount--; - } - else - { - delete mpMaterialAttribute3D; - } - - mpMaterialAttribute3D = rCandidate.mpMaterialAttribute3D; - mpMaterialAttribute3D->mnRefCount++; - } - - return *this; - } - - bool MaterialAttribute3D::operator==(const MaterialAttribute3D& rCandidate) const - { - if(rCandidate.mpMaterialAttribute3D == mpMaterialAttribute3D) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpMaterialAttribute3D == *mpMaterialAttribute3D); - } - - const basegfx::BColor& MaterialAttribute3D::getColor() const - { - return mpMaterialAttribute3D->getColor(); - } - - const basegfx::BColor& MaterialAttribute3D::getSpecular() const - { - return mpMaterialAttribute3D->getSpecular(); - } - - const basegfx::BColor& MaterialAttribute3D::getEmission() const - { - return mpMaterialAttribute3D->getEmission(); - } - - sal_uInt16 MaterialAttribute3D::getSpecularIntensity() const - { - return mpMaterialAttribute3D->getSpecularIntensity(); - } - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrallattribute3d.cxx b/drawinglayer/source/attribute/sdrallattribute3d.cxx deleted file mode 100644 index a5daed92ad..0000000000 --- a/drawinglayer/source/attribute/sdrallattribute3d.cxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrallattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - SdrLineFillShadowAttribute3D::SdrLineFillShadowAttribute3D( - const SdrLineAttribute& rLine, - const SdrFillAttribute& rFill, - const SdrLineStartEndAttribute& rLineStartEnd, - const SdrShadowAttribute& rShadow, - const FillGradientAttribute& rFillFloatTransGradient) - : maLine(rLine), - maFill(rFill), - maLineStartEnd(rLineStartEnd), - maShadow(rShadow), - maFillFloatTransGradient(rFillFloatTransGradient) - { - } - - SdrLineFillShadowAttribute3D::SdrLineFillShadowAttribute3D() - : maLine(), - maFill(), - maLineStartEnd(), - maShadow(), - maFillFloatTransGradient() - { - } - - bool SdrLineFillShadowAttribute3D::isDefault() const - { - return(getLine().isDefault() - && getFill().isDefault() - && getLineStartEnd().isDefault() - && getShadow().isDefault() - && getFillFloatTransGradient().isDefault()); - } - - bool SdrLineFillShadowAttribute3D::operator==(const SdrLineFillShadowAttribute3D& rCandidate) const - { - return(getLine() == rCandidate.getLine() - && getFill() == rCandidate.getFill() - && getLineStartEnd() == rCandidate.getLineStartEnd() - && getShadow() == rCandidate.getShadow() - && getFillFloatTransGradient() == rCandidate.getFillFloatTransGradient()); - } - } // end of namespace overlay -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrfillattribute.cxx b/drawinglayer/source/attribute/sdrfillattribute.cxx deleted file mode 100644 index 0f72925676..0000000000 --- a/drawinglayer/source/attribute/sdrfillattribute.cxx +++ /dev/null @@ -1,218 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrfillattribute.hxx> -#include <basegfx/color/bcolor.hxx> -#include <drawinglayer/attribute/sdrfillbitmapattribute.hxx> -#include <drawinglayer/attribute/fillhatchattribute.hxx> -#include <drawinglayer/attribute/fillgradientattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdrFillAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // fill definitions - double mfTransparence; // [0.0 .. 1.0], 0.0==no transp. - basegfx::BColor maColor; // fill color - FillGradientAttribute maGradient; // fill gradient (if used) - FillHatchAttribute maHatch; // fill hatch (if used) - SdrFillBitmapAttribute maBitmap; // fill bitmap (if used) - - public: - ImpSdrFillAttribute( - double fTransparence, - const basegfx::BColor& rColor, - const FillGradientAttribute& rGradient, - const FillHatchAttribute& rHatch, - const SdrFillBitmapAttribute& rBitmap) - : mnRefCount(0), - mfTransparence(fTransparence), - maColor(rColor), - maGradient(rGradient), - maHatch(rHatch), - maBitmap(rBitmap) - { - } - - // data read access - double getTransparence() const { return mfTransparence; } - const basegfx::BColor& getColor() const { return maColor; } - const FillGradientAttribute& getGradient() const { return maGradient; } - const FillHatchAttribute& getHatch() const { return maHatch; } - const SdrFillBitmapAttribute& getBitmap() const { return maBitmap; } - - // compare operator - bool operator==(const ImpSdrFillAttribute& rCandidate) const - { - return(getTransparence() == rCandidate.getTransparence() - && getColor() == rCandidate.getColor() - && getGradient() == rCandidate.getGradient() - && getHatch() == rCandidate.getHatch() - && getBitmap() == rCandidate.getBitmap()); - } - - static ImpSdrFillAttribute* get_global_default() - { - static ImpSdrFillAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrFillAttribute( - 0.0, - basegfx::BColor(), - FillGradientAttribute(), - FillHatchAttribute(), - SdrFillBitmapAttribute()); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - SdrFillAttribute::SdrFillAttribute( - double fTransparence, - const basegfx::BColor& rColor, - const FillGradientAttribute& rGradient, - const FillHatchAttribute& rHatch, - const SdrFillBitmapAttribute& rBitmap) - : mpSdrFillAttribute(new ImpSdrFillAttribute( - fTransparence, rColor, rGradient, rHatch, rBitmap)) - { - } - - SdrFillAttribute::SdrFillAttribute() - : mpSdrFillAttribute(ImpSdrFillAttribute::get_global_default()) - { - mpSdrFillAttribute->mnRefCount++; - } - - SdrFillAttribute::SdrFillAttribute(const SdrFillAttribute& rCandidate) - : mpSdrFillAttribute(rCandidate.mpSdrFillAttribute) - { - mpSdrFillAttribute->mnRefCount++; - } - - SdrFillAttribute::~SdrFillAttribute() - { - if(mpSdrFillAttribute->mnRefCount) - { - mpSdrFillAttribute->mnRefCount--; - } - else - { - delete mpSdrFillAttribute; - } - } - - bool SdrFillAttribute::isDefault() const - { - return mpSdrFillAttribute == ImpSdrFillAttribute::get_global_default(); - } - - SdrFillAttribute& SdrFillAttribute::operator=(const SdrFillAttribute& rCandidate) - { - if(rCandidate.mpSdrFillAttribute != mpSdrFillAttribute) - { - if(mpSdrFillAttribute->mnRefCount) - { - mpSdrFillAttribute->mnRefCount--; - } - else - { - delete mpSdrFillAttribute; - } - - mpSdrFillAttribute = rCandidate.mpSdrFillAttribute; - mpSdrFillAttribute->mnRefCount++; - } - - return *this; - } - - bool SdrFillAttribute::operator==(const SdrFillAttribute& rCandidate) const - { - if(rCandidate.mpSdrFillAttribute == mpSdrFillAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdrFillAttribute == *mpSdrFillAttribute); - } - - double SdrFillAttribute::getTransparence() const - { - return mpSdrFillAttribute->getTransparence(); - } - - const basegfx::BColor& SdrFillAttribute::getColor() const - { - return mpSdrFillAttribute->getColor(); - } - - const FillGradientAttribute& SdrFillAttribute::getGradient() const - { - return mpSdrFillAttribute->getGradient(); - } - - const FillHatchAttribute& SdrFillAttribute::getHatch() const - { - return mpSdrFillAttribute->getHatch(); - } - - const SdrFillBitmapAttribute& SdrFillAttribute::getBitmap() const - { - return mpSdrFillAttribute->getBitmap(); - } - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrfillbitmapattribute.cxx b/drawinglayer/source/attribute/sdrfillbitmapattribute.cxx deleted file mode 100644 index 3ef2c572a6..0000000000 --- a/drawinglayer/source/attribute/sdrfillbitmapattribute.cxx +++ /dev/null @@ -1,407 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrfillbitmapattribute.hxx> -#include <drawinglayer/attribute/fillbitmapattribute.hxx> -#include <vcl/bitmapex.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdrFillBitmapAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // data definitions - Bitmap maBitmap; - basegfx::B2DVector maSize; - basegfx::B2DVector maOffset; - basegfx::B2DVector maOffsetPosition; - basegfx::B2DVector maRectPoint; - - // bitfield - unsigned mbTiling : 1; - unsigned mbStretch : 1; - unsigned mbLogSize : 1; - - ImpSdrFillBitmapAttribute( - const Bitmap& rBitmap, - const basegfx::B2DVector& rSize, - const basegfx::B2DVector& rOffset, - const basegfx::B2DVector& rOffsetPosition, - const basegfx::B2DVector& rRectPoint, - bool bTiling, - bool bStretch, - bool bLogSize) - : mnRefCount(0), - maBitmap(rBitmap), - maSize(rSize), - maOffset(rOffset), - maOffsetPosition(rOffsetPosition), - maRectPoint(rRectPoint), - mbTiling(bTiling), - mbStretch(bStretch), - mbLogSize(bLogSize) - { - } - - // data read access - const Bitmap& getBitmap() const { return maBitmap; } - const basegfx::B2DVector& getSize() const { return maSize; } - const basegfx::B2DVector& getOffset() const { return maOffset; } - const basegfx::B2DVector& getOffsetPosition() const { return maOffsetPosition; } - const basegfx::B2DVector& getRectPoint() const { return maRectPoint; } - bool getTiling() const { return mbTiling; } - bool getStretch() const { return mbStretch; } - bool getLogSize() const { return mbLogSize; } - - bool operator==(const ImpSdrFillBitmapAttribute& rCandidate) const - { - return (getBitmap() == rCandidate.getBitmap() - && getSize() == rCandidate.getSize() - && getOffset() == rCandidate.getOffset() - && getOffsetPosition() == rCandidate.getOffsetPosition() - && getRectPoint() == rCandidate.getRectPoint() - && getTiling() == rCandidate.getTiling() - && getStretch() == rCandidate.getStretch() - && getLogSize() == rCandidate.getLogSize()); - } - - static ImpSdrFillBitmapAttribute* get_global_default() - { - static ImpSdrFillBitmapAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrFillBitmapAttribute( - Bitmap(), - basegfx::B2DVector(), - basegfx::B2DVector(), - basegfx::B2DVector(), - basegfx::B2DVector(), - false, - false, - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - SdrFillBitmapAttribute::SdrFillBitmapAttribute( - const Bitmap& rBitmap, - const basegfx::B2DVector& rSize, - const basegfx::B2DVector& rOffset, - const basegfx::B2DVector& rOffsetPosition, - const basegfx::B2DVector& rRectPoint, - bool bTiling, - bool bStretch, - bool bLogSize) - : mpSdrFillBitmapAttribute(new ImpSdrFillBitmapAttribute( - rBitmap, rSize, rOffset, rOffsetPosition, rRectPoint, bTiling, bStretch, bLogSize)) - { - } - - SdrFillBitmapAttribute::SdrFillBitmapAttribute() - : mpSdrFillBitmapAttribute(ImpSdrFillBitmapAttribute::get_global_default()) - { - mpSdrFillBitmapAttribute->mnRefCount++; - } - - SdrFillBitmapAttribute::SdrFillBitmapAttribute(const SdrFillBitmapAttribute& rCandidate) - : mpSdrFillBitmapAttribute(rCandidate.mpSdrFillBitmapAttribute) - { - mpSdrFillBitmapAttribute->mnRefCount++; - } - - SdrFillBitmapAttribute::~SdrFillBitmapAttribute() - { - if(mpSdrFillBitmapAttribute->mnRefCount) - { - mpSdrFillBitmapAttribute->mnRefCount--; - } - else - { - delete mpSdrFillBitmapAttribute; - } - } - - bool SdrFillBitmapAttribute::isDefault() const - { - return mpSdrFillBitmapAttribute == ImpSdrFillBitmapAttribute::get_global_default(); - } - - SdrFillBitmapAttribute& SdrFillBitmapAttribute::operator=(const SdrFillBitmapAttribute& rCandidate) - { - if(rCandidate.mpSdrFillBitmapAttribute != mpSdrFillBitmapAttribute) - { - if(mpSdrFillBitmapAttribute->mnRefCount) - { - mpSdrFillBitmapAttribute->mnRefCount--; - } - else - { - delete mpSdrFillBitmapAttribute; - } - - mpSdrFillBitmapAttribute = rCandidate.mpSdrFillBitmapAttribute; - mpSdrFillBitmapAttribute->mnRefCount++; - } - - return *this; - } - - bool SdrFillBitmapAttribute::operator==(const SdrFillBitmapAttribute& rCandidate) const - { - if(rCandidate.mpSdrFillBitmapAttribute == mpSdrFillBitmapAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdrFillBitmapAttribute == *mpSdrFillBitmapAttribute); - } - - const Bitmap& SdrFillBitmapAttribute::getBitmap() const - { - return mpSdrFillBitmapAttribute->getBitmap(); - } - - const basegfx::B2DVector& SdrFillBitmapAttribute::getSize() const - { - return mpSdrFillBitmapAttribute->getSize(); - } - - const basegfx::B2DVector& SdrFillBitmapAttribute::getOffset() const - { - return mpSdrFillBitmapAttribute->getOffset(); - } - - const basegfx::B2DVector& SdrFillBitmapAttribute::getOffsetPosition() const - { - return mpSdrFillBitmapAttribute->getOffsetPosition(); - } - - const basegfx::B2DVector& SdrFillBitmapAttribute::getRectPoint() const - { - return mpSdrFillBitmapAttribute->getRectPoint(); - } - - bool SdrFillBitmapAttribute::getTiling() const - { - return mpSdrFillBitmapAttribute->getTiling(); - } - - bool SdrFillBitmapAttribute::getStretch() const - { - return mpSdrFillBitmapAttribute->getStretch(); - } - - bool SdrFillBitmapAttribute::getLogSize() const - { - return mpSdrFillBitmapAttribute->getLogSize(); - } - - FillBitmapAttribute SdrFillBitmapAttribute::getFillBitmapAttribute(const basegfx::B2DRange& rRange) const - { - // get logical size of bitmap (before expanding eventually) - Bitmap aBitmap(getBitmap()); - const basegfx::B2DVector aLogicalSize(aBitmap.GetPrefSize().getWidth(), aBitmap.GetPrefSize().getHeight()); - - // get hor/ver shiftings and apply them eventually to the bitmap, but only - // when tiling is on - bool bExpandWidth(false); - bool bExpandHeight(false); - - if(getTiling()) - { - if(0.0 != getOffset().getX() || 0.0 != getOffset().getY()) - { - const sal_uInt32 nWidth(aBitmap.GetSizePixel().getWidth()); - const sal_uInt32 nHeight(aBitmap.GetSizePixel().getHeight()); - - if(0.0 != getOffset().getX()) - { - bExpandHeight = true; - const sal_uInt32 nOffset(basegfx::fround(((double)nWidth * getOffset().getX()) / 100.0)); - aBitmap.Expand(0L, nHeight); - - const Size aSizeA(nOffset, nHeight); - const Rectangle aDstA(Point(0L, nHeight), aSizeA); - const Rectangle aSrcA(Point(nWidth - nOffset, 0L), aSizeA); - aBitmap.CopyPixel(aDstA, aSrcA); - - const Size aSizeB(nWidth - nOffset, nHeight); - const Rectangle aDstB(Point(nOffset, nHeight), aSizeB); - const Rectangle aSrcB(Point(0L, 0L), aSizeB); - aBitmap.CopyPixel(aDstB, aSrcB); - } - else - { - bExpandWidth = true; - const sal_uInt32 nOffset(basegfx::fround(((double)nHeight * getOffset().getY()) / 100.0)); - aBitmap.Expand(nWidth, 0L); - - const Size aSize(nWidth, nHeight); - const Rectangle aDst(Point(nWidth, 0L), aSize); - const Rectangle aSrc(Point(0L, 0L), aSize); - aBitmap.CopyPixel(aDst, aSrc); - - const Size aSizeA(nWidth, nOffset); - const Rectangle aDstA(Point(0L, 0L), aSizeA); - const Rectangle aSrcA(Point(nWidth, nHeight - nOffset), aSizeA); - aBitmap.CopyPixel(aDstA, aSrcA); - - const Size aSizeB(nWidth, nHeight - nOffset); - const Rectangle aDstB(Point(0L, nOffset), aSizeB); - const Rectangle aSrcB(Point(nWidth, 0L), aSizeB); - aBitmap.CopyPixel(aDstB, aSrcB); - } - } - } - - // init values with defaults - basegfx::B2DPoint aBitmapSize(1.0, 1.0); - basegfx::B2DVector aBitmapTopLeft(0.0, 0.0); - - // are canges needed? - if(getTiling() || !getStretch()) - { - // init values with range sizes - const double fRangeWidth(0.0 != rRange.getWidth() ? rRange.getWidth() : 1.0); - const double fRangeHeight(0.0 != rRange.getHeight() ? rRange.getHeight() : 1.0); - aBitmapSize = basegfx::B2DPoint(fRangeWidth, fRangeHeight); - - // size changes - if(0.0 != getSize().getX()) - { - if(getSize().getX() < 0.0) - { - aBitmapSize.setX(aBitmapSize.getX() * (getSize().getX() * -0.01)); - } - else - { - aBitmapSize.setX(getSize().getX()); - } - } - else - { - aBitmapSize.setX(aLogicalSize.getX()); - } - - if(0.0 != getSize().getY()) - { - if(getSize().getY() < 0.0) - { - aBitmapSize.setY(aBitmapSize.getY() * (getSize().getY() * -0.01)); - } - else - { - aBitmapSize.setY(getSize().getY()); - } - } - else - { - aBitmapSize.setY(aLogicalSize.getY()); - } - - // get values, force to centered if necessary - const basegfx::B2DVector aRectPoint(getTiling() ? getRectPoint() : basegfx::B2DVector(0.0, 0.0)); - - // position changes X - if(0.0 == aRectPoint.getX()) - { - aBitmapTopLeft.setX((fRangeWidth - aBitmapSize.getX()) * 0.5); - } - else if(1.0 == aRectPoint.getX()) - { - aBitmapTopLeft.setX(fRangeWidth - aBitmapSize.getX()); - } - - if(getTiling() && 0.0 != getOffsetPosition().getX()) - { - aBitmapTopLeft.setX(aBitmapTopLeft.getX() + (aBitmapSize.getX() * (getOffsetPosition().getX() * 0.01))); - } - - // position changes Y - if(0.0 == aRectPoint.getY()) - { - aBitmapTopLeft.setY((fRangeHeight - aBitmapSize.getY()) * 0.5); - } - else if(1.0 == aRectPoint.getY()) - { - aBitmapTopLeft.setY(fRangeHeight - aBitmapSize.getY()); - } - - if(getTiling() && 0.0 != getOffsetPosition().getY()) - { - aBitmapTopLeft.setY(aBitmapTopLeft.getY() + (aBitmapSize.getY() * (getOffsetPosition().getY() * 0.01))); - } - - // apply expand - if(bExpandWidth) - { - aBitmapSize.setX(aBitmapSize.getX() * 2.0); - } - - if(bExpandHeight) - { - aBitmapSize.setY(aBitmapSize.getY() * 2.0); - } - - // apply bitmap size scaling to unit rectangle - aBitmapTopLeft.setX(aBitmapTopLeft.getX() / fRangeWidth); - aBitmapTopLeft.setY(aBitmapTopLeft.getY() / fRangeHeight); - aBitmapSize.setX(aBitmapSize.getX() / fRangeWidth); - aBitmapSize.setY(aBitmapSize.getY() / fRangeHeight); - } - - return FillBitmapAttribute(BitmapEx(aBitmap), aBitmapTopLeft, aBitmapSize, getTiling()); - } - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrlightattribute3d.cxx b/drawinglayer/source/attribute/sdrlightattribute3d.cxx deleted file mode 100644 index 7252ed7f9d..0000000000 --- a/drawinglayer/source/attribute/sdrlightattribute3d.cxx +++ /dev/null @@ -1,193 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrlightattribute3d.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/vector/b3dvector.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdr3DLightAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // 3D light attribute definitions - basegfx::BColor maColor; - basegfx::B3DVector maDirection; - - // bitfield - unsigned mbSpecular : 1; - - ImpSdr3DLightAttribute( - const basegfx::BColor& rColor, - const basegfx::B3DVector& rDirection, - bool bSpecular) - : mnRefCount(0), - maColor(rColor), - maDirection(rDirection), - mbSpecular(bSpecular) - { - } - - // data read access - const basegfx::BColor& getColor() const { return maColor; } - const basegfx::B3DVector& getDirection() const { return maDirection; } - bool getSpecular() const { return mbSpecular; } - - bool operator==(const ImpSdr3DLightAttribute& rCandidate) const - { - return (getColor() == rCandidate.getColor() - && getDirection() == rCandidate.getDirection() - && getSpecular() == rCandidate.getSpecular()); - } - - static ImpSdr3DLightAttribute* get_global_default() - { - static ImpSdr3DLightAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdr3DLightAttribute( - basegfx::BColor(), - basegfx::B3DVector(), - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - Sdr3DLightAttribute::Sdr3DLightAttribute( - const basegfx::BColor& rColor, - const basegfx::B3DVector& rDirection, - bool bSpecular) - : mpSdr3DLightAttribute(new ImpSdr3DLightAttribute( - rColor, rDirection, bSpecular)) - { - } - - Sdr3DLightAttribute::Sdr3DLightAttribute() - : mpSdr3DLightAttribute(ImpSdr3DLightAttribute::get_global_default()) - { - mpSdr3DLightAttribute->mnRefCount++; - } - - Sdr3DLightAttribute::Sdr3DLightAttribute(const Sdr3DLightAttribute& rCandidate) - : mpSdr3DLightAttribute(rCandidate.mpSdr3DLightAttribute) - { - mpSdr3DLightAttribute->mnRefCount++; - } - - Sdr3DLightAttribute::~Sdr3DLightAttribute() - { - if(mpSdr3DLightAttribute->mnRefCount) - { - mpSdr3DLightAttribute->mnRefCount--; - } - else - { - delete mpSdr3DLightAttribute; - } - } - - bool Sdr3DLightAttribute::isDefault() const - { - return mpSdr3DLightAttribute == ImpSdr3DLightAttribute::get_global_default(); - } - - Sdr3DLightAttribute& Sdr3DLightAttribute::operator=(const Sdr3DLightAttribute& rCandidate) - { - if(rCandidate.mpSdr3DLightAttribute != mpSdr3DLightAttribute) - { - if(mpSdr3DLightAttribute->mnRefCount) - { - mpSdr3DLightAttribute->mnRefCount--; - } - else - { - delete mpSdr3DLightAttribute; - } - - mpSdr3DLightAttribute = rCandidate.mpSdr3DLightAttribute; - mpSdr3DLightAttribute->mnRefCount++; - } - - return *this; - } - - bool Sdr3DLightAttribute::operator==(const Sdr3DLightAttribute& rCandidate) const - { - if(rCandidate.mpSdr3DLightAttribute == mpSdr3DLightAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdr3DLightAttribute == *mpSdr3DLightAttribute); - } - - const basegfx::BColor& Sdr3DLightAttribute::getColor() const - { - return mpSdr3DLightAttribute->getColor(); - } - - const basegfx::B3DVector& Sdr3DLightAttribute::getDirection() const - { - return mpSdr3DLightAttribute->getDirection(); - } - - bool Sdr3DLightAttribute::getSpecular() const - { - return mpSdr3DLightAttribute->getSpecular(); - } - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrlightingattribute3d.cxx b/drawinglayer/source/attribute/sdrlightingattribute3d.cxx deleted file mode 100644 index ba742a2a88..0000000000 --- a/drawinglayer/source/attribute/sdrlightingattribute3d.cxx +++ /dev/null @@ -1,232 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrlightingattribute3d.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/vector/b3dvector.hxx> -#include <drawinglayer/attribute/sdrlightattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdrLightingAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // 3D light attribute definitions - basegfx::BColor maAmbientLight; - ::std::vector< Sdr3DLightAttribute > maLightVector; - - ImpSdrLightingAttribute( - const basegfx::BColor& rAmbientLight, - const ::std::vector< Sdr3DLightAttribute >& rLightVector) - : mnRefCount(0), - maAmbientLight(rAmbientLight), - maLightVector(rLightVector) - { - } - - // data read access - const basegfx::BColor& getAmbientLight() const { return maAmbientLight; } - const ::std::vector< Sdr3DLightAttribute >& getLightVector() const { return maLightVector; } - - bool operator==(const ImpSdrLightingAttribute& rCandidate) const - { - return (getAmbientLight() == rCandidate.getAmbientLight() - && getLightVector() == rCandidate.getLightVector()); - } - - static ImpSdrLightingAttribute* get_global_default() - { - static ImpSdrLightingAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrLightingAttribute( - basegfx::BColor(), - std::vector< Sdr3DLightAttribute >()); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - SdrLightingAttribute::SdrLightingAttribute( - const basegfx::BColor& rAmbientLight, - const ::std::vector< Sdr3DLightAttribute >& rLightVector) - : mpSdrLightingAttribute(new ImpSdrLightingAttribute( - rAmbientLight, rLightVector)) - { - } - - SdrLightingAttribute::SdrLightingAttribute() - : mpSdrLightingAttribute(ImpSdrLightingAttribute::get_global_default()) - { - mpSdrLightingAttribute->mnRefCount++; - } - - SdrLightingAttribute::SdrLightingAttribute(const SdrLightingAttribute& rCandidate) - : mpSdrLightingAttribute(rCandidate.mpSdrLightingAttribute) - { - mpSdrLightingAttribute->mnRefCount++; - } - - SdrLightingAttribute::~SdrLightingAttribute() - { - if(mpSdrLightingAttribute->mnRefCount) - { - mpSdrLightingAttribute->mnRefCount--; - } - else - { - delete mpSdrLightingAttribute; - } - } - - bool SdrLightingAttribute::isDefault() const - { - return mpSdrLightingAttribute == ImpSdrLightingAttribute::get_global_default(); - } - - SdrLightingAttribute& SdrLightingAttribute::operator=(const SdrLightingAttribute& rCandidate) - { - if(rCandidate.mpSdrLightingAttribute != mpSdrLightingAttribute) - { - if(mpSdrLightingAttribute->mnRefCount) - { - mpSdrLightingAttribute->mnRefCount--; - } - else - { - delete mpSdrLightingAttribute; - } - - mpSdrLightingAttribute = rCandidate.mpSdrLightingAttribute; - mpSdrLightingAttribute->mnRefCount++; - } - - return *this; - } - - bool SdrLightingAttribute::operator==(const SdrLightingAttribute& rCandidate) const - { - if(rCandidate.mpSdrLightingAttribute == mpSdrLightingAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdrLightingAttribute == *mpSdrLightingAttribute); - } - - const basegfx::BColor& SdrLightingAttribute::getAmbientLight() const - { - return mpSdrLightingAttribute->getAmbientLight(); - } - - const ::std::vector< Sdr3DLightAttribute >& SdrLightingAttribute::getLightVector() const - { - return mpSdrLightingAttribute->getLightVector(); - } - - // color model solver - basegfx::BColor SdrLightingAttribute::solveColorModel( - const basegfx::B3DVector& rNormalInEyeCoordinates, - const basegfx::BColor& rColor, const basegfx::BColor& rSpecular, - const basegfx::BColor& rEmission, sal_uInt16 nSpecularIntensity) const - { - // initialize with emissive color - basegfx::BColor aRetval(rEmission); - - // take care of global ambient light - aRetval += mpSdrLightingAttribute->getAmbientLight() * rColor; - - // prepare light access. Is there a light? - const sal_uInt32 nLightCount(mpSdrLightingAttribute->getLightVector().size()); - - if(nLightCount && !rNormalInEyeCoordinates.equalZero()) - { - // prepare normal - basegfx::B3DVector aEyeNormal(rNormalInEyeCoordinates); - aEyeNormal.normalize(); - - for(sal_uInt32 a(0L); a < nLightCount; a++) - { - const Sdr3DLightAttribute& rLight(mpSdrLightingAttribute->getLightVector()[a]); - const double fCosFac(rLight.getDirection().scalar(aEyeNormal)); - - if(basegfx::fTools::more(fCosFac, 0.0)) - { - aRetval += ((rLight.getColor() * rColor) * fCosFac); - - if(rLight.getSpecular()) - { - // expand by (0.0, 0.0, 1.0) in Z - basegfx::B3DVector aSpecularNormal(rLight.getDirection().getX(), rLight.getDirection().getY(), rLight.getDirection().getZ() + 1.0); - aSpecularNormal.normalize(); - double fCosFac2(aSpecularNormal.scalar(aEyeNormal)); - - if(basegfx::fTools::more(fCosFac2, 0.0)) - { - fCosFac2 = pow(fCosFac2, (double)nSpecularIntensity); - aRetval += (rSpecular * fCosFac2); - } - } - } - } - } - - // clamp to color space before usage - aRetval.clamp(); - - return aRetval; - } - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrlineattribute.cxx b/drawinglayer/source/attribute/sdrlineattribute.cxx deleted file mode 100644 index ac36188a3f..0000000000 --- a/drawinglayer/source/attribute/sdrlineattribute.cxx +++ /dev/null @@ -1,247 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrlineattribute.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdrLineAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // line definitions - basegfx::B2DLineJoin meJoin; // B2DLINEJOIN_* defines - double mfWidth; // 1/100th mm, 0.0==hair - double mfTransparence; // [0.0 .. 1.0], 0.0==no transp. - basegfx::BColor maColor; // color of line - ::std::vector< double > maDotDashArray; // array of double which defines the dot-dash pattern - double mfFullDotDashLen; // sum of maDotDashArray (for convenience) - - ImpSdrLineAttribute( - basegfx::B2DLineJoin eJoin, - double fWidth, - double fTransparence, - const basegfx::BColor& rColor, - const ::std::vector< double >& rDotDashArray, - double fFullDotDashLen) - : mnRefCount(0), - meJoin(eJoin), - mfWidth(fWidth), - mfTransparence(fTransparence), - maColor(rColor), - maDotDashArray(rDotDashArray), - mfFullDotDashLen(fFullDotDashLen) - { - } - - ImpSdrLineAttribute(const basegfx::BColor& rColor) - : mnRefCount(0), - meJoin(basegfx::B2DLINEJOIN_NONE), - mfWidth(0.0), - mfTransparence(0.0), - maColor(rColor), - maDotDashArray(), - mfFullDotDashLen(0.0) - { - } - - // data read access - basegfx::B2DLineJoin getJoin() const { return meJoin; } - double getWidth() const { return mfWidth; } - double getTransparence() const { return mfTransparence; } - const basegfx::BColor& getColor() const { return maColor; } - const ::std::vector< double >& getDotDashArray() const { return maDotDashArray; } - double getFullDotDashLen() const { return mfFullDotDashLen; } - - bool operator==(const ImpSdrLineAttribute& rCandidate) const - { - return (getJoin() == rCandidate.getJoin() - && getWidth() == rCandidate.getWidth() - && getTransparence() == rCandidate.getTransparence() - && getColor() == rCandidate.getColor() - && getDotDashArray() == rCandidate.getDotDashArray()); - } - - static ImpSdrLineAttribute* get_global_default() - { - static ImpSdrLineAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrLineAttribute( - basegfx::B2DLINEJOIN_ROUND, - 0.0, - 0.0, - basegfx::BColor(), - std::vector< double >(), - 0.0); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - SdrLineAttribute::SdrLineAttribute( - basegfx::B2DLineJoin eJoin, - double fWidth, - double fTransparence, - const basegfx::BColor& rColor, - const ::std::vector< double >& rDotDashArray, - double fFullDotDashLen) - : mpSdrLineAttribute(new ImpSdrLineAttribute( - eJoin, fWidth, fTransparence, rColor, rDotDashArray, fFullDotDashLen)) - { - } - - SdrLineAttribute::SdrLineAttribute( - const basegfx::BColor& rColor) - : mpSdrLineAttribute(new ImpSdrLineAttribute(rColor)) - { - } - - SdrLineAttribute::SdrLineAttribute() - : mpSdrLineAttribute(ImpSdrLineAttribute::get_global_default()) - { - mpSdrLineAttribute->mnRefCount++; - } - - SdrLineAttribute::SdrLineAttribute(const SdrLineAttribute& rCandidate) - : mpSdrLineAttribute(rCandidate.mpSdrLineAttribute) - { - mpSdrLineAttribute->mnRefCount++; - } - - SdrLineAttribute::~SdrLineAttribute() - { - if(mpSdrLineAttribute->mnRefCount) - { - mpSdrLineAttribute->mnRefCount--; - } - else - { - delete mpSdrLineAttribute; - } - } - - bool SdrLineAttribute::isDefault() const - { - return mpSdrLineAttribute == ImpSdrLineAttribute::get_global_default(); - } - - SdrLineAttribute& SdrLineAttribute::operator=(const SdrLineAttribute& rCandidate) - { - if(rCandidate.mpSdrLineAttribute != mpSdrLineAttribute) - { - if(mpSdrLineAttribute->mnRefCount) - { - mpSdrLineAttribute->mnRefCount--; - } - else - { - delete mpSdrLineAttribute; - } - - mpSdrLineAttribute = rCandidate.mpSdrLineAttribute; - mpSdrLineAttribute->mnRefCount++; - } - - return *this; - } - - bool SdrLineAttribute::operator==(const SdrLineAttribute& rCandidate) const - { - if(rCandidate.mpSdrLineAttribute == mpSdrLineAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdrLineAttribute == *mpSdrLineAttribute); - } - - basegfx::B2DLineJoin SdrLineAttribute::getJoin() const - { - return mpSdrLineAttribute->getJoin(); - } - - double SdrLineAttribute::getWidth() const - { - return mpSdrLineAttribute->getWidth(); - } - - double SdrLineAttribute::getTransparence() const - { - return mpSdrLineAttribute->getTransparence(); - } - - const basegfx::BColor& SdrLineAttribute::getColor() const - { - return mpSdrLineAttribute->getColor(); - } - - const ::std::vector< double >& SdrLineAttribute::getDotDashArray() const - { - return mpSdrLineAttribute->getDotDashArray(); - } - - double SdrLineAttribute::getFullDotDashLen() const - { - return mpSdrLineAttribute->getFullDotDashLen(); - } - - bool SdrLineAttribute::isDashed() const - { - return (0L != getDotDashArray().size()); - } - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrlinestartendattribute.cxx b/drawinglayer/source/attribute/sdrlinestartendattribute.cxx deleted file mode 100644 index 8a9a16f120..0000000000 --- a/drawinglayer/source/attribute/sdrlinestartendattribute.cxx +++ /dev/null @@ -1,251 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrlinestartendattribute.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdrLineStartEndAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // line arrow definitions - basegfx::B2DPolyPolygon maStartPolyPolygon; // start Line PolyPolygon - basegfx::B2DPolyPolygon maEndPolyPolygon; // end Line PolyPolygon - double mfStartWidth; // 1/100th mm - double mfEndWidth; // 1/100th mm - - // bitfield - unsigned mbStartActive : 1L; // start of Line is active - unsigned mbEndActive : 1L; // end of Line is active - unsigned mbStartCentered : 1L; // Line is centered on line start point - unsigned mbEndCentered : 1L; // Line is centered on line end point - - ImpSdrLineStartEndAttribute( - const basegfx::B2DPolyPolygon& rStartPolyPolygon, - const basegfx::B2DPolyPolygon& rEndPolyPolygon, - double fStartWidth, - double fEndWidth, - bool bStartActive, - bool bEndActive, - bool bStartCentered, - bool bEndCentered) - : mnRefCount(0), - maStartPolyPolygon(rStartPolyPolygon), - maEndPolyPolygon(rEndPolyPolygon), - mfStartWidth(fStartWidth), - mfEndWidth(fEndWidth), - mbStartActive(bStartActive), - mbEndActive(bEndActive), - mbStartCentered(bStartCentered), - mbEndCentered(bEndCentered) - { - } - - // data read access - const basegfx::B2DPolyPolygon& getStartPolyPolygon() const { return maStartPolyPolygon; } - const basegfx::B2DPolyPolygon& getEndPolyPolygon() const { return maEndPolyPolygon; } - double getStartWidth() const { return mfStartWidth; } - double getEndWidth() const { return mfEndWidth; } - bool isStartActive() const { return mbStartActive; } - bool isEndActive() const { return mbEndActive; } - bool isStartCentered() const { return mbStartCentered; } - bool isEndCentered() const { return mbEndCentered; } - - bool operator==(const ImpSdrLineStartEndAttribute& rCandidate) const - { - return (getStartPolyPolygon() == rCandidate.getStartPolyPolygon() - && getEndPolyPolygon() == rCandidate.getEndPolyPolygon() - && getStartWidth() == rCandidate.getStartWidth() - && getEndWidth() == rCandidate.getEndWidth() - && isStartActive() == rCandidate.isStartActive() - && isEndActive() == rCandidate.isEndActive() - && isStartCentered() == rCandidate.isStartCentered() - && isEndCentered() == rCandidate.isEndCentered()); - } - - static ImpSdrLineStartEndAttribute* get_global_default() - { - static ImpSdrLineStartEndAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrLineStartEndAttribute( - basegfx::B2DPolyPolygon(), - basegfx::B2DPolyPolygon(), - 0.0, - 0.0, - false, - false, - false, - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - SdrLineStartEndAttribute::SdrLineStartEndAttribute( - const basegfx::B2DPolyPolygon& rStartPolyPolygon, - const basegfx::B2DPolyPolygon& rEndPolyPolygon, - double fStartWidth, - double fEndWidth, - bool bStartActive, - bool bEndActive, - bool bStartCentered, - bool bEndCentered) - : mpSdrLineStartEndAttribute(new ImpSdrLineStartEndAttribute( - rStartPolyPolygon, rEndPolyPolygon, fStartWidth, fEndWidth, bStartActive, bEndActive, bStartCentered, bEndCentered)) - { - } - - SdrLineStartEndAttribute::SdrLineStartEndAttribute() - : mpSdrLineStartEndAttribute(ImpSdrLineStartEndAttribute::get_global_default()) - { - mpSdrLineStartEndAttribute->mnRefCount++; - } - - SdrLineStartEndAttribute::SdrLineStartEndAttribute(const SdrLineStartEndAttribute& rCandidate) - : mpSdrLineStartEndAttribute(rCandidate.mpSdrLineStartEndAttribute) - { - mpSdrLineStartEndAttribute->mnRefCount++; - } - - SdrLineStartEndAttribute::~SdrLineStartEndAttribute() - { - if(mpSdrLineStartEndAttribute->mnRefCount) - { - mpSdrLineStartEndAttribute->mnRefCount--; - } - else - { - delete mpSdrLineStartEndAttribute; - } - } - - bool SdrLineStartEndAttribute::isDefault() const - { - return mpSdrLineStartEndAttribute == ImpSdrLineStartEndAttribute::get_global_default(); - } - - SdrLineStartEndAttribute& SdrLineStartEndAttribute::operator=(const SdrLineStartEndAttribute& rCandidate) - { - if(rCandidate.mpSdrLineStartEndAttribute != mpSdrLineStartEndAttribute) - { - if(mpSdrLineStartEndAttribute->mnRefCount) - { - mpSdrLineStartEndAttribute->mnRefCount--; - } - else - { - delete mpSdrLineStartEndAttribute; - } - - mpSdrLineStartEndAttribute = rCandidate.mpSdrLineStartEndAttribute; - mpSdrLineStartEndAttribute->mnRefCount++; - } - - return *this; - } - - bool SdrLineStartEndAttribute::operator==(const SdrLineStartEndAttribute& rCandidate) const - { - if(rCandidate.mpSdrLineStartEndAttribute == mpSdrLineStartEndAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdrLineStartEndAttribute == *mpSdrLineStartEndAttribute); - } - - const basegfx::B2DPolyPolygon& SdrLineStartEndAttribute::getStartPolyPolygon() const - { - return mpSdrLineStartEndAttribute->getStartPolyPolygon(); - } - - const basegfx::B2DPolyPolygon& SdrLineStartEndAttribute::getEndPolyPolygon() const - { - return mpSdrLineStartEndAttribute->getEndPolyPolygon(); - } - - double SdrLineStartEndAttribute::getStartWidth() const - { - return mpSdrLineStartEndAttribute->getStartWidth(); - } - - double SdrLineStartEndAttribute::getEndWidth() const - { - return mpSdrLineStartEndAttribute->getEndWidth(); - } - - bool SdrLineStartEndAttribute::isStartActive() const - { - return mpSdrLineStartEndAttribute->isStartActive(); - } - - bool SdrLineStartEndAttribute::isEndActive() const - { - return mpSdrLineStartEndAttribute->isEndActive(); - } - - bool SdrLineStartEndAttribute::isStartCentered() const - { - return mpSdrLineStartEndAttribute->isStartCentered(); - } - - bool SdrLineStartEndAttribute::isEndCentered() const - { - return mpSdrLineStartEndAttribute->isEndCentered(); - } - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrobjectattribute3d.cxx b/drawinglayer/source/attribute/sdrobjectattribute3d.cxx deleted file mode 100644 index 2f9e4baca4..0000000000 --- a/drawinglayer/source/attribute/sdrobjectattribute3d.cxx +++ /dev/null @@ -1,289 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrobjectattribute3d.hxx> -#include <drawinglayer/attribute/materialattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdr3DObjectAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // 3D object attribute definitions - ::com::sun::star::drawing::NormalsKind maNormalsKind; // normals type (0..2) - ::com::sun::star::drawing::TextureProjectionMode maTextureProjectionX; // texture projection type X (0..2) - ::com::sun::star::drawing::TextureProjectionMode maTextureProjectionY; // texture projection type Y (0..2) - ::com::sun::star::drawing::TextureKind2 maTextureKind; // texture kind (see uno API) - ::com::sun::star::drawing::TextureMode maTextureMode; // texture kind (see uno API) - MaterialAttribute3D maMaterial; // object, specular and emissive colors, SpecularIntensity - - // bitfield - unsigned mbNormalsInvert : 1; // invert normals - unsigned mbDoubleSided : 1; // surfaces are double sided - unsigned mbShadow3D : 1; // display shadow in 3D (if on), params for that are at scene - unsigned mbTextureFilter : 1; // filter texture to make more smooth - unsigned mbReducedLineGeometry : 1; // use reduced line geometry (object specific) - - ImpSdr3DObjectAttribute( - ::com::sun::star::drawing::NormalsKind aNormalsKind, - ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionX, - ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionY, - ::com::sun::star::drawing::TextureKind2 aTextureKind, - ::com::sun::star::drawing::TextureMode aTextureMode, - const MaterialAttribute3D& rMaterial, - bool bNormalsInvert, - bool bDoubleSided, - bool bShadow3D, - bool bTextureFilter, - bool bReducedLineGeometry) - : mnRefCount(0), - maNormalsKind(aNormalsKind), - maTextureProjectionX(aTextureProjectionX), - maTextureProjectionY(aTextureProjectionY), - maTextureKind(aTextureKind), - maTextureMode(aTextureMode), - maMaterial(rMaterial), - mbNormalsInvert(bNormalsInvert), - mbDoubleSided(bDoubleSided), - mbShadow3D(bShadow3D), - mbTextureFilter(bTextureFilter), - mbReducedLineGeometry(bReducedLineGeometry) - { - } - - // data read access - ::com::sun::star::drawing::NormalsKind getNormalsKind() const { return maNormalsKind; } - ::com::sun::star::drawing::TextureProjectionMode getTextureProjectionX() const { return maTextureProjectionX; } - ::com::sun::star::drawing::TextureProjectionMode getTextureProjectionY() const { return maTextureProjectionY; } - ::com::sun::star::drawing::TextureKind2 getTextureKind() const { return maTextureKind; } - ::com::sun::star::drawing::TextureMode getTextureMode() const { return maTextureMode; } - const MaterialAttribute3D& getMaterial() const { return maMaterial; } - bool getNormalsInvert() const { return mbNormalsInvert; } - bool getDoubleSided() const { return mbDoubleSided; } - bool getShadow3D() const { return mbShadow3D; } - bool getTextureFilter() const { return mbTextureFilter; } - bool getReducedLineGeometry() const { return mbReducedLineGeometry; } - - bool operator==(const ImpSdr3DObjectAttribute& rCandidate) const - { - return (getNormalsKind() == rCandidate.getNormalsKind() - && getTextureProjectionX() == rCandidate.getTextureProjectionX() - && getTextureProjectionY() == rCandidate.getTextureProjectionY() - && getTextureKind() == rCandidate.getTextureKind() - && getTextureMode() == rCandidate.getTextureMode() - && getMaterial() == rCandidate.getMaterial() - && getNormalsInvert() == rCandidate.getNormalsInvert() - && getDoubleSided() == rCandidate.getDoubleSided() - && getShadow3D() == rCandidate.getShadow3D() - && getTextureFilter() == rCandidate.getTextureFilter() - && getReducedLineGeometry() == rCandidate.getReducedLineGeometry()); - } - - static ImpSdr3DObjectAttribute* get_global_default() - { - static ImpSdr3DObjectAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdr3DObjectAttribute( - ::com::sun::star::drawing::NormalsKind_SPECIFIC, - ::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC, - ::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC, - ::com::sun::star::drawing::TextureKind2_LUMINANCE, - ::com::sun::star::drawing::TextureMode_REPLACE, - MaterialAttribute3D(), - false, - false, - false, - false, - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - Sdr3DObjectAttribute::Sdr3DObjectAttribute( - ::com::sun::star::drawing::NormalsKind aNormalsKind, - ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionX, - ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionY, - ::com::sun::star::drawing::TextureKind2 aTextureKind, - ::com::sun::star::drawing::TextureMode aTextureMode, - const MaterialAttribute3D& rMaterial, - bool bNormalsInvert, - bool bDoubleSided, - bool bShadow3D, - bool bTextureFilter, - bool bReducedLineGeometry) - : mpSdr3DObjectAttribute(new ImpSdr3DObjectAttribute( - aNormalsKind, aTextureProjectionX, aTextureProjectionY, aTextureKind, aTextureMode, - rMaterial, bNormalsInvert, bDoubleSided, bShadow3D, bTextureFilter, bReducedLineGeometry)) - { - } - - Sdr3DObjectAttribute::Sdr3DObjectAttribute() - : mpSdr3DObjectAttribute(ImpSdr3DObjectAttribute::get_global_default()) - { - mpSdr3DObjectAttribute->mnRefCount++; - } - - Sdr3DObjectAttribute::Sdr3DObjectAttribute(const Sdr3DObjectAttribute& rCandidate) - : mpSdr3DObjectAttribute(rCandidate.mpSdr3DObjectAttribute) - { - mpSdr3DObjectAttribute->mnRefCount++; - } - - Sdr3DObjectAttribute::~Sdr3DObjectAttribute() - { - if(mpSdr3DObjectAttribute->mnRefCount) - { - mpSdr3DObjectAttribute->mnRefCount--; - } - else - { - delete mpSdr3DObjectAttribute; - } - } - - bool Sdr3DObjectAttribute::isDefault() const - { - return mpSdr3DObjectAttribute == ImpSdr3DObjectAttribute::get_global_default(); - } - - Sdr3DObjectAttribute& Sdr3DObjectAttribute::operator=(const Sdr3DObjectAttribute& rCandidate) - { - if(rCandidate.mpSdr3DObjectAttribute != mpSdr3DObjectAttribute) - { - if(mpSdr3DObjectAttribute->mnRefCount) - { - mpSdr3DObjectAttribute->mnRefCount--; - } - else - { - delete mpSdr3DObjectAttribute; - } - - mpSdr3DObjectAttribute = rCandidate.mpSdr3DObjectAttribute; - mpSdr3DObjectAttribute->mnRefCount++; - } - - return *this; - } - - bool Sdr3DObjectAttribute::operator==(const Sdr3DObjectAttribute& rCandidate) const - { - if(rCandidate.mpSdr3DObjectAttribute == mpSdr3DObjectAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdr3DObjectAttribute == *mpSdr3DObjectAttribute); - } - - ::com::sun::star::drawing::NormalsKind Sdr3DObjectAttribute::getNormalsKind() const - { - return mpSdr3DObjectAttribute->getNormalsKind(); - } - - ::com::sun::star::drawing::TextureProjectionMode Sdr3DObjectAttribute::getTextureProjectionX() const - { - return mpSdr3DObjectAttribute->getTextureProjectionX(); - } - - ::com::sun::star::drawing::TextureProjectionMode Sdr3DObjectAttribute::getTextureProjectionY() const - { - return mpSdr3DObjectAttribute->getTextureProjectionY(); - } - - ::com::sun::star::drawing::TextureKind2 Sdr3DObjectAttribute::getTextureKind() const - { - return mpSdr3DObjectAttribute->getTextureKind(); - } - - ::com::sun::star::drawing::TextureMode Sdr3DObjectAttribute::getTextureMode() const - { - return mpSdr3DObjectAttribute->getTextureMode(); - } - - const MaterialAttribute3D& Sdr3DObjectAttribute::getMaterial() const - { - return mpSdr3DObjectAttribute->getMaterial(); - } - - bool Sdr3DObjectAttribute::getNormalsInvert() const - { - return mpSdr3DObjectAttribute->getNormalsInvert(); - } - - bool Sdr3DObjectAttribute::getDoubleSided() const - { - return mpSdr3DObjectAttribute->getDoubleSided(); - } - - bool Sdr3DObjectAttribute::getShadow3D() const - { - return mpSdr3DObjectAttribute->getShadow3D(); - } - - bool Sdr3DObjectAttribute::getTextureFilter() const - { - return mpSdr3DObjectAttribute->getTextureFilter(); - } - - bool Sdr3DObjectAttribute::getReducedLineGeometry() const - { - return mpSdr3DObjectAttribute->getReducedLineGeometry(); - } - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrsceneattribute3d.cxx b/drawinglayer/source/attribute/sdrsceneattribute3d.cxx deleted file mode 100644 index c66eda2bb9..0000000000 --- a/drawinglayer/source/attribute/sdrsceneattribute3d.cxx +++ /dev/null @@ -1,215 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrsceneattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdrSceneAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // 3D scene attribute definitions - double mfDistance; - double mfShadowSlant; - ::com::sun::star::drawing::ProjectionMode maProjectionMode; - ::com::sun::star::drawing::ShadeMode maShadeMode; - - // bitfield - unsigned mbTwoSidedLighting : 1; - - public: - ImpSdrSceneAttribute( - double fDistance, - double fShadowSlant, - ::com::sun::star::drawing::ProjectionMode aProjectionMode, - ::com::sun::star::drawing::ShadeMode aShadeMode, - bool bTwoSidedLighting) - : mnRefCount(0), - mfDistance(fDistance), - mfShadowSlant(fShadowSlant), - maProjectionMode(aProjectionMode), - maShadeMode(aShadeMode), - mbTwoSidedLighting(bTwoSidedLighting) - { - } - - // data read access - double getDistance() const { return mfDistance; } - double getShadowSlant() const { return mfShadowSlant; } - ::com::sun::star::drawing::ProjectionMode getProjectionMode() const { return maProjectionMode; } - ::com::sun::star::drawing::ShadeMode getShadeMode() const { return maShadeMode; } - bool getTwoSidedLighting() const { return mbTwoSidedLighting; } - - bool operator==(const ImpSdrSceneAttribute& rCandidate) const - { - return (getDistance() == rCandidate.getDistance() - && getShadowSlant() == rCandidate.getShadowSlant() - && getProjectionMode() == rCandidate.getProjectionMode() - && getShadeMode() == rCandidate.getShadeMode() - && getTwoSidedLighting() == rCandidate.getTwoSidedLighting()); - } - - static ImpSdrSceneAttribute* get_global_default() - { - static ImpSdrSceneAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrSceneAttribute( - 0.0, 0.0, - ::com::sun::star::drawing::ProjectionMode_PARALLEL, - ::com::sun::star::drawing::ShadeMode_FLAT, - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - SdrSceneAttribute::SdrSceneAttribute( - double fDistance, - double fShadowSlant, - ::com::sun::star::drawing::ProjectionMode aProjectionMode, - ::com::sun::star::drawing::ShadeMode aShadeMode, - bool bTwoSidedLighting) - : mpSdrSceneAttribute(new ImpSdrSceneAttribute( - fDistance, fShadowSlant, aProjectionMode, aShadeMode, bTwoSidedLighting)) - { - } - - SdrSceneAttribute::SdrSceneAttribute() - : mpSdrSceneAttribute(ImpSdrSceneAttribute::get_global_default()) - { - mpSdrSceneAttribute->mnRefCount++; - } - - SdrSceneAttribute::SdrSceneAttribute(const SdrSceneAttribute& rCandidate) - : mpSdrSceneAttribute(rCandidate.mpSdrSceneAttribute) - { - mpSdrSceneAttribute->mnRefCount++; - } - - SdrSceneAttribute::~SdrSceneAttribute() - { - if(mpSdrSceneAttribute->mnRefCount) - { - mpSdrSceneAttribute->mnRefCount--; - } - else - { - delete mpSdrSceneAttribute; - } - } - - bool SdrSceneAttribute::isDefault() const - { - return mpSdrSceneAttribute == ImpSdrSceneAttribute::get_global_default(); - } - - SdrSceneAttribute& SdrSceneAttribute::operator=(const SdrSceneAttribute& rCandidate) - { - if(rCandidate.mpSdrSceneAttribute != mpSdrSceneAttribute) - { - if(mpSdrSceneAttribute->mnRefCount) - { - mpSdrSceneAttribute->mnRefCount--; - } - else - { - delete mpSdrSceneAttribute; - } - - mpSdrSceneAttribute = rCandidate.mpSdrSceneAttribute; - mpSdrSceneAttribute->mnRefCount++; - } - - return *this; - } - - bool SdrSceneAttribute::operator==(const SdrSceneAttribute& rCandidate) const - { - if(rCandidate.mpSdrSceneAttribute == mpSdrSceneAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdrSceneAttribute == *mpSdrSceneAttribute); - } - - double SdrSceneAttribute::getDistance() const - { - return mpSdrSceneAttribute->getDistance(); - } - - double SdrSceneAttribute::getShadowSlant() const - { - return mpSdrSceneAttribute->getShadowSlant(); - } - - ::com::sun::star::drawing::ProjectionMode SdrSceneAttribute::getProjectionMode() const - { - return mpSdrSceneAttribute->getProjectionMode(); - } - - ::com::sun::star::drawing::ShadeMode SdrSceneAttribute::getShadeMode() const - { - return mpSdrSceneAttribute->getShadeMode(); - } - - bool SdrSceneAttribute::getTwoSidedLighting() const - { - return mpSdrSceneAttribute->getTwoSidedLighting(); - } - - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/sdrshadowattribute.cxx b/drawinglayer/source/attribute/sdrshadowattribute.cxx deleted file mode 100644 index 54b3b0eb64..0000000000 --- a/drawinglayer/source/attribute/sdrshadowattribute.cxx +++ /dev/null @@ -1,190 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/sdrshadowattribute.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpSdrShadowAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // shadow definitions - basegfx::B2DVector maOffset; // shadow offset 1/100th mm - double mfTransparence; // [0.0 .. 1.0], 0.0==no transp. - basegfx::BColor maColor; // color of shadow - - ImpSdrShadowAttribute( - const basegfx::B2DVector& rOffset, - double fTransparence, - const basegfx::BColor& rColor) - : mnRefCount(0), - maOffset(rOffset), - mfTransparence(fTransparence), - maColor(rColor) - { - } - - // data read access - const basegfx::B2DVector& getOffset() const { return maOffset; } - double getTransparence() const { return mfTransparence; } - const basegfx::BColor& getColor() const { return maColor; } - - bool operator==(const ImpSdrShadowAttribute& rCandidate) const - { - return (getOffset() == rCandidate.getOffset() - && getTransparence() == rCandidate.getTransparence() - && getColor() == rCandidate.getColor()); - } - - static ImpSdrShadowAttribute* get_global_default() - { - static ImpSdrShadowAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpSdrShadowAttribute( - basegfx::B2DVector(), - 0.0, - basegfx::BColor()); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - SdrShadowAttribute::SdrShadowAttribute( - const basegfx::B2DVector& rOffset, - double fTransparence, - const basegfx::BColor& rColor) - : mpSdrShadowAttribute(new ImpSdrShadowAttribute( - rOffset, fTransparence, rColor)) - { - } - - SdrShadowAttribute::SdrShadowAttribute() - : mpSdrShadowAttribute(ImpSdrShadowAttribute::get_global_default()) - { - mpSdrShadowAttribute->mnRefCount++; - } - - SdrShadowAttribute::SdrShadowAttribute(const SdrShadowAttribute& rCandidate) - : mpSdrShadowAttribute(rCandidate.mpSdrShadowAttribute) - { - mpSdrShadowAttribute->mnRefCount++; - } - - SdrShadowAttribute::~SdrShadowAttribute() - { - if(mpSdrShadowAttribute->mnRefCount) - { - mpSdrShadowAttribute->mnRefCount--; - } - else - { - delete mpSdrShadowAttribute; - } - } - - bool SdrShadowAttribute::isDefault() const - { - return mpSdrShadowAttribute == ImpSdrShadowAttribute::get_global_default(); - } - - SdrShadowAttribute& SdrShadowAttribute::operator=(const SdrShadowAttribute& rCandidate) - { - if(rCandidate.mpSdrShadowAttribute != mpSdrShadowAttribute) - { - if(mpSdrShadowAttribute->mnRefCount) - { - mpSdrShadowAttribute->mnRefCount--; - } - else - { - delete mpSdrShadowAttribute; - } - - mpSdrShadowAttribute = rCandidate.mpSdrShadowAttribute; - mpSdrShadowAttribute->mnRefCount++; - } - - return *this; - } - - bool SdrShadowAttribute::operator==(const SdrShadowAttribute& rCandidate) const - { - if(rCandidate.mpSdrShadowAttribute == mpSdrShadowAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpSdrShadowAttribute == *mpSdrShadowAttribute); - } - - const basegfx::B2DVector& SdrShadowAttribute::getOffset() const - { - return mpSdrShadowAttribute->getOffset(); - } - - double SdrShadowAttribute::getTransparence() const - { - return mpSdrShadowAttribute->getTransparence(); - } - - const basegfx::BColor& SdrShadowAttribute::getColor() const - { - return mpSdrShadowAttribute->getColor(); - } - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/attribute/strokeattribute.cxx b/drawinglayer/source/attribute/strokeattribute.cxx deleted file mode 100644 index ca8fe9c9cd..0000000000 --- a/drawinglayer/source/attribute/strokeattribute.cxx +++ /dev/null @@ -1,185 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/attribute/strokeattribute.hxx> -#include <numeric> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace attribute - { - class ImpStrokeAttribute - { - public: - // refcounter - sal_uInt32 mnRefCount; - - // data definitions - ::std::vector< double > maDotDashArray; // array of double which defines the dot-dash pattern - double mfFullDotDashLen; // sum of maDotDashArray (for convenience) - - ImpStrokeAttribute( - const ::std::vector< double >& rDotDashArray, - double fFullDotDashLen) - : mnRefCount(0), - maDotDashArray(rDotDashArray), - mfFullDotDashLen(fFullDotDashLen) - { - } - - // data read access - const ::std::vector< double >& getDotDashArray() const { return maDotDashArray; } - double getFullDotDashLen() const - { - if(0.0 == mfFullDotDashLen && maDotDashArray.size()) - { - // calculate length on demand - const double fAccumulated(::std::accumulate(maDotDashArray.begin(), maDotDashArray.end(), 0.0)); - const_cast< ImpStrokeAttribute* >(this)->mfFullDotDashLen = fAccumulated; - } - - return mfFullDotDashLen; - } - - bool operator==(const ImpStrokeAttribute& rCandidate) const - { - return (getDotDashArray() == rCandidate.getDotDashArray() - && getFullDotDashLen() == rCandidate.getFullDotDashLen()); - } - - static ImpStrokeAttribute* get_global_default() - { - static ImpStrokeAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpStrokeAttribute( - std::vector< double >(), - 0.0); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - - StrokeAttribute::StrokeAttribute( - const ::std::vector< double >& rDotDashArray, - double fFullDotDashLen) - : mpStrokeAttribute(new ImpStrokeAttribute( - rDotDashArray, fFullDotDashLen)) - { - } - - StrokeAttribute::StrokeAttribute() - : mpStrokeAttribute(ImpStrokeAttribute::get_global_default()) - { - mpStrokeAttribute->mnRefCount++; - } - - StrokeAttribute::StrokeAttribute(const StrokeAttribute& rCandidate) - : mpStrokeAttribute(rCandidate.mpStrokeAttribute) - { - mpStrokeAttribute->mnRefCount++; - } - - StrokeAttribute::~StrokeAttribute() - { - if(mpStrokeAttribute->mnRefCount) - { - mpStrokeAttribute->mnRefCount--; - } - else - { - delete mpStrokeAttribute; - } - } - - bool StrokeAttribute::isDefault() const - { - return mpStrokeAttribute == ImpStrokeAttribute::get_global_default(); - } - - StrokeAttribute& StrokeAttribute::operator=(const StrokeAttribute& rCandidate) - { - if(rCandidate.mpStrokeAttribute != mpStrokeAttribute) - { - if(mpStrokeAttribute->mnRefCount) - { - mpStrokeAttribute->mnRefCount--; - } - else - { - delete mpStrokeAttribute; - } - - mpStrokeAttribute = rCandidate.mpStrokeAttribute; - mpStrokeAttribute->mnRefCount++; - } - - return *this; - } - - bool StrokeAttribute::operator==(const StrokeAttribute& rCandidate) const - { - if(rCandidate.mpStrokeAttribute == mpStrokeAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpStrokeAttribute == *mpStrokeAttribute); - } - - const ::std::vector< double >& StrokeAttribute::getDotDashArray() const - { - return mpStrokeAttribute->getDotDashArray(); - } - - double StrokeAttribute::getFullDotDashLen() const - { - return mpStrokeAttribute->getFullDotDashLen(); - } - } // end of namespace attribute -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/geometry/viewinformation2d.cxx b/drawinglayer/source/geometry/viewinformation2d.cxx deleted file mode 100644 index 93757e2006..0000000000 --- a/drawinglayer/source/geometry/viewinformation2d.cxx +++ /dev/null @@ -1,595 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/range/b2drange.hxx> -#include <osl/mutex.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <com/sun/star/geometry/AffineMatrix2D.hpp> -#include <com/sun/star/geometry/RealRectangle2D.hpp> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace geometry - { - class ImpViewInformation2D - { - private: - // ViewInformation2D implementation can change refcount, so we have only - // two memory regions for pairs of ViewInformation2D/ImpViewInformation2D - friend class ::drawinglayer::geometry::ViewInformation2D; - - // the refcounter. 0 means exclusively used - sal_uInt32 mnRefCount; - - protected: - // the object transformation - basegfx::B2DHomMatrix maObjectTransformation; - - // the view transformation - basegfx::B2DHomMatrix maViewTransformation; - - // the ObjectToView and it's inverse, both on demand from ObjectTransformation - // and ViewTransformation - basegfx::B2DHomMatrix maObjectToViewTransformation; - basegfx::B2DHomMatrix maInverseObjectToViewTransformation; - - // the visible range and the on-demand one in ViewCoordinates - basegfx::B2DRange maViewport; - basegfx::B2DRange maDiscreteViewport; - - // the DrawPage which is target of visualisation. This is needed e.g. for - // the view-dependent decomposition of PageNumber TextFields. - // This parameter is buffered here, but mainly resides in mxExtendedInformation, - // so it will be interpreted, but held there. It will also not be added - // to mxExtendedInformation in impFillViewInformationFromContent (it's there already) - uno::Reference< drawing::XDrawPage > mxVisualizedPage; - - // the point in time - double mfViewTime; - - // bitfield - bool mbReducedDisplayQuality : 1; - - // the complete PropertyValue representation (if already created) - uno::Sequence< beans::PropertyValue > mxViewInformation; - - // the extra PropertyValues; not represented by ViewTransformation, - // Viewport, VisualizedPage or ViewTime - uno::Sequence< beans::PropertyValue > mxExtendedInformation; - - // the local UNO API strings - const ::rtl::OUString& getNamePropertyObjectTransformation() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("ObjectTransformation")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyViewTransformation() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("ViewTransformation")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyViewport() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("Viewport")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyTime() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("Time")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyVisualizedPage() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("VisualizedPage")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyReducedDisplayQuality() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("ReducedDisplayQuality")); - return s_sNameProperty; - } - - void impInterpretPropertyValues(const uno::Sequence< beans::PropertyValue >& rViewParameters) - { - if(rViewParameters.hasElements()) - { - const sal_Int32 nCount(rViewParameters.getLength()); - sal_Int32 nExtendedInsert(0); - - // prepare extended information for filtering. Maximum size is nCount - mxExtendedInformation.realloc(nCount); - - for(sal_Int32 a(0); a < nCount; a++) - { - const beans::PropertyValue& rProp = rViewParameters[a]; - - if(rProp.Name == getNamePropertyReducedDisplayQuality()) - { - // extra information; add to filtered information - mxExtendedInformation[nExtendedInsert++] = rProp; - - // for performance reasons, also cache content locally - sal_Bool bSalBool(false); - rProp.Value >>= bSalBool; - mbReducedDisplayQuality = bSalBool; - } - else if(rProp.Name == getNamePropertyObjectTransformation()) - { - com::sun::star::geometry::AffineMatrix2D aAffineMatrix2D; - rProp.Value >>= aAffineMatrix2D; - basegfx::unotools::homMatrixFromAffineMatrix(maObjectTransformation, aAffineMatrix2D); - } - else if(rProp.Name == getNamePropertyViewTransformation()) - { - com::sun::star::geometry::AffineMatrix2D aAffineMatrix2D; - rProp.Value >>= aAffineMatrix2D; - basegfx::unotools::homMatrixFromAffineMatrix(maViewTransformation, aAffineMatrix2D); - } - else if(rProp.Name == getNamePropertyViewport()) - { - com::sun::star::geometry::RealRectangle2D aViewport; - rProp.Value >>= aViewport; - maViewport = basegfx::unotools::b2DRectangleFromRealRectangle2D(aViewport); - } - else if(rProp.Name == getNamePropertyTime()) - { - rProp.Value >>= mfViewTime; - } - else if(rProp.Name == getNamePropertyVisualizedPage()) - { - rProp.Value >>= mxVisualizedPage; - } - else - { - // extra information; add to filtered information - mxExtendedInformation[nExtendedInsert++] = rProp; - } - } - - // extra information size is now known; realloc to final size - mxExtendedInformation.realloc(nExtendedInsert); - } - } - - void impFillViewInformationFromContent() - { - uno::Sequence< beans::PropertyValue > xRetval; - const bool bObjectTransformationUsed(!maObjectTransformation.isIdentity()); - const bool bViewTransformationUsed(!maViewTransformation.isIdentity()); - const bool bViewportUsed(!maViewport.isEmpty()); - const bool bTimeUsed(0.0 < mfViewTime); - const bool bVisualizedPageUsed(mxVisualizedPage.is()); - const bool bReducedDisplayQualityUsed(true == mbReducedDisplayQuality); - const bool bExtraInformation(mxExtendedInformation.hasElements()); - sal_uInt32 nIndex(0); - const sal_uInt32 nCount( - (bObjectTransformationUsed ? 1 : 0) + - (bViewTransformationUsed ? 1 : 0) + - (bViewportUsed ? 1 : 0) + - (bTimeUsed ? 1 : 0) + - (bVisualizedPageUsed ? 1 : 0) + - (bReducedDisplayQualityUsed ? 1 : 0) + - (bExtraInformation ? mxExtendedInformation.getLength() : 0)); - - mxViewInformation.realloc(nCount); - - if(bObjectTransformationUsed) - { - com::sun::star::geometry::AffineMatrix2D aAffineMatrix2D; - basegfx::unotools::affineMatrixFromHomMatrix(aAffineMatrix2D, maObjectTransformation); - mxViewInformation[nIndex].Name = getNamePropertyObjectTransformation(); - mxViewInformation[nIndex].Value <<= aAffineMatrix2D; - nIndex++; - } - - if(bViewTransformationUsed) - { - com::sun::star::geometry::AffineMatrix2D aAffineMatrix2D; - basegfx::unotools::affineMatrixFromHomMatrix(aAffineMatrix2D, maViewTransformation); - mxViewInformation[nIndex].Name = getNamePropertyViewTransformation(); - mxViewInformation[nIndex].Value <<= aAffineMatrix2D; - nIndex++; - } - - if(bViewportUsed) - { - const com::sun::star::geometry::RealRectangle2D aViewport(basegfx::unotools::rectangle2DFromB2DRectangle(maViewport)); - mxViewInformation[nIndex].Name = getNamePropertyViewport(); - mxViewInformation[nIndex].Value <<= aViewport; - nIndex++; - } - - if(bTimeUsed) - { - mxViewInformation[nIndex].Name = getNamePropertyTime(); - mxViewInformation[nIndex].Value <<= mfViewTime; - nIndex++; - } - - if(bVisualizedPageUsed) - { - mxViewInformation[nIndex].Name = getNamePropertyVisualizedPage(); - mxViewInformation[nIndex].Value <<= mxVisualizedPage; - nIndex++; - } - - if(bExtraInformation) - { - const sal_Int32 nExtra(mxExtendedInformation.getLength()); - - for(sal_Int32 a(0); a < nExtra; a++) - { - mxViewInformation[nIndex++] = mxExtendedInformation[a]; - } - } - } - - public: - ImpViewInformation2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - const basegfx::B2DHomMatrix& rViewTransformation, - const basegfx::B2DRange& rViewport, - const uno::Reference< drawing::XDrawPage >& rxDrawPage, - double fViewTime, - const uno::Sequence< beans::PropertyValue >& rExtendedParameters) - : mnRefCount(0), - maObjectTransformation(rObjectTransformation), - maViewTransformation(rViewTransformation), - maObjectToViewTransformation(), - maInverseObjectToViewTransformation(), - maViewport(rViewport), - maDiscreteViewport(), - mxVisualizedPage(rxDrawPage), - mfViewTime(fViewTime), - mbReducedDisplayQuality(false), - mxViewInformation(), - mxExtendedInformation() - { - impInterpretPropertyValues(rExtendedParameters); - } - - ImpViewInformation2D(const uno::Sequence< beans::PropertyValue >& rViewParameters) - : mnRefCount(0), - maObjectTransformation(), - maViewTransformation(), - maObjectToViewTransformation(), - maInverseObjectToViewTransformation(), - maViewport(), - maDiscreteViewport(), - mxVisualizedPage(), - mfViewTime(), - mbReducedDisplayQuality(false), - mxViewInformation(rViewParameters), - mxExtendedInformation() - { - impInterpretPropertyValues(rViewParameters); - } - - ImpViewInformation2D() - : mnRefCount(0), - maObjectTransformation(), - maViewTransformation(), - maObjectToViewTransformation(), - maInverseObjectToViewTransformation(), - maViewport(), - maDiscreteViewport(), - mxVisualizedPage(), - mfViewTime(), - mbReducedDisplayQuality(false), - mxViewInformation(), - mxExtendedInformation() - { - } - - const basegfx::B2DHomMatrix& getObjectTransformation() const - { - return maObjectTransformation; - } - - const basegfx::B2DHomMatrix& getViewTransformation() const - { - return maViewTransformation; - } - - const basegfx::B2DRange& getViewport() const - { - return maViewport; - } - - const basegfx::B2DRange& getDiscreteViewport() const - { - ::osl::Mutex m_mutex; - - if(maDiscreteViewport.isEmpty() && !maViewport.isEmpty()) - { - basegfx::B2DRange aDiscreteViewport(maViewport); - aDiscreteViewport.transform(getViewTransformation()); - const_cast< ImpViewInformation2D* >(this)->maDiscreteViewport = aDiscreteViewport; - } - - return maDiscreteViewport; - } - - const basegfx::B2DHomMatrix& getObjectToViewTransformation() const - { - ::osl::Mutex m_mutex; - - if(maObjectToViewTransformation.isIdentity() && - (!maObjectTransformation.isIdentity() || !maViewTransformation.isIdentity())) - { - basegfx::B2DHomMatrix aObjectToView(maViewTransformation * maObjectTransformation); - const_cast< ImpViewInformation2D* >(this)->maObjectToViewTransformation = aObjectToView; - } - - return maObjectToViewTransformation; - } - - const basegfx::B2DHomMatrix& getInverseObjectToViewTransformation() const - { - ::osl::Mutex m_mutex; - - if(maInverseObjectToViewTransformation.isIdentity() && - (!maObjectTransformation.isIdentity() || !maViewTransformation.isIdentity())) - { - basegfx::B2DHomMatrix aInverseObjectToView(maViewTransformation * maObjectTransformation); - aInverseObjectToView.invert(); - const_cast< ImpViewInformation2D* >(this)->maInverseObjectToViewTransformation = aInverseObjectToView; - } - - return maInverseObjectToViewTransformation; - } - - double getViewTime() const - { - return mfViewTime; - } - - const uno::Reference< drawing::XDrawPage >& getVisualizedPage() const - { - return mxVisualizedPage; - } - - bool getReducedDisplayQuality() const - { - return mbReducedDisplayQuality; - } - - const uno::Sequence< beans::PropertyValue >& getViewInformationSequence() const - { - if(!mxViewInformation.hasElements()) - { - const_cast< ImpViewInformation2D* >(this)->impFillViewInformationFromContent(); - } - - return mxViewInformation; - } - - const uno::Sequence< beans::PropertyValue >& getExtendedInformationSequence() const - { - return mxExtendedInformation; - } - - bool operator==(const ImpViewInformation2D& rCandidate) const - { - return (maObjectTransformation == rCandidate.maObjectTransformation - && maViewTransformation == rCandidate.maViewTransformation - && maViewport == rCandidate.maViewport - && mxVisualizedPage == rCandidate.mxVisualizedPage - && mfViewTime == rCandidate.mfViewTime - && mxExtendedInformation == rCandidate.mxExtendedInformation); - } - - static ImpViewInformation2D* get_global_default() - { - static ImpViewInformation2D* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpViewInformation2D(); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - } // end of anonymous namespace -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace geometry - { - ViewInformation2D::ViewInformation2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - const basegfx::B2DHomMatrix& rViewTransformation, - const basegfx::B2DRange& rViewport, - const uno::Reference< drawing::XDrawPage >& rxDrawPage, - double fViewTime, - const uno::Sequence< beans::PropertyValue >& rExtendedParameters) - : mpViewInformation2D(new ImpViewInformation2D( - rObjectTransformation, - rViewTransformation, - rViewport, - rxDrawPage, - fViewTime, - rExtendedParameters)) - { - } - - ViewInformation2D::ViewInformation2D(const uno::Sequence< beans::PropertyValue >& rViewParameters) - : mpViewInformation2D(new ImpViewInformation2D(rViewParameters)) - { - } - - ViewInformation2D::ViewInformation2D() - : mpViewInformation2D(ImpViewInformation2D::get_global_default()) - { - mpViewInformation2D->mnRefCount++; - } - - ViewInformation2D::ViewInformation2D(const ViewInformation2D& rCandidate) - : mpViewInformation2D(rCandidate.mpViewInformation2D) - { - ::osl::Mutex m_mutex; - mpViewInformation2D->mnRefCount++; - } - - ViewInformation2D::~ViewInformation2D() - { - ::osl::Mutex m_mutex; - - if(mpViewInformation2D->mnRefCount) - { - mpViewInformation2D->mnRefCount--; - } - else - { - delete mpViewInformation2D; - } - } - - bool ViewInformation2D::isDefault() const - { - return mpViewInformation2D == ImpViewInformation2D::get_global_default(); - } - - ViewInformation2D& ViewInformation2D::operator=(const ViewInformation2D& rCandidate) - { - ::osl::Mutex m_mutex; - - if(mpViewInformation2D->mnRefCount) - { - mpViewInformation2D->mnRefCount--; - } - else - { - delete mpViewInformation2D; - } - - mpViewInformation2D = rCandidate.mpViewInformation2D; - mpViewInformation2D->mnRefCount++; - - return *this; - } - - bool ViewInformation2D::operator==(const ViewInformation2D& rCandidate) const - { - if(rCandidate.mpViewInformation2D == mpViewInformation2D) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpViewInformation2D == *mpViewInformation2D); - } - - const basegfx::B2DHomMatrix& ViewInformation2D::getObjectTransformation() const - { - return mpViewInformation2D->getObjectTransformation(); - } - - const basegfx::B2DHomMatrix& ViewInformation2D::getViewTransformation() const - { - return mpViewInformation2D->getViewTransformation(); - } - - const basegfx::B2DRange& ViewInformation2D::getViewport() const - { - return mpViewInformation2D->getViewport(); - } - - double ViewInformation2D::getViewTime() const - { - return mpViewInformation2D->getViewTime(); - } - - const uno::Reference< drawing::XDrawPage >& ViewInformation2D::getVisualizedPage() const - { - return mpViewInformation2D->getVisualizedPage(); - } - - const basegfx::B2DHomMatrix& ViewInformation2D::getObjectToViewTransformation() const - { - return mpViewInformation2D->getObjectToViewTransformation(); - } - - const basegfx::B2DHomMatrix& ViewInformation2D::getInverseObjectToViewTransformation() const - { - return mpViewInformation2D->getInverseObjectToViewTransformation(); - } - - const basegfx::B2DRange& ViewInformation2D::getDiscreteViewport() const - { - return mpViewInformation2D->getDiscreteViewport(); - } - - bool ViewInformation2D::getReducedDisplayQuality() const - { - return mpViewInformation2D->getReducedDisplayQuality(); - } - - const uno::Sequence< beans::PropertyValue >& ViewInformation2D::getViewInformationSequence() const - { - return mpViewInformation2D->getViewInformationSequence(); - } - - const uno::Sequence< beans::PropertyValue >& ViewInformation2D::getExtendedInformationSequence() const - { - return mpViewInformation2D->getExtendedInformationSequence(); - } - } // end of namespace geometry -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/geometry/viewinformation3d.cxx b/drawinglayer/source/geometry/viewinformation3d.cxx deleted file mode 100644 index ef2fa0da09..0000000000 --- a/drawinglayer/source/geometry/viewinformation3d.cxx +++ /dev/null @@ -1,602 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/geometry/viewinformation3d.hxx> -#include <basegfx/range/b3drange.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <com/sun/star/geometry/AffineMatrix3D.hpp> -#include <com/sun/star/geometry/RealRectangle3D.hpp> -#include <basegfx/tools/canvastools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace geometry - { - /** Implementation class for ViewInformation3D - */ - class ImpViewInformation3D - { - private: - // ViewInformation3D implementation can change refcount, so we have only - // two memory regions for pairs of ViewInformation3D/ImpViewInformation3D - friend class ::drawinglayer::geometry::ViewInformation3D; - - // the refcounter. 0 means exclusively used - sal_uInt32 mnRefCount; - - // the 3D transformations - // Object to World. This may change and being adapted when entering 3D transformation - // groups - basegfx::B3DHomMatrix maObjectTransformation; - - // World to Camera. This includes VRP, VPN and VUV camera coordinate system - basegfx::B3DHomMatrix maOrientation; - - // Camera to Device with X,Y and Z [-1.0 .. 1.0]. This is the - // 3D to 2D projection which may be parallell or perspective. When it is perspective, - // the last line of the homogen matrix will NOT be unused - basegfx::B3DHomMatrix maProjection; - - // Device to View with X,Y and Z [0.0 .. 1.0]. This converts from -1 to 1 coordinates - // in camera coordinate system to 0 to 1 in unit 2D coordinates. This way it stays - // view-independent. To get discrete coordinates, the 2D transformation of a scene - // as 2D object needs to be involved - basegfx::B3DHomMatrix maDeviceToView; - - // Object to View is the linear combination of all four transformations. It's - // buffered to avoid too much matrix multiplying and created on demand - basegfx::B3DHomMatrix maObjectToView; - - // the point in time - double mfViewTime; - - // the complete PropertyValue representation (if already created) - uno::Sequence< beans::PropertyValue > mxViewInformation; - - // the extra PropertyValues; does not contain the transformations - uno::Sequence< beans::PropertyValue > mxExtendedInformation; - - // the local UNO API strings - const ::rtl::OUString& getNamePropertyObjectTransformation() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("ObjectTransformation")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyOrientation() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("Orientation")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyProjection() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("Projection")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyProjection_30() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("Projection30")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyProjection_31() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("Projection31")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyProjection_32() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("Projection32")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyProjection_33() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("Projection33")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyDeviceToView() - { - static ::rtl::OUString s_sNameProperty(RTL_CONSTASCII_USTRINGPARAM("DeviceToView")); - return s_sNameProperty; - } - - const ::rtl::OUString& getNamePropertyTime() - { - static ::rtl::OUString s_sNamePropertyTime(RTL_CONSTASCII_USTRINGPARAM("Time")); - return s_sNamePropertyTime; - } - - // a central PropertyValue parsing method to allow transportatin of - // all ViewParameters using UNO API - void impInterpretPropertyValues(const uno::Sequence< beans::PropertyValue >& rViewParameters) - { - if(rViewParameters.hasElements()) - { - const sal_Int32 nCount(rViewParameters.getLength()); - sal_Int32 nExtendedInsert(0); - - // prepare extended information for filtering. Maximum size is nCount - mxExtendedInformation.realloc(nCount); - - for(sal_Int32 a(0); a < nCount; a++) - { - const beans::PropertyValue& rProp = rViewParameters[a]; - - if(rProp.Name == getNamePropertyObjectTransformation()) - { - com::sun::star::geometry::AffineMatrix3D aAffineMatrix3D; - rProp.Value >>= aAffineMatrix3D; - maObjectTransformation = basegfx::unotools::homMatrixFromAffineMatrix3D(aAffineMatrix3D); - } - else if(rProp.Name == getNamePropertyOrientation()) - { - com::sun::star::geometry::AffineMatrix3D aAffineMatrix3D; - rProp.Value >>= aAffineMatrix3D; - maOrientation = basegfx::unotools::homMatrixFromAffineMatrix3D(aAffineMatrix3D); - } - else if(rProp.Name == getNamePropertyProjection()) - { - // projection may be defined using a frustum in which case the last line of - // the 4x4 matrix is not (0,0,0,1). Since AffineMatrix3D does not support that, - // these four values need to be treated extra - const double f_30(maProjection.get(3, 0)); - const double f_31(maProjection.get(3, 1)); - const double f_32(maProjection.get(3, 2)); - const double f_33(maProjection.get(3, 3)); - - com::sun::star::geometry::AffineMatrix3D aAffineMatrix3D; - rProp.Value >>= aAffineMatrix3D; - maProjection = basegfx::unotools::homMatrixFromAffineMatrix3D(aAffineMatrix3D); - - maProjection.set(3, 0, f_30); - maProjection.set(3, 1, f_31); - maProjection.set(3, 2, f_32); - maProjection.set(3, 3, f_33); - } - else if(rProp.Name == getNamePropertyProjection_30()) - { - double f_30(0.0); - rProp.Value >>= f_30; - maProjection.set(3, 0, f_30); - } - else if(rProp.Name == getNamePropertyProjection_31()) - { - double f_31(0.0); - rProp.Value >>= f_31; - maProjection.set(3, 1, f_31); - } - else if(rProp.Name == getNamePropertyProjection_32()) - { - double f_32(0.0); - rProp.Value >>= f_32; - maProjection.set(3, 2, f_32); - } - else if(rProp.Name == getNamePropertyProjection_33()) - { - double f_33(1.0); - rProp.Value >>= f_33; - maProjection.set(3, 3, f_33); - } - else if(rProp.Name == getNamePropertyDeviceToView()) - { - com::sun::star::geometry::AffineMatrix3D aAffineMatrix3D; - rProp.Value >>= aAffineMatrix3D; - maDeviceToView = basegfx::unotools::homMatrixFromAffineMatrix3D(aAffineMatrix3D); - } - else if(rProp.Name == getNamePropertyTime()) - { - rProp.Value >>= mfViewTime; - } - else - { - // extra information; add to filtered information - mxExtendedInformation[nExtendedInsert++] = rProp; - } - } - - // extra information size is now known; realloc to final size - mxExtendedInformation.realloc(nExtendedInsert); - } - } - - // central method to create a Sequence of PropertyValues containing he complete - // data set - void impFillViewInformationFromContent() - { - uno::Sequence< beans::PropertyValue > xRetval; - const bool bObjectTransformationUsed(!maObjectTransformation.isIdentity()); - const bool bOrientationUsed(!maOrientation.isIdentity()); - const bool bProjectionUsed(!maProjection.isIdentity()); - const bool bDeviceToViewUsed(!maDeviceToView.isIdentity()); - const bool bTimeUsed(0.0 < mfViewTime); - const bool bExtraInformation(mxExtendedInformation.hasElements()); - - // projection may be defined using a frustum in which case the last line of - // the 4x4 matrix is not (0,0,0,1). Since AffineMatrix3D does not support that, - // these four values need to be treated extra - const bool bProjectionUsed_30(bProjectionUsed && !basegfx::fTools::equalZero(maProjection.get(3, 0))); - const bool bProjectionUsed_31(bProjectionUsed && !basegfx::fTools::equalZero(maProjection.get(3, 1))); - const bool bProjectionUsed_32(bProjectionUsed && !basegfx::fTools::equalZero(maProjection.get(3, 2))); - const bool bProjectionUsed_33(bProjectionUsed && !basegfx::fTools::equal(maProjection.get(3, 3), 1.0)); - - sal_uInt32 nIndex(0); - const sal_uInt32 nCount( - (bObjectTransformationUsed ? 1 : 0) + - (bOrientationUsed ? 1 : 0) + - (bProjectionUsed ? 1 : 0) + - (bProjectionUsed_30 ? 1 : 0) + - (bProjectionUsed_31 ? 1 : 0) + - (bProjectionUsed_32 ? 1 : 0) + - (bProjectionUsed_33 ? 1 : 0) + - (bDeviceToViewUsed ? 1 : 0) + - (bTimeUsed ? 1 : 0) + - (bExtraInformation ? mxExtendedInformation.getLength() : 0)); - - mxViewInformation.realloc(nCount); - - if(bObjectTransformationUsed) - { - com::sun::star::geometry::AffineMatrix3D aAffineMatrix3D; - basegfx::unotools::affineMatrixFromHomMatrix3D(aAffineMatrix3D, maObjectTransformation); - mxViewInformation[nIndex].Name = getNamePropertyObjectTransformation(); - mxViewInformation[nIndex].Value <<= aAffineMatrix3D; - nIndex++; - } - - if(bOrientationUsed) - { - com::sun::star::geometry::AffineMatrix3D aAffineMatrix3D; - basegfx::unotools::affineMatrixFromHomMatrix3D(aAffineMatrix3D, maOrientation); - mxViewInformation[nIndex].Name = getNamePropertyOrientation(); - mxViewInformation[nIndex].Value <<= aAffineMatrix3D; - nIndex++; - } - - if(bProjectionUsed) - { - com::sun::star::geometry::AffineMatrix3D aAffineMatrix3D; - basegfx::unotools::affineMatrixFromHomMatrix3D(aAffineMatrix3D, maProjection); - mxViewInformation[nIndex].Name = getNamePropertyProjection(); - mxViewInformation[nIndex].Value <<= aAffineMatrix3D; - nIndex++; - } - - if(bProjectionUsed_30) - { - mxViewInformation[nIndex].Name = getNamePropertyProjection_30(); - mxViewInformation[nIndex].Value <<= maProjection.get(3, 0); - nIndex++; - } - - if(bProjectionUsed_31) - { - mxViewInformation[nIndex].Name = getNamePropertyProjection_31(); - mxViewInformation[nIndex].Value <<= maProjection.get(3, 1); - nIndex++; - } - - if(bProjectionUsed_32) - { - mxViewInformation[nIndex].Name = getNamePropertyProjection_32(); - mxViewInformation[nIndex].Value <<= maProjection.get(3, 2); - nIndex++; - } - - if(bProjectionUsed_33) - { - mxViewInformation[nIndex].Name = getNamePropertyProjection_33(); - mxViewInformation[nIndex].Value <<= maProjection.get(3, 3); - nIndex++; - } - - if(bDeviceToViewUsed) - { - com::sun::star::geometry::AffineMatrix3D aAffineMatrix3D; - basegfx::unotools::affineMatrixFromHomMatrix3D(aAffineMatrix3D, maDeviceToView); - mxViewInformation[nIndex].Name = getNamePropertyDeviceToView(); - mxViewInformation[nIndex].Value <<= aAffineMatrix3D; - nIndex++; - } - - if(bTimeUsed) - { - mxViewInformation[nIndex].Name = getNamePropertyTime(); - mxViewInformation[nIndex].Value <<= mfViewTime; - nIndex++; - } - - if(bExtraInformation) - { - const sal_Int32 nExtra(mxExtendedInformation.getLength()); - - for(sal_Int32 a(0); a < nExtra; a++) - { - mxViewInformation[nIndex++] = mxExtendedInformation[a]; - } - } - } - - public: - ImpViewInformation3D( - const basegfx::B3DHomMatrix& rObjectTransformation, - const basegfx::B3DHomMatrix& rOrientation, - const basegfx::B3DHomMatrix& rProjection, - const basegfx::B3DHomMatrix& rDeviceToView, - double fViewTime, - const uno::Sequence< beans::PropertyValue >& rExtendedParameters) - : mnRefCount(0), - maObjectTransformation(rObjectTransformation), - maOrientation(rOrientation), - maProjection(rProjection), - maDeviceToView(rDeviceToView), - mfViewTime(fViewTime), - mxViewInformation(), - mxExtendedInformation() - { - impInterpretPropertyValues(rExtendedParameters); - } - - ImpViewInformation3D(const uno::Sequence< beans::PropertyValue >& rViewParameters) - : mnRefCount(0), - maObjectTransformation(), - maOrientation(), - maProjection(), - maDeviceToView(), - mfViewTime(), - mxViewInformation(rViewParameters), - mxExtendedInformation() - { - impInterpretPropertyValues(rViewParameters); - } - - ImpViewInformation3D() - : mnRefCount(0), - maObjectTransformation(), - maOrientation(), - maProjection(), - maDeviceToView(), - mfViewTime(), - mxViewInformation(), - mxExtendedInformation() - { - } - - const basegfx::B3DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } - const basegfx::B3DHomMatrix& getOrientation() const { return maOrientation; } - const basegfx::B3DHomMatrix& getProjection() const { return maProjection; } - const basegfx::B3DHomMatrix& getDeviceToView() const { return maDeviceToView; } - double getViewTime() const { return mfViewTime; } - - const basegfx::B3DHomMatrix& getObjectToView() const - { - // on demand WorldToView creation - ::osl::Mutex m_mutex; - - if(maObjectToView.isIdentity()) - { - const_cast< ImpViewInformation3D* >(this)->maObjectToView = maDeviceToView * maProjection * maOrientation * maObjectTransformation; - } - - return maObjectToView; - } - - const uno::Sequence< beans::PropertyValue >& getViewInformationSequence() const - { - ::osl::Mutex m_mutex; - - if(!mxViewInformation.hasElements()) - { - const_cast< ImpViewInformation3D* >(this)->impFillViewInformationFromContent(); - } - - return mxViewInformation; - } - - const uno::Sequence< beans::PropertyValue >& getExtendedInformationSequence() const - { - return mxExtendedInformation; - } - - bool operator==(const ImpViewInformation3D& rCandidate) const - { - return (maObjectTransformation == rCandidate.maObjectTransformation - && maOrientation == rCandidate.maOrientation - && maProjection == rCandidate.maProjection - && maDeviceToView == rCandidate.maDeviceToView - && mfViewTime == rCandidate.mfViewTime - && mxExtendedInformation == rCandidate.mxExtendedInformation); - } - - static ImpViewInformation3D* get_global_default() - { - static ImpViewInformation3D* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpViewInformation3D(); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } - }; - } // end of anonymous namespace -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace geometry - { - ViewInformation3D::ViewInformation3D( - const basegfx::B3DHomMatrix& rObjectObjectTransformation, - const basegfx::B3DHomMatrix& rOrientation, - const basegfx::B3DHomMatrix& rProjection, - const basegfx::B3DHomMatrix& rDeviceToView, - double fViewTime, - const uno::Sequence< beans::PropertyValue >& rExtendedParameters) - : mpViewInformation3D(new ImpViewInformation3D( - rObjectObjectTransformation, rOrientation, rProjection, - rDeviceToView, fViewTime, rExtendedParameters)) - { - } - - ViewInformation3D::ViewInformation3D(const uno::Sequence< beans::PropertyValue >& rViewParameters) - : mpViewInformation3D(new ImpViewInformation3D(rViewParameters)) - { - } - - ViewInformation3D::ViewInformation3D() - : mpViewInformation3D(ImpViewInformation3D::get_global_default()) - { - mpViewInformation3D->mnRefCount++; - } - - ViewInformation3D::ViewInformation3D(const ViewInformation3D& rCandidate) - : mpViewInformation3D(rCandidate.mpViewInformation3D) - { - ::osl::Mutex m_mutex; - mpViewInformation3D->mnRefCount++; - } - - ViewInformation3D::~ViewInformation3D() - { - ::osl::Mutex m_mutex; - - if(mpViewInformation3D->mnRefCount) - { - mpViewInformation3D->mnRefCount--; - } - else - { - delete mpViewInformation3D; - } - } - - bool ViewInformation3D::isDefault() const - { - return mpViewInformation3D == ImpViewInformation3D::get_global_default(); - } - - ViewInformation3D& ViewInformation3D::operator=(const ViewInformation3D& rCandidate) - { - ::osl::Mutex m_mutex; - - if(mpViewInformation3D->mnRefCount) - { - mpViewInformation3D->mnRefCount--; - } - else - { - delete mpViewInformation3D; - } - - mpViewInformation3D = rCandidate.mpViewInformation3D; - mpViewInformation3D->mnRefCount++; - - return *this; - } - - bool ViewInformation3D::operator==(const ViewInformation3D& rCandidate) const - { - if(rCandidate.mpViewInformation3D == mpViewInformation3D) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpViewInformation3D == *mpViewInformation3D); - } - - const basegfx::B3DHomMatrix& ViewInformation3D::getObjectTransformation() const - { - return mpViewInformation3D->getObjectTransformation(); - } - - const basegfx::B3DHomMatrix& ViewInformation3D::getOrientation() const - { - return mpViewInformation3D->getOrientation(); - } - - const basegfx::B3DHomMatrix& ViewInformation3D::getProjection() const - { - return mpViewInformation3D->getProjection(); - } - - const basegfx::B3DHomMatrix& ViewInformation3D::getDeviceToView() const - { - return mpViewInformation3D->getDeviceToView(); - } - - const basegfx::B3DHomMatrix& ViewInformation3D::getObjectToView() const - { - return mpViewInformation3D->getObjectToView(); - } - - double ViewInformation3D::getViewTime() const - { - return mpViewInformation3D->getViewTime(); - } - - const uno::Sequence< beans::PropertyValue >& ViewInformation3D::getViewInformationSequence() const - { - return mpViewInformation3D->getViewInformationSequence(); - } - - const uno::Sequence< beans::PropertyValue >& ViewInformation3D::getExtendedInformationSequence() const - { - return mpViewInformation3D->getExtendedInformationSequence(); - } - } // end of namespace geometry -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/animatedprimitive2d.cxx b/drawinglayer/source/primitive2d/animatedprimitive2d.cxx deleted file mode 100644 index 75544c0079..0000000000 --- a/drawinglayer/source/primitive2d/animatedprimitive2d.cxx +++ /dev/null @@ -1,227 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/animatedprimitive2d.hxx> -#include <drawinglayer/animation/animationtiming.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - AnimatedSwitchPrimitive2D::AnimatedSwitchPrimitive2D( - const animation::AnimationEntry& rAnimationEntry, - const Primitive2DSequence& rChildren, - bool bIsTextAnimation) - : GroupPrimitive2D(rChildren), - mpAnimationEntry(0), - mbIsTextAnimation(bIsTextAnimation) - { - // clone given animation description - mpAnimationEntry = rAnimationEntry.clone(); - } - - AnimatedSwitchPrimitive2D::~AnimatedSwitchPrimitive2D() - { - // delete cloned animation description - delete mpAnimationEntry; - } - - bool AnimatedSwitchPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(GroupPrimitive2D::operator==(rPrimitive)) - { - const AnimatedSwitchPrimitive2D& rCompare = static_cast< const AnimatedSwitchPrimitive2D& >(rPrimitive); - - return (getAnimationEntry() == rCompare.getAnimationEntry()); - } - - return false; - } - - Primitive2DSequence AnimatedSwitchPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - if(getChildren().hasElements()) - { - const double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime())); - const sal_uInt32 nLen(getChildren().getLength()); - sal_uInt32 nIndex(basegfx::fround(fState * (double)nLen)); - - if(nIndex >= nLen) - { - nIndex = nLen - 1L; - } - - const Primitive2DReference xRef(getChildren()[nIndex], uno::UNO_QUERY_THROW); - return Primitive2DSequence(&xRef, 1L); - } - - return Primitive2DSequence(); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(AnimatedSwitchPrimitive2D, PRIMITIVE2D_ID_ANIMATEDSWITCHPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - AnimatedBlinkPrimitive2D::AnimatedBlinkPrimitive2D( - const animation::AnimationEntry& rAnimationEntry, - const Primitive2DSequence& rChildren, - bool bIsTextAnimation) - : AnimatedSwitchPrimitive2D(rAnimationEntry, rChildren, bIsTextAnimation) - { - } - - Primitive2DSequence AnimatedBlinkPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - if(getChildren().hasElements()) - { - const double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime())); - - if(fState < 0.5) - { - return getChildren(); - } - } - - return Primitive2DSequence(); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(AnimatedBlinkPrimitive2D, PRIMITIVE2D_ID_ANIMATEDBLINKPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - AnimatedInterpolatePrimitive2D::AnimatedInterpolatePrimitive2D( - const std::vector< basegfx::B2DHomMatrix >& rmMatrixStack, - const animation::AnimationEntry& rAnimationEntry, - const Primitive2DSequence& rChildren, - bool bIsTextAnimation) - : AnimatedSwitchPrimitive2D(rAnimationEntry, rChildren, bIsTextAnimation), - maMatrixStack() - { - // copy matrices to locally pre-decomposed matrix stack - const sal_uInt32 nCount(rmMatrixStack.size()); - maMatrixStack.reserve(nCount); - - for(sal_uInt32 a(0L); a < nCount; a++) - { - maMatrixStack.push_back(basegfx::tools::B2DHomMatrixBufferedDecompose(rmMatrixStack[a])); - } - } - - Primitive2DSequence AnimatedInterpolatePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - const sal_uInt32 nSize(maMatrixStack.size()); - - if(nSize) - { - double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime())); - - if(fState < 0.0) - { - fState = 0.0; - } - else if(fState > 1.0) - { - fState = 1.0; - } - - const double fIndex(fState * (double)(nSize - 1L)); - const sal_uInt32 nIndA(sal_uInt32(floor(fIndex))); - const double fOffset(fIndex - (double)nIndA); - basegfx::B2DHomMatrix aTargetTransform; - std::vector< basegfx::tools::B2DHomMatrixBufferedDecompose >::const_iterator aMatA(maMatrixStack.begin() + nIndA); - - if(basegfx::fTools::equalZero(fOffset)) - { - // use matrix from nIndA directly - aTargetTransform = aMatA->getB2DHomMatrix(); - } - else - { - // interpolate. Get involved buffered decomposed matrices - const sal_uInt32 nIndB((nIndA + 1L) % nSize); - std::vector< basegfx::tools::B2DHomMatrixBufferedDecompose >::const_iterator aMatB(maMatrixStack.begin() + nIndB); - - // interpolate for fOffset [0.0 .. 1.0[ - const basegfx::B2DVector aScale(basegfx::interpolate(aMatA->getScale(), aMatB->getScale(), fOffset)); - const basegfx::B2DVector aTranslate(basegfx::interpolate(aMatA->getTranslate(), aMatB->getTranslate(), fOffset)); - const double fRotate(((aMatB->getRotate() - aMatA->getRotate()) * fOffset) + aMatA->getRotate()); - const double fShearX(((aMatB->getShearX() - aMatA->getShearX()) * fOffset) + aMatA->getShearX()); - - // build matrix for state - aTargetTransform = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix( - aScale, fShearX, fRotate, aTranslate); - } - - // create new transform primitive reference, return new sequence - const Primitive2DReference xRef(new TransformPrimitive2D(aTargetTransform, getChildren())); - return Primitive2DSequence(&xRef, 1L); - } - else - { - return getChildren(); - } - } - - // provide unique ID - ImplPrimitrive2DIDBlock(AnimatedInterpolatePrimitive2D, PRIMITIVE2D_ID_ANIMATEDINTERPOLATEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx b/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx deleted file mode 100644 index fd73f52ccf..0000000000 --- a/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence BackgroundColorPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - if(!rViewInformation.getViewport().isEmpty()) - { - const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(rViewInformation.getViewport())); - const Primitive2DReference xRef(new PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aOutline), getBColor())); - return Primitive2DSequence(&xRef, 1L); - } - else - { - return Primitive2DSequence(); - } - } - - BackgroundColorPrimitive2D::BackgroundColorPrimitive2D( - const basegfx::BColor& rBColor) - : BufferedDecompositionPrimitive2D(), - maBColor(rBColor), - maLastViewport() - { - } - - bool BackgroundColorPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const BackgroundColorPrimitive2D& rCompare = (BackgroundColorPrimitive2D&)rPrimitive; - - return (getBColor() == rCompare.getBColor()); - } - - return false; - } - - basegfx::B2DRange BackgroundColorPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - // always as big as the view - return rViewInformation.getViewport(); - } - - Primitive2DSequence BackgroundColorPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - if(getBuffered2DDecomposition().hasElements() && (maLastViewport != rViewInformation.getViewport())) - { - // conditions of last local decomposition have changed, delete - const_cast< BackgroundColorPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember ViewRange - const_cast< BackgroundColorPrimitive2D* >(this)->maLastViewport = rViewInformation.getViewport(); - } - - // use parent implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(BackgroundColorPrimitive2D, PRIMITIVE2D_ID_BACKGROUNDCOLORPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/baseprimitive2d.cxx b/drawinglayer/source/primitive2d/baseprimitive2d.cxx deleted file mode 100644 index f655fec229..0000000000 --- a/drawinglayer/source/primitive2d/baseprimitive2d.cxx +++ /dev/null @@ -1,281 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/baseprimitive2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <basegfx/tools/canvastools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - BasePrimitive2D::BasePrimitive2D() - : BasePrimitive2DImplBase(m_aMutex) - { - } - - BasePrimitive2D::~BasePrimitive2D() - { - } - - bool BasePrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const - { - return (getPrimitive2DID() == rPrimitive.getPrimitive2DID()); - } - - basegfx::B2DRange BasePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - return getB2DRangeFromPrimitive2DSequence(get2DDecomposition(rViewInformation), rViewInformation); - } - - Primitive2DSequence BasePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - return Primitive2DSequence(); - } - - Primitive2DSequence SAL_CALL BasePrimitive2D::getDecomposition( const uno::Sequence< beans::PropertyValue >& rViewParameters ) throw ( uno::RuntimeException ) - { - const geometry::ViewInformation2D aViewInformation(rViewParameters); - return get2DDecomposition(aViewInformation); - } - - com::sun::star::geometry::RealRectangle2D SAL_CALL BasePrimitive2D::getRange( const uno::Sequence< beans::PropertyValue >& rViewParameters ) throw ( uno::RuntimeException ) - { - const geometry::ViewInformation2D aViewInformation(rViewParameters); - return basegfx::unotools::rectangle2DFromB2DRectangle(getB2DRange(aViewInformation)); - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence BufferedDecompositionPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - return Primitive2DSequence(); - } - - BufferedDecompositionPrimitive2D::BufferedDecompositionPrimitive2D() - : BasePrimitive2D(), - maBuffered2DDecomposition() - { - } - - Primitive2DSequence BufferedDecompositionPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - if(!getBuffered2DDecomposition().hasElements()) - { - const Primitive2DSequence aNewSequence(create2DDecomposition(rViewInformation)); - const_cast< BufferedDecompositionPrimitive2D* >(this)->setBuffered2DDecomposition(aNewSequence); - } - - return getBuffered2DDecomposition(); - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// tooling - -namespace drawinglayer -{ - namespace primitive2d - { - // get B2DRange from a given Primitive2DReference - basegfx::B2DRange getB2DRangeFromPrimitive2DReference(const Primitive2DReference& rCandidate, const geometry::ViewInformation2D& aViewInformation) - { - basegfx::B2DRange aRetval; - - if(rCandidate.is()) - { - // try to get C++ implementation base - const BasePrimitive2D* pCandidate(dynamic_cast< BasePrimitive2D* >(rCandidate.get())); - - if(pCandidate) - { - // use it if possible - aRetval.expand(pCandidate->getB2DRange(aViewInformation)); - } - else - { - // use UNO API call instead - const uno::Sequence< beans::PropertyValue >& rViewParameters(aViewInformation.getViewInformationSequence()); - aRetval.expand(basegfx::unotools::b2DRectangleFromRealRectangle2D(rCandidate->getRange(rViewParameters))); - } - } - - return aRetval; - } - - // get B2DRange from a given Primitive2DSequence - basegfx::B2DRange getB2DRangeFromPrimitive2DSequence(const Primitive2DSequence& rCandidate, const geometry::ViewInformation2D& aViewInformation) - { - basegfx::B2DRange aRetval; - - if(rCandidate.hasElements()) - { - const sal_Int32 nCount(rCandidate.getLength()); - - for(sal_Int32 a(0L); a < nCount; a++) - { - aRetval.expand(getB2DRangeFromPrimitive2DReference(rCandidate[a], aViewInformation)); - } - } - - return aRetval; - } - - bool arePrimitive2DReferencesEqual(const Primitive2DReference& rxA, const Primitive2DReference& rxB) - { - const sal_Bool bAIs(rxA.is()); - - if(bAIs != rxB.is()) - { - return false; - } - - if(!bAIs) - { - return true; - } - - const BasePrimitive2D* pA(dynamic_cast< const BasePrimitive2D* >(rxA.get())); - const BasePrimitive2D* pB(dynamic_cast< const BasePrimitive2D* >(rxB.get())); - const bool bAEqualZero(pA == 0L); - - if(bAEqualZero != (pB == 0L)) - { - return false; - } - - if(bAEqualZero) - { - return false; - } - - return (pA->operator==(*pB)); - } - - bool arePrimitive2DSequencesEqual(const Primitive2DSequence& rA, const Primitive2DSequence& rB) - { - const sal_Bool bAHasElements(rA.hasElements()); - - if(bAHasElements != rB.hasElements()) - { - return false; - } - - if(!bAHasElements) - { - return true; - } - - const sal_Int32 nCount(rA.getLength()); - - if(nCount != rB.getLength()) - { - return false; - } - - for(sal_Int32 a(0L); a < nCount; a++) - { - if(!arePrimitive2DReferencesEqual(rA[a], rB[a])) - { - return false; - } - } - - return true; - } - - // concatenate sequence - void appendPrimitive2DSequenceToPrimitive2DSequence(Primitive2DSequence& rDest, const Primitive2DSequence& rSource) - { - if(rSource.hasElements()) - { - if(rDest.hasElements()) - { - const sal_Int32 nSourceCount(rSource.getLength()); - const sal_Int32 nDestCount(rDest.getLength()); - const sal_Int32 nTargetCount(nSourceCount + nDestCount); - sal_Int32 nInsertPos(nDestCount); - - rDest.realloc(nTargetCount); - - for(sal_Int32 a(0L); a < nSourceCount; a++) - { - if(rSource[a].is()) - { - rDest[nInsertPos++] = rSource[a]; - } - } - - if(nInsertPos != nTargetCount) - { - rDest.realloc(nInsertPos); - } - } - else - { - rDest = rSource; - } - } - } - - // concatenate single Primitive2D - void appendPrimitive2DReferenceToPrimitive2DSequence(Primitive2DSequence& rDest, const Primitive2DReference& rSource) - { - if(rSource.is()) - { - const sal_Int32 nDestCount(rDest.getLength()); - rDest.realloc(nDestCount + 1L); - rDest[nDestCount] = rSource; - } - } - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx b/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx deleted file mode 100644 index 3efbd0de02..0000000000 --- a/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - BitmapPrimitive2D::BitmapPrimitive2D( - const BitmapEx& rBitmapEx, - const basegfx::B2DHomMatrix& rTransform) - : BasePrimitive2D(), - maBitmapEx(rBitmapEx), - maTransform(rTransform) - { - } - - bool BitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const BitmapPrimitive2D& rCompare = (BitmapPrimitive2D&)rPrimitive; - - return (getBitmapEx() == rCompare.getBitmapEx() - && getTransform() == rCompare.getTransform()); - } - - return false; - } - - basegfx::B2DRange BitmapPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(maTransform); - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(BitmapPrimitive2D, PRIMITIVE2D_ID_BITMAPPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx b/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx deleted file mode 100644 index 33df59c9f2..0000000000 --- a/drawinglayer/source/primitive2d/borderlineprimitive2d.cxx +++ /dev/null @@ -1,342 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/borderlineprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygonclipper.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <svtools/borderhelper.hxx> -#include <numeric> -#include <algorithm> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - basegfx::B2DPolyPolygon BorderLinePrimitive2D::getClipPolygon( ) const - { - basegfx::B2DPolygon clipPolygon; - - // Get the vectors - basegfx::B2DVector aVector( getEnd() - getStart() ); - aVector.normalize(); - const basegfx::B2DVector aPerpendicular(basegfx::getPerpendicular(aVector)); - - // Get the points - const basegfx::B2DVector aLeftOff(aPerpendicular * (-0.5 * (getWidth()))); - const basegfx::B2DVector aRightOff(aPerpendicular * (0.5 * (getWidth()))); - - const basegfx::B2DVector aSLVector( aLeftOff - ( getExtendLeftStart() * aVector ) ); - clipPolygon.append( basegfx::B2DPoint( getStart() + aSLVector * 2.0 ) ); - - clipPolygon.append( getStart( ) ); - - const basegfx::B2DVector aSRVector( aRightOff - ( getExtendRightStart() * aVector ) ); - clipPolygon.append( basegfx::B2DPoint( getStart() + aSRVector * 2.0 ) ); - - const basegfx::B2DVector aERVector( aRightOff + ( getExtendRightEnd() * aVector ) ); - clipPolygon.append( basegfx::B2DPoint( getEnd() + aERVector * 2.0 ) ); - - clipPolygon.append( getEnd( ) ); - - const basegfx::B2DVector aELVector( aLeftOff + ( getExtendLeftEnd() * aVector ) ); - clipPolygon.append( basegfx::B2DPoint( getEnd() + aELVector * 2.0 ) ); - - clipPolygon.setClosed( true ); - - return basegfx::B2DPolyPolygon( clipPolygon ); - } - - Primitive2DSequence BorderLinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence xRetval; - - if(!getStart().equal(getEnd()) && ( isInsideUsed() || isOutsideUsed() ) ) - { - // get data and vectors - const double fWidth(getWidth()); - basegfx::B2DVector aVector(getEnd() - getStart()); - aVector.normalize(); - const basegfx::B2DVector aPerpendicular(basegfx::getPerpendicular(aVector)); - - const basegfx::B2DPolyPolygon& aClipRegion = getClipPolygon( ); - - if(isOutsideUsed() && isInsideUsed()) - { - const double fExt = getWidth( ); // Extend a lot: it'll be clipped after - - // both used, double line definition. Create left and right offset - xRetval.realloc(2); - sal_uInt32 nInsert(0); - - basegfx::B2DPolygon aGap; - - { - // create geometry for left - const basegfx::B2DVector aLeftOff(aPerpendicular * (0.5 * (getCorrectedLeftWidth() - fWidth + 1))); - const basegfx::B2DPoint aTmpStart(getStart() + aLeftOff - ( fExt * aVector)); - const basegfx::B2DPoint aTmpEnd(getEnd() + aLeftOff + ( fExt * aVector)); - basegfx::B2DPolygon aLeft; - - if(leftIsHairline()) - { - // create hairline primitive - aLeft.append(aTmpStart); - aLeft.append(aTmpEnd); - - xRetval[nInsert++] = Primitive2DReference(new PolygonHairlinePrimitive2D( - aLeft, - getRGBColorLeft())); - - aGap.append( getStart() - getExtendLeftStart() * aVector ); - aGap.append( getEnd() + getExtendLeftEnd() * aVector ); - } - else - { - // create filled polygon primitive. Already tried to create thick lines - // with the correct LineWidth, but this leads to problems when no AA - // is available and fat line special case reductions between 0.5 < x < 2.5 line widths - // are executed due to the FilledPolygon-do-not-paint-their-bottom-and-right-lines. - const basegfx::B2DVector aLineWidthOffset((getCorrectedLeftWidth() * 0.5) * aPerpendicular); - - aLeft.append(aTmpStart + aLineWidthOffset); - aLeft.append(aTmpEnd + aLineWidthOffset); - aLeft.append(aTmpEnd - aLineWidthOffset); - aLeft.append(aTmpStart - aLineWidthOffset); - aLeft.setClosed(true); - - basegfx::B2DPolyPolygon aClipped = basegfx::tools::clipPolygonOnPolyPolygon( - aLeft, aClipRegion, true, false ); - - aGap.append( aTmpStart + aLineWidthOffset ); - aGap.append( aTmpEnd + aLineWidthOffset ); - - xRetval[nInsert++] = Primitive2DReference(new PolyPolygonColorPrimitive2D( - aClipped, getRGBColorLeft())); - } - } - - { - // create geometry for right - const basegfx::B2DVector aRightOff(aPerpendicular * (0.5 * (fWidth - getCorrectedRightWidth() + 1))); - const basegfx::B2DPoint aTmpStart(getStart() + aRightOff - ( fExt * aVector)); - const basegfx::B2DPoint aTmpEnd(getEnd() + aRightOff + ( fExt * aVector)); - basegfx::B2DPolygon aRight; - - if(rightIsHairline()) - { - // create hairline primitive - aRight.append(aTmpStart); - aRight.append(aTmpEnd); - - xRetval[nInsert++] = Primitive2DReference(new PolygonHairlinePrimitive2D( - aRight, - getRGBColorRight())); - - aGap.append( getStart() - getExtendRightStart() * aVector ); - aGap.append( getEnd() + getExtendRightEnd() * aVector ); - } - else - { - // create filled polygon primitive - const basegfx::B2DVector aLineWidthOffset((getCorrectedRightWidth() * 0.5) * aPerpendicular); - - aRight.append(aTmpStart + aLineWidthOffset); - aRight.append(aTmpEnd + aLineWidthOffset); - aRight.append(aTmpEnd - aLineWidthOffset); - aRight.append(aTmpStart - aLineWidthOffset); - aRight.setClosed(true); - - basegfx::B2DPolyPolygon aClipped = basegfx::tools::clipPolygonOnPolyPolygon( - aRight, aClipRegion, true, false ); - - xRetval[nInsert++] = Primitive2DReference(new PolyPolygonColorPrimitive2D( - aClipped, getRGBColorRight())); - - aGap.append( aTmpEnd - aLineWidthOffset ); - aGap.append( aTmpStart - aLineWidthOffset ); - } - } - - if (hasGapColor() && aGap.count() == 4) - { - xRetval.realloc( xRetval.getLength() + 1 ); - // create geometry for filled gap - aGap.setClosed( true ); - - basegfx::B2DPolyPolygon aClipped = basegfx::tools::clipPolygonOnPolyPolygon( - aGap, aClipRegion, true, false ); - - xRetval[nInsert++] = Primitive2DReference( new PolyPolygonColorPrimitive2D( - aClipped, getRGBColorGap() ) ); - } - } - else - { - // single line, create geometry - basegfx::B2DPolygon aPolygon; - const double fExt = getWidth( ); // Extend a lot: it'll be clipped after - const basegfx::B2DPoint aTmpStart(getStart() - (fExt * aVector)); - const basegfx::B2DPoint aTmpEnd(getEnd() + (fExt * aVector)); - xRetval.realloc(1); - - // Get which is the line to show - bool bIsHairline = leftIsHairline(); - double nWidth = getCorrectedLeftWidth(); - basegfx::BColor aColor = getRGBColorLeft(); - if ( basegfx::fTools::equal( 0.0, mfLeftWidth ) ) - { - bIsHairline = rightIsHairline(); - nWidth = getCorrectedRightWidth(); - aColor = getRGBColorRight(); - } - - if(bIsHairline) - { - // create hairline primitive - aPolygon.append( getStart() ); - aPolygon.append( getEnd() ); - - xRetval[0] = Primitive2DReference(new PolygonHairlinePrimitive2D( - aPolygon, - aColor)); - } - else - { - // create filled polygon primitive - const basegfx::B2DVector aLineWidthOffset(((nWidth + 1) * 0.5) * aPerpendicular); - - aPolygon.append( aTmpStart ); - aPolygon.append( aTmpEnd ); - - basegfx::B2DPolyPolygon aDashed = svtools::ApplyLineDashing( - aPolygon, getStyle(), MAP_100TH_MM ); - for (sal_uInt32 i = 0; i < aDashed.count(); i++ ) - { - basegfx::B2DPolygon aDash = aDashed.getB2DPolygon( i ); - basegfx::B2DPoint aDashStart = aDash.getB2DPoint( 0 ); - basegfx::B2DPoint aDashEnd = aDash.getB2DPoint( aDash.count() - 1 ); - - basegfx::B2DPolygon aDashPolygon; - aDashPolygon.append( aDashStart + aLineWidthOffset ); - aDashPolygon.append( aDashEnd + aLineWidthOffset ); - aDashPolygon.append( aDashEnd - aLineWidthOffset ); - aDashPolygon.append( aDashStart - aLineWidthOffset ); - aDashPolygon.setClosed( true ); - - basegfx::B2DPolyPolygon aClipped = basegfx::tools::clipPolygonOnPolyPolygon( - aDashPolygon, aClipRegion, true, false ); - - if ( aClipped.count() ) - aDashed.setB2DPolygon( i, aClipped.getB2DPolygon( 0 ) ); - } - - xRetval[0] = Primitive2DReference(new PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon( aDashed ), aColor)); - } - } - } - - return xRetval; - } - - BorderLinePrimitive2D::BorderLinePrimitive2D( - const basegfx::B2DPoint& rStart, - const basegfx::B2DPoint& rEnd, - double fLeftWidth, - double fDistance, - double fRightWidth, - double fExtendLeftStart, - double fExtendLeftEnd, - double fExtendRightStart, - double fExtendRightEnd, - const basegfx::BColor& rRGBColorRight, - const basegfx::BColor& rRGBColorLeft, - const basegfx::BColor& rRGBColorGap, - bool bHasGapColor, - const short nStyle) - : BufferedDecompositionPrimitive2D(), - maStart(rStart), - maEnd(rEnd), - mfLeftWidth(fLeftWidth), - mfDistance(fDistance), - mfRightWidth(fRightWidth), - mfExtendLeftStart(fExtendLeftStart), - mfExtendLeftEnd(fExtendLeftEnd), - mfExtendRightStart(fExtendRightStart), - mfExtendRightEnd(fExtendRightEnd), - maRGBColorRight(rRGBColorRight), - maRGBColorLeft(rRGBColorLeft), - maRGBColorGap(rRGBColorGap), - mbHasGapColor(bHasGapColor), - mnStyle(nStyle) - { - } - - bool BorderLinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const BorderLinePrimitive2D& rCompare = (BorderLinePrimitive2D&)rPrimitive; - - return (getStart() == rCompare.getStart() - && getEnd() == rCompare.getEnd() - && getLeftWidth() == rCompare.getLeftWidth() - && getDistance() == rCompare.getDistance() - && getRightWidth() == rCompare.getRightWidth() - && getExtendLeftStart() == rCompare.getExtendLeftStart() - && getExtendLeftEnd() == rCompare.getExtendLeftEnd() - && getExtendRightStart() == rCompare.getExtendRightStart() - && getExtendRightEnd() == rCompare.getExtendRightEnd() - && getRGBColorRight() == rCompare.getRGBColorRight() - && getRGBColorLeft() == rCompare.getRGBColorLeft() - && getRGBColorGap() == rCompare.getRGBColorGap() - && hasGapColor() == rCompare.hasGapColor() - && getStyle() == rCompare.getStyle()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(BorderLinePrimitive2D, PRIMITIVE2D_ID_BORDERLINEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/chartprimitive2d.cxx b/drawinglayer/source/primitive2d/chartprimitive2d.cxx deleted file mode 100644 index 23957295df..0000000000 --- a/drawinglayer/source/primitive2d/chartprimitive2d.cxx +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/chartprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - ChartPrimitive2D::ChartPrimitive2D( - const uno::Reference< frame::XModel >& rxChartModel, - const basegfx::B2DHomMatrix& rTransformation, - const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren), - mxChartModel(rxChartModel), - maTransformation(rTransformation) - { - } - - bool ChartPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(GroupPrimitive2D::operator==(rPrimitive)) - { - const ChartPrimitive2D& rCompare = static_cast< const ChartPrimitive2D& >(rPrimitive); - - return (getChartModel() == rCompare.getChartModel() - && getTransformation() == rCompare.getTransformation()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(ChartPrimitive2D, PRIMITIVE2D_ID_CHARTPRIMITIVE2D) - - basegfx::B2DRange ChartPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(getTransformation()); - return aRetval; - } - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/clippedborderlineprimitive2d.cxx b/drawinglayer/source/primitive2d/clippedborderlineprimitive2d.cxx deleted file mode 100644 index b97e90f2a0..0000000000 --- a/drawinglayer/source/primitive2d/clippedborderlineprimitive2d.cxx +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * Version: MPL 1.1 / GPLv3+ / LGPLv3+ - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (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.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Initial Developer of the Original Code is - * [ Novell Inc. ] - * Portions created by the Initial Developer are Copyright (C) 2010 the - * Initial Developer. All Rights Reserved. - * - * Contributor(s): Cédric Bosdonnat <cbosdonnat@novell.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 3 or later (the "GPLv3+"), or - * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), - * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable - * instead of those above. - */ - -#include <drawinglayer/primitive2d/clippedborderlineprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -namespace drawinglayer -{ - namespace primitive2d - { - basegfx::B2DPolyPolygon ClippedBorderLinePrimitive2D::getClipPolygon( ) const - { - basegfx::B2DPolyPolygon aPolyPolygon; - aPolyPolygon.append( maIntersection ); - return aPolyPolygon; - } - - ClippedBorderLinePrimitive2D::ClippedBorderLinePrimitive2D( - const basegfx::B2DPoint& rStart, - const basegfx::B2DPoint& rEnd, - double fLeftWidth, - double fDistance, - double fRightWidth, - const basegfx::B2DPolygon& rIntersection, - const basegfx::BColor& rRGBColorRight, - const basegfx::BColor& rRGBColorLeft, - const basegfx::BColor& rRGBColorGap, - bool bHasGapColor, - const short nStyle) - : BorderLinePrimitive2D( rStart, rEnd, fLeftWidth,fDistance, fRightWidth, - 0.0, 0.0, 0.0, 0.0, rRGBColorRight, rRGBColorLeft, - rRGBColorGap, bHasGapColor, nStyle), - maIntersection( rIntersection ) - { - } - - bool ClippedBorderLinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BorderLinePrimitive2D::operator==(rPrimitive)) - { - const ClippedBorderLinePrimitive2D& rCompare = (ClippedBorderLinePrimitive2D&)rPrimitive; - - return maIntersection == rCompare.maIntersection; - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(ClippedBorderLinePrimitive2D, PRIMITIVE2D_ID_CLIPPEDBORDERLINEPRIMITIVE2D) - - - } // namespace primitive2d -} // namespace drawinglayer - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/controlprimitive2d.cxx b/drawinglayer/source/primitive2d/controlprimitive2d.cxx deleted file mode 100644 index 483f797a1e..0000000000 --- a/drawinglayer/source/primitive2d/controlprimitive2d.cxx +++ /dev/null @@ -1,386 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/controlprimitive2d.hxx> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <comphelper/processfactory.hxx> -#include <com/sun/star/awt/XWindow2.hpp> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <vcl/virdev.hxx> -#include <vcl/svapp.hxx> -#include <com/sun/star/awt/PosSize.hpp> -#include <vcl/bitmapex.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <tools/diagnose_ex.h> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <svtools/optionsdrawinglayer.hxx> -#include <toolkit/awt/vclxwindow.hxx> -#include <vcl/window.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - void ControlPrimitive2D::createXControl() - { - if(!mxXControl.is() && getControlModel().is()) - { - uno::Reference< beans::XPropertySet > xSet(getControlModel(), uno::UNO_QUERY); - - if(xSet.is()) - { - uno::Any aValue(xSet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultControl")))); - rtl::OUString aUnoControlTypeName; - - if(aValue >>= aUnoControlTypeName) - { - if(aUnoControlTypeName.getLength()) - { - uno::Reference< lang::XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory() ); - - if(xFactory.is()) - { - uno::Reference< awt::XControl > xXControl(xFactory->createInstance(aUnoControlTypeName), uno::UNO_QUERY); - - if(xXControl.is()) - { - xXControl->setModel(getControlModel()); - - // remember XControl - mxXControl = xXControl; - } - } - } - } - } - } - } - - Primitive2DReference ControlPrimitive2D::createBitmapDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - Primitive2DReference xRetval; - const uno::Reference< awt::XControl >& rXControl(getXControl()); - - if(rXControl.is()) - { - uno::Reference< awt::XWindow > xControlWindow(rXControl, uno::UNO_QUERY); - - if(xControlWindow.is()) - { - // get decomposition to get size - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - getTransform().decompose(aScale, aTranslate, fRotate, fShearX); - - // get absolute discrete size (no mirror or rotate here) - aScale = basegfx::absolute(aScale); - basegfx::B2DVector aDiscreteSize(rViewInformation.getObjectToViewTransformation() * aScale); - - // limit to a maximum square size, e.g. 300x150 pixels (45000) - const SvtOptionsDrawinglayer aDrawinglayerOpt; - const double fDiscreteMax(aDrawinglayerOpt.GetQuadraticFormControlRenderLimit()); - const double fDiscreteQuadratic(aDiscreteSize.getX() * aDiscreteSize.getY()); - const bool bScaleUsed(fDiscreteQuadratic > fDiscreteMax); - double fFactor(1.0); - - if(bScaleUsed) - { - // get factor and adapt to scaled size - fFactor = sqrt(fDiscreteMax / fDiscreteQuadratic); - aDiscreteSize *= fFactor; - } - - // go to integer - const sal_Int32 nSizeX(basegfx::fround(aDiscreteSize.getX())); - const sal_Int32 nSizeY(basegfx::fround(aDiscreteSize.getY())); - - if(nSizeX > 0 && nSizeY > 0) - { - // prepare VirtualDevice - VirtualDevice aVirtualDevice(*Application::GetDefaultDevice()); - const Size aSizePixel(nSizeX, nSizeY); - aVirtualDevice.SetOutputSizePixel(aSizePixel); - - // set size at control - xControlWindow->setPosSize(0, 0, nSizeX, nSizeY, awt::PosSize::POSSIZE); - - // get graphics and view - uno::Reference< awt::XGraphics > xGraphics(aVirtualDevice.CreateUnoGraphics()); - uno::Reference< awt::XView > xControlView(rXControl, uno::UNO_QUERY); - - if(xGraphics.is() && xControlView.is()) - { - // link graphics and view - xControlView->setGraphics(xGraphics); - - { // #i93162# For painting the control setting a Zoom (using setZoom() at the xControlView) - // is needed to define the font size. Normally this is done in - // ViewObjectContactOfUnoControl::createPrimitive2DSequence by using positionControlForPaint(). - // For some reason the difference between MAP_TWIPS and MAP_100TH_MM still plays - // a role there so that for Draw/Impress/Calc (the MAP_100TH_MM users) i need to set a zoom - // here, too. The factor includes the needed scale, but is calculated by pure comparisons. It - // is somehow related to the twips/100thmm relationship. - bool bUserIs100thmm(false); - const uno::Reference< awt::XControl > xControl(xControlView, uno::UNO_QUERY); - - if(xControl.is()) - { - uno::Reference< awt::XWindowPeer > xWindowPeer(xControl->getPeer()); - - if(xWindowPeer.is()) - { - VCLXWindow* pVCLXWindow = VCLXWindow::GetImplementation(xWindowPeer); - - if(pVCLXWindow) - { - Window* pWindow = pVCLXWindow->GetWindow(); - - if(pWindow) - { - pWindow = pWindow->GetParent(); - - if(pWindow) - { - if(MAP_100TH_MM == pWindow->GetMapMode().GetMapUnit()) - { - bUserIs100thmm = true; - } - } - } - } - } - } - - if(bUserIs100thmm) - { - // calc screen zoom for text display. fFactor is already added indirectly in aDiscreteSize - basegfx::B2DVector aScreenZoom( - basegfx::fTools::equalZero(aScale.getX()) ? 1.0 : aDiscreteSize.getX() / aScale.getX(), - basegfx::fTools::equalZero(aScale.getY()) ? 1.0 : aDiscreteSize.getY() / aScale.getY()); - static double fZoomScale(28.0); // do not ask for this constant factor, but it gets the zoom right - aScreenZoom *= fZoomScale; - - // set zoom at control view for text scaling - xControlView->setZoom((float)aScreenZoom.getX(), (float)aScreenZoom.getY()); - } - } - - try - { - // try to paint it to VirtualDevice - xControlView->draw(0, 0); - - // get bitmap - const Bitmap aContent(aVirtualDevice.GetBitmap(Point(), aSizePixel)); - - // to avoid scaling, use the Bitmap pixel size as primitive size - const Size aBitmapSize(aContent.GetSizePixel()); - basegfx::B2DVector aBitmapSizeLogic( - rViewInformation.getInverseObjectToViewTransformation() * - basegfx::B2DVector(aBitmapSize.getWidth() - 1, aBitmapSize.getHeight() - 1)); - - if(bScaleUsed) - { - // if scaled adapt to scaled size - aBitmapSizeLogic /= fFactor; - } - - // short form for scale and translate transformation - const basegfx::B2DHomMatrix aBitmapTransform(basegfx::tools::createScaleTranslateB2DHomMatrix( - aBitmapSizeLogic.getX(), aBitmapSizeLogic.getY(), aTranslate.getX(), aTranslate.getY())); - - // create primitive - xRetval = new BitmapPrimitive2D(BitmapEx(aContent), aBitmapTransform); - } - catch( const uno::Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - } - } - } - - return xRetval; - } - - Primitive2DReference ControlPrimitive2D::createPlaceholderDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // create a gray placeholder hairline polygon in object size - basegfx::B2DRange aObjectRange(0.0, 0.0, 1.0, 1.0); - aObjectRange.transform(getTransform()); - const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aObjectRange)); - const basegfx::BColor aGrayTone(0xc0 / 255.0, 0xc0 / 255.0, 0xc0 / 255.0); - - // The replacement object may also get a text like 'empty group' here later - Primitive2DReference xRetval(new PolygonHairlinePrimitive2D(aOutline, aGrayTone)); - - return xRetval; - } - - Primitive2DSequence ControlPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - // try to create a bitmap decomposition. If that fails for some reason, - // at least create a replacement decomposition. - Primitive2DReference xReference(createBitmapDecomposition(rViewInformation)); - - if(!xReference.is()) - { - xReference = createPlaceholderDecomposition(rViewInformation); - } - - return Primitive2DSequence(&xReference, 1L); - } - - ControlPrimitive2D::ControlPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const uno::Reference< awt::XControlModel >& rxControlModel) - : BufferedDecompositionPrimitive2D(), - maTransform(rTransform), - mxControlModel(rxControlModel), - mxXControl(), - maLastViewScaling() - { - } - - ControlPrimitive2D::ControlPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const uno::Reference< awt::XControlModel >& rxControlModel, - const uno::Reference< awt::XControl >& rxXControl) - : BufferedDecompositionPrimitive2D(), - maTransform(rTransform), - mxControlModel(rxControlModel), - mxXControl(rxXControl), - maLastViewScaling() - { - } - - const uno::Reference< awt::XControl >& ControlPrimitive2D::getXControl() const - { - if(!mxXControl.is()) - { - const_cast< ControlPrimitive2D* >(this)->createXControl(); - } - - return mxXControl; - } - - bool ControlPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - // use base class compare operator - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const ControlPrimitive2D& rCompare = (ControlPrimitive2D&)rPrimitive; - - if(getTransform() == rCompare.getTransform()) - { - // check if ControlModel references both are/are not - bool bRetval(getControlModel().is() == rCompare.getControlModel().is()); - - if(bRetval && getControlModel().is()) - { - // both exist, check for equality - bRetval = (getControlModel() == rCompare.getControlModel()); - } - - if(bRetval) - { - // check if XControl references both are/are not - bRetval = (getXControl().is() == rCompare.getXControl().is()); - } - - if(bRetval && getXControl().is()) - { - // both exist, check for equality - bRetval = (getXControl() == rCompare.getXControl()); - } - - return bRetval; - } - } - - return false; - } - - basegfx::B2DRange ControlPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // simply derivate from unit range - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(getTransform()); - return aRetval; - } - - Primitive2DSequence ControlPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - // this primitive is view-dependent related to the scaling. If scaling has changed, - // destroy existing decomposition. To detect change, use size of unit size in view coordinates - ::osl::MutexGuard aGuard( m_aMutex ); - const basegfx::B2DVector aNewScaling(rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0)); - - if(getBuffered2DDecomposition().hasElements()) - { - if(!maLastViewScaling.equal(aNewScaling)) - { - // conditions of last local decomposition have changed, delete - const_cast< ControlPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember ViewTransformation - const_cast< ControlPrimitive2D* >(this)->maLastViewScaling = aNewScaling; - } - - // use parent implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(ControlPrimitive2D, PRIMITIVE2D_ID_CONTROLPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx b/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx deleted file mode 100644 index a00a1e47f9..0000000000 --- a/drawinglayer/source/primitive2d/discretebitmapprimitive2d.cxx +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/discretebitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence DiscreteBitmapPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // use getViewTransformation() and getObjectTransformation() from - // ObjectAndViewTransformationDependentPrimitive2D to create a BitmapPrimitive2D - // with the correct mapping - Primitive2DSequence xRetval; - - if(!getBitmapEx().IsEmpty()) - { - // get discrete size - const Size& rSizePixel = getBitmapEx().GetSizePixel(); - const basegfx::B2DVector aDiscreteSize(rSizePixel.Width(), rSizePixel.Height()); - - // get inverse ViewTransformation - basegfx::B2DHomMatrix aInverseViewTransformation(getViewTransformation()); - aInverseViewTransformation.invert(); - - // get size and position in world coordinates - const basegfx::B2DVector aWorldSize(aInverseViewTransformation * aDiscreteSize); - const basegfx::B2DPoint aWorldTopLeft(getObjectTransformation() * getTopLeft()); - - // build object matrix in world coordinates so that the top-left - // position remains, but eventual transformations (e.g. rotations) - // in the ObjectToView stack remain and get correctly applied - basegfx::B2DHomMatrix aObjectTransform; - - aObjectTransform.set(0, 0, aWorldSize.getX()); - aObjectTransform.set(1, 1, aWorldSize.getY()); - aObjectTransform.set(0, 2, aWorldTopLeft.getX()); - aObjectTransform.set(1, 2, aWorldTopLeft.getY()); - - // get inverse ObjectTransformation - basegfx::B2DHomMatrix aInverseObjectTransformation(getObjectTransformation()); - aInverseObjectTransformation.invert(); - - // transform to object coordinate system - aObjectTransform = aInverseObjectTransformation * aObjectTransform; - - // create BitmapPrimitive2D with now object-local coordinate data - const Primitive2DReference xRef(new BitmapPrimitive2D(getBitmapEx(), aObjectTransform)); - xRetval = Primitive2DSequence(&xRef, 1); - } - - return xRetval; - } - - DiscreteBitmapPrimitive2D::DiscreteBitmapPrimitive2D( - const BitmapEx& rBitmapEx, - const basegfx::B2DPoint& rTopLeft) - : ObjectAndViewTransformationDependentPrimitive2D(), - maBitmapEx(rBitmapEx), - maTopLeft(rTopLeft) - { - } - - bool DiscreteBitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(ObjectAndViewTransformationDependentPrimitive2D::operator==(rPrimitive)) - { - const DiscreteBitmapPrimitive2D& rCompare = (DiscreteBitmapPrimitive2D&)rPrimitive; - - return (getBitmapEx() == rCompare.getBitmapEx() - && getTopLeft() == rCompare.getTopLeft()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(DiscreteBitmapPrimitive2D, PRIMITIVE2D_ID_DISCRETEBITMAPPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/discreteshadowprimitive2d.cxx b/drawinglayer/source/primitive2d/discreteshadowprimitive2d.cxx deleted file mode 100644 index 17578b5e52..0000000000 --- a/drawinglayer/source/primitive2d/discreteshadowprimitive2d.cxx +++ /dev/null @@ -1,339 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/discreteshadowprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - DiscreteShadow::DiscreteShadow(const BitmapEx& rBitmapEx) - : maBitmapEx(rBitmapEx), - maTopLeft(), - maTop(), - maTopRight(), - maRight(), - maBottomRight(), - maBottom(), - maBottomLeft(), - maLeft() - { - const Size& rBitmapSize = getBitmapEx().GetSizePixel(); - - if(rBitmapSize.Width() != rBitmapSize.Height() || rBitmapSize.Width() < 7) - { - OSL_ENSURE(false, "DiscreteShadowPrimitive2D: wrong bitmap format (!)"); - maBitmapEx = BitmapEx(); - } - } - - const BitmapEx& DiscreteShadow::getTopLeft() const - { - if(maTopLeft.IsEmpty()) - { - const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const_cast< DiscreteShadow* >(this)->maTopLeft = getBitmapEx(); - const_cast< DiscreteShadow* >(this)->maTopLeft.Crop( - Rectangle(Point(0,0),Size(nQuarter*2+1,nQuarter*2+1))); - } - - return maTopLeft; - } - - const BitmapEx& DiscreteShadow::getTop() const - { - if(maTop.IsEmpty()) - { - const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const_cast< DiscreteShadow* >(this)->maTop = getBitmapEx(); - const_cast< DiscreteShadow* >(this)->maTop.Crop( - Rectangle(Point(nQuarter*2+1,0),Size(1,nQuarter+1))); - } - - return maTop; - } - - const BitmapEx& DiscreteShadow::getTopRight() const - { - if(maTopRight.IsEmpty()) - { - const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const_cast< DiscreteShadow* >(this)->maTopRight = getBitmapEx(); - const_cast< DiscreteShadow* >(this)->maTopRight.Crop( - Rectangle(Point(nQuarter*2+2,0),Size(nQuarter*2+1,nQuarter*2+1))); - } - - return maTopRight; - } - - const BitmapEx& DiscreteShadow::getRight() const - { - if(maRight.IsEmpty()) - { - const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const_cast< DiscreteShadow* >(this)->maRight = getBitmapEx(); - const_cast< DiscreteShadow* >(this)->maRight.Crop( - Rectangle(Point(nQuarter*3+2,nQuarter*2+1),Size(nQuarter+1,1))); - } - - return maRight; - } - - const BitmapEx& DiscreteShadow::getBottomRight() const - { - if(maBottomRight.IsEmpty()) - { - const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const_cast< DiscreteShadow* >(this)->maBottomRight = getBitmapEx(); - const_cast< DiscreteShadow* >(this)->maBottomRight.Crop( - Rectangle(Point(nQuarter*2+2,nQuarter*2+2),Size(nQuarter*2+1,nQuarter*2+1))); - } - - return maBottomRight; - } - - const BitmapEx& DiscreteShadow::getBottom() const - { - if(maBottom.IsEmpty()) - { - const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const_cast< DiscreteShadow* >(this)->maBottom = getBitmapEx(); - const_cast< DiscreteShadow* >(this)->maBottom.Crop( - Rectangle(Point(nQuarter*2+1,nQuarter*3+2),Size(1,nQuarter+1))); - } - - return maBottom; - } - - const BitmapEx& DiscreteShadow::getBottomLeft() const - { - if(maBottomLeft.IsEmpty()) - { - const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const_cast< DiscreteShadow* >(this)->maBottomLeft = getBitmapEx(); - const_cast< DiscreteShadow* >(this)->maBottomLeft.Crop( - Rectangle(Point(0,nQuarter*2+2),Size(nQuarter*2+1,nQuarter*2+1))); - } - - return maBottomLeft; - } - - const BitmapEx& DiscreteShadow::getLeft() const - { - if(maLeft.IsEmpty()) - { - const sal_Int32 nQuarter((getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const_cast< DiscreteShadow* >(this)->maLeft = getBitmapEx(); - const_cast< DiscreteShadow* >(this)->maLeft.Crop( - Rectangle(Point(0,nQuarter*2+1),Size(nQuarter+1,1))); - } - - return maLeft; - } - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence DiscreteShadowPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence xRetval; - - if(!getDiscreteShadow().getBitmapEx().IsEmpty()) - { - const sal_Int32 nQuarter((getDiscreteShadow().getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const basegfx::B2DVector aScale(getTransform() * basegfx::B2DVector(1.0, 1.0)); - const double fSingleX(getDiscreteUnit() / aScale.getX()); - const double fSingleY(getDiscreteUnit() / aScale.getY()); - const double fBorderX(fSingleX * nQuarter); - const double fBorderY(fSingleY * nQuarter); - const double fBigLenX((fBorderX * 2.0) + fSingleX); - const double fBigLenY((fBorderY * 2.0) + fSingleY); - - xRetval.realloc(8); - - // TopLeft - xRetval[0] = Primitive2DReference( - new BitmapPrimitive2D( - getDiscreteShadow().getTopLeft(), - basegfx::tools::createScaleTranslateB2DHomMatrix( - fBigLenX, - fBigLenY, - -fBorderX, - -fBorderY))); - - // Top - xRetval[1] = Primitive2DReference( - new BitmapPrimitive2D( - getDiscreteShadow().getTop(), - basegfx::tools::createScaleTranslateB2DHomMatrix( - 1.0 - (2.0 * fBorderX) - fSingleX, - fBorderY + fSingleY, - fBorderX + fSingleX, - -fBorderY))); - - // TopRight - xRetval[2] = Primitive2DReference( - new BitmapPrimitive2D( - getDiscreteShadow().getTopRight(), - basegfx::tools::createScaleTranslateB2DHomMatrix( - fBigLenX, - fBigLenY, - 1.0 - fBorderX, - -fBorderY))); - - // Right - xRetval[3] = Primitive2DReference( - new BitmapPrimitive2D( - getDiscreteShadow().getRight(), - basegfx::tools::createScaleTranslateB2DHomMatrix( - fBorderX + fSingleX, - 1.0 - (2.0 * fBorderY) - fSingleY, - 1.0, - fBorderY + fSingleY))); - - // BottomRight - xRetval[4] = Primitive2DReference( - new BitmapPrimitive2D( - getDiscreteShadow().getBottomRight(), - basegfx::tools::createScaleTranslateB2DHomMatrix( - fBigLenX, - fBigLenY, - 1.0 - fBorderX, - 1.0 - fBorderY))); - - // Bottom - xRetval[5] = Primitive2DReference( - new BitmapPrimitive2D( - getDiscreteShadow().getBottom(), - basegfx::tools::createScaleTranslateB2DHomMatrix( - 1.0 - (2.0 * fBorderX) - fSingleX, - fBorderY + fSingleY, - fBorderX + fSingleX, - 1.0))); - - // BottomLeft - xRetval[6] = Primitive2DReference( - new BitmapPrimitive2D( - getDiscreteShadow().getBottomLeft(), - basegfx::tools::createScaleTranslateB2DHomMatrix( - fBigLenX, - fBigLenY, - -fBorderX, - 1.0 - fBorderY))); - - // Left - xRetval[7] = Primitive2DReference( - new BitmapPrimitive2D( - getDiscreteShadow().getLeft(), - basegfx::tools::createScaleTranslateB2DHomMatrix( - fBorderX + fSingleX, - 1.0 - (2.0 * fBorderY) - fSingleY, - -fBorderX, - fBorderY + fSingleY))); - - // put all in object transformation to get to target positions - const Primitive2DReference xTransformed( - new TransformPrimitive2D( - getTransform(), - xRetval)); - - xRetval = Primitive2DSequence(&xTransformed, 1); - } - - return xRetval; - } - - DiscreteShadowPrimitive2D::DiscreteShadowPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const DiscreteShadow& rDiscreteShadow) - : DiscreteMetricDependentPrimitive2D(), - maTransform(rTransform), - maDiscreteShadow(rDiscreteShadow) - { - } - - bool DiscreteShadowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(DiscreteMetricDependentPrimitive2D::operator==(rPrimitive)) - { - const DiscreteShadowPrimitive2D& rCompare = (DiscreteShadowPrimitive2D&)rPrimitive; - - return (getTransform() == rCompare.getTransform() - && getDiscreteShadow() == rCompare.getDiscreteShadow()); - } - - return false; - } - - basegfx::B2DRange DiscreteShadowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - if(getDiscreteShadow().getBitmapEx().IsEmpty()) - { - // no graphics without valid bitmap definition - return basegfx::B2DRange(); - } - else - { - // prepare normal objectrange - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(getTransform()); - - // extract discrete shadow size and grow - const basegfx::B2DVector aScale(rViewInformation.getViewTransformation() * basegfx::B2DVector(1.0, 1.0)); - const sal_Int32 nQuarter((getDiscreteShadow().getBitmapEx().GetSizePixel().Width() - 3) >> 2); - const double fGrowX((1.0 / aScale.getX()) * nQuarter); - const double fGrowY((1.0 / aScale.getY()) * nQuarter); - aRetval.grow(std::max(fGrowX, fGrowY)); - - return aRetval; - } - } - - // provide unique ID - ImplPrimitrive2DIDBlock(DiscreteShadowPrimitive2D, PRIMITIVE2D_ID_DISCRETESHADOWPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof diff --git a/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx b/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx deleted file mode 100644 index e2e2b3bd21..0000000000 --- a/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx +++ /dev/null @@ -1,171 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/embedded3dprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/color/bcolor.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/geometry/viewinformation3d.hxx> -#include <drawinglayer/processor3d/shadow3dextractor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - bool Embedded3DPrimitive2D::impGetShadow3D(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - osl::MutexGuard aGuard( m_aMutex ); - - // create on demand - if(!mbShadow3DChecked && getChildren3D().hasElements()) - { - // create shadow extraction processor - processor3d::Shadow3DExtractingProcessor aShadowProcessor( - getViewInformation3D(), - getObjectTransformation(), - getLightNormal(), - getShadowSlant(), - getScene3DRange()); - - // process local primitives - aShadowProcessor.process(getChildren3D()); - - // fetch result and set checked flag - const_cast< Embedded3DPrimitive2D* >(this)->maShadowPrimitives = aShadowProcessor.getPrimitive2DSequence(); - const_cast< Embedded3DPrimitive2D* >(this)->mbShadow3DChecked = true; - } - - // return if there are shadow primitives - return maShadowPrimitives.hasElements(); - } - - Primitive2DSequence Embedded3DPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - // use info to create a yellow 2d rectangle, similar to empty 3d scenes and/or groups - const basegfx::B2DRange aLocal2DRange(getB2DRange(rViewInformation)); - const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aLocal2DRange)); - const basegfx::BColor aYellow(1.0, 1.0, 0.0); - const Primitive2DReference xRef(new PolygonHairlinePrimitive2D(aOutline, aYellow)); - - return Primitive2DSequence(&xRef, 1L); - } - - Embedded3DPrimitive2D::Embedded3DPrimitive2D( - const primitive3d::Primitive3DSequence& rxChildren3D, - const basegfx::B2DHomMatrix& rObjectTransformation, - const geometry::ViewInformation3D& rViewInformation3D, - const basegfx::B3DVector& rLightNormal, - double fShadowSlant, - const basegfx::B3DRange& rScene3DRange) - : BufferedDecompositionPrimitive2D(), - mxChildren3D(rxChildren3D), - maObjectTransformation(rObjectTransformation), - maViewInformation3D(rViewInformation3D), - maLightNormal(rLightNormal), - mfShadowSlant(fShadowSlant), - maScene3DRange(rScene3DRange), - maShadowPrimitives(), - maB2DRange(), - mbShadow3DChecked(false) - { - maLightNormal.normalize(); - } - - bool Embedded3DPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const Embedded3DPrimitive2D& rCompare = static_cast< const Embedded3DPrimitive2D& >(rPrimitive); - - return (primitive3d::arePrimitive3DSequencesEqual(getChildren3D(), rCompare.getChildren3D()) - && getObjectTransformation() == rCompare.getObjectTransformation() - && getViewInformation3D() == rCompare.getViewInformation3D() - && getLightNormal() == rCompare.getLightNormal() - && getShadowSlant() == rCompare.getShadowSlant() - && getScene3DRange() == rCompare.getScene3DRange()); - } - - return false; - } - - basegfx::B2DRange Embedded3DPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - if(maB2DRange.isEmpty()) - { - // use the 3d transformation stack to create a projection of the 3D range - basegfx::B3DRange a3DRange(primitive3d::getB3DRangeFromPrimitive3DSequence(getChildren3D(), getViewInformation3D())); - a3DRange.transform(getViewInformation3D().getObjectToView()); - - // create 2d range from projected 3d and transform with scene's object transformation - basegfx::B2DRange aNewRange; - aNewRange.expand(basegfx::B2DPoint(a3DRange.getMinX(), a3DRange.getMinY())); - aNewRange.expand(basegfx::B2DPoint(a3DRange.getMaxX(), a3DRange.getMaxY())); - aNewRange.transform(getObjectTransformation()); - - // cehck for 3D shadows and their 2D projections. If those exist, they need to be - // taken into account - if(impGetShadow3D(rViewInformation)) - { - const basegfx::B2DRange aShadow2DRange(getB2DRangeFromPrimitive2DSequence(maShadowPrimitives, rViewInformation)); - - if(!aShadow2DRange.isEmpty()) - { - aNewRange.expand(aShadow2DRange); - } - } - - // assign to buffered value - const_cast< Embedded3DPrimitive2D* >(this)->maB2DRange = aNewRange; - } - - return maB2DRange; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(Embedded3DPrimitive2D, PRIMITIVE2D_ID_EMBEDDED3DPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/epsprimitive2d.cxx b/drawinglayer/source/primitive2d/epsprimitive2d.cxx deleted file mode 100644 index fbd0225961..0000000000 --- a/drawinglayer/source/primitive2d/epsprimitive2d.cxx +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/epsprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/metafileprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence EpsPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence xRetval; - const GDIMetaFile& rSubstituteContent = getMetaFile(); - - if( rSubstituteContent.GetActionSize() ) - { - // the default decomposition will use the Metafile replacement visualisation. - // To really use the Eps data, a renderer has to know and interpret this primitive - // directly. - xRetval.realloc(1); - - xRetval[0] = Primitive2DReference( - new MetafilePrimitive2D( - getEpsTransform(), - rSubstituteContent)); - } - - return xRetval; - } - - EpsPrimitive2D::EpsPrimitive2D( - const basegfx::B2DHomMatrix& rEpsTransform, - const GfxLink& rGfxLink, - const GDIMetaFile& rMetaFile) - : BufferedDecompositionPrimitive2D(), - maEpsTransform(rEpsTransform), - maGfxLink(rGfxLink), - maMetaFile(rMetaFile) - { - } - - bool EpsPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const EpsPrimitive2D& rCompare = (EpsPrimitive2D&)rPrimitive; - - return (getEpsTransform() == rCompare.getEpsTransform() - && getGfxLink().IsEqual(rCompare.getGfxLink()) - && getMetaFile() == rCompare.getMetaFile()); - } - - return false; - } - - basegfx::B2DRange EpsPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // use own implementation to quickly answer the getB2DRange question. - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(getEpsTransform()); - - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(EpsPrimitive2D, PRIMITIVE2D_ID_EPSPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx b/drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx deleted file mode 100644 index 8a4d70b959..0000000000 --- a/drawinglayer/source/primitive2d/fillbitmapprimitive2d.cxx +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/texture/texture.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence FillBitmapPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence aRetval; - - if(!getFillBitmap().isDefault()) - { - const Size aTileSizePixel(getFillBitmap().getBitmapEx().GetSizePixel()); - - // is there a tile with some size at all? - if(aTileSizePixel.getWidth() && aTileSizePixel.getHeight()) - { - if(getFillBitmap().getTiling()) - { - // get object range and create tiling matrices - ::std::vector< basegfx::B2DHomMatrix > aMatrices; - texture::GeoTexSvxTiled aTiling(getFillBitmap().getTopLeft(), getFillBitmap().getSize()); - aTiling.appendTransformations(aMatrices); - - // resize result - aRetval.realloc(aMatrices.size()); - - // create one primitive for each matrix - for(sal_uInt32 a(0L); a < aMatrices.size(); a++) - { - basegfx::B2DHomMatrix aNewMatrix = aMatrices[a]; - aNewMatrix *= getTransformation(); - - // create bitmap primitive and add to result - const Primitive2DReference xRef( - new BitmapPrimitive2D(getFillBitmap().getBitmapEx(), aNewMatrix)); - - aRetval[a] = xRef; - } - } - else - { - // create new object transform - basegfx::B2DHomMatrix aObjectTransform; - aObjectTransform.set(0L, 0L, getFillBitmap().getSize().getX()); - aObjectTransform.set(1L, 1L, getFillBitmap().getSize().getY()); - aObjectTransform.set(0L, 2L, getFillBitmap().getTopLeft().getX()); - aObjectTransform.set(1L, 2L, getFillBitmap().getTopLeft().getY()); - aObjectTransform *= getTransformation(); - - // create bitmap primitive and add exclusive to decomposition (hand over ownership) - const Primitive2DReference xRef( - new BitmapPrimitive2D(getFillBitmap().getBitmapEx(), aObjectTransform)); - - aRetval = Primitive2DSequence(&xRef, 1L); - } - } - } - - return aRetval; - } - - FillBitmapPrimitive2D::FillBitmapPrimitive2D( - const basegfx::B2DHomMatrix& rTransformation, - const attribute::FillBitmapAttribute& rFillBitmap) - : BufferedDecompositionPrimitive2D(), - maTransformation(rTransformation), - maFillBitmap(rFillBitmap) - { - } - - bool FillBitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const FillBitmapPrimitive2D& rCompare = static_cast< const FillBitmapPrimitive2D& >(rPrimitive); - - return (getTransformation() == rCompare.getTransformation() - && getFillBitmap() == rCompare.getFillBitmap()); - } - - return false; - } - - basegfx::B2DRange FillBitmapPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // return range of it - basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon()); - aPolygon.transform(getTransformation()); - return basegfx::tools::getRange(aPolygon); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(FillBitmapPrimitive2D, PRIMITIVE2D_ID_FILLBITMAPPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/fillgradientprimitive2d.cxx b/drawinglayer/source/primitive2d/fillgradientprimitive2d.cxx deleted file mode 100644 index b75f9a6e0d..0000000000 --- a/drawinglayer/source/primitive2d/fillgradientprimitive2d.cxx +++ /dev/null @@ -1,301 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/texture/texture.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - void FillGradientPrimitive2D::generateMatricesAndColors( - std::vector< basegfx::B2DHomMatrix >& rMatrices, - std::vector< basegfx::BColor >& rColors) const - { - rMatrices.clear(); - rColors.clear(); - - // make sure steps is not too high/low - const basegfx::BColor aStart(getFillGradient().getStartColor()); - const basegfx::BColor aEnd(getFillGradient().getEndColor()); - const sal_uInt32 nMaxSteps(sal_uInt32((aStart.getMaximumDistance(aEnd) * 127.5) + 0.5)); - sal_uInt32 nSteps(getFillGradient().getSteps()); - - if(nSteps == 0) - { - nSteps = nMaxSteps; - } - - if(nSteps < 2) - { - nSteps = 2; - } - - if(nSteps > nMaxSteps) - { - nSteps = nMaxSteps; - } - - switch(getFillGradient().getStyle()) - { - case attribute::GRADIENTSTYLE_LINEAR: - { - texture::GeoTexSvxGradientLinear aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getAngle()); - aGradient.appendTransformations(rMatrices); - aGradient.appendColors(rColors); - break; - } - case attribute::GRADIENTSTYLE_AXIAL: - { - texture::GeoTexSvxGradientAxial aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getAngle()); - aGradient.appendTransformations(rMatrices); - aGradient.appendColors(rColors); - break; - } - case attribute::GRADIENTSTYLE_RADIAL: - { - texture::GeoTexSvxGradientRadial aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getOffsetX(), getFillGradient().getOffsetY()); - aGradient.appendTransformations(rMatrices); - aGradient.appendColors(rColors); - break; - } - case attribute::GRADIENTSTYLE_ELLIPTICAL: - { - texture::GeoTexSvxGradientElliptical aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getOffsetX(), getFillGradient().getOffsetY(), getFillGradient().getAngle()); - aGradient.appendTransformations(rMatrices); - aGradient.appendColors(rColors); - break; - } - case attribute::GRADIENTSTYLE_SQUARE: - { - texture::GeoTexSvxGradientSquare aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getOffsetX(), getFillGradient().getOffsetY(), getFillGradient().getAngle()); - aGradient.appendTransformations(rMatrices); - aGradient.appendColors(rColors); - break; - } - case attribute::GRADIENTSTYLE_RECT: - { - texture::GeoTexSvxGradientRect aGradient(getObjectRange(), aStart, aEnd, nSteps, getFillGradient().getBorder(), getFillGradient().getOffsetX(), getFillGradient().getOffsetY(), getFillGradient().getAngle()); - aGradient.appendTransformations(rMatrices); - aGradient.appendColors(rColors); - break; - } - } - } - - Primitive2DSequence FillGradientPrimitive2D::createOverlappingFill( - const std::vector< basegfx::B2DHomMatrix >& rMatrices, - const std::vector< basegfx::BColor >& rColors, - const basegfx::B2DPolygon& rUnitPolygon) const - { - // prepare return value - Primitive2DSequence aRetval(rColors.size() ? rMatrices.size() + 1 : rMatrices.size()); - - // create solid fill with start color - if(rColors.size()) - { - // create primitive - const Primitive2DReference xRef( - new PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon(basegfx::tools::createPolygonFromRect(getObjectRange())), - rColors[0])); - aRetval[0] = xRef; - } - - // create solid fill steps - for(sal_uInt32 a(0); a < rMatrices.size(); a++) - { - // create part polygon - basegfx::B2DPolygon aNewPoly(rUnitPolygon); - aNewPoly.transform(rMatrices[a]); - - // create solid fill - const Primitive2DReference xRef( - new PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon(aNewPoly), - rColors[a + 1])); - aRetval[a + 1] = xRef; - } - - return aRetval; - } - - Primitive2DSequence FillGradientPrimitive2D::createNonOverlappingFill( - const std::vector< basegfx::B2DHomMatrix >& rMatrices, - const std::vector< basegfx::BColor >& rColors, - const basegfx::B2DPolygon& rUnitPolygon) const - { - // prepare return value - Primitive2DSequence aRetval; - const sal_uInt32 nMatricesSize(rMatrices.size()); - - if(nMatricesSize) - { - basegfx::B2DPolygon aOuterPoly(rUnitPolygon); - aOuterPoly.transform(rMatrices[0]); - basegfx::B2DPolyPolygon aCombinedPolyPoly(aOuterPoly); - const sal_uInt32 nEntryCount(rColors.size() ? rMatrices.size() + 1 : rMatrices.size()); - sal_uInt32 nIndex(0); - - aRetval.realloc(nEntryCount); - - if(rColors.size()) - { - basegfx::B2DRange aOuterPolyRange(aOuterPoly.getB2DRange()); - aOuterPolyRange.expand(getObjectRange()); - aCombinedPolyPoly.append(basegfx::tools::createPolygonFromRect(aOuterPolyRange)); - aRetval[nIndex++] = Primitive2DReference(new PolyPolygonColorPrimitive2D(aCombinedPolyPoly, rColors[0])); - aCombinedPolyPoly = basegfx::B2DPolyPolygon(aOuterPoly); - } - - for(sal_uInt32 a(1); a < nMatricesSize - 1; a++) - { - basegfx::B2DPolygon aInnerPoly(rUnitPolygon); - aInnerPoly.transform(rMatrices[a]); - aCombinedPolyPoly.append(aInnerPoly); - aRetval[nIndex++] = Primitive2DReference(new PolyPolygonColorPrimitive2D(aCombinedPolyPoly, rColors[a])); - aCombinedPolyPoly = basegfx::B2DPolyPolygon(aInnerPoly); - } - - if(rColors.size()) - { - aRetval[nIndex] = Primitive2DReference(new PolyPolygonColorPrimitive2D( - aCombinedPolyPoly, rColors[rColors.size() - 1])); - } - } - - return aRetval; - } - - Primitive2DSequence FillGradientPrimitive2D::createFill(bool bOverlapping) const - { - // prepare shape of the Unit Polygon - basegfx::B2DPolygon aUnitPolygon; - - if(attribute::GRADIENTSTYLE_RADIAL == getFillGradient().getStyle() - || attribute::GRADIENTSTYLE_ELLIPTICAL == getFillGradient().getStyle()) - { - aUnitPolygon = basegfx::tools::createPolygonFromCircle( - basegfx::B2DPoint(0,0), 1); - } - else if(attribute::GRADIENTSTYLE_LINEAR == maFillGradient.getStyle()) - { - aUnitPolygon = basegfx::tools::createPolygonFromRect(basegfx::B2DRange(0, 0, 1, 1)); - } - else - { - aUnitPolygon = basegfx::tools::createPolygonFromRect(basegfx::B2DRange(-1, -1, 1, 1)); - } - - // get the transform matrices and colors (where colors - // will have one more entry that matrices) - std::vector< basegfx::B2DHomMatrix > aMatrices; - std::vector< basegfx::BColor > aColors; - generateMatricesAndColors(aMatrices, aColors); - - if(bOverlapping) - { - return createOverlappingFill(aMatrices, aColors, aUnitPolygon); - } - else - { - return createNonOverlappingFill(aMatrices, aColors, aUnitPolygon); - } - } - - Primitive2DSequence FillGradientPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // default creates overlapping fill which works with AntiAliasing and without. - // The non-overlapping version does not create single filled polygons, but - // PolyPolygons where each one describes a 'ring' for the gradient such - // that the rings will not overlap. This is useful fir the old XOR-paint - // 'trick' of VCL which is recorded in Metafiles; so this version may be - // used from the MetafilePrimitive2D in it's decomposition. - - if(!getFillGradient().isDefault()) - { - return createFill(true); - } - else - { - return Primitive2DSequence(); - } - } - - FillGradientPrimitive2D::FillGradientPrimitive2D( - const basegfx::B2DRange& rObjectRange, - const attribute::FillGradientAttribute& rFillGradient) - : BufferedDecompositionPrimitive2D(), - maObjectRange(rObjectRange), - maFillGradient(rFillGradient) - { - } - - bool FillGradientPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const FillGradientPrimitive2D& rCompare = (FillGradientPrimitive2D&)rPrimitive; - - return (getObjectRange() == rCompare.getObjectRange() - && getFillGradient() == rCompare.getFillGradient()); - } - - return false; - } - - basegfx::B2DRange FillGradientPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // return ObjectRange - return getObjectRange(); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(FillGradientPrimitive2D, PRIMITIVE2D_ID_FILLGRADIENTPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx b/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx deleted file mode 100644 index 1e0e9fdff9..0000000000 --- a/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx +++ /dev/null @@ -1,164 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx> -#include <drawinglayer/texture/texture.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence FillHatchPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence aRetval; - if(!getFillHatch().isDefault()) - { - // create hatch - const basegfx::BColor aHatchColor(getFillHatch().getColor()); - const double fAngle(getFillHatch().getAngle()); - ::std::vector< basegfx::B2DHomMatrix > aMatrices; - - // get hatch transformations - switch(getFillHatch().getStyle()) - { - case attribute::HATCHSTYLE_TRIPLE: - { - // rotated 45 degrees - texture::GeoTexSvxHatch aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle - F_PI4); - aHatch.appendTransformations(aMatrices); - - // fall-through by purpose - } - case attribute::HATCHSTYLE_DOUBLE: - { - // rotated 90 degrees - texture::GeoTexSvxHatch aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle - F_PI2); - aHatch.appendTransformations(aMatrices); - - // fall-through by purpose - } - case attribute::HATCHSTYLE_SINGLE: - { - // angle as given - texture::GeoTexSvxHatch aHatch(getObjectRange(), getFillHatch().getDistance(), fAngle); - aHatch.appendTransformations(aMatrices); - } - } - - // prepare return value - const bool bFillBackground(getFillHatch().isFillBackground()); - aRetval.realloc(bFillBackground ? aMatrices.size() + 1L : aMatrices.size()); - - // evtl. create filled background - if(bFillBackground) - { - // create primitive for background - const Primitive2DReference xRef( - new PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon( - basegfx::tools::createPolygonFromRect(getObjectRange())), getBColor())); - aRetval[0] = xRef; - } - - // create primitives - const basegfx::B2DPoint aStart(0.0, 0.0); - const basegfx::B2DPoint aEnd(1.0, 0.0); - - for(sal_uInt32 a(0L); a < aMatrices.size(); a++) - { - const basegfx::B2DHomMatrix& rMatrix = aMatrices[a]; - basegfx::B2DPolygon aNewLine; - - aNewLine.append(rMatrix * aStart); - aNewLine.append(rMatrix * aEnd); - - // create hairline - const Primitive2DReference xRef(new PolygonHairlinePrimitive2D(aNewLine, aHatchColor)); - aRetval[bFillBackground ? (a + 1) : a] = xRef; - } - } - - return aRetval; - } - - FillHatchPrimitive2D::FillHatchPrimitive2D( - const basegfx::B2DRange& rObjectRange, - const basegfx::BColor& rBColor, - const attribute::FillHatchAttribute& rFillHatch) - : BufferedDecompositionPrimitive2D(), - maObjectRange(rObjectRange), - maFillHatch(rFillHatch), - maBColor(rBColor) - { - } - - bool FillHatchPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const FillHatchPrimitive2D& rCompare = (FillHatchPrimitive2D&)rPrimitive; - - return (getObjectRange() == rCompare.getObjectRange() - && getFillHatch() == rCompare.getFillHatch() - && getBColor() == rCompare.getBColor()); - } - - return false; - } - - basegfx::B2DRange FillHatchPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // return ObjectRange - return getObjectRange(); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(FillHatchPrimitive2D, PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/graphicprimitive2d.cxx b/drawinglayer/source/primitive2d/graphicprimitive2d.cxx deleted file mode 100644 index 55ed96d09c..0000000000 --- a/drawinglayer/source/primitive2d/graphicprimitive2d.cxx +++ /dev/null @@ -1,502 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/graphicprimitive2d.hxx> -#include <drawinglayer/animation/animationtiming.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx> -#include <drawinglayer/primitive2d/animatedprimitive2d.hxx> -#include <drawinglayer/primitive2d/metafileprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// -// helper class for animated graphics - -#include <vcl/animate.hxx> -#include <vcl/graph.hxx> -#include <vcl/virdev.hxx> -#include <vcl/svapp.hxx> -#include <vcl/metaact.hxx> - -////////////////////////////////////////////////////////////////////////////// -// includes for testing MetafilePrimitive2D::create2DDecomposition - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - struct animationStep - { - BitmapEx maBitmapEx; - sal_uInt32 mnTime; - }; - - class animatedBitmapExPreparator - { - ::Animation maAnimation; - ::std::vector< animationStep > maSteps; - - sal_uInt32 generateStepTime(sal_uInt32 nIndex) const; - - public: - animatedBitmapExPreparator(const Graphic& rGraphic); - - sal_uInt32 count() const { return maSteps.size(); } - sal_uInt32 loopCount() const { return (sal_uInt32)maAnimation.GetLoopCount(); } - sal_uInt32 stepTime(sal_uInt32 a) const { return maSteps[a].mnTime; } - const BitmapEx& stepBitmapEx(sal_uInt32 a) const { return maSteps[a].maBitmapEx; } - }; - - sal_uInt32 animatedBitmapExPreparator::generateStepTime(sal_uInt32 nIndex) const - { - const AnimationBitmap& rAnimBitmap = maAnimation.Get(sal_uInt16(nIndex)); - sal_uInt32 nWaitTime(rAnimBitmap.nWait * 10); - - // #115934# - // Take care of special value for MultiPage TIFFs. ATM these shall just - // show their first page. Later we will offer some switching when object - // is selected. - if(ANIMATION_TIMEOUT_ON_CLICK == rAnimBitmap.nWait) - { - // ATM the huge value would block the timer, so - // use a long time to show first page (whole day) - nWaitTime = 100 * 60 * 60 * 24; - } - - // Bad trap: There are animated gifs with no set WaitTime (!). - // In that case use a default value. - if(0L == nWaitTime) - { - nWaitTime = 100L; - } - - return nWaitTime; - } - - animatedBitmapExPreparator::animatedBitmapExPreparator(const Graphic& rGraphic) - : maAnimation(rGraphic.GetAnimation()) - { - OSL_ENSURE(GRAPHIC_BITMAP == rGraphic.GetType() && rGraphic.IsAnimated(), "animatedBitmapExPreparator: graphic is not animated (!)"); - - // #128539# secure access to Animation, looks like there exist animated GIFs out there - // with a step count of zero - if(maAnimation.Count()) - { - VirtualDevice aVirtualDevice(*Application::GetDefaultDevice()); - VirtualDevice aVirtualDeviceMask(*Application::GetDefaultDevice(), 1L); - - // Prepare VirtualDevices and their states - aVirtualDevice.EnableMapMode(sal_False); - aVirtualDeviceMask.EnableMapMode(sal_False); - aVirtualDevice.SetOutputSizePixel(maAnimation.GetDisplaySizePixel()); - aVirtualDeviceMask.SetOutputSizePixel(maAnimation.GetDisplaySizePixel()); - aVirtualDevice.Erase(); - aVirtualDeviceMask.Erase(); - - for(sal_uInt16 a(0L); a < maAnimation.Count(); a++) - { - animationStep aNextStep; - aNextStep.mnTime = generateStepTime(a); - - // prepare step - const AnimationBitmap& rAnimBitmap = maAnimation.Get(sal_uInt16(a)); - - switch(rAnimBitmap.eDisposal) - { - case DISPOSE_NOT: - { - aVirtualDevice.DrawBitmapEx(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx); - Bitmap aMask = rAnimBitmap.aBmpEx.GetMask(); - - if(aMask.IsEmpty()) - { - const Point aEmpty; - const Rectangle aRect(aEmpty, aVirtualDeviceMask.GetOutputSizePixel()); - const Wallpaper aWallpaper(COL_BLACK); - aVirtualDeviceMask.DrawWallpaper(aRect, aWallpaper); - } - else - { - BitmapEx aExpandVisibilityMask = BitmapEx(aMask, aMask); - aVirtualDeviceMask.DrawBitmapEx(rAnimBitmap.aPosPix, aExpandVisibilityMask); - } - - break; - } - case DISPOSE_BACK: - { - // #i70772# react on no mask, for primitives, too. - const Bitmap aMask(rAnimBitmap.aBmpEx.GetMask()); - const Bitmap aContent(rAnimBitmap.aBmpEx.GetBitmap()); - - aVirtualDeviceMask.Erase(); - aVirtualDevice.DrawBitmap(rAnimBitmap.aPosPix, aContent); - - if(aMask.IsEmpty()) - { - const Rectangle aRect(rAnimBitmap.aPosPix, aContent.GetSizePixel()); - aVirtualDeviceMask.SetFillColor(COL_BLACK); - aVirtualDeviceMask.SetLineColor(); - aVirtualDeviceMask.DrawRect(aRect); - } - else - { - aVirtualDeviceMask.DrawBitmap(rAnimBitmap.aPosPix, aMask); - } - - break; - } - case DISPOSE_FULL: - { - aVirtualDevice.DrawBitmapEx(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx); - break; - } - case DISPOSE_PREVIOUS : - { - aVirtualDevice.DrawBitmapEx(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx); - aVirtualDeviceMask.DrawBitmap(rAnimBitmap.aPosPix, rAnimBitmap.aBmpEx.GetMask()); - break; - } - } - - // create BitmapEx - Bitmap aMainBitmap = aVirtualDevice.GetBitmap(Point(), aVirtualDevice.GetOutputSizePixel()); - Bitmap aMaskBitmap = aVirtualDeviceMask.GetBitmap(Point(), aVirtualDeviceMask.GetOutputSizePixel()); - aNextStep.maBitmapEx = BitmapEx(aMainBitmap, aMaskBitmap); - - // add to vector - maSteps.push_back(aNextStep); - } - } - } -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence GraphicPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& - ) const - { - Primitive2DSequence aRetval; - - if(255L != getGraphicAttr().GetTransparency()) - { - Primitive2DReference xPrimitive; - - // do not apply mirroring from GraphicAttr to the Metafile by calling - // GetTransformedGraphic, this will try to mirror the Metafile using Scale() - // at the Metafile. This again calls Scale at the single MetaFile actions, - // but this implementation never worked. I reworked that implementations, - // but for security reasons i will try not to use it. - basegfx::B2DHomMatrix aTransform(getTransform()); - - if(getGraphicAttr().IsMirrored()) - { - // content needs mirroring - const bool bHMirr(getGraphicAttr().GetMirrorFlags() & BMP_MIRROR_HORZ); - const bool bVMirr(getGraphicAttr().GetMirrorFlags() & BMP_MIRROR_VERT); - - // mirror by applying negative scale to the unit primitive and - // applying the object transformation on it. - aTransform = basegfx::tools::createScaleB2DHomMatrix( - bHMirr ? -1.0 : 1.0, - bVMirr ? -1.0 : 1.0); - aTransform.translate( - bHMirr ? 1.0 : 0.0, - bVMirr ? 1.0 : 0.0); - aTransform = getTransform() * aTransform; - } - - // Get transformed graphic. Suppress rotation and cropping, only filtering is needed - // here (and may be replaced later on). Cropping is handled below as mask primitive (if set). - // Also need to suppress mirroring, it is part of the transformation now (see above). - GraphicAttr aSuppressGraphicAttr(getGraphicAttr()); - aSuppressGraphicAttr.SetCrop(0, 0, 0, 0); - aSuppressGraphicAttr.SetRotation(0); - aSuppressGraphicAttr.SetMirrorFlags(0); - - const GraphicObject& rGraphicObject = getGraphicObject(); - const Graphic aTransformedGraphic(rGraphicObject.GetTransformedGraphic(&aSuppressGraphicAttr)); - - switch(aTransformedGraphic.GetType()) - { - case GRAPHIC_BITMAP : - { - if(aTransformedGraphic.IsAnimated()) - { - // prepare animation data - animatedBitmapExPreparator aData(aTransformedGraphic); - - if(aData.count()) - { - // create sub-primitives for animated bitmap and the needed animation loop - animation::AnimationEntryLoop aAnimationLoop(aData.loopCount() ? aData.loopCount() : 0xffff); - Primitive2DSequence aBitmapPrimitives(aData.count()); - - for(sal_uInt32 a(0L); a < aData.count(); a++) - { - animation::AnimationEntryFixed aTime((double)aData.stepTime(a), (double)a / (double)aData.count()); - aAnimationLoop.append(aTime); - const Primitive2DReference xRef(new BitmapPrimitive2D(aData.stepBitmapEx(a), aTransform)); - aBitmapPrimitives[a] = xRef; - } - - // prepare animation list - animation::AnimationEntryList aAnimationList; - aAnimationList.append(aAnimationLoop); - - // create and add animated switch primitive - xPrimitive = Primitive2DReference(new AnimatedSwitchPrimitive2D(aAnimationList, aBitmapPrimitives, false)); - } - } - else - { - xPrimitive = Primitive2DReference(new BitmapPrimitive2D(aTransformedGraphic.GetBitmapEx(), aTransform)); - } - - break; - } - - case GRAPHIC_GDIMETAFILE : - { - // create MetafilePrimitive2D - const GDIMetaFile& rMetafile = aTransformedGraphic.GetGDIMetaFile(); - - if( aTransformedGraphic.IsRenderGraphic() ) - { - xPrimitive = Primitive2DReference( - new RenderGraphicPrimitive2D( - static_cast< MetaRenderGraphicAction* >(rMetafile.GetAction(0))->GetRenderGraphic(), - aTransform)); - } - else - { - xPrimitive = Primitive2DReference( - new MetafilePrimitive2D( - aTransform, - rMetafile)); - - // #i100357# find out if clipping is needed for this primitive. Unfortunately, - // there exist Metafiles who's content is bigger than the proposed PrefSize set - // at them. This is an error, but we need to work around this - const Size aMetaFilePrefSize(rMetafile.GetPrefSize()); - const Size aMetaFileRealSize( - const_cast< GDIMetaFile& >(rMetafile).GetBoundRect( - *Application::GetDefaultDevice()).GetSize()); - - if(aMetaFileRealSize.getWidth() > aMetaFilePrefSize.getWidth() - || aMetaFileRealSize.getHeight() > aMetaFilePrefSize.getHeight()) - { - // clipping needed. Embed to MaskPrimitive2D. Create childs and mask polygon - const primitive2d::Primitive2DSequence aChildContent(&xPrimitive, 1); - basegfx::B2DPolygon aMaskPolygon(basegfx::tools::createUnitPolygon()); - aMaskPolygon.transform(aTransform); - - xPrimitive = Primitive2DReference( - new MaskPrimitive2D( - basegfx::B2DPolyPolygon(aMaskPolygon), - aChildContent)); - } - } - - break; - } - - default: - { - // nothing to create - break; - } - } - - if(xPrimitive.is()) - { - // check for cropping - if(getGraphicAttr().IsCropped()) - { - // decompose to get current pos and size - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - getTransform().decompose(aScale, aTranslate, fRotate, fShearX); - - // create ranges. The current object range is just scale and translate - const basegfx::B2DRange aCurrent( - aTranslate.getX(), aTranslate.getY(), - aTranslate.getX() + aScale.getX(), aTranslate.getY() + aScale.getY()); - - // calculate scalings between real image size and logic object size. This - // is necessary since the crop values are relative to original bitmap size - double fFactorX(1.0); - double fFactorY(1.0); - - { - const MapMode aMapMode100thmm(MAP_100TH_MM); - Size aBitmapSize(rGraphicObject.GetPrefSize()); - - // #i95968# better support PrefMapMode; special for MAP_PIXEL was missing - if(MAP_PIXEL == rGraphicObject.GetPrefMapMode().GetMapUnit()) - { - aBitmapSize = Application::GetDefaultDevice()->PixelToLogic(aBitmapSize, aMapMode100thmm); - } - else - { - aBitmapSize = Application::GetDefaultDevice()->LogicToLogic(aBitmapSize, rGraphicObject.GetPrefMapMode(), aMapMode100thmm); - } - - const double fDivX(aBitmapSize.Width() - getGraphicAttr().GetLeftCrop() - getGraphicAttr().GetRightCrop()); - const double fDivY(aBitmapSize.Height() - getGraphicAttr().GetTopCrop() - getGraphicAttr().GetBottomCrop()); - - if(!basegfx::fTools::equalZero(fDivX)) - { - fFactorX = aScale.getX() / fDivX; - } - - if(!basegfx::fTools::equalZero(fDivY)) - { - fFactorY = aScale.getY() / fDivY; - } - } - - // Create cropped range, describes the bounds of the original graphic - basegfx::B2DRange aCropped; - aCropped.expand(aCurrent.getMinimum() - basegfx::B2DPoint(getGraphicAttr().GetLeftCrop() * fFactorX, getGraphicAttr().GetTopCrop() * fFactorY)); - aCropped.expand(aCurrent.getMaximum() + basegfx::B2DPoint(getGraphicAttr().GetRightCrop() * fFactorX, getGraphicAttr().GetBottomCrop() * fFactorY)); - - if(aCropped.isEmpty()) - { - // nothing to add since cropped bitmap is completely empty - // xPrimitive will not be used - } - else - { - // build new object transformation for transform primitive which contains xPrimitive - basegfx::B2DHomMatrix aNewObjectTransform(getTransform()); - aNewObjectTransform.invert(); - aNewObjectTransform = basegfx::tools::createScaleTranslateB2DHomMatrix( - aCropped.getWidth(), aCropped.getHeight(), - aCropped.getMinX() - aCurrent.getMinX(), aCropped.getMinY() - aCurrent.getMinY()) - * aNewObjectTransform; - - // add shear, rotate and translate using combined matrix to speedup - const basegfx::B2DHomMatrix aCombinedMatrix(basegfx::tools::createShearXRotateTranslateB2DHomMatrix( - fShearX, fRotate, aTranslate.getX(), aTranslate.getY())); - aNewObjectTransform = aCombinedMatrix * aNewObjectTransform; - - // prepare TransformPrimitive2D with xPrimitive - const Primitive2DReference xTransformPrimitive(new TransformPrimitive2D(aNewObjectTransform, Primitive2DSequence(&xPrimitive, 1L))); - - if(aCurrent.isInside(aCropped)) - { - // cropped just got smaller, no need to really use a mask. Add to destination directly - appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xTransformPrimitive); - } - else - { - // cropped got bigger, mask it with original object's bounds - basegfx::B2DPolyPolygon aMaskPolyPolygon(basegfx::tools::createUnitPolygon()); - aMaskPolyPolygon.transform(getTransform()); - - // create maskPrimitive with aMaskPolyPolygon and aMaskContentVector - const Primitive2DReference xRefB(new MaskPrimitive2D(aMaskPolyPolygon, Primitive2DSequence(&xTransformPrimitive, 1L))); - appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xRefB); - } - } - } - else - { - // add to decomposition - appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xPrimitive); - } - } - } - - return aRetval; - } - - GraphicPrimitive2D::GraphicPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const GraphicObject& rGraphicObject, - const GraphicAttr& rGraphicAttr) - : BufferedDecompositionPrimitive2D(), - maTransform(rTransform), - maGraphicObject(rGraphicObject), - maGraphicAttr(rGraphicAttr) - { - } - - GraphicPrimitive2D::GraphicPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const GraphicObject& rGraphicObject) - : BufferedDecompositionPrimitive2D(), - maTransform(rTransform), - maGraphicObject(rGraphicObject), - maGraphicAttr() - { - } - - bool GraphicPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const GraphicPrimitive2D& rCompare = (GraphicPrimitive2D&)rPrimitive; - - return (getTransform() == rCompare.getTransform() - && getGraphicObject() == rCompare.getGraphicObject() - && getGraphicAttr() == rCompare.getGraphicAttr()); - } - - return false; - } - - basegfx::B2DRange GraphicPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(getTransform()); - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(GraphicPrimitive2D, PRIMITIVE2D_ID_GRAPHICPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/gridprimitive2d.cxx b/drawinglayer/source/primitive2d/gridprimitive2d.cxx deleted file mode 100644 index 6c0fd1948a..0000000000 --- a/drawinglayer/source/primitive2d/gridprimitive2d.cxx +++ /dev/null @@ -1,323 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/gridprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx> -#include <drawinglayer/primitive2d/markerarrayprimitive2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence GridPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - Primitive2DSequence aRetval; - - if(!rViewInformation.getViewport().isEmpty() && getWidth() > 0.0 && getHeight() > 0.0) - { - // decompose grid matrix to get logic size - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - getTransform().decompose(aScale, aTranslate, fRotate, fShearX); - - // create grid matrix which transforms from scaled logic to view - basegfx::B2DHomMatrix aRST(basegfx::tools::createShearXRotateTranslateB2DHomMatrix( - fShearX, fRotate, aTranslate.getX(), aTranslate.getY())); - aRST *= rViewInformation.getObjectToViewTransformation(); - - // get step widths - double fStepX(getWidth()); - double fStepY(getHeight()); - const double fMinimalStep(10.0); - - // guarantee a step width of 10.0 - if(basegfx::fTools::less(fStepX, fMinimalStep)) - { - fStepX = fMinimalStep; - } - - if(basegfx::fTools::less(fStepY, fMinimalStep)) - { - fStepY = fMinimalStep; - } - - // get relative distances in view coordinates - double fViewStepX((rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(fStepX, 0.0)).getLength()); - double fViewStepY((rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(0.0, fStepY)).getLength()); - double fSmallStepX(1.0), fViewSmallStepX(1.0), fSmallStepY(1.0), fViewSmallStepY(1.0); - sal_uInt32 nSmallStepsX(0L), nSmallStepsY(0L); - - // setup subdivisions - if(getSubdivisionsX()) - { - fSmallStepX = fStepX / getSubdivisionsX(); - fViewSmallStepX = fViewStepX / getSubdivisionsX(); - } - - if(getSubdivisionsY()) - { - fSmallStepY = fStepY / getSubdivisionsY(); - fViewSmallStepY = fViewStepY / getSubdivisionsY(); - } - - // correct step width - while(fViewStepX < getSmallestViewDistance()) - { - fViewStepX *= 2.0; - fStepX *= 2.0; - } - - while(fViewStepY < getSmallestViewDistance()) - { - fViewStepY *= 2.0; - fStepY *= 2.0; - } - - // correct small step width - if(getSubdivisionsX()) - { - while(fViewSmallStepX < getSmallestSubdivisionViewDistance()) - { - fViewSmallStepX *= 2.0; - fSmallStepX *= 2.0; - } - - nSmallStepsX = (sal_uInt32)(fStepX / fSmallStepX); - } - - if(getSubdivisionsY()) - { - while(fViewSmallStepY < getSmallestSubdivisionViewDistance()) - { - fViewSmallStepY *= 2.0; - fSmallStepY *= 2.0; - } - - nSmallStepsY = (sal_uInt32)(fStepY / fSmallStepY); - } - - // prepare point vectors for point and cross markers - std::vector< basegfx::B2DPoint > aPositionsPoint; - std::vector< basegfx::B2DPoint > aPositionsCross; - - for(double fX(0.0); fX < aScale.getX(); fX += fStepX) - { - const bool bXZero(basegfx::fTools::equalZero(fX)); - - for(double fY(0.0); fY < aScale.getY(); fY += fStepY) - { - const bool bYZero(basegfx::fTools::equalZero(fY)); - - if(!bXZero && !bYZero) - { - // get discrete position and test against 3x3 area surrounding it - // since it's a cross - const double fHalfCrossSize(3.0 * 0.5); - const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fX, fY)); - const basegfx::B2DRange aDiscreteRangeCross( - aViewPos.getX() - fHalfCrossSize, aViewPos.getY() - fHalfCrossSize, - aViewPos.getX() + fHalfCrossSize, aViewPos.getY() + fHalfCrossSize); - - if(rViewInformation.getDiscreteViewport().overlaps(aDiscreteRangeCross)) - { - const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos); - aPositionsCross.push_back(aLogicPos); - } - } - - if(getSubdivisionsX() && !bYZero) - { - double fF(fX + fSmallStepX); - - for(sal_uInt32 a(1L); a < nSmallStepsX && fF < aScale.getX(); a++, fF += fSmallStepX) - { - const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fF, fY)); - - if(rViewInformation.getDiscreteViewport().isInside(aViewPos)) - { - const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos); - aPositionsPoint.push_back(aLogicPos); - } - } - } - - if(getSubdivisionsY() && !bXZero) - { - double fF(fY + fSmallStepY); - - for(sal_uInt32 a(1L); a < nSmallStepsY && fF < aScale.getY(); a++, fF += fSmallStepY) - { - const basegfx::B2DPoint aViewPos(aRST * basegfx::B2DPoint(fX, fF)); - - if(rViewInformation.getDiscreteViewport().isInside(aViewPos)) - { - const basegfx::B2DPoint aLogicPos(rViewInformation.getInverseObjectToViewTransformation() * aViewPos); - aPositionsPoint.push_back(aLogicPos); - } - } - } - } - } - - // prepare return value - const sal_uInt32 nCountPoint(aPositionsPoint.size()); - const sal_uInt32 nCountCross(aPositionsCross.size()); - const sal_uInt32 nRetvalCount((nCountPoint ? 1 : 0) + (nCountCross ? 1 : 0)); - sal_uInt32 nInsertCounter(0); - - aRetval.realloc(nRetvalCount); - - // add PointArrayPrimitive2D if point markers were added - if(nCountPoint) - { - aRetval[nInsertCounter++] = Primitive2DReference(new PointArrayPrimitive2D(aPositionsPoint, getBColor())); - } - - // add MarkerArrayPrimitive2D if cross markers were added - if(nCountCross) - { - if(!getSubdivisionsX() && !getSubdivisionsY()) - { - // no subdivisions, so fall back to points at grid positions, no need to - // visualize a difference between divisions and sub-divisions - aRetval[nInsertCounter++] = Primitive2DReference(new PointArrayPrimitive2D(aPositionsCross, getBColor())); - } - else - { - aRetval[nInsertCounter++] = Primitive2DReference(new MarkerArrayPrimitive2D(aPositionsCross, getCrossMarker())); - } - } - } - - return aRetval; - } - - GridPrimitive2D::GridPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - double fWidth, - double fHeight, - double fSmallestViewDistance, - double fSmallestSubdivisionViewDistance, - sal_uInt32 nSubdivisionsX, - sal_uInt32 nSubdivisionsY, - const basegfx::BColor& rBColor, - const BitmapEx& rCrossMarker) - : BufferedDecompositionPrimitive2D(), - maTransform(rTransform), - mfWidth(fWidth), - mfHeight(fHeight), - mfSmallestViewDistance(fSmallestViewDistance), - mfSmallestSubdivisionViewDistance(fSmallestSubdivisionViewDistance), - mnSubdivisionsX(nSubdivisionsX), - mnSubdivisionsY(nSubdivisionsY), - maBColor(rBColor), - maCrossMarker(rCrossMarker), - maLastObjectToViewTransformation(), - maLastViewport() - { - } - - bool GridPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const GridPrimitive2D& rCompare = (GridPrimitive2D&)rPrimitive; - - return (getTransform() == rCompare.getTransform() - && getWidth() == rCompare.getWidth() - && getHeight() == rCompare.getHeight() - && getSmallestViewDistance() == rCompare.getSmallestViewDistance() - && getSmallestSubdivisionViewDistance() == rCompare.getSmallestSubdivisionViewDistance() - && getSubdivisionsX() == rCompare.getSubdivisionsX() - && getSubdivisionsY() == rCompare.getSubdivisionsY() - && getBColor() == rCompare.getBColor() - && getCrossMarker() == rCompare.getCrossMarker()); - } - - return false; - } - - basegfx::B2DRange GridPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - // get object's range - basegfx::B2DRange aUnitRange(0.0, 0.0, 1.0, 1.0); - aUnitRange.transform(getTransform()); - - // intersect with visible part - aUnitRange.intersect(rViewInformation.getViewport()); - - return aUnitRange; - } - - Primitive2DSequence GridPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - if(getBuffered2DDecomposition().hasElements()) - { - if(maLastViewport != rViewInformation.getViewport() || maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation()) - { - // conditions of last local decomposition have changed, delete - const_cast< GridPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember ViewRange and ViewTransformation - const_cast< GridPrimitive2D* >(this)->maLastObjectToViewTransformation = rViewInformation.getObjectToViewTransformation(); - const_cast< GridPrimitive2D* >(this)->maLastViewport = rViewInformation.getViewport(); - } - - // use parent implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(GridPrimitive2D, PRIMITIVE2D_ID_GRIDPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/groupprimitive2d.cxx b/drawinglayer/source/primitive2d/groupprimitive2d.cxx deleted file mode 100644 index abb6989a57..0000000000 --- a/drawinglayer/source/primitive2d/groupprimitive2d.cxx +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - GroupPrimitive2D::GroupPrimitive2D( const Primitive2DSequence& rChildren ) - : BasePrimitive2D(), - maChildren(rChildren) - { - } - - /** The compare opertator uses the Sequence::==operator, so only checking if - the rererences are equal. All non-equal references are interpreted as - non-equal. - */ - bool GroupPrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const GroupPrimitive2D& rCompare = static_cast< const GroupPrimitive2D& >(rPrimitive); - - return (arePrimitive2DSequencesEqual(getChildren(), rCompare.getChildren())); - } - - return false; - } - - /// default: just return children, so all renderers not supporting group will use it's content - Primitive2DSequence GroupPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - return getChildren(); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(GroupPrimitive2D, PRIMITIVE2D_ID_GROUPPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/helplineprimitive2d.cxx b/drawinglayer/source/primitive2d/helplineprimitive2d.cxx deleted file mode 100644 index 45559b7c1b..0000000000 --- a/drawinglayer/source/primitive2d/helplineprimitive2d.cxx +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/helplineprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygonclipper.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence HelplinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - std::vector< BasePrimitive2D* > aTempPrimitiveTarget; - - if(!rViewInformation.getViewport().isEmpty() && !getDirection().equalZero()) - { - // position to view coordinates, DashLen and DashLen in logic - const basegfx::B2DPoint aViewPosition(rViewInformation.getObjectToViewTransformation() * getPosition()); - - switch(getStyle()) - { - default : // HELPLINESTYLE2D_POINT - { - const double fViewFixValue(15.0); - basegfx::B2DVector aNormalizedDirection(getDirection()); - aNormalizedDirection.normalize(); - aNormalizedDirection *= fViewFixValue; - const basegfx::B2DPoint aStartA(aViewPosition - aNormalizedDirection); - const basegfx::B2DPoint aEndA(aViewPosition + aNormalizedDirection); - basegfx::B2DPolygon aLineA; - aLineA.append(aStartA); - aLineA.append(aEndA); - aLineA.transform(rViewInformation.getInverseObjectToViewTransformation()); - PolygonMarkerPrimitive2D* pNewA = new PolygonMarkerPrimitive2D(aLineA, getRGBColA(), getRGBColB(), getDiscreteDashLength()); - aTempPrimitiveTarget.push_back(pNewA); - - const basegfx::B2DVector aPerpendicularNormalizedDirection(basegfx::getPerpendicular(aNormalizedDirection)); - const basegfx::B2DPoint aStartB(aViewPosition - aPerpendicularNormalizedDirection); - const basegfx::B2DPoint aEndB(aViewPosition + aPerpendicularNormalizedDirection); - basegfx::B2DPolygon aLineB; - aLineB.append(aStartB); - aLineB.append(aEndB); - aLineB.transform(rViewInformation.getInverseObjectToViewTransformation()); - PolygonMarkerPrimitive2D* pNewB = new PolygonMarkerPrimitive2D(aLineB, getRGBColA(), getRGBColB(), getDiscreteDashLength()); - aTempPrimitiveTarget.push_back(pNewB); - - break; - } - case HELPLINESTYLE2D_LINE : - { - basegfx::B2DPolygon aLine; - - if(basegfx::areParallel(getDirection(), basegfx::B2DVector(1.0, 0.0))) - { - // parallel to X-Axis, get cuts with Y-Axes - const double fCutA((rViewInformation.getDiscreteViewport().getMinX() - aViewPosition.getX()) / getDirection().getX()); - const double fCutB((rViewInformation.getDiscreteViewport().getMaxX() - aViewPosition.getX()) / getDirection().getX()); - const basegfx::B2DPoint aPosA(aViewPosition + (fCutA * getDirection())); - const basegfx::B2DPoint aPosB(aViewPosition + (fCutB * getDirection())); - const bool bBothLeft(aPosA.getX() < rViewInformation.getDiscreteViewport().getMinX() && aPosB.getX() < rViewInformation.getDiscreteViewport().getMinX()); - const bool bBothRight(aPosA.getX() > rViewInformation.getDiscreteViewport().getMaxX() && aPosB.getX() < rViewInformation.getDiscreteViewport().getMaxX()); - - if(!bBothLeft && !bBothRight) - { - aLine.append(aPosA); - aLine.append(aPosB); - } - } - else - { - // get cuts with X-Axes - const double fCutA((rViewInformation.getDiscreteViewport().getMinY() - aViewPosition.getY()) / getDirection().getY()); - const double fCutB((rViewInformation.getDiscreteViewport().getMaxY() - aViewPosition.getY()) / getDirection().getY()); - const basegfx::B2DPoint aPosA(aViewPosition + (fCutA * getDirection())); - const basegfx::B2DPoint aPosB(aViewPosition + (fCutB * getDirection())); - const bool bBothAbove(aPosA.getY() < rViewInformation.getDiscreteViewport().getMinY() && aPosB.getY() < rViewInformation.getDiscreteViewport().getMinY()); - const bool bBothBelow(aPosA.getY() > rViewInformation.getDiscreteViewport().getMaxY() && aPosB.getY() < rViewInformation.getDiscreteViewport().getMaxY()); - - if(!bBothAbove && !bBothBelow) - { - aLine.append(aPosA); - aLine.append(aPosB); - } - } - - if(aLine.count()) - { - // clip against visible area - const basegfx::B2DPolyPolygon aResult(basegfx::tools::clipPolygonOnRange(aLine, rViewInformation.getDiscreteViewport(), true, true)); - - for(sal_uInt32 a(0L); a < aResult.count(); a++) - { - basegfx::B2DPolygon aPart(aResult.getB2DPolygon(a)); - aPart.transform(rViewInformation.getInverseObjectToViewTransformation()); - PolygonMarkerPrimitive2D* pNew = new PolygonMarkerPrimitive2D(aPart, getRGBColA(), getRGBColB(), getDiscreteDashLength()); - aTempPrimitiveTarget.push_back(pNew); - } - } - - break; - } - } - } - - // prepare return value - Primitive2DSequence aRetval(aTempPrimitiveTarget.size()); - - for(sal_uInt32 a(0L); a < aTempPrimitiveTarget.size(); a++) - { - const Primitive2DReference xRef(aTempPrimitiveTarget[a]); - aRetval[a] = xRef; - } - - return aRetval; - } - - HelplinePrimitive2D::HelplinePrimitive2D( - const basegfx::B2DPoint& rPosition, - const basegfx::B2DVector& rDirection, - HelplineStyle2D eStyle, - const basegfx::BColor& rRGBColA, - const basegfx::BColor& rRGBColB, - double fDiscreteDashLength) - : BufferedDecompositionPrimitive2D(), - maPosition(rPosition), - maDirection(rDirection), - meStyle(eStyle), - maRGBColA(rRGBColA), - maRGBColB(rRGBColB), - mfDiscreteDashLength(fDiscreteDashLength), - maLastObjectToViewTransformation(), - maLastViewport() - { - } - - bool HelplinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const HelplinePrimitive2D& rCompare = (HelplinePrimitive2D&)rPrimitive; - - return (getPosition() == rCompare.getPosition() - && getDirection() == rCompare.getDirection() - && getStyle() == rCompare.getStyle() - && getRGBColA() == rCompare.getRGBColA() - && getRGBColB() == rCompare.getRGBColB() - && getDiscreteDashLength() == rCompare.getDiscreteDashLength()); - } - - return false; - } - - Primitive2DSequence HelplinePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - if(getBuffered2DDecomposition().hasElements()) - { - if(maLastViewport != rViewInformation.getViewport() || maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation()) - { - // conditions of last local decomposition have changed, delete - const_cast< HelplinePrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember ViewRange and ViewTransformation - const_cast< HelplinePrimitive2D* >(this)->maLastObjectToViewTransformation = rViewInformation.getObjectToViewTransformation(); - const_cast< HelplinePrimitive2D* >(this)->maLastViewport = rViewInformation.getViewport(); - } - - // use parent implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(HelplinePrimitive2D, PRIMITIVE2D_ID_HELPLINEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/hiddengeometryprimitive2d.cxx b/drawinglayer/source/primitive2d/hiddengeometryprimitive2d.cxx deleted file mode 100644 index ab9e56b2e1..0000000000 --- a/drawinglayer/source/primitive2d/hiddengeometryprimitive2d.cxx +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - HiddenGeometryPrimitive2D::HiddenGeometryPrimitive2D( - const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren) - { - } - - basegfx::B2DRange HiddenGeometryPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - return getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation); - } - - Primitive2DSequence HiddenGeometryPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - return Primitive2DSequence(); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(HiddenGeometryPrimitive2D, PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/invertprimitive2d.cxx b/drawinglayer/source/primitive2d/invertprimitive2d.cxx deleted file mode 100644 index dc1f10fbc0..0000000000 --- a/drawinglayer/source/primitive2d/invertprimitive2d.cxx +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/invertprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - InvertPrimitive2D::InvertPrimitive2D( - const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren) - { - } - - // provide unique ID - ImplPrimitrive2DIDBlock(InvertPrimitive2D, PRIMITIVE2D_ID_INVERTPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/markerarrayprimitive2d.cxx b/drawinglayer/source/primitive2d/markerarrayprimitive2d.cxx deleted file mode 100644 index 5aa3beebd0..0000000000 --- a/drawinglayer/source/primitive2d/markerarrayprimitive2d.cxx +++ /dev/null @@ -1,160 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/markerarrayprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence MarkerArrayPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - Primitive2DSequence xRetval; - const std::vector< basegfx::B2DPoint >& rPositions = getPositions(); - const sal_uInt32 nMarkerCount(rPositions.size()); - - if(nMarkerCount && !getMarker().IsEmpty()) - { - // get pixel size - Size aBitmapSize(getMarker().GetSizePixel()); - - if(aBitmapSize.Width() && aBitmapSize.Height()) - { - // get logic half pixel size - basegfx::B2DVector aLogicHalfSize(rViewInformation.getInverseObjectToViewTransformation() * - basegfx::B2DVector(aBitmapSize.getWidth() - 1.0, aBitmapSize.getHeight() - 1.0)); - - // use half size for expand - aLogicHalfSize *= 0.5; - - // number of primitives is known; realloc accordingly - xRetval.realloc(nMarkerCount); - - for(sal_uInt32 a(0); a < nMarkerCount; a++) - { - const basegfx::B2DPoint& rPosition(rPositions[a]); - const basegfx::B2DRange aRange(rPosition - aLogicHalfSize, rPosition + aLogicHalfSize); - basegfx::B2DHomMatrix aTransform; - - aTransform.set(0, 0, aRange.getWidth()); - aTransform.set(1, 1, aRange.getHeight()); - aTransform.set(0, 2, aRange.getMinX()); - aTransform.set(1, 2, aRange.getMinY()); - - xRetval[a] = Primitive2DReference(new BitmapPrimitive2D(getMarker(), aTransform)); - } - } - } - - return xRetval; - } - - MarkerArrayPrimitive2D::MarkerArrayPrimitive2D( - const std::vector< basegfx::B2DPoint >& rPositions, - const BitmapEx& rMarker) - : BufferedDecompositionPrimitive2D(), - maPositions(rPositions), - maMarker(rMarker) - { - } - - bool MarkerArrayPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const MarkerArrayPrimitive2D& rCompare = (MarkerArrayPrimitive2D&)rPrimitive; - - return (getPositions() == rCompare.getPositions() - && getMarker() == rCompare.getMarker()); - } - - return false; - } - - basegfx::B2DRange MarkerArrayPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - basegfx::B2DRange aRetval; - - if(getPositions().size()) - { - // get the basic range from the position vector - for(std::vector< basegfx::B2DPoint >::const_iterator aIter(getPositions().begin()); aIter != getPositions().end(); aIter++) - { - aRetval.expand(*aIter); - } - - if(!getMarker().IsEmpty()) - { - // get pixel size - const Size aBitmapSize(getMarker().GetSizePixel()); - - if(aBitmapSize.Width() && aBitmapSize.Height()) - { - // get logic half size - basegfx::B2DVector aLogicHalfSize(rViewInformation.getInverseObjectToViewTransformation() * - basegfx::B2DVector(aBitmapSize.getWidth(), aBitmapSize.getHeight())); - - // use half size for expand - aLogicHalfSize *= 0.5; - - // apply aLogicHalfSize - aRetval.expand(aRetval.getMinimum() - aLogicHalfSize); - aRetval.expand(aRetval.getMaximum() + aLogicHalfSize); - } - } - } - - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(MarkerArrayPrimitive2D, PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/maskprimitive2d.cxx b/drawinglayer/source/primitive2d/maskprimitive2d.cxx deleted file mode 100644 index ab1d36f3cc..0000000000 --- a/drawinglayer/source/primitive2d/maskprimitive2d.cxx +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - MaskPrimitive2D::MaskPrimitive2D( - const basegfx::B2DPolyPolygon& rMask, - const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren), - maMask(rMask) - { - } - - bool MaskPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(GroupPrimitive2D::operator==(rPrimitive)) - { - const MaskPrimitive2D& rCompare = static_cast< const MaskPrimitive2D& >(rPrimitive); - - return (getMask() == rCompare.getMask()); - } - - return false; - } - - basegfx::B2DRange MaskPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - return getMask().getB2DRange(); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(MaskPrimitive2D, PRIMITIVE2D_ID_MASKPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/mediaprimitive2d.cxx b/drawinglayer/source/primitive2d/mediaprimitive2d.cxx deleted file mode 100644 index 4c69061e81..0000000000 --- a/drawinglayer/source/primitive2d/mediaprimitive2d.cxx +++ /dev/null @@ -1,166 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/mediaprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <avmedia/mediawindow.hxx> -#include <svtools/grfmgr.hxx> -#include <drawinglayer/primitive2d/graphicprimitive2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence MediaPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - Primitive2DSequence xRetval(1); - - // create background object - basegfx::B2DPolygon aBackgroundPolygon(basegfx::tools::createUnitPolygon()); - aBackgroundPolygon.transform(getTransform()); - const Primitive2DReference xRefBackground( - new PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon(aBackgroundPolygon), - getBackgroundColor())); - xRetval[0] = xRefBackground; - - // try to get graphic snapshot - const Graphic aGraphic(avmedia::MediaWindow::grabFrame(getURL(), true)); - - if(GRAPHIC_BITMAP == aGraphic.GetType() || GRAPHIC_GDIMETAFILE == aGraphic.GetType()) - { - const GraphicObject aGraphicObject(aGraphic); - const GraphicAttr aGraphicAttr; - xRetval.realloc(2); - xRetval[0] = xRefBackground; - xRetval[1] = Primitive2DReference(new GraphicPrimitive2D(getTransform(), aGraphicObject, aGraphicAttr)); - } - - if(getDiscreteBorder()) - { - const basegfx::B2DVector aDiscreteInLogic(rViewInformation.getInverseObjectToViewTransformation() * - basegfx::B2DVector((double)getDiscreteBorder(), (double)getDiscreteBorder())); - const double fDiscreteSize(aDiscreteInLogic.getX() + aDiscreteInLogic.getY()); - - basegfx::B2DRange aSourceRange(0.0, 0.0, 1.0, 1.0); - aSourceRange.transform(getTransform()); - - basegfx::B2DRange aDestRange(aSourceRange); - aDestRange.grow(-0.5 * fDiscreteSize); - - if(basegfx::fTools::equalZero(aDestRange.getWidth()) || basegfx::fTools::equalZero(aDestRange.getHeight())) - { - // shrunk primitive has no content (zero size in X or Y), nothing to display. Still create - // invisible content for HitTest and BoundRect - const Primitive2DReference xHiddenLines(new HiddenGeometryPrimitive2D(xRetval)); - - xRetval = Primitive2DSequence(&xHiddenLines, 1); - } - else - { - // create transformation matrix from original range to shrunk range - basegfx::B2DHomMatrix aTransform; - aTransform.translate(-aSourceRange.getMinX(), -aSourceRange.getMinY()); - aTransform.scale(aDestRange.getWidth() / aSourceRange.getWidth(), aDestRange.getHeight() / aSourceRange.getHeight()); - aTransform.translate(aDestRange.getMinX(), aDestRange.getMinY()); - - // add transform primitive - const Primitive2DReference aScaled(new TransformPrimitive2D(aTransform, xRetval)); - xRetval = Primitive2DSequence(&aScaled, 1L); - } - } - - return xRetval; - } - - MediaPrimitive2D::MediaPrimitive2D( - const basegfx::B2DHomMatrix& rTransform, - const rtl::OUString& rURL, - const basegfx::BColor& rBackgroundColor, - sal_uInt32 nDiscreteBorder) - : BufferedDecompositionPrimitive2D(), - maTransform(rTransform), - maURL(rURL), - maBackgroundColor(rBackgroundColor), - mnDiscreteBorder(nDiscreteBorder) - { - } - - bool MediaPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const MediaPrimitive2D& rCompare = (MediaPrimitive2D&)rPrimitive; - - return (getTransform() == rCompare.getTransform() - && getURL() == rCompare.getURL() - && getBackgroundColor() == rCompare.getBackgroundColor() - && getDiscreteBorder() == rCompare.getDiscreteBorder()); - } - - return false; - } - - basegfx::B2DRange MediaPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(getTransform()); - - if(getDiscreteBorder()) - { - const basegfx::B2DVector aDiscreteInLogic(rViewInformation.getInverseObjectToViewTransformation() * - basegfx::B2DVector((double)getDiscreteBorder(), (double)getDiscreteBorder())); - const double fDiscreteSize(aDiscreteInLogic.getX() + aDiscreteInLogic.getY()); - - aRetval.grow(-0.5 * fDiscreteSize); - } - - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(MediaPrimitive2D, PRIMITIVE2D_ID_MEDIAPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/metafileprimitive2d.cxx b/drawinglayer/source/primitive2d/metafileprimitive2d.cxx deleted file mode 100644 index e7795981ea..0000000000 --- a/drawinglayer/source/primitive2d/metafileprimitive2d.cxx +++ /dev/null @@ -1,3287 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/metafileprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <basegfx/color/bcolor.hxx> -#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx> -#include <vcl/lineinfo.hxx> -#include <drawinglayer/attribute/lineattribute.hxx> -#include <drawinglayer/attribute/strokeattribute.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <vcl/metaact.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/discretebitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <vcl/salbtype.hxx> -#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx> -#include <vcl/svapp.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygonclipper.hxx> -#include <drawinglayer/primitive2d/invertprimitive2d.hxx> -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/wallpaperprimitive2d.hxx> -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <drawinglayer/primitive2d/textlayoutdevice.hxx> -#include <drawinglayer/primitive2d/textdecoratedprimitive2d.hxx> -#include <i18npool/mslangid.hxx> -#include <drawinglayer/primitive2d/textlineprimitive2d.hxx> -#include <drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx> -#include <drawinglayer/primitive2d/epsprimitive2d.hxx> -#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx> -#include <numeric> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - /** helper class for graphic context - - This class allows to hold a complete status of classic - VCL OutputDevice stati. This data is needed for correct - interpretation of the MetaFile action flow. - */ - class PropertyHolder - { - private: - /// current transformation (aka MapMode) - basegfx::B2DHomMatrix maTransformation; - MapUnit maMapUnit; - - /// current colors - basegfx::BColor maLineColor; - basegfx::BColor maFillColor; - basegfx::BColor maTextColor; - basegfx::BColor maTextFillColor; - basegfx::BColor maTextLineColor; - basegfx::BColor maOverlineColor; - - /// clipping - basegfx::B2DPolyPolygon maClipPolyPoygon; - - /// font, etc. - Font maFont; - RasterOp maRasterOp; - sal_uInt32 mnLayoutMode; - LanguageType maLanguageType; - sal_uInt16 mnPushFlags; - - /// bitfield - /// contains all active markers - bool mbLineColor : 1; - bool mbFillColor : 1; - bool mbTextColor : 1; - bool mbTextFillColor : 1; - bool mbTextLineColor : 1; - bool mbOverlineColor : 1; - bool mbClipPolyPolygonActive : 1; - - public: - PropertyHolder() - : maTransformation(), - maMapUnit(MAP_100TH_MM), - maLineColor(), - maFillColor(), - maTextColor(COL_BLACK), - maTextFillColor(), - maTextLineColor(), - maOverlineColor(), - maClipPolyPoygon(), - maFont(), - maRasterOp(ROP_OVERPAINT), - mnLayoutMode(0), - maLanguageType(0), - mnPushFlags(0), - mbLineColor(false), - mbFillColor(false), - mbTextColor(true), - mbTextFillColor(false), - mbTextLineColor(false), - mbOverlineColor(false), - mbClipPolyPolygonActive(false) - { - } - - ~PropertyHolder() - { - } - - /// read/write accesses - const basegfx::B2DHomMatrix& getTransformation() const { return maTransformation; } - void setTransformation(const basegfx::B2DHomMatrix& rNew) { if(rNew != maTransformation) maTransformation = rNew; } - - MapUnit getMapUnit() const { return maMapUnit; } - void setMapUnit(MapUnit eNew) { if(eNew != maMapUnit) maMapUnit = eNew; } - - const basegfx::BColor& getLineColor() const { return maLineColor; } - void setLineColor(const basegfx::BColor& rNew) { if(rNew != maLineColor) maLineColor = rNew; } - bool getLineColorActive() const { return mbLineColor; } - void setLineColorActive(bool bNew) { if(bNew != mbLineColor) mbLineColor = bNew; } - - const basegfx::BColor& getFillColor() const { return maFillColor; } - void setFillColor(const basegfx::BColor& rNew) { if(rNew != maFillColor) maFillColor = rNew; } - bool getFillColorActive() const { return mbFillColor; } - void setFillColorActive(bool bNew) { if(bNew != mbFillColor) mbFillColor = bNew; } - - const basegfx::BColor& getTextColor() const { return maTextColor; } - void setTextColor(const basegfx::BColor& rNew) { if(rNew != maTextColor) maTextColor = rNew; } - bool getTextColorActive() const { return mbTextColor; } - void setTextColorActive(bool bNew) { if(bNew != mbTextColor) mbTextColor = bNew; } - - const basegfx::BColor& getTextFillColor() const { return maTextFillColor; } - void setTextFillColor(const basegfx::BColor& rNew) { if(rNew != maTextFillColor) maTextFillColor = rNew; } - bool getTextFillColorActive() const { return mbTextFillColor; } - void setTextFillColorActive(bool bNew) { if(bNew != mbTextFillColor) mbTextFillColor = bNew; } - - const basegfx::BColor& getTextLineColor() const { return maTextLineColor; } - void setTextLineColor(const basegfx::BColor& rNew) { if(rNew != maTextLineColor) maTextLineColor = rNew; } - bool getTextLineColorActive() const { return mbTextLineColor; } - void setTextLineColorActive(bool bNew) { if(bNew != mbTextLineColor) mbTextLineColor = bNew; } - - const basegfx::BColor& getOverlineColor() const { return maOverlineColor; } - void setOverlineColor(const basegfx::BColor& rNew) { if(rNew != maOverlineColor) maOverlineColor = rNew; } - bool getOverlineColorActive() const { return mbOverlineColor; } - void setOverlineColorActive(bool bNew) { if(bNew != mbOverlineColor) mbOverlineColor = bNew; } - - const basegfx::B2DPolyPolygon& getClipPolyPolygon() const { return maClipPolyPoygon; } - void setClipPolyPolygon(const basegfx::B2DPolyPolygon& rNew) { if(rNew != maClipPolyPoygon) maClipPolyPoygon = rNew; } - bool getClipPolyPolygonActive() const { return mbClipPolyPolygonActive; } - void setClipPolyPolygonActive(bool bNew) { if(bNew != mbClipPolyPolygonActive) mbClipPolyPolygonActive = bNew; } - - const Font& getFont() const { return maFont; } - void setFont(const Font& rFont) { if(rFont != maFont) maFont = rFont; } - - const RasterOp& getRasterOp() const { return maRasterOp; } - void setRasterOp(const RasterOp& rRasterOp) { if(rRasterOp != maRasterOp) maRasterOp = rRasterOp; } - bool isRasterOpInvert() const { return (ROP_XOR == maRasterOp || ROP_INVERT == maRasterOp); } - bool isRasterOpForceBlack() const { return ROP_0 == maRasterOp; } - bool isRasterOpActive() const { return isRasterOpInvert() || isRasterOpForceBlack(); } - - sal_uInt32 getLayoutMode() const { return mnLayoutMode; } - void setLayoutMode(sal_uInt32 nNew) { if(nNew != mnLayoutMode) mnLayoutMode = nNew; } - - LanguageType getLanguageType() const { return maLanguageType; } - void setLanguageType(LanguageType aNew) { if(aNew != maLanguageType) maLanguageType = aNew; } - - sal_uInt16 getPushFlags() const { return mnPushFlags; } - void setPushFlags(sal_uInt16 nNew) { if(nNew != mnPushFlags) mnPushFlags = nNew; } - - bool getLineOrFillActive() const { return (mbLineColor || mbFillColor); } - }; -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - /** stack for properites - - This class builds a stack based on the PropertyHolder - class. It encapsulates the pointer/new/delete usage to - make it safe and implements the push/pop as needed by a - VCL Metafile interpreter. The critical part here are the - flag values VCL OutputDevice uses here; not all stuff is - pushed and thus needs to be copied at pop. - */ - class PropertyHolders - { - private: - std::vector< PropertyHolder* > maPropertyHolders; - - public: - PropertyHolders() - { - maPropertyHolders.push_back(new PropertyHolder()); - } - - sal_uInt32 size() const - { - return maPropertyHolders.size(); - } - - void PushDefault() - { - PropertyHolder* pNew = new PropertyHolder(); - maPropertyHolders.push_back(pNew); - } - - void Push(sal_uInt16 nPushFlags) - { - if(nPushFlags) - { - OSL_ENSURE(maPropertyHolders.size(), "PropertyHolders: PUSH with no property holders (!)"); - if ( !maPropertyHolders.empty() ) - { - PropertyHolder* pNew = new PropertyHolder(*maPropertyHolders.back()); - pNew->setPushFlags(nPushFlags); - maPropertyHolders.push_back(pNew); - } - } - } - - void Pop() - { - OSL_ENSURE(maPropertyHolders.size(), "PropertyHolders: POP with no property holders (!)"); - const sal_uInt32 nSize(maPropertyHolders.size()); - - if(nSize) - { - const PropertyHolder* pTip = maPropertyHolders.back(); - const sal_uInt16 nPushFlags(pTip->getPushFlags()); - - if(nPushFlags) - { - if(nSize > 1) - { - // copy back content for all non-set flags - PropertyHolder* pLast = maPropertyHolders[nSize - 2]; - - if(PUSH_ALL != nPushFlags) - { - if(!(nPushFlags & PUSH_LINECOLOR )) - { - pLast->setLineColor(pTip->getLineColor()); - pLast->setLineColorActive(pTip->getLineColorActive()); - } - if(!(nPushFlags & PUSH_FILLCOLOR )) - { - pLast->setFillColor(pTip->getFillColor()); - pLast->setFillColorActive(pTip->getFillColorActive()); - } - if(!(nPushFlags & PUSH_FONT )) - { - pLast->setFont(pTip->getFont()); - } - if(!(nPushFlags & PUSH_TEXTCOLOR )) - { - pLast->setTextColor(pTip->getTextColor()); - pLast->setTextColorActive(pTip->getTextColorActive()); - } - if(!(nPushFlags & PUSH_MAPMODE )) - { - pLast->setTransformation(pTip->getTransformation()); - pLast->setMapUnit(pTip->getMapUnit()); - } - if(!(nPushFlags & PUSH_CLIPREGION )) - { - pLast->setClipPolyPolygon(pTip->getClipPolyPolygon()); - pLast->setClipPolyPolygonActive(pTip->getClipPolyPolygonActive()); - } - if(!(nPushFlags & PUSH_RASTEROP )) - { - pLast->setRasterOp(pTip->getRasterOp()); - } - if(!(nPushFlags & PUSH_TEXTFILLCOLOR )) - { - pLast->setTextFillColor(pTip->getTextFillColor()); - pLast->setTextFillColorActive(pTip->getTextFillColorActive()); - } - if(!(nPushFlags & PUSH_TEXTALIGN )) - { - if(pLast->getFont().GetAlign() != pTip->getFont().GetAlign()) - { - Font aFont(pLast->getFont()); - aFont.SetAlign(pTip->getFont().GetAlign()); - pLast->setFont(aFont); - } - } - if(!(nPushFlags & PUSH_REFPOINT )) - { - // not supported - } - if(!(nPushFlags & PUSH_TEXTLINECOLOR )) - { - pLast->setTextLineColor(pTip->getTextLineColor()); - pLast->setTextLineColorActive(pTip->getTextLineColorActive()); - } - if(!(nPushFlags & PUSH_TEXTLAYOUTMODE )) - { - pLast->setLayoutMode(pTip->getLayoutMode()); - } - if(!(nPushFlags & PUSH_TEXTLANGUAGE )) - { - pLast->setLanguageType(pTip->getLanguageType()); - } - if(!(nPushFlags & PUSH_OVERLINECOLOR )) - { - pLast->setOverlineColor(pTip->getOverlineColor()); - pLast->setOverlineColorActive(pTip->getOverlineColorActive()); - } - } - } - } - - // execute the pop - delete maPropertyHolders.back(); - maPropertyHolders.pop_back(); - } - } - - PropertyHolder& Current() - { - static PropertyHolder aDummy; - OSL_ENSURE(maPropertyHolders.size(), "PropertyHolders: CURRENT with no property holders (!)"); - return maPropertyHolders.empty() ? aDummy : *maPropertyHolders.back(); - } - - ~PropertyHolders() - { - while(!maPropertyHolders.empty()) - { - delete maPropertyHolders.back(); - maPropertyHolders.pop_back(); - } - } - }; -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - /** helper to convert a Region to a B2DPolyPolygon - when it does not yet contain one. In the future - this may be expanded to merge the polygons created - from rectangles or use a special algo to directly turn - the spans of regions to a single, already merged - PolyPolygon. - */ - basegfx::B2DPolyPolygon getB2DPolyPolygonFromRegion(const Region& rRegion) - { - basegfx::B2DPolyPolygon aRetval; - - if(!rRegion.IsEmpty()) - { - Region aRegion(rRegion); - aRetval = aRegion.GetB2DPolyPolygon(); - - if(!aRetval.count()) - { - RegionHandle aRegionHandle(aRegion.BeginEnumRects()); - Rectangle aRegionRectangle; - - while(aRegion.GetEnumRects(aRegionHandle, aRegionRectangle)) - { - if(!aRegionRectangle.IsEmpty()) - { - const basegfx::B2DRange aRegionRange( - aRegionRectangle.Left(), aRegionRectangle.Top(), - aRegionRectangle.Right(), aRegionRectangle.Bottom()); - aRetval.append(basegfx::tools::createPolygonFromRect(aRegionRange)); - } - } - - aRegion.EndEnumRects(aRegionHandle); - } - } - - return aRetval; - } -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - /** Helper class to buffer and hold a Primive target vector. It - encapsulates the new/delete functionality and aloows to work - on pointers of the implementation classes. All data will - be converted to uno sequences of uno references when accessing the - data. - */ - class TargetHolder - { - private: - std::vector< drawinglayer::primitive2d::BasePrimitive2D* > aTargets; - - public: - TargetHolder() - : aTargets() - { - } - - ~TargetHolder() - { - const sal_uInt32 nCount(aTargets.size()); - - for(sal_uInt32 a(0); a < nCount; a++) - { - delete aTargets[a]; - } - } - - sal_uInt32 size() const - { - return aTargets.size(); - } - - void append(drawinglayer::primitive2d::BasePrimitive2D* pCandidate) - { - if(pCandidate) - { - aTargets.push_back(pCandidate); - } - } - - drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequence(const PropertyHolder& rPropertyHolder) - { - const sal_uInt32 nCount(aTargets.size()); - drawinglayer::primitive2d::Primitive2DSequence xRetval(nCount); - - for(sal_uInt32 a(0); a < nCount; a++) - { - xRetval[a] = aTargets[a]; - } - - // All Targets were pointers, but do not need to be deleted since they - // were converted to UNO API references now, so they stay as long as - // referenced. Do NOT delete the C++ implementation classes here, but clear - // the buffer to not delete them in the destructor. - aTargets.clear(); - - if(xRetval.hasElements() && rPropertyHolder.getClipPolyPolygonActive()) - { - const basegfx::B2DPolyPolygon& rClipPolyPolygon = rPropertyHolder.getClipPolyPolygon(); - - if(rClipPolyPolygon.count()) - { - const drawinglayer::primitive2d::Primitive2DReference xMask( - new drawinglayer::primitive2d::MaskPrimitive2D( - rClipPolyPolygon, - xRetval)); - - xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xMask, 1); - } - } - - return xRetval; - } - }; -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - /** Helper class which builds a stack on the TargetHolder class */ - class TargetHolders - { - private: - std::vector< TargetHolder* > maTargetHolders; - - public: - TargetHolders() - { - maTargetHolders.push_back(new TargetHolder()); - } - - sal_uInt32 size() const - { - return maTargetHolders.size(); - } - - void Push() - { - maTargetHolders.push_back(new TargetHolder()); - } - - void Pop() - { - OSL_ENSURE(maTargetHolders.size(), "TargetHolders: POP with no property holders (!)"); - if(!maTargetHolders.empty()) - { - delete maTargetHolders.back(); - maTargetHolders.pop_back(); - } - } - - TargetHolder& Current() - { - OSL_ENSURE(maTargetHolders.size(), "TargetHolders: CURRENT with no property holders (!)"); - return *maTargetHolders.back(); - } - - ~TargetHolders() - { - while(!maTargetHolders.empty()) - { - delete maTargetHolders.back(); - maTargetHolders.pop_back(); - } - } - }; -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - /** NonOverlappingFillGradientPrimitive2D class - - This is a special version of the FillGradientPrimitive2D which decomposes - to a non-overlapping geometry version of the gradient. This needs to be - used to support the old XOR paint-'trick'. - - It does not need an own identifier since a renderer who wants to interpret - it itself may do so. It just overloads the decomposition of the C++ - implementation class to do an alternative decomposition. - */ - class NonOverlappingFillGradientPrimitive2D : public FillGradientPrimitive2D - { - protected: - /// local decomposition. - virtual Primitive2DSequence create2DDecomposition( - const geometry::ViewInformation2D& rViewInformation) const; - - public: - /// constructor - NonOverlappingFillGradientPrimitive2D( - const basegfx::B2DRange& rObjectRange, - const attribute::FillGradientAttribute& rFillGradient) - : FillGradientPrimitive2D(rObjectRange, rFillGradient) - { - } - }; - - Primitive2DSequence NonOverlappingFillGradientPrimitive2D::create2DDecomposition( - const geometry::ViewInformation2D& /*rViewInformation*/) const - { - if(!getFillGradient().isDefault()) - { - return createFill(false); - } - else - { - return Primitive2DSequence(); - } - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - /** helper to convert a MapMode to a transformation */ - basegfx::B2DHomMatrix getTransformFromMapMode(const MapMode& rMapMode) - { - basegfx::B2DHomMatrix aMapping; - const Fraction aNoScale(1, 1); - const Point& rOrigin(rMapMode.GetOrigin()); - - if(0 != rOrigin.X() || 0 != rOrigin.Y()) - { - aMapping.translate(rOrigin.X(), rOrigin.Y()); - } - - if(rMapMode.GetScaleX() != aNoScale || rMapMode.GetScaleY() != aNoScale) - { - aMapping.scale( - double(rMapMode.GetScaleX()), - double(rMapMode.GetScaleY())); - } - - return aMapping; - } - - /** helper to create a PointArrayPrimitive2D based on current context */ - void createPointArrayPrimitive( - const std::vector< basegfx::B2DPoint >& rPositions, - TargetHolder& rTarget, - PropertyHolder& rProperties, - basegfx::BColor aBColor) - { - if(!rPositions.empty()) - { - if(rProperties.getTransformation().isIdentity()) - { - rTarget.append( - new drawinglayer::primitive2d::PointArrayPrimitive2D( - rPositions, - aBColor)); - } - else - { - std::vector< basegfx::B2DPoint > aPositions(rPositions); - - for(sal_uInt32 a(0); a < aPositions.size(); a++) - { - aPositions[a] = rProperties.getTransformation() * aPositions[a]; - } - - rTarget.append( - new drawinglayer::primitive2d::PointArrayPrimitive2D( - aPositions, - aBColor)); - } - } - } - - /** helper to create a PolygonHairlinePrimitive2D based on current context */ - void createHairlinePrimitive( - const basegfx::B2DPolygon& rLinePolygon, - TargetHolder& rTarget, - PropertyHolder& rProperties) - { - if(rLinePolygon.count()) - { - basegfx::B2DPolygon aLinePolygon(rLinePolygon); - aLinePolygon.transform(rProperties.getTransformation()); - rTarget.append( - new drawinglayer::primitive2d::PolygonHairlinePrimitive2D( - aLinePolygon, - rProperties.getLineColor())); - } - } - - /** helper to create a PolyPolygonColorPrimitive2D based on current context */ - void createFillPrimitive( - const basegfx::B2DPolyPolygon& rFillPolyPolygon, - TargetHolder& rTarget, - PropertyHolder& rProperties) - { - if(rFillPolyPolygon.count()) - { - basegfx::B2DPolyPolygon aFillPolyPolygon(rFillPolyPolygon); - aFillPolyPolygon.transform(rProperties.getTransformation()); - rTarget.append( - new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D( - aFillPolyPolygon, - rProperties.getFillColor())); - } - } - - /** helper to create a PolygonStrokePrimitive2D based on current context */ - void createLinePrimitive( - const basegfx::B2DPolygon& rLinePolygon, - const LineInfo& rLineInfo, - TargetHolder& rTarget, - PropertyHolder& rProperties) - { - if(rLinePolygon.count()) - { - const bool bDashDotUsed(LINE_DASH == rLineInfo.GetStyle()); - const bool bWidthUsed(rLineInfo.GetWidth() > 1); - - if(bDashDotUsed || bWidthUsed) - { - basegfx::B2DPolygon aLinePolygon(rLinePolygon); - aLinePolygon.transform(rProperties.getTransformation()); - const drawinglayer::attribute::LineAttribute aLineAttribute( - rProperties.getLineColor(), - bWidthUsed ? rLineInfo.GetWidth() : 0.0, - rLineInfo.GetLineJoin()); - - if(bDashDotUsed) - { - ::std::vector< double > fDotDashArray; - const double fDashLen(rLineInfo.GetDashLen()); - const double fDotLen(rLineInfo.GetDotLen()); - const double fDistance(rLineInfo.GetDistance()); - - for(sal_uInt16 a(0); a < rLineInfo.GetDashCount(); a++) - { - fDotDashArray.push_back(fDashLen); - fDotDashArray.push_back(fDistance); - } - - for(sal_uInt16 b(0); b < rLineInfo.GetDotCount(); b++) - { - fDotDashArray.push_back(fDotLen); - fDotDashArray.push_back(fDistance); - } - - const double fAccumulated(::std::accumulate(fDotDashArray.begin(), fDotDashArray.end(), 0.0)); - const drawinglayer::attribute::StrokeAttribute aStrokeAttribute( - fDotDashArray, - fAccumulated); - - rTarget.append( - new drawinglayer::primitive2d::PolygonStrokePrimitive2D( - aLinePolygon, - aLineAttribute, - aStrokeAttribute)); - } - else - { - rTarget.append( - new drawinglayer::primitive2d::PolygonStrokePrimitive2D( - aLinePolygon, - aLineAttribute)); - } - } - else - { - createHairlinePrimitive(rLinePolygon, rTarget, rProperties); - } - } - } - - /** helper to create needed line and fill primitives based on current context */ - void createHairlineAndFillPrimitive( - const basegfx::B2DPolygon& rPolygon, - TargetHolder& rTarget, - PropertyHolder& rProperties) - { - if(rProperties.getFillColorActive()) - { - createFillPrimitive(basegfx::B2DPolyPolygon(rPolygon), rTarget, rProperties); - } - - if(rProperties.getLineColorActive()) - { - createHairlinePrimitive(rPolygon, rTarget, rProperties); - } - } - - /** helper to create needed line and fill primitives based on current context */ - void createHairlineAndFillPrimitive( - const basegfx::B2DPolyPolygon& rPolyPolygon, - TargetHolder& rTarget, - PropertyHolder& rProperties) - { - if(rProperties.getFillColorActive()) - { - createFillPrimitive(rPolyPolygon, rTarget, rProperties); - } - - if(rProperties.getLineColorActive()) - { - for(sal_uInt32 a(0); a < rPolyPolygon.count(); a++) - { - createHairlinePrimitive(rPolyPolygon.getB2DPolygon(a), rTarget, rProperties); - } - } - } - - /** helper to create DiscreteBitmapPrimitive2D based on current context. - The DiscreteBitmapPrimitive2D is especially created for this usage - since no other usage defines a bitmap visualisation based on top-left - position and size in pixels. At the end it will create a view-dependent - transformed embedding of a BitmapPrimitive2D. - */ - void createBitmapExPrimitive( - const BitmapEx& rBitmapEx, - const Point& rPoint, - TargetHolder& rTarget, - PropertyHolder& rProperties) - { - if(!rBitmapEx.IsEmpty()) - { - basegfx::B2DPoint aPoint(rPoint.X(), rPoint.Y()); - aPoint = rProperties.getTransformation() * aPoint; - - rTarget.append( - new drawinglayer::primitive2d::DiscreteBitmapPrimitive2D( - rBitmapEx, - aPoint)); - } - } - - /** helper to create BitmapPrimitive2D based on current context */ - void createBitmapExPrimitive( - const BitmapEx& rBitmapEx, - const Point& rPoint, - const Size& rSize, - TargetHolder& rTarget, - PropertyHolder& rProperties) - { - if(!rBitmapEx.IsEmpty()) - { - basegfx::B2DHomMatrix aObjectTransform; - - aObjectTransform.set(0, 0, rSize.Width()); - aObjectTransform.set(1, 1, rSize.Height()); - aObjectTransform.set(0, 2, rPoint.X()); - aObjectTransform.set(1, 2, rPoint.Y()); - - aObjectTransform = rProperties.getTransformation() * aObjectTransform; - - rTarget.append( - new drawinglayer::primitive2d::BitmapPrimitive2D( - rBitmapEx, - aObjectTransform)); - } - } - - /** helper to create a regular BotmapEx from a MaskAction (definitions - which use a bitmap without transparence but define one of the colors as - transparent) - */ - BitmapEx createMaskBmpEx(const Bitmap& rBitmap, const Color& rMaskColor) - { - const Color aWhite(COL_WHITE); - BitmapPalette aBiLevelPalette(2); - - aBiLevelPalette[0] = aWhite; - aBiLevelPalette[1] = rMaskColor; - - Bitmap aMask(rBitmap.CreateMask(aWhite)); - Bitmap aSolid(rBitmap.GetSizePixel(), 1, &aBiLevelPalette); - - aSolid.Erase(rMaskColor); - - return BitmapEx(aSolid, aMask); - } - - /** helper to convert from a VCL Gradient definition to the corresponding - data for primitive representation - */ - drawinglayer::attribute::FillGradientAttribute createFillGradientAttribute(const Gradient& rGradient) - { - const Color aStartColor(rGradient.GetStartColor()); - const sal_uInt16 nStartIntens(rGradient.GetStartIntensity()); - basegfx::BColor aStart(aStartColor.getBColor()); - - if(nStartIntens != 100) - { - const basegfx::BColor aBlack; - aStart = interpolate(aBlack, aStart, (double)nStartIntens * 0.01); - } - - const Color aEndColor(rGradient.GetEndColor()); - const sal_uInt16 nEndIntens(rGradient.GetEndIntensity()); - basegfx::BColor aEnd(aEndColor.getBColor()); - - if(nEndIntens != 100) - { - const basegfx::BColor aBlack; - aEnd = interpolate(aBlack, aEnd, (double)nEndIntens * 0.01); - } - - drawinglayer::attribute::GradientStyle aGradientStyle(drawinglayer::attribute::GRADIENTSTYLE_RECT); - - switch(rGradient.GetStyle()) - { - case GRADIENT_LINEAR : - { - aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_LINEAR; - break; - } - case GRADIENT_AXIAL : - { - aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_AXIAL; - break; - } - case GRADIENT_RADIAL : - { - aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_RADIAL; - break; - } - case GRADIENT_ELLIPTICAL : - { - aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_ELLIPTICAL; - break; - } - case GRADIENT_SQUARE : - { - aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_SQUARE; - break; - } - default : // GRADIENT_RECT - { - aGradientStyle = drawinglayer::attribute::GRADIENTSTYLE_RECT; - break; - } - } - - return drawinglayer::attribute::FillGradientAttribute( - aGradientStyle, - (double)rGradient.GetBorder() * 0.01, - (double)rGradient.GetOfsX() * 0.01, - (double)rGradient.GetOfsY() * 0.01, - (double)rGradient.GetAngle() * F_PI1800, - aStart, - aEnd, - rGradient.GetSteps()); - } - - /** helper to convert from a VCL Hatch definition to the corresponding - data for primitive representation - */ - drawinglayer::attribute::FillHatchAttribute createFillHatchAttribute(const Hatch& rHatch) - { - drawinglayer::attribute::HatchStyle aHatchStyle(drawinglayer::attribute::HATCHSTYLE_SINGLE); - - switch(rHatch.GetStyle()) - { - default : // case HATCH_SINGLE : - { - aHatchStyle = drawinglayer::attribute::HATCHSTYLE_SINGLE; - break; - } - case HATCH_DOUBLE : - { - aHatchStyle = drawinglayer::attribute::HATCHSTYLE_DOUBLE; - break; - } - case HATCH_TRIPLE : - { - aHatchStyle = drawinglayer::attribute::HATCHSTYLE_TRIPLE; - break; - } - } - - return drawinglayer::attribute::FillHatchAttribute( - aHatchStyle, - (double)rHatch.GetDistance(), - (double)rHatch.GetAngle() * F_PI1800, - rHatch.GetColor().getBColor(), - false); - } - - /** helper to take needed action on ClipRegion change. This method needs to be called - on any Region change, e.g. at the obvious actions doing this, but also at pop-calls - whcih change the Region of the current context. It takes care of creating the - current embeddec context, set the new Region at the context and eventually prepare - a new target for embracing new geometry to the current region - */ - void HandleNewClipRegion( - const basegfx::B2DPolyPolygon& rClipPolyPolygon, - TargetHolders& rTargetHolders, - PropertyHolders& rPropertyHolders) - { - const bool bNewActive(rClipPolyPolygon.count()); - - // #i108636# The handlig of new ClipPolyPolygons was not done as good as possible - // in the first version of this interpreter; e.g. when a ClipPolyPolygon was set - // initially and then using a lot of push/pop actions, the pop always leads - // to setting a 'new' ClipPolyPolygon which indeed is the return to the ClipPolyPolygon - // of the properties next on the stack. - // - // This ClipPolyPolygon is identical to the current one, so there is no need to - // create a MaskPrimitive2D containing the up-to-now created primitives, but - // this was done before. While this does not lead to wrong primitive - // representations of the metafile data, it creates unneccesarily expensive - // representations. Just detecting when no really 'new' ClipPolyPolygon gets set - // solves the problem. - - if(!rPropertyHolders.Current().getClipPolyPolygonActive() && !bNewActive) - { - // no active ClipPolyPolygon exchanged by no new one, done - return; - } - - if(rPropertyHolders.Current().getClipPolyPolygonActive() && bNewActive) - { - // active ClipPolyPolygon and new active ClipPolyPolygon - if(rPropertyHolders.Current().getClipPolyPolygon() == rClipPolyPolygon) - { - // new is the same as old, done - return; - } - } - - // Here the old and the new are definitively different, maybe - // old one and/or new one is not active. - - // Handle deletion of old ClipPolyPolygon. The process evtl. created primitives which - // belong to this active ClipPolyPolygon. These need to be embedded to a - // MaskPrimitive2D accordingly. - if(rPropertyHolders.Current().getClipPolyPolygonActive() && rTargetHolders.size() > 1) - { - drawinglayer::primitive2d::Primitive2DSequence aSubContent; - - if(rPropertyHolders.Current().getClipPolyPolygon().count() - && rTargetHolders.Current().size()) - { - aSubContent = rTargetHolders.Current().getPrimitive2DSequence( - rPropertyHolders.Current()); - } - - rTargetHolders.Pop(); - - if(aSubContent.hasElements()) - { - rTargetHolders.Current().append( - new drawinglayer::primitive2d::GroupPrimitive2D( - aSubContent)); - } - } - - // apply new settings to current properties by setting - // the new region now - rPropertyHolders.Current().setClipPolyPolygonActive(bNewActive); - - if(bNewActive) - { - rPropertyHolders.Current().setClipPolyPolygon(rClipPolyPolygon); - - // prepare new content holder for new active region - rTargetHolders.Push(); - } - } - - /** helper to handle the change of RasterOp. It takes care of encapsulating all current - geometry to the current RasterOp (if changed) and needs to be called on any RasterOp - change. It will also start a new geometry target to embrace to the new RasterOp if - a changuing RasterOp is used. Currently, ROP_XOR and ROP_INVERT are supported using - InvertPrimitive2D, and ROP_0 by using a ModifiedColorPrimitive2D to force to black paint - */ - void HandleNewRasterOp( - RasterOp aRasterOp, - TargetHolders& rTargetHolders, - PropertyHolders& rPropertyHolders) - { - // check if currently active - if(rPropertyHolders.Current().isRasterOpActive() && rTargetHolders.size() > 1) - { - drawinglayer::primitive2d::Primitive2DSequence aSubContent; - - if(rTargetHolders.Current().size()) - { - aSubContent = rTargetHolders.Current().getPrimitive2DSequence(rPropertyHolders.Current()); - } - - rTargetHolders.Pop(); - - if(aSubContent.hasElements()) - { - if(rPropertyHolders.Current().isRasterOpForceBlack()) - { - // force content to black - rTargetHolders.Current().append( - new drawinglayer::primitive2d::ModifiedColorPrimitive2D( - aSubContent, - basegfx::BColorModifier(basegfx::BColor(0.0, 0.0, 0.0)))); - } - else // if(rPropertyHolders.Current().isRasterOpInvert()) - { - // invert content - rTargetHolders.Current().append( - new drawinglayer::primitive2d::InvertPrimitive2D( - aSubContent)); - } - } - } - - // apply new settings - rPropertyHolders.Current().setRasterOp(aRasterOp); - - // check if now active - if(rPropertyHolders.Current().isRasterOpActive()) - { - // prepare new content holder for new invert - rTargetHolders.Push(); - } - } - - /** helper to create needed data to emulate the VCL Wallpaper Metafile action. - It is a quite mighty action. This helper is for simple color filled background. - */ - drawinglayer::primitive2d::BasePrimitive2D* CreateColorWallpaper( - const basegfx::B2DRange& rRange, - const basegfx::BColor& rColor, - PropertyHolder& rPropertyHolder) - { - basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(rRange)); - aOutline.transform(rPropertyHolder.getTransformation()); - - return new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon(aOutline), - rColor); - } - - /** helper to create needed data to emulate the VCL Wallpaper Metafile action. - It is a quite mighty action. This helper is for gradient filled background. - */ - drawinglayer::primitive2d::BasePrimitive2D* CreateGradientWallpaper( - const basegfx::B2DRange& rRange, - const Gradient& rGradient, - PropertyHolder& rPropertyHolder) - { - const drawinglayer::attribute::FillGradientAttribute aAttribute(createFillGradientAttribute(rGradient)); - - if(aAttribute.getStartColor() == aAttribute.getEndColor()) - { - // not really a gradient. Create filled rectangle - return CreateColorWallpaper(rRange, aAttribute.getStartColor(), rPropertyHolder); - } - else - { - // really a gradient - drawinglayer::primitive2d::BasePrimitive2D* pRetval = - new drawinglayer::primitive2d::FillGradientPrimitive2D( - rRange, - aAttribute); - - if(!rPropertyHolder.getTransformation().isIdentity()) - { - const drawinglayer::primitive2d::Primitive2DReference xPrim(pRetval); - const drawinglayer::primitive2d::Primitive2DSequence xSeq(&xPrim, 1); - - pRetval = new drawinglayer::primitive2d::TransformPrimitive2D( - rPropertyHolder.getTransformation(), - xSeq); - } - - return pRetval; - } - } - - /** helper to create needed data to emulate the VCL Wallpaper Metafile action. - It is a quite mighty action. This helper decides if color and/or gradient - background is needed for the wnated bitmap fill and then creates the needed - WallpaperBitmapPrimitive2D. This primitive was created for this purpose and - takes over all needed logic of orientations and tiling. - */ - void CreateAndAppendBitmapWallpaper( - basegfx::B2DRange aWallpaperRange, - const Wallpaper& rWallpaper, - TargetHolder& rTarget, - PropertyHolder& rProperty) - { - const BitmapEx aBitmapEx(rWallpaper.GetBitmap()); - const WallpaperStyle eWallpaperStyle(rWallpaper.GetStyle()); - - // if bitmap visualisation is transparent, maybe background - // needs to be filled. Create background - if(aBitmapEx.IsTransparent() - || (WALLPAPER_TILE != eWallpaperStyle && WALLPAPER_SCALE != eWallpaperStyle)) - { - if(rWallpaper.IsGradient()) - { - rTarget.append( - CreateGradientWallpaper( - aWallpaperRange, - rWallpaper.GetGradient(), - rProperty)); - } - else if(!rWallpaper.GetColor().GetTransparency()) - { - rTarget.append( - CreateColorWallpaper( - aWallpaperRange, - rWallpaper.GetColor().getBColor(), - rProperty)); - } - } - - // use wallpaper rect if set - if(rWallpaper.IsRect() && !rWallpaper.GetRect().IsEmpty()) - { - aWallpaperRange = basegfx::B2DRange( - rWallpaper.GetRect().Left(), rWallpaper.GetRect().Top(), - rWallpaper.GetRect().Right(), rWallpaper.GetRect().Bottom()); - } - - drawinglayer::primitive2d::BasePrimitive2D* pBitmapWallpaperFill = - new drawinglayer::primitive2d::WallpaperBitmapPrimitive2D( - aWallpaperRange, - aBitmapEx, - eWallpaperStyle); - - if(rProperty.getTransformation().isIdentity()) - { - // add directly - rTarget.append(pBitmapWallpaperFill); - } - else - { - // when a transformation is set, embed to it - const drawinglayer::primitive2d::Primitive2DReference xPrim(pBitmapWallpaperFill); - - rTarget.append( - new drawinglayer::primitive2d::TransformPrimitive2D( - rProperty.getTransformation(), - drawinglayer::primitive2d::Primitive2DSequence(&xPrim, 1))); - } - } - - /** helper to decide UnderlineAbove for text primitives */ - bool isUnderlineAbove(const Font& rFont) - { - if(!rFont.IsVertical()) - { - return false; - } - - if((LANGUAGE_JAPANESE == rFont.GetLanguage()) || (LANGUAGE_JAPANESE == rFont.GetCJKContextLanguage())) - { - // the underline is right for Japanese only - return true; - } - - return false; - } - - void createFontAttributeTransformAndAlignment( - drawinglayer::attribute::FontAttribute& rFontAttribute, - basegfx::B2DHomMatrix& rTextTransform, - basegfx::B2DVector& rAlignmentOffset, - PropertyHolder& rProperty) - { - const Font& rFont = rProperty.getFont(); - basegfx::B2DVector aFontScaling; - - rFontAttribute = drawinglayer::attribute::FontAttribute( - drawinglayer::primitive2d::getFontAttributeFromVclFont( - aFontScaling, - rFont, - 0 != (rProperty.getLayoutMode() & TEXT_LAYOUT_BIDI_RTL), - 0 != (rProperty.getLayoutMode() & TEXT_LAYOUT_BIDI_STRONG))); - - // add FontScaling - rTextTransform.scale(aFontScaling.getX(), aFontScaling.getY()); - - // take text align into account - if(ALIGN_BASELINE != rFont.GetAlign()) - { - drawinglayer::primitive2d::TextLayouterDevice aTextLayouterDevice; - aTextLayouterDevice.setFont(rFont); - - if(ALIGN_TOP == rFont.GetAlign()) - { - rAlignmentOffset.setY(aTextLayouterDevice.getFontAscent()); - } - else // ALIGN_BOTTOM - { - rAlignmentOffset.setY(-aTextLayouterDevice.getFontDescent()); - } - - rTextTransform.translate(rAlignmentOffset.getX(), rAlignmentOffset.getY()); - } - - // add FontRotation (if used) - if(rFont.GetOrientation()) - { - rTextTransform.rotate(-rFont.GetOrientation() * F_PI1800); - } - } - - /** helper which takes complete care for creating the needed text primitives. It - takes care of decorated stuff and all the geometry adaptions needed - */ - void proccessMetaTextAction( - const Point& rTextStartPosition, - const XubString& rText, - sal_uInt16 nTextStart, - sal_uInt16 nTextLength, - const ::std::vector< double >& rDXArray, - TargetHolder& rTarget, - PropertyHolder& rProperty) - { - drawinglayer::primitive2d::BasePrimitive2D* pResult = 0; - const Font& rFont = rProperty.getFont(); - basegfx::B2DVector aAlignmentOffset(0.0, 0.0); - - if(nTextLength) - { - drawinglayer::attribute::FontAttribute aFontAttribute; - basegfx::B2DHomMatrix aTextTransform; - - // fill parameters derived from current font - createFontAttributeTransformAndAlignment( - aFontAttribute, - aTextTransform, - aAlignmentOffset, - rProperty); - - // add TextStartPosition - aTextTransform.translate(rTextStartPosition.X(), rTextStartPosition.Y()); - - // prepare FontColor and Locale - const basegfx::BColor aFontColor(rProperty.getTextColor()); - const com::sun::star::lang::Locale aLocale(MsLangId::convertLanguageToLocale(rProperty.getLanguageType())); - const bool bWordLineMode(rFont.IsWordLineMode()); - - const bool bDecoratedIsNeeded( - UNDERLINE_NONE != rFont.GetOverline() - || UNDERLINE_NONE != rFont.GetUnderline() - || STRIKEOUT_NONE != rFont.GetStrikeout() - || EMPHASISMARK_NONE != (rFont.GetEmphasisMark() & EMPHASISMARK_STYLE) - || RELIEF_NONE != rFont.GetRelief() - || rFont.IsShadow() - || bWordLineMode); - - if(bDecoratedIsNeeded) - { - // prepare overline, underline and srikeout data - const drawinglayer::primitive2d::TextLine eFontOverline(drawinglayer::primitive2d::mapFontUnderlineToTextLine(rFont.GetOverline())); - const drawinglayer::primitive2d::TextLine eFontUnderline(drawinglayer::primitive2d::mapFontUnderlineToTextLine(rFont.GetUnderline())); - const drawinglayer::primitive2d::TextStrikeout eTextStrikeout(drawinglayer::primitive2d::mapFontStrikeoutToTextStrikeout(rFont.GetStrikeout())); - - // check UndelineAbove - const bool bUnderlineAbove(drawinglayer::primitive2d::TEXT_LINE_NONE != eFontUnderline && isUnderlineAbove(rFont)); - - // prepare emphasis mark data - drawinglayer::primitive2d::TextEmphasisMark eTextEmphasisMark(drawinglayer::primitive2d::TEXT_EMPHASISMARK_NONE); - - switch(rFont.GetEmphasisMark() & EMPHASISMARK_STYLE) - { - case EMPHASISMARK_DOT : eTextEmphasisMark = drawinglayer::primitive2d::TEXT_EMPHASISMARK_DOT; break; - case EMPHASISMARK_CIRCLE : eTextEmphasisMark = drawinglayer::primitive2d::TEXT_EMPHASISMARK_CIRCLE; break; - case EMPHASISMARK_DISC : eTextEmphasisMark = drawinglayer::primitive2d::TEXT_EMPHASISMARK_DISC; break; - case EMPHASISMARK_ACCENT : eTextEmphasisMark = drawinglayer::primitive2d::TEXT_EMPHASISMARK_ACCENT; break; - } - - const bool bEmphasisMarkAbove(rFont.GetEmphasisMark() & EMPHASISMARK_POS_ABOVE); - const bool bEmphasisMarkBelow(rFont.GetEmphasisMark() & EMPHASISMARK_POS_BELOW); - - // prepare font relief data - drawinglayer::primitive2d::TextRelief eTextRelief(drawinglayer::primitive2d::TEXT_RELIEF_NONE); - - switch(rFont.GetRelief()) - { - case RELIEF_EMBOSSED : eTextRelief = drawinglayer::primitive2d::TEXT_RELIEF_EMBOSSED; break; - case RELIEF_ENGRAVED : eTextRelief = drawinglayer::primitive2d::TEXT_RELIEF_ENGRAVED; break; - default : break; // RELIEF_NONE, FontRelief_FORCE_EQUAL_SIZE - } - - // prepare shadow/outline data - const bool bShadow(rFont.IsShadow()); - - // TextDecoratedPortionPrimitive2D is needed, create one - pResult = new drawinglayer::primitive2d::TextDecoratedPortionPrimitive2D( - - // attributes for TextSimplePortionPrimitive2D - aTextTransform, - rText, - nTextStart, - nTextLength, - rDXArray, - aFontAttribute, - aLocale, - aFontColor, - - // attributes for TextDecoratedPortionPrimitive2D - rProperty.getOverlineColorActive() ? rProperty.getOverlineColor() : aFontColor, - rProperty.getTextLineColorActive() ? rProperty.getTextLineColor() : aFontColor, - eFontOverline, - eFontUnderline, - bUnderlineAbove, - eTextStrikeout, - bWordLineMode, - eTextEmphasisMark, - bEmphasisMarkAbove, - bEmphasisMarkBelow, - eTextRelief, - bShadow); - } - else - { - // TextSimplePortionPrimitive2D is enough - pResult = new drawinglayer::primitive2d::TextSimplePortionPrimitive2D( - aTextTransform, - rText, - nTextStart, - nTextLength, - rDXArray, - aFontAttribute, - aLocale, - aFontColor); - } - } - - if(pResult && rProperty.getTextFillColorActive()) - { - // text background is requested, add and encapsulate both to new primitive - drawinglayer::primitive2d::TextLayouterDevice aTextLayouterDevice; - aTextLayouterDevice.setFont(rFont); - - // get text width - double fTextWidth(0.0); - - if(rDXArray.empty()) - { - fTextWidth = aTextLayouterDevice.getTextWidth(rText, nTextStart, nTextLength); - } - else - { - fTextWidth = rDXArray.back(); - } - - if(basegfx::fTools::more(fTextWidth, 0.0)) - { - // build text range - const basegfx::B2DRange aTextRange( - 0.0, -aTextLayouterDevice.getFontAscent(), - fTextWidth, aTextLayouterDevice.getFontDescent()); - - // create Transform - basegfx::B2DHomMatrix aTextTransform; - - aTextTransform.translate(aAlignmentOffset.getX(), aAlignmentOffset.getY()); - - if(rFont.GetOrientation()) - { - aTextTransform.rotate(-rFont.GetOrientation() * F_PI1800); - } - - aTextTransform.translate(rTextStartPosition.X(), rTextStartPosition.Y()); - - // prepare Primitive2DSequence, put text in foreground - drawinglayer::primitive2d::Primitive2DSequence aSequence(2); - aSequence[1] = drawinglayer::primitive2d::Primitive2DReference(pResult); - - // prepare filled polygon - basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aTextRange)); - aOutline.transform(aTextTransform); - - aSequence[0] = drawinglayer::primitive2d::Primitive2DReference( - new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon(aOutline), - rProperty.getTextFillColor())); - - // set as group at pResult - pResult = new drawinglayer::primitive2d::GroupPrimitive2D(aSequence); - } - } - - if(pResult) - { - // add created text primitive to target - if(rProperty.getTransformation().isIdentity()) - { - rTarget.append(pResult); - } - else - { - // when a transformation is set, embed to it - const drawinglayer::primitive2d::Primitive2DReference aReference(pResult); - - rTarget.append( - new drawinglayer::primitive2d::TransformPrimitive2D( - rProperty.getTransformation(), - drawinglayer::primitive2d::Primitive2DSequence(&aReference, 1))); - } - } - } - - /** helper which takes complete care for creating the needed textLine primitives */ - void proccessMetaTextLineAction( - const MetaTextLineAction& rAction, - TargetHolder& rTarget, - PropertyHolder& rProperty) - { - const double fLineWidth(fabs((double)rAction.GetWidth())); - - if(fLineWidth > 0.0) - { - const drawinglayer::primitive2d::TextLine aOverlineMode(drawinglayer::primitive2d::mapFontUnderlineToTextLine(rAction.GetOverline())); - const drawinglayer::primitive2d::TextLine aUnderlineMode(drawinglayer::primitive2d::mapFontUnderlineToTextLine(rAction.GetUnderline())); - const drawinglayer::primitive2d::TextStrikeout aTextStrikeout(drawinglayer::primitive2d::mapFontStrikeoutToTextStrikeout(rAction.GetStrikeout())); - - const bool bOverlineUsed(drawinglayer::primitive2d::TEXT_LINE_NONE != aOverlineMode); - const bool bUnderlineUsed(drawinglayer::primitive2d::TEXT_LINE_NONE != aUnderlineMode); - const bool bStrikeoutUsed(drawinglayer::primitive2d::TEXT_STRIKEOUT_NONE != aTextStrikeout); - - if(bUnderlineUsed || bStrikeoutUsed || bOverlineUsed) - { - std::vector< drawinglayer::primitive2d::BasePrimitive2D* > aTargetVector; - basegfx::B2DVector aAlignmentOffset(0.0, 0.0); - drawinglayer::attribute::FontAttribute aFontAttribute; - basegfx::B2DHomMatrix aTextTransform; - - // fill parameters derived from current font - createFontAttributeTransformAndAlignment( - aFontAttribute, - aTextTransform, - aAlignmentOffset, - rProperty); - - // add TextStartPosition - aTextTransform.translate(rAction.GetStartPoint().X(), rAction.GetStartPoint().Y()); - - // prepare TextLayouter (used in most cases) - drawinglayer::primitive2d::TextLayouterDevice aTextLayouter; - aTextLayouter.setFont(rProperty.getFont()); - - if(bOverlineUsed) - { - // create primitive geometry for overline - aTargetVector.push_back( - new drawinglayer::primitive2d::TextLinePrimitive2D( - aTextTransform, - fLineWidth, - aTextLayouter.getOverlineOffset(), - aTextLayouter.getOverlineHeight(), - aOverlineMode, - rProperty.getOverlineColor())); - } - - if(bUnderlineUsed) - { - // create primitive geometry for underline - aTargetVector.push_back( - new drawinglayer::primitive2d::TextLinePrimitive2D( - aTextTransform, - fLineWidth, - aTextLayouter.getUnderlineOffset(), - aTextLayouter.getUnderlineHeight(), - aUnderlineMode, - rProperty.getTextLineColor())); - } - - if(bStrikeoutUsed) - { - // create primitive geometry for strikeout - if(drawinglayer::primitive2d::TEXT_STRIKEOUT_SLASH == aTextStrikeout - || drawinglayer::primitive2d::TEXT_STRIKEOUT_X == aTextStrikeout) - { - // strikeout with character - const sal_Unicode aStrikeoutChar( - drawinglayer::primitive2d::TEXT_STRIKEOUT_SLASH == aTextStrikeout ? '/' : 'X'); - const com::sun::star::lang::Locale aLocale(MsLangId::convertLanguageToLocale( - rProperty.getLanguageType())); - - aTargetVector.push_back( - new drawinglayer::primitive2d::TextCharacterStrikeoutPrimitive2D( - aTextTransform, - fLineWidth, - rProperty.getTextColor(), - aStrikeoutChar, - aFontAttribute, - aLocale)); - } - else - { - // strikeout with geometry - aTargetVector.push_back( - new drawinglayer::primitive2d::TextGeometryStrikeoutPrimitive2D( - aTextTransform, - fLineWidth, - rProperty.getTextColor(), - aTextLayouter.getUnderlineHeight(), - aTextLayouter.getStrikeoutOffset(), - aTextStrikeout)); - } - } - - if(!aTargetVector.empty()) - { - // add created text primitive to target - if(rProperty.getTransformation().isIdentity()) - { - for(sal_uInt32 a(0); a < aTargetVector.size(); a++) - { - rTarget.append(aTargetVector[a]); - } - } - else - { - // when a transformation is set, embed to it - drawinglayer::primitive2d::Primitive2DSequence xTargets(aTargetVector.size()); - - for(sal_uInt32 a(0); a < aTargetVector.size(); a++) - { - xTargets[a] = drawinglayer::primitive2d::Primitive2DReference(aTargetVector[a]); - } - - rTarget.append( - new drawinglayer::primitive2d::TransformPrimitive2D( - rProperty.getTransformation(), - xTargets)); - } - } - } - } - - } - - /** This is the main interpreter method. It is designed to handle the given Metafile - completely inside the given context and target. It may use and modify the context and - target. This design allows to call itself recursively wich adapted contexts and - targets as e.g. needed for the META_FLOATTRANSPARENT_ACTION where the content is expressed - as a metafile as sub-content. - - This interpreter is as free of VCL functionality as possible. It uses VCL data classes - (else reading the data would not be possible), but e.g. does NOT use a local OutputDevice - as most other MetaFile interpreters/exporters do to hold and work with the current context. - This is necessary to be able to get away from the strong internal VCL-binding. - - It tries to combine e.g. pixel and/or point actions and to stitch together single line primitives - where possible (which is not trivial with the possible line geometry definitions). - - It tries to handle clipping no longer as Regions and spans of Rectangles, but as PolyPolygon - ClipRegions with (where possible) high precision by using the best possible data quality - from the Region. The Region is unavoidable as data container, but nowadays allows the transport - of Polygon-based clip regions. Where this is not used, a Polygon is constructed from the - Region ranges. All primitive clipping uses the MaskPrimitive2D with Polygon-based clipping. - - I have marked the single MetaActions with: - - SIMPLE, DONE: - Simple, e.g nothing to do or value setting in the context - - CHECKED, WORKS WELL: - Thoroughly tested with extra written test code which created a replacement - Metafile just to test this action in various combinations - - NEEDS IMPLEMENTATION: - Not implemented and asserted, but also no usage found, neither in own Metafile - creations, nor in EMF/WMF imports (checked with a whole bunch of critical EMF/WMF - bugdocs) - - For more commens, see the single action implementations. - */ - void interpretMetafile( - const GDIMetaFile& rMetaFile, - TargetHolders& rTargetHolders, - PropertyHolders& rPropertyHolders, - const drawinglayer::geometry::ViewInformation2D& rViewInformation) - { - const size_t nCount(rMetaFile.GetActionSize()); - - for(size_t nAction(0); nAction < nCount; nAction++) - { - MetaAction* pAction = rMetaFile.GetAction(nAction); - - switch(pAction->GetType()) - { - case META_NULL_ACTION : - { - /** SIMPLE, DONE */ - break; - } - case META_PIXEL_ACTION : - { - /** CHECKED, WORKS WELL */ - std::vector< basegfx::B2DPoint > aPositions; - Color aLastColor(COL_BLACK); - - while(META_PIXEL_ACTION == pAction->GetType() && nAction < nCount) - { - const MetaPixelAction* pA = (const MetaPixelAction*)pAction; - - if(pA->GetColor() != aLastColor) - { - if(!aPositions.empty()) - { - createPointArrayPrimitive(aPositions, rTargetHolders.Current(), rPropertyHolders.Current(), aLastColor.getBColor()); - aPositions.clear(); - } - - aLastColor = pA->GetColor(); - } - - const Point& rPoint = pA->GetPoint(); - aPositions.push_back(basegfx::B2DPoint(rPoint.X(), rPoint.Y())); - nAction++; if(nAction < nCount) pAction = rMetaFile.GetAction(nAction); - } - - nAction--; - - if(!aPositions.empty()) - { - createPointArrayPrimitive(aPositions, rTargetHolders.Current(), rPropertyHolders.Current(), aLastColor.getBColor()); - } - - break; - } - case META_POINT_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineColorActive()) - { - std::vector< basegfx::B2DPoint > aPositions; - - while(META_POINT_ACTION == pAction->GetType() && nAction < nCount) - { - const MetaPointAction* pA = (const MetaPointAction*)pAction; - const Point& rPoint = pA->GetPoint(); - aPositions.push_back(basegfx::B2DPoint(rPoint.X(), rPoint.Y())); - nAction++; if(nAction < nCount) pAction = rMetaFile.GetAction(nAction); - } - - nAction--; - - if(!aPositions.empty()) - { - createPointArrayPrimitive(aPositions, rTargetHolders.Current(), rPropertyHolders.Current(), rPropertyHolders.Current().getLineColor()); - } - } - - break; - } - case META_LINE_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineColorActive()) - { - basegfx::B2DPolygon aLinePolygon; - LineInfo aLineInfo; - - while(META_LINE_ACTION == pAction->GetType() && nAction < nCount) - { - const MetaLineAction* pA = (const MetaLineAction*)pAction; - const Point& rStartPoint = pA->GetStartPoint(); - const Point& rEndPoint = pA->GetEndPoint(); - const basegfx::B2DPoint aStart(rStartPoint.X(), rStartPoint.Y()); - const basegfx::B2DPoint aEnd(rEndPoint.X(), rEndPoint.Y()); - - if(aLinePolygon.count()) - { - if(pA->GetLineInfo() == aLineInfo - && aStart == aLinePolygon.getB2DPoint(aLinePolygon.count() - 1)) - { - aLinePolygon.append(aEnd); - } - else - { - aLineInfo.SetLineJoin(basegfx::B2DLINEJOIN_NONE); // It were lines; force to NONE - createLinePrimitive(aLinePolygon, aLineInfo, rTargetHolders.Current(), rPropertyHolders.Current()); - aLinePolygon.clear(); - aLineInfo = pA->GetLineInfo(); - aLinePolygon.append(aStart); - aLinePolygon.append(aEnd); - } - } - else - { - aLineInfo = pA->GetLineInfo(); - aLinePolygon.append(aStart); - aLinePolygon.append(aEnd); - } - - nAction++; if(nAction < nCount) pAction = rMetaFile.GetAction(nAction); - } - - nAction--; - - if(aLinePolygon.count()) - { - aLineInfo.SetLineJoin(basegfx::B2DLINEJOIN_NONE); // It were lines; force to NONE - createLinePrimitive(aLinePolygon, aLineInfo, rTargetHolders.Current(), rPropertyHolders.Current()); - } - } - - break; - } - case META_RECT_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineOrFillActive()) - { - const MetaRectAction* pA = (const MetaRectAction*)pAction; - const Rectangle& rRectangle = pA->GetRect(); - - if(!rRectangle.IsEmpty()) - { - const basegfx::B2DRange aRange(rRectangle.Left(), rRectangle.Top(), rRectangle.Right(), rRectangle.Bottom()); - - if(!aRange.isEmpty()) - { - const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange)); - createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - } - } - - break; - } - case META_ROUNDRECT_ACTION : - { - /** CHECKED, WORKS WELL */ - /** The original OutputDevice::DrawRect paints nothing when nHor or nVer is zero; but just - because the tools::Polygon operator creating the rounding does produce nonsense. I assume - this an error and create an unrounded rectangle in that case (implicit in - createPolygonFromRect) - */ - if(rPropertyHolders.Current().getLineOrFillActive()) - { - const MetaRoundRectAction* pA = (const MetaRoundRectAction*)pAction; - const Rectangle& rRectangle = pA->GetRect(); - - if(!rRectangle.IsEmpty()) - { - const basegfx::B2DRange aRange(rRectangle.Left(), rRectangle.Top(), rRectangle.Right(), rRectangle.Bottom()); - - if(!aRange.isEmpty()) - { - const sal_uInt32 nHor(pA->GetHorzRound()); - const sal_uInt32 nVer(pA->GetVertRound()); - basegfx::B2DPolygon aOutline; - - if(nHor || nVer) - { - double fRadiusX((nHor * 2.0) / (aRange.getWidth() > 0.0 ? aRange.getWidth() : 1.0)); - double fRadiusY((nVer * 2.0) / (aRange.getHeight() > 0.0 ? aRange.getHeight() : 1.0)); - fRadiusX = std::max(0.0, std::min(1.0, fRadiusX)); - fRadiusY = std::max(0.0, std::min(1.0, fRadiusY)); - - aOutline = basegfx::tools::createPolygonFromRect(aRange, fRadiusX, fRadiusY); - } - else - { - aOutline = basegfx::tools::createPolygonFromRect(aRange); - } - - createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - } - } - - break; - } - case META_ELLIPSE_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineOrFillActive()) - { - const MetaEllipseAction* pA = (const MetaEllipseAction*)pAction; - const Rectangle& rRectangle = pA->GetRect(); - - if(!rRectangle.IsEmpty()) - { - const basegfx::B2DRange aRange(rRectangle.Left(), rRectangle.Top(), rRectangle.Right(), rRectangle.Bottom()); - - if(!aRange.isEmpty()) - { - const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromEllipse( - aRange.getCenter(), aRange.getWidth() * 0.5, aRange.getHeight() * 0.5)); - - createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - } - } - - break; - } - case META_ARC_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineColorActive()) - { - const MetaArcAction* pA = (const MetaArcAction*)pAction; - const Polygon aToolsPoly(pA->GetRect(), pA->GetStartPoint(), pA->GetEndPoint(), POLY_ARC); - const basegfx::B2DPolygon aOutline(aToolsPoly.getB2DPolygon()); - - createHairlinePrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_PIE_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineOrFillActive()) - { - const MetaPieAction* pA = (const MetaPieAction*)pAction; - const Polygon aToolsPoly(pA->GetRect(), pA->GetStartPoint(), pA->GetEndPoint(), POLY_PIE); - const basegfx::B2DPolygon aOutline(aToolsPoly.getB2DPolygon()); - - createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_CHORD_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineOrFillActive()) - { - const MetaChordAction* pA = (const MetaChordAction*)pAction; - const Polygon aToolsPoly(pA->GetRect(), pA->GetStartPoint(), pA->GetEndPoint(), POLY_CHORD); - const basegfx::B2DPolygon aOutline(aToolsPoly.getB2DPolygon()); - - createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_POLYLINE_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineColorActive()) - { - const MetaPolyLineAction* pA = (const MetaPolyLineAction*)pAction; - createLinePrimitive(pA->GetPolygon().getB2DPolygon(), pA->GetLineInfo(), rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_POLYGON_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineOrFillActive()) - { - const MetaPolygonAction* pA = (const MetaPolygonAction*)pAction; - basegfx::B2DPolygon aOutline(pA->GetPolygon().getB2DPolygon()); - - // the metafile play interprets the polygons from MetaPolygonAction - // always as closed and always paints an edge from last to first point, - // so force to closed here to emulate that - if(aOutline.count() > 1 && !aOutline.isClosed()) - { - aOutline.setClosed(true); - } - - createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_POLYPOLYGON_ACTION : - { - /** CHECKED, WORKS WELL */ - if(rPropertyHolders.Current().getLineOrFillActive()) - { - const MetaPolyPolygonAction* pA = (const MetaPolyPolygonAction*)pAction; - basegfx::B2DPolyPolygon aPolyPolygonOutline(pA->GetPolyPolygon().getB2DPolyPolygon()); - - // the metafile play interprets the single polygons from MetaPolyPolygonAction - // always as closed and always paints an edge from last to first point, - // so force to closed here to emulate that - for(sal_uInt32 b(0); b < aPolyPolygonOutline.count(); b++) - { - basegfx::B2DPolygon aPolygonOutline(aPolyPolygonOutline.getB2DPolygon(b)); - - if(aPolygonOutline.count() > 1 && !aPolygonOutline.isClosed()) - { - aPolygonOutline.setClosed(true); - aPolyPolygonOutline.setB2DPolygon(b, aPolygonOutline); - } - } - - createHairlineAndFillPrimitive(aPolyPolygonOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_TEXT_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaTextAction* pA = (const MetaTextAction*)pAction; - sal_uInt32 nTextLength(pA->GetLen()); - const sal_uInt32 nTextIndex(pA->GetIndex()); - const sal_uInt32 nStringLength(pA->GetText().Len()); - - if(nTextLength + nTextIndex > nStringLength) - { - nTextLength = nStringLength - nTextIndex; - } - - if(nTextLength && rPropertyHolders.Current().getTextColorActive()) - { - const std::vector< double > aDXArray; - proccessMetaTextAction( - pA->GetPoint(), - pA->GetText(), - nTextIndex, - nTextLength, - aDXArray, - rTargetHolders.Current(), - rPropertyHolders.Current()); - } - - break; - } - case META_TEXTARRAY_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaTextArrayAction* pA = (const MetaTextArrayAction*)pAction; - sal_uInt32 nTextLength(pA->GetLen()); - const sal_uInt32 nTextIndex(pA->GetIndex()); - const sal_uInt32 nStringLength(pA->GetText().Len()); - - if(nTextLength + nTextIndex > nStringLength) - { - nTextLength = nTextIndex > nStringLength ? 0 : nStringLength - nTextIndex; - } - - if(nTextLength && rPropertyHolders.Current().getTextColorActive()) - { - // preapare DXArray (if used) - std::vector< double > aDXArray; - sal_Int32* pDXArray = pA->GetDXArray(); - - if(pDXArray) - { - aDXArray.reserve(nTextLength); - - for(sal_uInt32 a(0); a < nTextLength; a++) - { - aDXArray.push_back((double)(*(pDXArray + a))); - } - } - - proccessMetaTextAction( - pA->GetPoint(), - pA->GetText(), - nTextIndex, - nTextLength, - aDXArray, - rTargetHolders.Current(), - rPropertyHolders.Current()); - } - - break; - } - case META_STRETCHTEXT_ACTION : - { - // #i108440# StarMath uses MetaStretchTextAction, thus support is needed. - // It looks as if it pretty never really uses a width different from - // the default text-layout width, but it's not possible to be sure. - // Implemented getting the DXArray and checking for scale at all. If - // scale is more than 3.5% different, scale the DXArray before usage. - // New status: - - /** CHECKED, WORKS WELL */ - const MetaStretchTextAction* pA = (const MetaStretchTextAction*)pAction; - sal_uInt32 nTextLength(pA->GetLen()); - const sal_uInt32 nTextIndex(pA->GetIndex()); - const sal_uInt32 nStringLength(pA->GetText().Len()); - - if(nTextLength + nTextIndex > nStringLength) - { - nTextLength = nStringLength - nTextIndex; - } - - if(nTextLength && rPropertyHolders.Current().getTextColorActive()) - { - drawinglayer::primitive2d::TextLayouterDevice aTextLayouterDevice; - aTextLayouterDevice.setFont(rPropertyHolders.Current().getFont()); - - ::std::vector< double > aTextArray( - aTextLayouterDevice.getTextArray( - pA->GetText(), - nTextIndex, - nTextLength)); - - if(!aTextArray.empty()) - { - const double fTextLength(aTextArray.back()); - - if(0.0 != fTextLength && pA->GetWidth()) - { - const double fRelative(pA->GetWidth() / fTextLength); - - if(fabs(fRelative - 1.0) >= 0.035) - { - // when derivation is more than 3,5% from default text size, - // scale the DXArray - for(sal_uInt32 a(0); a < aTextArray.size(); a++) - { - aTextArray[a] *= fRelative; - } - } - } - } - - proccessMetaTextAction( - pA->GetPoint(), - pA->GetText(), - nTextIndex, - nTextLength, - aTextArray, - rTargetHolders.Current(), - rPropertyHolders.Current()); - } - - break; - } - case META_TEXTRECT_ACTION : - { - /** CHECKED, WORKS WELL */ - // OSL_FAIL("META_TEXTRECT_ACTION requested (!)"); - const MetaTextRectAction* pA = (const MetaTextRectAction*)pAction; - const Rectangle& rRectangle = pA->GetRect(); - const sal_uInt32 nStringLength(pA->GetText().Len()); - - if(!rRectangle.IsEmpty() && 0 != nStringLength) - { - // The problem with this action is that it describes unlayouted text - // and the layout capabilities are in EditEngine/Outliner in SVX. The - // same problem is true for VCL which internally has implementations - // to layout text in this case. There exists even a call - // OutputDevice::AddTextRectActions(...) to create the needed actions - // as 'sub-content' of a Metafile. Unfortunately i do not have an - // OutputDevice here since this interpreter tries to work without - // VCL AFAP. - // Since AddTextRectActions is the only way as long as we do not have - // a simple text layouter available, i will try to add it to the - // TextLayouterDevice isloation. - drawinglayer::primitive2d::TextLayouterDevice aTextLayouterDevice; - aTextLayouterDevice.setFont(rPropertyHolders.Current().getFont()); - GDIMetaFile aGDIMetaFile; - - aTextLayouterDevice.addTextRectActions( - rRectangle, pA->GetText(), pA->GetStyle(), aGDIMetaFile); - - if(aGDIMetaFile.GetActionSize()) - { - // cerate sub-content - drawinglayer::primitive2d::Primitive2DSequence xSubContent; - { - rTargetHolders.Push(); - // #i# for sub-Mteafile contents, do start with new, default render state - rPropertyHolders.PushDefault(); - interpretMetafile(aGDIMetaFile, rTargetHolders, rPropertyHolders, rViewInformation); - xSubContent = rTargetHolders.Current().getPrimitive2DSequence(rPropertyHolders.Current()); - rPropertyHolders.Pop(); - rTargetHolders.Pop(); - } - - if(xSubContent.hasElements()) - { - // add with transformation - rTargetHolders.Current().append( - new drawinglayer::primitive2d::TransformPrimitive2D( - rPropertyHolders.Current().getTransformation(), - xSubContent)); - } - } - } - - break; - } - case META_BMP_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaBmpAction* pA = (const MetaBmpAction*)pAction; - const BitmapEx aBitmapEx(pA->GetBitmap()); - - createBitmapExPrimitive(aBitmapEx, pA->GetPoint(), rTargetHolders.Current(), rPropertyHolders.Current()); - - break; - } - case META_BMPSCALE_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaBmpScaleAction* pA = (const MetaBmpScaleAction*)pAction; - const Bitmap aBitmapEx(pA->GetBitmap()); - - createBitmapExPrimitive(aBitmapEx, pA->GetPoint(), pA->GetSize(), rTargetHolders.Current(), rPropertyHolders.Current()); - - break; - } - case META_BMPSCALEPART_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaBmpScalePartAction* pA = (const MetaBmpScalePartAction*)pAction; - const Bitmap& rBitmap = pA->GetBitmap(); - - if(!rBitmap.IsEmpty()) - { - Bitmap aCroppedBitmap(rBitmap); - const Rectangle aCropRectangle(pA->GetSrcPoint(), pA->GetSrcSize()); - - if(!aCropRectangle.IsEmpty()) - { - aCroppedBitmap.Crop(aCropRectangle); - } - - const BitmapEx aCroppedBitmapEx(aCroppedBitmap); - createBitmapExPrimitive(aCroppedBitmapEx, pA->GetDestPoint(), pA->GetDestSize(), rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_BMPEX_ACTION : - { - /** CHECKED, WORKS WELL: Simply same as META_BMP_ACTION */ - const MetaBmpExAction* pA = (const MetaBmpExAction*)pAction; - const BitmapEx& rBitmapEx = pA->GetBitmapEx(); - - createBitmapExPrimitive(rBitmapEx, pA->GetPoint(), rTargetHolders.Current(), rPropertyHolders.Current()); - - break; - } - case META_BMPEXSCALE_ACTION : - { - /** CHECKED, WORKS WELL: Simply same as META_BMPSCALE_ACTION */ - const MetaBmpExScaleAction* pA = (const MetaBmpExScaleAction*)pAction; - const BitmapEx& rBitmapEx = pA->GetBitmapEx(); - - createBitmapExPrimitive(rBitmapEx, pA->GetPoint(), pA->GetSize(), rTargetHolders.Current(), rPropertyHolders.Current()); - - break; - } - case META_BMPEXSCALEPART_ACTION : - { - /** CHECKED, WORKS WELL: Simply same as META_BMPSCALEPART_ACTION */ - const MetaBmpExScalePartAction* pA = (const MetaBmpExScalePartAction*)pAction; - const BitmapEx& rBitmapEx = pA->GetBitmapEx(); - - if(!rBitmapEx.IsEmpty()) - { - BitmapEx aCroppedBitmapEx(rBitmapEx); - const Rectangle aCropRectangle(pA->GetSrcPoint(), pA->GetSrcSize()); - - if(!aCropRectangle.IsEmpty()) - { - aCroppedBitmapEx.Crop(aCropRectangle); - } - - createBitmapExPrimitive(aCroppedBitmapEx, pA->GetDestPoint(), pA->GetDestSize(), rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_MASK_ACTION : - { - /** CHECKED, WORKS WELL: Simply same as META_BMP_ACTION */ - const MetaMaskAction* pA = (const MetaMaskAction*)pAction; - const BitmapEx aBitmapEx(createMaskBmpEx(pA->GetBitmap(), pA->GetColor())); - - createBitmapExPrimitive(aBitmapEx, pA->GetPoint(), rTargetHolders.Current(), rPropertyHolders.Current()); - - break; - } - case META_MASKSCALE_ACTION : - { - /** CHECKED, WORKS WELL: Simply same as META_BMPSCALE_ACTION */ - const MetaMaskScaleAction* pA = (const MetaMaskScaleAction*)pAction; - const BitmapEx aBitmapEx(createMaskBmpEx(pA->GetBitmap(), pA->GetColor())); - - createBitmapExPrimitive(aBitmapEx, pA->GetPoint(), pA->GetSize(), rTargetHolders.Current(), rPropertyHolders.Current()); - - break; - } - case META_MASKSCALEPART_ACTION : - { - /** CHECKED, WORKS WELL: Simply same as META_BMPSCALEPART_ACTION */ - const MetaMaskScalePartAction* pA = (const MetaMaskScalePartAction*)pAction; - const Bitmap& rBitmap = pA->GetBitmap(); - - if(!rBitmap.IsEmpty()) - { - Bitmap aCroppedBitmap(rBitmap); - const Rectangle aCropRectangle(pA->GetSrcPoint(), pA->GetSrcSize()); - - if(!aCropRectangle.IsEmpty()) - { - aCroppedBitmap.Crop(aCropRectangle); - } - - const BitmapEx aCroppedBitmapEx(createMaskBmpEx(aCroppedBitmap, pA->GetColor())); - createBitmapExPrimitive(aCroppedBitmapEx, pA->GetDestPoint(), pA->GetDestSize(), rTargetHolders.Current(), rPropertyHolders.Current()); - } - - break; - } - case META_GRADIENT_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaGradientAction* pA = (const MetaGradientAction*)pAction; - const Rectangle& rRectangle = pA->GetRect(); - - if(!rRectangle.IsEmpty()) - { - basegfx::B2DRange aRange(rRectangle.Left(), rRectangle.Top(), rRectangle.Right(), rRectangle.Bottom()); - - if(!aRange.isEmpty()) - { - const Gradient& rGradient = pA->GetGradient(); - const drawinglayer::attribute::FillGradientAttribute aAttribute(createFillGradientAttribute(rGradient)); - basegfx::B2DPolyPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange)); - - if(aAttribute.getStartColor() == aAttribute.getEndColor()) - { - // not really a gradient. Create filled rectangle - createFillPrimitive( - aOutline, - rTargetHolders.Current(), - rPropertyHolders.Current()); - } - else - { - // really a gradient - aRange.transform(rPropertyHolders.Current().getTransformation()); - drawinglayer::primitive2d::Primitive2DSequence xGradient(1); - - if(rPropertyHolders.Current().isRasterOpInvert()) - { - // use a special version of FillGradientPrimitive2D which creates - // non-overlapping geometry on decomposition to makethe old XOR - // paint 'trick' work. - xGradient[0] = drawinglayer::primitive2d::Primitive2DReference( - new drawinglayer::primitive2d::NonOverlappingFillGradientPrimitive2D( - aRange, - aAttribute)); - } - else - { - xGradient[0] = drawinglayer::primitive2d::Primitive2DReference( - new drawinglayer::primitive2d::FillGradientPrimitive2D( - aRange, - aAttribute)); - } - - // #i112300# clip against polygon representing the rectangle from - // the action. This is implicitely done using a temp Clipping in VCL - // when a MetaGradientAction is executed - aOutline.transform(rPropertyHolders.Current().getTransformation()); - rTargetHolders.Current().append( - new drawinglayer::primitive2d::MaskPrimitive2D( - aOutline, - xGradient)); - } - } - } - - break; - } - case META_HATCH_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaHatchAction* pA = (const MetaHatchAction*)pAction; - basegfx::B2DPolyPolygon aOutline(pA->GetPolyPolygon().getB2DPolyPolygon()); - - if(aOutline.count()) - { - const Hatch& rHatch = pA->GetHatch(); - const drawinglayer::attribute::FillHatchAttribute aAttribute(createFillHatchAttribute(rHatch)); - - aOutline.transform(rPropertyHolders.Current().getTransformation()); - - const basegfx::B2DRange aObjectRange(aOutline.getB2DRange()); - const drawinglayer::primitive2d::Primitive2DReference aFillHatch( - new drawinglayer::primitive2d::FillHatchPrimitive2D( - aObjectRange, - basegfx::BColor(), - aAttribute)); - - rTargetHolders.Current().append( - new drawinglayer::primitive2d::MaskPrimitive2D( - aOutline, - drawinglayer::primitive2d::Primitive2DSequence(&aFillHatch, 1))); - } - - break; - } - case META_WALLPAPER_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaWallpaperAction* pA = (const MetaWallpaperAction*)pAction; - Rectangle aWallpaperRectangle(pA->GetRect()); - - if(!aWallpaperRectangle.IsEmpty()) - { - const Wallpaper& rWallpaper = pA->GetWallpaper(); - const WallpaperStyle eWallpaperStyle(rWallpaper.GetStyle()); - basegfx::B2DRange aWallpaperRange( - aWallpaperRectangle.Left(), aWallpaperRectangle.Top(), - aWallpaperRectangle.Right(), aWallpaperRectangle.Bottom()); - - if(WALLPAPER_NULL != eWallpaperStyle) - { - if(rWallpaper.IsBitmap()) - { - // create bitmap background. Caution: This - // also will create gradient/color background(s) - // when the bitmap is transparent or not tiled - CreateAndAppendBitmapWallpaper( - aWallpaperRange, - rWallpaper, - rTargetHolders.Current(), - rPropertyHolders.Current()); - } - else if(rWallpaper.IsGradient()) - { - // create gradient background - rTargetHolders.Current().append( - CreateGradientWallpaper( - aWallpaperRange, - rWallpaper.GetGradient(), - rPropertyHolders.Current())); - } - else if(!rWallpaper.GetColor().GetTransparency()) - { - // create color background - rTargetHolders.Current().append( - CreateColorWallpaper( - aWallpaperRange, - rWallpaper.GetColor().getBColor(), - rPropertyHolders.Current())); - } - } - } - - break; - } - case META_CLIPREGION_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaClipRegionAction* pA = (const MetaClipRegionAction*)pAction; - - if(pA->IsClipping()) - { - // new clipping. Get PolyPolygon and transform with current transformation - basegfx::B2DPolyPolygon aNewClipPolyPolygon(getB2DPolyPolygonFromRegion(pA->GetRegion())); - - aNewClipPolyPolygon.transform(rPropertyHolders.Current().getTransformation()); - HandleNewClipRegion(aNewClipPolyPolygon, rTargetHolders, rPropertyHolders); - } - else - { - // end clipping - const basegfx::B2DPolyPolygon aEmptyPolyPolygon; - - HandleNewClipRegion(aEmptyPolyPolygon, rTargetHolders, rPropertyHolders); - } - - break; - } - case META_ISECTRECTCLIPREGION_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaISectRectClipRegionAction* pA = (const MetaISectRectClipRegionAction*)pAction; - const Rectangle& rRectangle = pA->GetRect(); - - if(rRectangle.IsEmpty()) - { - // intersect with empty rectangle will always give empty - // ClipPolyPolygon; start new clipping with empty PolyPolygon - const basegfx::B2DPolyPolygon aEmptyPolyPolygon; - - HandleNewClipRegion(aEmptyPolyPolygon, rTargetHolders, rPropertyHolders); - } - else - { - // create transformed ClipRange - basegfx::B2DRange aClipRange( - rRectangle.Left(), rRectangle.Top(), - rRectangle.Right(), rRectangle.Bottom()); - - aClipRange.transform(rPropertyHolders.Current().getTransformation()); - - if(rPropertyHolders.Current().getClipPolyPolygonActive()) - { - if(0 == rPropertyHolders.Current().getClipPolyPolygon().count()) - { - // nothing to do, empty active clipPolyPolygon will stay - // empty when intersecting - } - else - { - // AND existing region and new ClipRange - const basegfx::B2DPolyPolygon aOriginalPolyPolygon( - rPropertyHolders.Current().getClipPolyPolygon()); - basegfx::B2DPolyPolygon aClippedPolyPolygon; - - if(aOriginalPolyPolygon.count()) - { - aClippedPolyPolygon = basegfx::tools::clipPolyPolygonOnRange( - aOriginalPolyPolygon, - aClipRange, - true, - false); - } - - if(aClippedPolyPolygon != aOriginalPolyPolygon) - { - // start new clipping with intersected region - HandleNewClipRegion( - aClippedPolyPolygon, - rTargetHolders, - rPropertyHolders); - } - } - } - else - { - // start new clipping with ClipRange - const basegfx::B2DPolyPolygon aNewClipPolyPolygon( - basegfx::tools::createPolygonFromRect(aClipRange)); - - HandleNewClipRegion(aNewClipPolyPolygon, rTargetHolders, rPropertyHolders); - } - } - - break; - } - case META_ISECTREGIONCLIPREGION_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaISectRegionClipRegionAction* pA = (const MetaISectRegionClipRegionAction*)pAction; - const Region& rNewRegion = pA->GetRegion(); - - if(rNewRegion.IsEmpty()) - { - // intersect with empty region will always give empty - // region; start new clipping with empty PolyPolygon - const basegfx::B2DPolyPolygon aEmptyPolyPolygon; - - HandleNewClipRegion(aEmptyPolyPolygon, rTargetHolders, rPropertyHolders); - } - else - { - // get new ClipPolyPolygon, transform it with current transformation - basegfx::B2DPolyPolygon aNewClipPolyPolygon(getB2DPolyPolygonFromRegion(rNewRegion)); - aNewClipPolyPolygon.transform(rPropertyHolders.Current().getTransformation()); - - if(rPropertyHolders.Current().getClipPolyPolygonActive()) - { - if(0 == rPropertyHolders.Current().getClipPolyPolygon().count()) - { - // nothing to do, empty active clipPolyPolygon will stay empty - // when intersecting with any region - } - else - { - // AND existing and new region - const basegfx::B2DPolyPolygon aOriginalPolyPolygon( - rPropertyHolders.Current().getClipPolyPolygon()); - basegfx::B2DPolyPolygon aClippedPolyPolygon; - - if(aOriginalPolyPolygon.count()) - { - aClippedPolyPolygon = basegfx::tools::clipPolyPolygonOnPolyPolygon( - aOriginalPolyPolygon, aNewClipPolyPolygon, true, false); - } - - if(aClippedPolyPolygon != aOriginalPolyPolygon) - { - // start new clipping with intersected ClipPolyPolygon - HandleNewClipRegion(aClippedPolyPolygon, rTargetHolders, rPropertyHolders); - } - } - } - else - { - // start new clipping with new ClipPolyPolygon - HandleNewClipRegion(aNewClipPolyPolygon, rTargetHolders, rPropertyHolders); - } - } - - break; - } - case META_MOVECLIPREGION_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaMoveClipRegionAction* pA = (const MetaMoveClipRegionAction*)pAction; - - if(rPropertyHolders.Current().getClipPolyPolygonActive()) - { - if(0 == rPropertyHolders.Current().getClipPolyPolygon().count()) - { - // nothing to do - } - else - { - const sal_Int32 nHor(pA->GetHorzMove()); - const sal_Int32 nVer(pA->GetVertMove()); - - if(0 != nHor || 0 != nVer) - { - // prepare translation, add current transformation - basegfx::B2DVector aVector(pA->GetHorzMove(), pA->GetVertMove()); - aVector *= rPropertyHolders.Current().getTransformation(); - basegfx::B2DHomMatrix aTransform( - basegfx::tools::createTranslateB2DHomMatrix(aVector)); - - // transform existing region - basegfx::B2DPolyPolygon aClipPolyPolygon( - rPropertyHolders.Current().getClipPolyPolygon()); - - aClipPolyPolygon.transform(aTransform); - HandleNewClipRegion(aClipPolyPolygon, rTargetHolders, rPropertyHolders); - } - } - } - - break; - } - case META_LINECOLOR_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaLineColorAction* pA = (const MetaLineColorAction*)pAction; - const bool bActive(pA->IsSetting()); - - rPropertyHolders.Current().setLineColorActive(bActive); - if(bActive) - rPropertyHolders.Current().setLineColor(pA->GetColor().getBColor()); - - break; - } - case META_FILLCOLOR_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaFillColorAction* pA = (const MetaFillColorAction*)pAction; - const bool bActive(pA->IsSetting()); - - rPropertyHolders.Current().setFillColorActive(bActive); - if(bActive) - rPropertyHolders.Current().setFillColor(pA->GetColor().getBColor()); - - break; - } - case META_TEXTCOLOR_ACTION : - { - /** SIMPLE, DONE */ - const MetaTextColorAction* pA = (const MetaTextColorAction*)pAction; - const bool bActivate(COL_TRANSPARENT != pA->GetColor().GetColor()); - - rPropertyHolders.Current().setTextColorActive(bActivate); - rPropertyHolders.Current().setTextColor(pA->GetColor().getBColor()); - - break; - } - case META_TEXTFILLCOLOR_ACTION : - { - /** SIMPLE, DONE */ - const MetaTextFillColorAction* pA = (const MetaTextFillColorAction*)pAction; - const bool bWithColorArgument(pA->IsSetting()); - - if(bWithColorArgument) - { - // emulate OutputDevice::SetTextFillColor(...) WITH argument - const Color& rFontFillColor = pA->GetColor(); - rPropertyHolders.Current().setTextFillColor(rFontFillColor.getBColor()); - rPropertyHolders.Current().setTextFillColorActive(COL_TRANSPARENT != rFontFillColor.GetColor()); - } - else - { - // emulate SetFillColor() <- NO argument (!) - rPropertyHolders.Current().setTextFillColorActive(false); - } - - break; - } - case META_TEXTALIGN_ACTION : - { - /** SIMPLE, DONE */ - const MetaTextAlignAction* pA = (const MetaTextAlignAction*)pAction; - const TextAlign aNewTextAlign = pA->GetTextAlign(); - - // TextAlign is applied to the current font (as in - // OutputDevice::SetTextAlign which would be used when - // playing the Metafile) - if(rPropertyHolders.Current().getFont().GetAlign() != aNewTextAlign) - { - Font aNewFont(rPropertyHolders.Current().getFont()); - aNewFont.SetAlign(aNewTextAlign); - rPropertyHolders.Current().setFont(aNewFont); - } - - break; - } - case META_MAPMODE_ACTION : - { - /** CHECKED, WORKS WELL */ - // the most necessary MapMode to be interpreted is MAP_RELATIVE, - // but also the others may occur. Even not yet supported ones - // may need to be added here later - const MetaMapModeAction* pA = (const MetaMapModeAction*)pAction; - const MapMode& rMapMode = pA->GetMapMode(); - basegfx::B2DHomMatrix aMapping; - - if(MAP_RELATIVE == rMapMode.GetMapUnit()) - { - aMapping = getTransformFromMapMode(rMapMode); - } - else - { - switch(rMapMode.GetMapUnit()) - { - case MAP_100TH_MM : - { - if(MAP_TWIP == rPropertyHolders.Current().getMapUnit()) - { - // MAP_TWIP -> MAP_100TH_MM - const double fTwipTo100thMm(127.0 / 72.0); - aMapping.scale(fTwipTo100thMm, fTwipTo100thMm); - } - break; - } - case MAP_TWIP : - { - if(MAP_100TH_MM == rPropertyHolders.Current().getMapUnit()) - { - // MAP_100TH_MM -> MAP_TWIP - const double f100thMmToTwip(72.0 / 127.0); - aMapping.scale(f100thMmToTwip, f100thMmToTwip); - } - break; - } - default : - { - OSL_FAIL("interpretMetafile: META_MAPMODE_ACTION with unsupported MapUnit (!)"); - break; - } - } - - aMapping = getTransformFromMapMode(rMapMode) * aMapping; - rPropertyHolders.Current().setMapUnit(rMapMode.GetMapUnit()); - } - - if(!aMapping.isIdentity()) - { - aMapping = aMapping * rPropertyHolders.Current().getTransformation(); - rPropertyHolders.Current().setTransformation(aMapping); - } - - break; - } - case META_FONT_ACTION : - { - /** SIMPLE, DONE */ - const MetaFontAction* pA = (const MetaFontAction*)pAction; - rPropertyHolders.Current().setFont(pA->GetFont()); - Size aFontSize(pA->GetFont().GetSize()); - - if(0 == aFontSize.Height()) - { - // this should not happen but i got Metafiles where this was the - // case. A height needs to be guessed (similar to OutputDevice::ImplNewFont()) - Font aCorrectedFont(pA->GetFont()); - - // guess 16 pixel (as in VCL) - aFontSize = Size(0, 16); - - // convert to target MapUnit if not pixels - aFontSize = Application::GetDefaultDevice()->LogicToLogic( - aFontSize, MAP_PIXEL, rPropertyHolders.Current().getMapUnit()); - - aCorrectedFont.SetSize(aFontSize); - rPropertyHolders.Current().setFont(aCorrectedFont); - } - - // older Metafiles have no META_TEXTCOLOR_ACTION which defines - // the FontColor now, so use the Font's color when not transparent - const Color& rFontColor = pA->GetFont().GetColor(); - const bool bActivate(COL_TRANSPARENT != rFontColor.GetColor()); - - if(bActivate) - { - rPropertyHolders.Current().setTextColor(rFontColor.getBColor()); - } - - // caution: do NOT decativate here on transparet, see - // OutputDevice::SetFont(..) for more info - // rPropertyHolders.Current().setTextColorActive(bActivate); - - // for fill color emulate a MetaTextFillColorAction with !transparent as bool, - // see OutputDevice::SetFont(..) the if(mpMetaFile) case - if(bActivate) - { - const Color& rFontFillColor = pA->GetFont().GetFillColor(); - rPropertyHolders.Current().setTextFillColor(rFontFillColor.getBColor()); - rPropertyHolders.Current().setTextFillColorActive(COL_TRANSPARENT != rFontFillColor.GetColor()); - } - else - { - rPropertyHolders.Current().setTextFillColorActive(false); - } - - break; - } - case META_PUSH_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaPushAction* pA = (const MetaPushAction*)pAction; - rPropertyHolders.Push(pA->GetFlags()); - - break; - } - case META_POP_ACTION : - { - /** CHECKED, WORKS WELL */ - const bool bRegionMayChange(rPropertyHolders.Current().getPushFlags() & PUSH_CLIPREGION); - const bool bRasterOpMayChange(rPropertyHolders.Current().getPushFlags() & PUSH_RASTEROP); - - if(bRegionMayChange && rPropertyHolders.Current().getClipPolyPolygonActive()) - { - // end evtl. clipping - const basegfx::B2DPolyPolygon aEmptyPolyPolygon; - - HandleNewClipRegion(aEmptyPolyPolygon, rTargetHolders, rPropertyHolders); - } - - if(bRasterOpMayChange && rPropertyHolders.Current().isRasterOpActive()) - { - // end evtl. RasterOp - HandleNewRasterOp(ROP_OVERPAINT, rTargetHolders, rPropertyHolders); - } - - rPropertyHolders.Pop(); - - if(bRasterOpMayChange && rPropertyHolders.Current().isRasterOpActive()) - { - // start evtl. RasterOp - HandleNewRasterOp(rPropertyHolders.Current().getRasterOp(), rTargetHolders, rPropertyHolders); - } - - if(bRegionMayChange && rPropertyHolders.Current().getClipPolyPolygonActive()) - { - // start evtl. clipping - HandleNewClipRegion( - rPropertyHolders.Current().getClipPolyPolygon(), rTargetHolders, rPropertyHolders); - } - - break; - } - case META_RASTEROP_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaRasterOpAction* pA = (const MetaRasterOpAction*)pAction; - const RasterOp aRasterOp = pA->GetRasterOp(); - - HandleNewRasterOp(aRasterOp, rTargetHolders, rPropertyHolders); - - break; - } - case META_TRANSPARENT_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaTransparentAction* pA = (const MetaTransparentAction*)pAction; - const basegfx::B2DPolyPolygon aOutline(pA->GetPolyPolygon().getB2DPolyPolygon()); - - if(aOutline.count()) - { - const sal_uInt16 nTransparence(pA->GetTransparence()); - - if(0 == nTransparence) - { - // not transparent - createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - } - else if(nTransparence >= 100) - { - // fully or more than transparent - } - else - { - // transparent. Create new target - rTargetHolders.Push(); - - // create primitives there and get them - createHairlineAndFillPrimitive(aOutline, rTargetHolders.Current(), rPropertyHolders.Current()); - const drawinglayer::primitive2d::Primitive2DSequence aSubContent( - rTargetHolders.Current().getPrimitive2DSequence(rPropertyHolders.Current())); - - // back to old target - rTargetHolders.Pop(); - - if(aSubContent.hasElements()) - { - rTargetHolders.Current().append( - new drawinglayer::primitive2d::UnifiedTransparencePrimitive2D( - aSubContent, - nTransparence * 0.01)); - } - } - } - - break; - } - case META_EPS_ACTION : - { - /** CHECKED, WORKS WELL */ - // To support this action, i have added a EpsPrimitive2D which will - // by default decompose to the Metafile replacement data. To support - // this EPS on screen, the renderer visualizing this has to support - // that primitive and visualize the Eps file (e.g. printing) - const MetaEPSAction* pA = (const MetaEPSAction*)pAction; - const Rectangle aRectangle(pA->GetPoint(), pA->GetSize()); - - if(!aRectangle.IsEmpty()) - { - // create object transform - basegfx::B2DHomMatrix aObjectTransform; - - aObjectTransform.set(0, 0, aRectangle.GetWidth()); - aObjectTransform.set(1, 1, aRectangle.GetHeight()); - aObjectTransform.set(0, 2, aRectangle.Left()); - aObjectTransform.set(1, 2, aRectangle.Top()); - - // add current transformation - aObjectTransform = rPropertyHolders.Current().getTransformation() * aObjectTransform; - - // embed using EpsPrimitive - rTargetHolders.Current().append( - new drawinglayer::primitive2d::EpsPrimitive2D( - aObjectTransform, - pA->GetLink(), - pA->GetSubstitute())); - } - - break; - } - case META_REFPOINT_ACTION : - { - /** SIMPLE, DONE */ - // only used for hatch and line pattern offsets, pretty much no longer - // supported today - // const MetaRefPointAction* pA = (const MetaRefPointAction*)pAction; - break; - } - case META_TEXTLINECOLOR_ACTION : - { - /** SIMPLE, DONE */ - const MetaTextLineColorAction* pA = (const MetaTextLineColorAction*)pAction; - const bool bActive(pA->IsSetting()); - - rPropertyHolders.Current().setTextLineColorActive(bActive); - if(bActive) - rPropertyHolders.Current().setTextLineColor(pA->GetColor().getBColor()); - - break; - } - case META_TEXTLINE_ACTION : - { - /** CHECKED, WORKS WELL */ - // actually creates overline, underline and strikeouts, so - // these should be isolated from TextDecoratedPortionPrimitive2D - // to own primitives. Done, available now. - // - // This Metaaction seems not to be used (was not used in any - // checked files). It's used in combination with the current - // Font. - const MetaTextLineAction* pA = (const MetaTextLineAction*)pAction; - - proccessMetaTextLineAction( - *pA, - rTargetHolders.Current(), - rPropertyHolders.Current()); - - break; - } - case META_FLOATTRANSPARENT_ACTION : - { - /** CHECKED, WORKS WELL */ - const MetaFloatTransparentAction* pA = (const MetaFloatTransparentAction*)pAction; - const Rectangle aTargetRectangle(pA->GetPoint(), pA->GetSize()); - - if(!aTargetRectangle.IsEmpty()) - { - const GDIMetaFile& rContent = pA->GetGDIMetaFile(); - - if(rContent.GetActionSize()) - { - // create the sub-content with no embedding specific to the - // sub-metafile, this seems not to be used. - drawinglayer::primitive2d::Primitive2DSequence xSubContent; - { - rTargetHolders.Push(); - // #i# for sub-Mteafile contents, do start with new, default render state - rPropertyHolders.PushDefault(); - interpretMetafile(rContent, rTargetHolders, rPropertyHolders, rViewInformation); - xSubContent = rTargetHolders.Current().getPrimitive2DSequence(rPropertyHolders.Current()); - rPropertyHolders.Pop(); - rTargetHolders.Pop(); - } - - if(xSubContent.hasElements()) - { - // check if gradient is a real gradient - const Gradient& rGradient = pA->GetGradient(); - const drawinglayer::attribute::FillGradientAttribute aAttribute(createFillGradientAttribute(rGradient)); - - if(aAttribute.getStartColor() == aAttribute.getEndColor()) - { - // not really a gradient; create UnifiedTransparencePrimitive2D - rTargetHolders.Current().append( - new drawinglayer::primitive2d::UnifiedTransparencePrimitive2D( - xSubContent, - aAttribute.getStartColor().luminance())); - } - else - { - // really a gradient. Create gradient sub-content (with correct scaling) - basegfx::B2DRange aRange( - aTargetRectangle.Left(), aTargetRectangle.Top(), - aTargetRectangle.Right(), aTargetRectangle.Bottom()); - aRange.transform(rPropertyHolders.Current().getTransformation()); - - // prepare gradient for transparent content - const drawinglayer::primitive2d::Primitive2DReference xTransparence( - new drawinglayer::primitive2d::FillGradientPrimitive2D( - aRange, - aAttribute)); - - // create transparence primitive - rTargetHolders.Current().append( - new drawinglayer::primitive2d::TransparencePrimitive2D( - xSubContent, - drawinglayer::primitive2d::Primitive2DSequence(&xTransparence, 1))); - } - } - } - } - - break; - } - case META_GRADIENTEX_ACTION : - { - /** SIMPLE, DONE */ - // This is only a data holder which is interpreted inside comment actions, - // see META_COMMENT_ACTION for more info - // const MetaGradientExAction* pA = (const MetaGradientExAction*)pAction; - break; - } - case META_LAYOUTMODE_ACTION : - { - /** SIMPLE, DONE */ - const MetaLayoutModeAction* pA = (const MetaLayoutModeAction*)pAction; - rPropertyHolders.Current().setLayoutMode(pA->GetLayoutMode()); - break; - } - case META_TEXTLANGUAGE_ACTION : - { - /** SIMPLE, DONE */ - const MetaTextLanguageAction* pA = (const MetaTextLanguageAction*)pAction; - rPropertyHolders.Current().setLanguageType(pA->GetTextLanguage()); - break; - } - case META_OVERLINECOLOR_ACTION : - { - /** SIMPLE, DONE */ - const MetaOverlineColorAction* pA = (const MetaOverlineColorAction*)pAction; - const bool bActive(pA->IsSetting()); - - rPropertyHolders.Current().setOverlineColorActive(bActive); - if(bActive) - rPropertyHolders.Current().setOverlineColor(pA->GetColor().getBColor()); - - break; - } - case META_RENDERGRAPHIC_ACTION : - { - const MetaRenderGraphicAction* pA = (const MetaRenderGraphicAction*)pAction; - const Rectangle aRectangle(pA->GetPoint(), pA->GetSize()); - - if(!aRectangle.IsEmpty()) - { - // create object transform - basegfx::B2DHomMatrix aObjectTransform; - - aObjectTransform.set(0, 0, aRectangle.GetWidth()); - aObjectTransform.set(1, 1, aRectangle.GetHeight()); - aObjectTransform.set(0, 2, aRectangle.Left()); - aObjectTransform.set(1, 2, aRectangle.Top()); - - // add current transformation - aObjectTransform = rPropertyHolders.Current().getTransformation() * aObjectTransform; - - // embed using EpsPrimitive - rTargetHolders.Current().append( - new drawinglayer::primitive2d::RenderGraphicPrimitive2D( - pA->GetRenderGraphic(), - aObjectTransform ) ); - } - - break; - } - case META_COMMENT_ACTION : - { - /** CHECKED, WORKS WELL */ - // I already implemented - // XPATHFILL_SEQ_BEGIN, XPATHFILL_SEQ_END - // XPATHSTROKE_SEQ_BEGIN, XPATHSTROKE_SEQ_END, - // but opted to remove these again; it works well without them - // and makes the code less dependent from those Metafile Add-Ons - const MetaCommentAction* pA = (const MetaCommentAction*)pAction; - - if(COMPARE_EQUAL == pA->GetComment().CompareIgnoreCaseToAscii("XGRAD_SEQ_BEGIN")) - { - // XGRAD_SEQ_BEGIN, XGRAD_SEQ_END should be supported since the - // pure recorded paint of the gradients uses the XOR paint functionality - // ('trick'). This is (and will be) broblematic with AntAliasing, so it's - // better to use this info - const MetaGradientExAction* pMetaGradientExAction = 0; - bool bDone(false); - sal_uInt32 b(nAction + 1); - - for(; !bDone && b < nCount; b++) - { - pAction = rMetaFile.GetAction(b); - - if(META_GRADIENTEX_ACTION == pAction->GetType()) - { - pMetaGradientExAction = (const MetaGradientExAction*)pAction; - } - else if(META_COMMENT_ACTION == pAction->GetType()) - { - if(COMPARE_EQUAL == ((const MetaCommentAction*)pAction)->GetComment().CompareIgnoreCaseToAscii("XGRAD_SEQ_END")) - { - bDone = true; - } - } - } - - if(bDone && pMetaGradientExAction) - { - // consume actions and skip forward - nAction = b - 1; - - // get geometry data - basegfx::B2DPolyPolygon aPolyPolygon(pMetaGradientExAction->GetPolyPolygon().getB2DPolyPolygon()); - - if(aPolyPolygon.count()) - { - // transform geometry - aPolyPolygon.transform(rPropertyHolders.Current().getTransformation()); - - // get and check if gradient is a real gradient - const Gradient& rGradient = pMetaGradientExAction->GetGradient(); - const drawinglayer::attribute::FillGradientAttribute aAttribute(createFillGradientAttribute(rGradient)); - - if(aAttribute.getStartColor() == aAttribute.getEndColor()) - { - // not really a gradient - rTargetHolders.Current().append( - new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D( - aPolyPolygon, - aAttribute.getStartColor())); - } - else - { - // really a gradient - rTargetHolders.Current().append( - new drawinglayer::primitive2d::PolyPolygonGradientPrimitive2D( - aPolyPolygon, - aAttribute)); - } - } - } - } - - break; - } - default: - { - OSL_FAIL("Unknown MetaFile Action (!)"); - break; - } - } - } - } -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence MetafilePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - // prepare target and porperties; each will have one default entry - TargetHolders aTargetHolders; - PropertyHolders aPropertyHolders; - - // set target MapUnit at Properties - aPropertyHolders.Current().setMapUnit(getMetaFile().GetPrefMapMode().GetMapUnit()); - - // interpret the Metafile - interpretMetafile(getMetaFile(), aTargetHolders, aPropertyHolders, rViewInformation); - - // get the content. There should be ony one target, as in the start condition, - // but iterating will be the right thing to do when some push/pop is not closed - Primitive2DSequence xRetval; - - while(aTargetHolders.size() > 1) - { - appendPrimitive2DSequenceToPrimitive2DSequence(xRetval, - aTargetHolders.Current().getPrimitive2DSequence(aPropertyHolders.Current())); - aTargetHolders.Pop(); - } - - appendPrimitive2DSequenceToPrimitive2DSequence(xRetval, - aTargetHolders.Current().getPrimitive2DSequence(aPropertyHolders.Current())); - - if(xRetval.hasElements()) - { - // get target size - const Rectangle aMtfTarget(getMetaFile().GetPrefMapMode().GetOrigin(), getMetaFile().GetPrefSize()); - - // create transformation - basegfx::B2DHomMatrix aAdaptedTransform; - - aAdaptedTransform.translate(-aMtfTarget.Left(), -aMtfTarget.Top()); - aAdaptedTransform.scale( - aMtfTarget.getWidth() ? 1.0 / aMtfTarget.getWidth() : 1.0, - aMtfTarget.getHeight() ? 1.0 / aMtfTarget.getHeight() : 1.0); - aAdaptedTransform = getTransform() * aAdaptedTransform; - - // embed to target transformation - const Primitive2DReference aEmbeddedTransform( - new TransformPrimitive2D( - aAdaptedTransform, - xRetval)); - - xRetval = Primitive2DSequence(&aEmbeddedTransform, 1); - } - - return xRetval; - } - - MetafilePrimitive2D::MetafilePrimitive2D( - const basegfx::B2DHomMatrix& rMetaFileTransform, - const GDIMetaFile& rMetaFile) - : BufferedDecompositionPrimitive2D(), - maMetaFileTransform(rMetaFileTransform), - maMetaFile(rMetaFile) - { - } - - bool MetafilePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const MetafilePrimitive2D& rCompare = (MetafilePrimitive2D&)rPrimitive; - - return (getTransform() == rCompare.getTransform() - && getMetaFile() == rCompare.getMetaFile()); - } - - return false; - } - - basegfx::B2DRange MetafilePrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // use own implementation to quickly answer the getB2DRange question. The - // MetafilePrimitive2D assumes that all geometry is inside of the shape. If - // this is not the case (i have already seen some wrong Metafiles) it should - // be embedded to a MaskPrimitive2D - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(getTransform()); - - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(MetafilePrimitive2D, PRIMITIVE2D_ID_METAFILEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/modifiedcolorprimitive2d.cxx b/drawinglayer/source/primitive2d/modifiedcolorprimitive2d.cxx deleted file mode 100644 index d43403be14..0000000000 --- a/drawinglayer/source/primitive2d/modifiedcolorprimitive2d.cxx +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - ModifiedColorPrimitive2D::ModifiedColorPrimitive2D( - const Primitive2DSequence& rChildren, - const basegfx::BColorModifier& rColorModifier) - : GroupPrimitive2D(rChildren), - maColorModifier(rColorModifier) - { - } - - bool ModifiedColorPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(GroupPrimitive2D::operator==(rPrimitive)) - { - const ModifiedColorPrimitive2D& rCompare = (ModifiedColorPrimitive2D&)rPrimitive; - - return (getColorModifier() == rCompare.getColorModifier()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(ModifiedColorPrimitive2D, PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx b/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx deleted file mode 100644 index e28f5debcb..0000000000 --- a/drawinglayer/source/primitive2d/pagepreviewprimitive2d.cxx +++ /dev/null @@ -1,186 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/pagepreviewprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PagePreviewPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - Primitive2DSequence xRetval; - Primitive2DSequence aContent(getPageContent()); - - if(aContent.hasElements() - && basegfx::fTools::more(getContentWidth(), 0.0) - && basegfx::fTools::more(getContentHeight(), 0.0)) - { - // the decomposed matrix will be needed - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - getTransform().decompose(aScale, aTranslate, fRotate, fShearX); - - if(basegfx::fTools::more(aScale.getX(), 0.0) && basegfx::fTools::more(aScale.getY(), 0.0)) - { - // check if content overlaps with tageted size and needs to be embedded with a - // clipping primitive - const basegfx::B2DRange aRealContentRange(getB2DRangeFromPrimitive2DSequence(aContent, rViewInformation)); - const basegfx::B2DRange aAllowedContentRange(0.0, 0.0, getContentWidth(), getContentHeight()); - - if(!aAllowedContentRange.isInside(aRealContentRange)) - { - const Primitive2DReference xReferenceA( - new MaskPrimitive2D( - basegfx::B2DPolyPolygon( - basegfx::tools::createPolygonFromRect(aAllowedContentRange)), aContent)); - aContent = Primitive2DSequence(&xReferenceA, 1); - } - - // create a mapping from content to object. - basegfx::B2DHomMatrix aPageTrans; - - if(getKeepAspectRatio()) - { - // #i101075# when keeping the aspect ratio is wanted, it is necessary to calculate - // an equidistant scaling in X and Y and a corresponding translation to - // center the output. Calculate needed scale factors - const double fScaleX(aScale.getX() / getContentWidth()); - const double fScaleY(aScale.getY() / getContentHeight()); - - // to keep the aspect, use the smaller scale and adapt missing size by translation - if(fScaleX < fScaleY) - { - // height needs to be adapted - const double fNeededHeight(aScale.getY() / fScaleX); - const double fSpaceToAdd(fNeededHeight - getContentHeight()); - - aPageTrans.translate(0.0, fSpaceToAdd * 0.5); - aPageTrans.scale(fScaleX, aScale.getY() / fNeededHeight); - } - else - { - // width needs to be adapted - const double fNeededWidth(aScale.getX() / fScaleY); - const double fSpaceToAdd(fNeededWidth - getContentWidth()); - - aPageTrans.translate(fSpaceToAdd * 0.5, 0.0); - aPageTrans.scale(aScale.getX() / fNeededWidth, fScaleY); - } - - // add the missing object transformation aspects - const basegfx::B2DHomMatrix aCombined(basegfx::tools::createShearXRotateTranslateB2DHomMatrix( - fShearX, fRotate, aTranslate.getX(), aTranslate.getY())); - aPageTrans = aCombined * aPageTrans; - } - else - { - // completely scale to PageObject size. Scale to unit size. - aPageTrans.scale(1.0/ getContentWidth(), 1.0 / getContentHeight()); - - // apply object matrix - aPageTrans *= getTransform(); - } - - // embed in necessary transformation to map from SdrPage to SdrPageObject - const Primitive2DReference xReferenceB(new TransformPrimitive2D(aPageTrans, aContent)); - xRetval = Primitive2DSequence(&xReferenceB, 1); - } - } - - return xRetval; - } - - PagePreviewPrimitive2D::PagePreviewPrimitive2D( - const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& rxDrawPage, - const basegfx::B2DHomMatrix& rTransform, - double fContentWidth, - double fContentHeight, - const Primitive2DSequence& rPageContent, - bool bKeepAspectRatio) - : BufferedDecompositionPrimitive2D(), - mxDrawPage(rxDrawPage), - maPageContent(rPageContent), - maTransform(rTransform), - mfContentWidth(fContentWidth), - mfContentHeight(fContentHeight), - mbKeepAspectRatio(bKeepAspectRatio) - { - } - - bool PagePreviewPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const PagePreviewPrimitive2D& rCompare = static_cast< const PagePreviewPrimitive2D& >(rPrimitive); - - return (getXDrawPage() == rCompare.getXDrawPage() - && getPageContent() == rCompare.getPageContent() - && getTransform() == rCompare.getTransform() - && getContentWidth() == rCompare.getContentWidth() - && getContentHeight() == rCompare.getContentHeight() - && getKeepAspectRatio() == rCompare.getKeepAspectRatio()); - } - - return false; - } - - basegfx::B2DRange PagePreviewPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation`*/) const - { - // nothing is allowed to stick out of a PagePreviewPrimitive, thus we - // can quickly deliver our range here - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(getTransform()); - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PagePreviewPrimitive2D, PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/pointarrayprimitive2d.cxx b/drawinglayer/source/primitive2d/pointarrayprimitive2d.cxx deleted file mode 100644 index df508d4a63..0000000000 --- a/drawinglayer/source/primitive2d/pointarrayprimitive2d.cxx +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - PointArrayPrimitive2D::PointArrayPrimitive2D( - const std::vector< basegfx::B2DPoint >& rPositions, - const basegfx::BColor& rRGBColor) - : BasePrimitive2D(), - maPositions(rPositions), - maRGBColor(rRGBColor), - maB2DRange() - { - } - - bool PointArrayPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const PointArrayPrimitive2D& rCompare = (PointArrayPrimitive2D&)rPrimitive; - - return (getPositions() == rCompare.getPositions() - && getRGBColor() == rCompare.getRGBColor()); - } - - return false; - } - - basegfx::B2DRange PointArrayPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - if(maB2DRange.isEmpty()) - { - basegfx::B2DRange aNewRange; - - // get the basic range from the position vector - for(std::vector< basegfx::B2DPoint >::const_iterator aIter(getPositions().begin()); aIter != getPositions().end(); aIter++) - { - aNewRange.expand(*aIter); - } - - // assign to buffered value - const_cast< PointArrayPrimitive2D* >(this)->maB2DRange = aNewRange; - } - - return maB2DRange; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PointArrayPrimitive2D, PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/polygonprimitive2d.cxx b/drawinglayer/source/primitive2d/polygonprimitive2d.cxx deleted file mode 100644 index 79a280f00d..0000000000 --- a/drawinglayer/source/primitive2d/polygonprimitive2d.cxx +++ /dev/null @@ -1,642 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <basegfx/polygon/b2dlinegeometry.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - PolygonHairlinePrimitive2D::PolygonHairlinePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const basegfx::BColor& rBColor) - : BasePrimitive2D(), - maPolygon(rPolygon), - maBColor(rBColor) - { - } - - bool PolygonHairlinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const PolygonHairlinePrimitive2D& rCompare = (PolygonHairlinePrimitive2D&)rPrimitive; - - return (getB2DPolygon() == rCompare.getB2DPolygon() - && getBColor() == rCompare.getBColor()); - } - - return false; - } - - basegfx::B2DRange PolygonHairlinePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - // this is a hairline, thus the line width is view-dependent. Get range of polygon - // as base size - basegfx::B2DRange aRetval(getB2DPolygon().getB2DRange()); - - if(!aRetval.isEmpty()) - { - // Calculate view-dependent hairline width - const basegfx::B2DVector aDiscreteSize(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)); - const double fDiscreteHalfLineWidth(aDiscreteSize.getLength() * 0.5); - - if(basegfx::fTools::more(fDiscreteHalfLineWidth, 0.0)) - { - aRetval.grow(fDiscreteHalfLineWidth); - } - } - - // return range - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolygonHairlinePrimitive2D, PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolygonMarkerPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - // calculate logic DashLength - const basegfx::B2DVector aDashVector(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(getDiscreteDashLength(), 0.0)); - const double fLogicDashLength(aDashVector.getX()); - - if(fLogicDashLength > 0.0 && !getRGBColorA().equal(getRGBColorB())) - { - // apply dashing; get line and gap snippets - ::std::vector< double > aDash; - basegfx::B2DPolyPolygon aDashedPolyPolyA; - basegfx::B2DPolyPolygon aDashedPolyPolyB; - - aDash.push_back(fLogicDashLength); - aDash.push_back(fLogicDashLength); - basegfx::tools::applyLineDashing(getB2DPolygon(), aDash, &aDashedPolyPolyA, &aDashedPolyPolyB, 2.0 * fLogicDashLength); - - // prepare return value - Primitive2DSequence aRetval(2); - - aRetval[0] = Primitive2DReference(new PolyPolygonHairlinePrimitive2D(aDashedPolyPolyA, getRGBColorA())); - aRetval[1] = Primitive2DReference(new PolyPolygonHairlinePrimitive2D(aDashedPolyPolyB, getRGBColorB())); - - return aRetval; - } - else - { - const Primitive2DReference xRef(new PolygonHairlinePrimitive2D(getB2DPolygon(), getRGBColorA())); - return Primitive2DSequence(&xRef, 1L); - } - } - - PolygonMarkerPrimitive2D::PolygonMarkerPrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const basegfx::BColor& rRGBColorA, - const basegfx::BColor& rRGBColorB, - double fDiscreteDashLength) - : BufferedDecompositionPrimitive2D(), - maPolygon(rPolygon), - maRGBColorA(rRGBColorA), - maRGBColorB(rRGBColorB), - mfDiscreteDashLength(fDiscreteDashLength), - maLastInverseObjectToViewTransformation() - { - } - - bool PolygonMarkerPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const PolygonMarkerPrimitive2D& rCompare = (PolygonMarkerPrimitive2D&)rPrimitive; - - return (getB2DPolygon() == rCompare.getB2DPolygon() - && getRGBColorA() == rCompare.getRGBColorA() - && getRGBColorB() == rCompare.getRGBColorB() - && getDiscreteDashLength() == rCompare.getDiscreteDashLength()); - } - - return false; - } - - basegfx::B2DRange PolygonMarkerPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - // this is a hairline, thus the line width is view-dependent. Get range of polygon - // as base size - basegfx::B2DRange aRetval(getB2DPolygon().getB2DRange()); - - if(!aRetval.isEmpty()) - { - // Calculate view-dependent hairline width - const basegfx::B2DVector aDiscreteSize(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)); - const double fDiscreteHalfLineWidth(aDiscreteSize.getLength() * 0.5); - - if(basegfx::fTools::more(fDiscreteHalfLineWidth, 0.0)) - { - aRetval.grow(fDiscreteHalfLineWidth); - } - } - - // return range - return aRetval; - } - - Primitive2DSequence PolygonMarkerPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - bool bNeedNewDecomposition(false); - - if(getBuffered2DDecomposition().hasElements()) - { - if(rViewInformation.getInverseObjectToViewTransformation() != maLastInverseObjectToViewTransformation) - { - bNeedNewDecomposition = true; - } - } - - if(bNeedNewDecomposition) - { - // conditions of last local decomposition have changed, delete - const_cast< PolygonMarkerPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember last used InverseObjectToViewTransformation - PolygonMarkerPrimitive2D* pThat = const_cast< PolygonMarkerPrimitive2D* >(this); - pThat->maLastInverseObjectToViewTransformation = rViewInformation.getInverseObjectToViewTransformation(); - } - - // use parent implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolygonMarkerPrimitive2D, PRIMITIVE2D_ID_POLYGONMARKERPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolygonStrokePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - if(getB2DPolygon().count()) - { - // #i102241# try to simplify before usage - const basegfx::B2DPolygon aB2DPolygon(basegfx::tools::simplifyCurveSegments(getB2DPolygon())); - basegfx::B2DPolyPolygon aHairLinePolyPolygon; - - if(getStrokeAttribute().isDefault() || 0.0 == getStrokeAttribute().getFullDotDashLen()) - { - // no line dashing, just copy - aHairLinePolyPolygon.append(aB2DPolygon); - } - else - { - // apply LineStyle - basegfx::tools::applyLineDashing( - aB2DPolygon, getStrokeAttribute().getDotDashArray(), - &aHairLinePolyPolygon, 0, getStrokeAttribute().getFullDotDashLen()); - } - - const sal_uInt32 nCount(aHairLinePolyPolygon.count()); - - if(!getLineAttribute().isDefault() && getLineAttribute().getWidth()) - { - // create fat line data - const double fHalfLineWidth(getLineAttribute().getWidth() / 2.0); - const basegfx::B2DLineJoin aLineJoin(getLineAttribute().getLineJoin()); - basegfx::B2DPolyPolygon aAreaPolyPolygon; - - for(sal_uInt32 a(0L); a < nCount; a++) - { - // New version of createAreaGeometry; now creates bezier polygons - aAreaPolyPolygon.append(basegfx::tools::createAreaGeometry( - aHairLinePolyPolygon.getB2DPolygon(a), fHalfLineWidth, aLineJoin)); - } - - // prepare return value - Primitive2DSequence aRetval(aAreaPolyPolygon.count()); - - // create primitive - for(sal_uInt32 b(0L); b < aAreaPolyPolygon.count(); b++) - { - // put into single polyPolygon primitives to make clear that this is NOT meant - // to be painted as a single PolyPolygon (XORed as fill rule). Alternatively, a - // melting process may be used here one day. - const basegfx::B2DPolyPolygon aNewPolyPolygon(aAreaPolyPolygon.getB2DPolygon(b)); - static bool bTestByUsingRandomColor(false); - const basegfx::BColor aColor(bTestByUsingRandomColor - ? basegfx::BColor(rand() / 32767.0, rand() / 32767.0, rand() / 32767.0) - : getLineAttribute().getColor()); - const Primitive2DReference xRef(new PolyPolygonColorPrimitive2D(aNewPolyPolygon, aColor)); - aRetval[b] = xRef; - } - - return aRetval; - } - else - { - // prepare return value - const Primitive2DReference xRef( - new PolyPolygonHairlinePrimitive2D( - aHairLinePolyPolygon, - getLineAttribute().getColor())); - - return Primitive2DSequence(&xRef, 1); - } - } - else - { - return Primitive2DSequence(); - } - } - - PolygonStrokePrimitive2D::PolygonStrokePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute) - : BufferedDecompositionPrimitive2D(), - maPolygon(rPolygon), - maLineAttribute(rLineAttribute), - maStrokeAttribute(rStrokeAttribute) - { - } - - PolygonStrokePrimitive2D::PolygonStrokePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute) - : BufferedDecompositionPrimitive2D(), - maPolygon(rPolygon), - maLineAttribute(rLineAttribute), - maStrokeAttribute() - { - } - - bool PolygonStrokePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const PolygonStrokePrimitive2D& rCompare = (PolygonStrokePrimitive2D&)rPrimitive; - - return (getB2DPolygon() == rCompare.getB2DPolygon() - && getLineAttribute() == rCompare.getLineAttribute() - && getStrokeAttribute() == rCompare.getStrokeAttribute()); - } - - return false; - } - - basegfx::B2DRange PolygonStrokePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - basegfx::B2DRange aRetval; - - if(getLineAttribute().getWidth()) - { - if(basegfx::B2DLINEJOIN_MITER == getLineAttribute().getLineJoin()) - { - // if line is mitered, use parent call since mitered line - // geometry may use more space than the geometry grown by half line width - aRetval = BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation); - } - else - { - // for all other B2DLINEJOIN_* get the range from the base geometry - // and expand by half the line width - aRetval = getB2DPolygon().getB2DRange(); - aRetval.grow(getLineAttribute().getWidth() * 0.5); - } - } - else - { - // this is a hairline, thus the line width is view-dependent. Get range of polygon - // as base size - aRetval = getB2DPolygon().getB2DRange(); - - if(!aRetval.isEmpty()) - { - // Calculate view-dependent hairline width - const basegfx::B2DVector aDiscreteSize(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)); - const double fDiscreteHalfLineWidth(aDiscreteSize.getLength() * 0.5); - - if(basegfx::fTools::more(fDiscreteHalfLineWidth, 0.0)) - { - aRetval.grow(fDiscreteHalfLineWidth); - } - } - } - - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolygonStrokePrimitive2D, PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolygonWavePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence aRetval; - - if(getB2DPolygon().count()) - { - const bool bHasWidth(!basegfx::fTools::equalZero(getWaveWidth())); - const bool bHasHeight(!basegfx::fTools::equalZero(getWaveHeight())); - - if(bHasWidth && bHasHeight) - { - // create waveline curve - const basegfx::B2DPolygon aWaveline(basegfx::tools::createWaveline(getB2DPolygon(), getWaveWidth(), getWaveHeight())); - const Primitive2DReference xRef(new PolygonStrokePrimitive2D(aWaveline, getLineAttribute(), getStrokeAttribute())); - aRetval = Primitive2DSequence(&xRef, 1); - } - else - { - // flat waveline, decompose to simple line primitive - const Primitive2DReference xRef(new PolygonStrokePrimitive2D(getB2DPolygon(), getLineAttribute(), getStrokeAttribute())); - aRetval = Primitive2DSequence(&xRef, 1); - } - } - - return aRetval; - } - - PolygonWavePrimitive2D::PolygonWavePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute, - double fWaveWidth, - double fWaveHeight) - : PolygonStrokePrimitive2D(rPolygon, rLineAttribute, rStrokeAttribute), - mfWaveWidth(fWaveWidth), - mfWaveHeight(fWaveHeight) - { - if(mfWaveWidth < 0.0) - { - mfWaveWidth = 0.0; - } - - if(mfWaveHeight < 0.0) - { - mfWaveHeight = 0.0; - } - } - - PolygonWavePrimitive2D::PolygonWavePrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - double fWaveWidth, - double fWaveHeight) - : PolygonStrokePrimitive2D(rPolygon, rLineAttribute), - mfWaveWidth(fWaveWidth), - mfWaveHeight(fWaveHeight) - { - if(mfWaveWidth < 0.0) - { - mfWaveWidth = 0.0; - } - - if(mfWaveHeight < 0.0) - { - mfWaveHeight = 0.0; - } - } - - bool PolygonWavePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(PolygonStrokePrimitive2D::operator==(rPrimitive)) - { - const PolygonWavePrimitive2D& rCompare = (PolygonWavePrimitive2D&)rPrimitive; - - return (getWaveWidth() == rCompare.getWaveWidth() - && getWaveHeight() == rCompare.getWaveHeight()); - } - - return false; - } - - basegfx::B2DRange PolygonWavePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - // get range of parent - basegfx::B2DRange aRetval(PolygonStrokePrimitive2D::getB2DRange(rViewInformation)); - - // if WaveHeight, grow by it - if(basegfx::fTools::more(getWaveHeight(), 0.0)) - { - aRetval.grow(getWaveHeight()); - } - - // if line width, grow by it - if(basegfx::fTools::more(getLineAttribute().getWidth(), 0.0)) - { - aRetval.grow(getLineAttribute().getWidth() * 0.5); - } - - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolygonWavePrimitive2D, PRIMITIVE2D_ID_POLYGONWAVEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolygonStrokeArrowPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // copy local polygon, it may be changed - basegfx::B2DPolygon aLocalPolygon(getB2DPolygon()); - aLocalPolygon.removeDoublePoints(); - basegfx::B2DPolyPolygon aArrowA; - basegfx::B2DPolyPolygon aArrowB; - - if(!aLocalPolygon.isClosed() && aLocalPolygon.count() > 1) - { - // apply arrows - const double fPolyLength(basegfx::tools::getLength(aLocalPolygon)); - double fStart(0.0); - double fEnd(0.0); - - if(!getStart().isDefault() && getStart().isActive()) - { - // create start arrow primitive and consume - aArrowA = basegfx::tools::createAreaGeometryForLineStartEnd( - aLocalPolygon, getStart().getB2DPolyPolygon(), true, getStart().getWidth(), - fPolyLength, getStart().isCentered() ? 0.5 : 0.0, &fStart); - - // create some overlapping - fStart *= 0.8; - } - - if(!getEnd().isDefault() && getEnd().isActive()) - { - // create end arrow primitive and consume - aArrowB = basegfx::tools::createAreaGeometryForLineStartEnd( - aLocalPolygon, getEnd().getB2DPolyPolygon(), false, getEnd().getWidth(), - fPolyLength, getEnd().isCentered() ? 0.5 : 0.0, &fEnd); - - // create some overlapping - fEnd *= 0.8; - } - - if(0.0 != fStart || 0.0 != fEnd) - { - // build new poly, consume something from old poly - aLocalPolygon = basegfx::tools::getSnippetAbsolute(aLocalPolygon, fStart, fPolyLength - fEnd, fPolyLength); - } - } - - // prepare return value - Primitive2DSequence aRetval(1L + (aArrowA.count() ? 1L : 0L) + (aArrowB.count() ? 1L : 0L)); - sal_uInt32 nInd(0L); - - // add shaft - const Primitive2DReference xRefShaft(new - PolygonStrokePrimitive2D( - aLocalPolygon, getLineAttribute(), getStrokeAttribute())); - aRetval[nInd++] = xRefShaft; - - if(aArrowA.count()) - { - const Primitive2DReference xRefA( - new PolyPolygonColorPrimitive2D( - aArrowA, getLineAttribute().getColor())); - aRetval[nInd++] = xRefA; - } - - if(aArrowB.count()) - { - const Primitive2DReference xRefB( - new PolyPolygonColorPrimitive2D( - aArrowB, getLineAttribute().getColor())); - aRetval[nInd++] = xRefB; - } - - return aRetval; - } - - PolygonStrokeArrowPrimitive2D::PolygonStrokeArrowPrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute, - const attribute::LineStartEndAttribute& rStart, - const attribute::LineStartEndAttribute& rEnd) - : PolygonStrokePrimitive2D(rPolygon, rLineAttribute, rStrokeAttribute), - maStart(rStart), - maEnd(rEnd) - { - } - - PolygonStrokeArrowPrimitive2D::PolygonStrokeArrowPrimitive2D( - const basegfx::B2DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::LineStartEndAttribute& rStart, - const attribute::LineStartEndAttribute& rEnd) - : PolygonStrokePrimitive2D(rPolygon, rLineAttribute), - maStart(rStart), - maEnd(rEnd) - { - } - - bool PolygonStrokeArrowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(PolygonStrokePrimitive2D::operator==(rPrimitive)) - { - const PolygonStrokeArrowPrimitive2D& rCompare = (PolygonStrokeArrowPrimitive2D&)rPrimitive; - - return (getStart() == rCompare.getStart() - && getEnd() == rCompare.getEnd()); - } - - return false; - } - - basegfx::B2DRange PolygonStrokeArrowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - basegfx::B2DRange aRetval; - - if(getStart().isActive() || getEnd().isActive()) - { - // use decomposition when line start/end is used - return BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation); - } - else - { - // get range from parent - return PolygonStrokePrimitive2D::getB2DRange(rViewInformation); - } - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolygonStrokeArrowPrimitive2D, PRIMITIVE2D_ID_POLYGONSTROKEARROWPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx b/drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx deleted file mode 100644 index 98966c70a3..0000000000 --- a/drawinglayer/source/primitive2d/polypolygonprimitive2d.cxx +++ /dev/null @@ -1,575 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolyPolygonHairlinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon()); - const sal_uInt32 nCount(aPolyPolygon.count()); - - if(nCount) - { - Primitive2DSequence aRetval(nCount); - - for(sal_uInt32 a(0L); a < nCount; a++) - { - aRetval[a] = Primitive2DReference(new PolygonHairlinePrimitive2D(aPolyPolygon.getB2DPolygon(a), getBColor())); - } - - return aRetval; - } - else - { - return Primitive2DSequence(); - } - } - - PolyPolygonHairlinePrimitive2D::PolyPolygonHairlinePrimitive2D(const basegfx::B2DPolyPolygon& rPolyPolygon, const basegfx::BColor& rBColor) - : BufferedDecompositionPrimitive2D(), - maPolyPolygon(rPolyPolygon), - maBColor(rBColor) - { - } - - bool PolyPolygonHairlinePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const PolyPolygonHairlinePrimitive2D& rCompare = (PolyPolygonHairlinePrimitive2D&)rPrimitive; - - return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() - && getBColor() == rCompare.getBColor()); - } - - return false; - } - - basegfx::B2DRange PolyPolygonHairlinePrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // return range - return basegfx::tools::getRange(getB2DPolyPolygon()); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolyPolygonHairlinePrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONHAIRLINEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolyPolygonMarkerPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon()); - const sal_uInt32 nCount(aPolyPolygon.count()); - - if(nCount) - { - Primitive2DSequence aRetval(nCount); - - for(sal_uInt32 a(0L); a < nCount; a++) - { - aRetval[a] = Primitive2DReference(new PolygonMarkerPrimitive2D(aPolyPolygon.getB2DPolygon(a), getRGBColorA(), getRGBColorB(), getDiscreteDashLength())); - } - - return aRetval; - } - else - { - return Primitive2DSequence(); - } - } - - PolyPolygonMarkerPrimitive2D::PolyPolygonMarkerPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const basegfx::BColor& rRGBColorA, - const basegfx::BColor& rRGBColorB, - double fDiscreteDashLength) - : BufferedDecompositionPrimitive2D(), - maPolyPolygon(rPolyPolygon), - maRGBColorA(rRGBColorA), - maRGBColorB(rRGBColorB), - mfDiscreteDashLength(fDiscreteDashLength) - { - } - - bool PolyPolygonMarkerPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const PolyPolygonMarkerPrimitive2D& rCompare = (PolyPolygonMarkerPrimitive2D&)rPrimitive; - - return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() - && getRGBColorA() == rCompare.getRGBColorA() - && getRGBColorB() == rCompare.getRGBColorB() - && getDiscreteDashLength() == rCompare.getDiscreteDashLength()); - } - - return false; - } - - basegfx::B2DRange PolyPolygonMarkerPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // return range - return basegfx::tools::getRange(getB2DPolyPolygon()); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolyPolygonMarkerPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONMARKERPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolyPolygonStrokePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon()); - const sal_uInt32 nCount(aPolyPolygon.count()); - - if(nCount) - { - Primitive2DSequence aRetval(nCount); - - for(sal_uInt32 a(0L); a < nCount; a++) - { - aRetval[a] = Primitive2DReference( - new PolygonStrokePrimitive2D( - aPolyPolygon.getB2DPolygon(a), getLineAttribute(), getStrokeAttribute())); - } - - return aRetval; - } - else - { - return Primitive2DSequence(); - } - } - - PolyPolygonStrokePrimitive2D::PolyPolygonStrokePrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute) - : BufferedDecompositionPrimitive2D(), - maPolyPolygon(rPolyPolygon), - maLineAttribute(rLineAttribute), - maStrokeAttribute(rStrokeAttribute) - { - } - - PolyPolygonStrokePrimitive2D::PolyPolygonStrokePrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::LineAttribute& rLineAttribute) - : BufferedDecompositionPrimitive2D(), - maPolyPolygon(rPolyPolygon), - maLineAttribute(rLineAttribute), - maStrokeAttribute() - { - } - - bool PolyPolygonStrokePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const PolyPolygonStrokePrimitive2D& rCompare = (PolyPolygonStrokePrimitive2D&)rPrimitive; - - return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() - && getLineAttribute() == rCompare.getLineAttribute() - && getStrokeAttribute() == rCompare.getStrokeAttribute()); - } - - return false; - } - - basegfx::B2DRange PolyPolygonStrokePrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // get range of it (subdivided) - basegfx::B2DRange aRetval(basegfx::tools::getRange(getB2DPolyPolygon())); - - // if width, grow by line width - if(getLineAttribute().getWidth()) - { - aRetval.grow(getLineAttribute().getWidth() / 2.0); - } - - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolyPolygonStrokePrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONSTROKEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolyPolygonStrokeArrowPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - const basegfx::B2DPolyPolygon aPolyPolygon(getB2DPolyPolygon()); - const sal_uInt32 nCount(aPolyPolygon.count()); - - if(nCount) - { - Primitive2DSequence aRetval(nCount); - - for(sal_uInt32 a(0L); a < nCount; a++) - { - const basegfx::B2DPolygon aPolygon(aPolyPolygon.getB2DPolygon(a)); - - if(aPolygon.isClosed()) - { - // no need for PolygonStrokeArrowPrimitive2D when polygon is closed - aRetval[a] = Primitive2DReference( - new PolygonStrokePrimitive2D(aPolygon, getLineAttribute(), getStrokeAttribute())); - } - else - { - aRetval[a] = Primitive2DReference( - new PolygonStrokeArrowPrimitive2D(aPolygon, getLineAttribute(), - getStrokeAttribute(), getStart(), getEnd())); - } - } - - return aRetval; - } - else - { - return Primitive2DSequence(); - } - } - - PolyPolygonStrokeArrowPrimitive2D::PolyPolygonStrokeArrowPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute, - const attribute::LineStartEndAttribute& rStart, - const attribute::LineStartEndAttribute& rEnd) - : PolyPolygonStrokePrimitive2D(rPolyPolygon, rLineAttribute, rStrokeAttribute), - maStart(rStart), - maEnd(rEnd) - { - } - - PolyPolygonStrokeArrowPrimitive2D::PolyPolygonStrokeArrowPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::LineStartEndAttribute& rStart, - const attribute::LineStartEndAttribute& rEnd) - : PolyPolygonStrokePrimitive2D(rPolyPolygon, rLineAttribute), - maStart(rStart), - maEnd(rEnd) - { - } - - bool PolyPolygonStrokeArrowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(PolyPolygonStrokePrimitive2D::operator==(rPrimitive)) - { - const PolyPolygonStrokeArrowPrimitive2D& rCompare = (PolyPolygonStrokeArrowPrimitive2D&)rPrimitive; - - return (getStart() == rCompare.getStart() - && getEnd() == rCompare.getEnd()); - } - - return false; - } - - basegfx::B2DRange PolyPolygonStrokeArrowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - basegfx::B2DRange aRetval; - - if(getStart().isActive() || getEnd().isActive()) - { - // use decomposition when line start/end is used - return BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation); - } - else - { - // get range from parent - return PolyPolygonStrokePrimitive2D::getB2DRange(rViewInformation); - } - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolyPolygonStrokeArrowPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONSTROKEARROWPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - PolyPolygonColorPrimitive2D::PolyPolygonColorPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const basegfx::BColor& rBColor) - : BasePrimitive2D(), - maPolyPolygon(rPolyPolygon), - maBColor(rBColor) - { - } - - bool PolyPolygonColorPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const PolyPolygonColorPrimitive2D& rCompare = (PolyPolygonColorPrimitive2D&)rPrimitive; - - return (getB2DPolyPolygon() == rCompare.getB2DPolyPolygon() - && getBColor() == rCompare.getBColor()); - } - - return false; - } - - basegfx::B2DRange PolyPolygonColorPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // return range - return basegfx::tools::getRange(getB2DPolyPolygon()); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolyPolygonColorPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolyPolygonGradientPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - if(!getFillGradient().isDefault()) - { - // create SubSequence with FillGradientPrimitive2D - const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange()); - FillGradientPrimitive2D* pNewGradient = new FillGradientPrimitive2D(aPolyPolygonRange, getFillGradient()); - const Primitive2DReference xSubRef(pNewGradient); - const Primitive2DSequence aSubSequence(&xSubRef, 1L); - - // create mask primitive - MaskPrimitive2D* pNewMask = new MaskPrimitive2D(getB2DPolyPolygon(), aSubSequence); - const Primitive2DReference xRef(pNewMask); - - return Primitive2DSequence(&xRef, 1); - } - else - { - return Primitive2DSequence(); - } - } - - PolyPolygonGradientPrimitive2D::PolyPolygonGradientPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::FillGradientAttribute& rFillGradient) - : BufferedDecompositionPrimitive2D(), - maPolyPolygon(rPolyPolygon), - maFillGradient(rFillGradient) - { - } - - bool PolyPolygonGradientPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const PolyPolygonGradientPrimitive2D& rCompare = (PolyPolygonGradientPrimitive2D&)rPrimitive; - - return (getFillGradient() == rCompare.getFillGradient()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolyPolygonGradientPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolyPolygonHatchPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - if(!getFillHatch().isDefault()) - { - // create SubSequence with FillHatchPrimitive2D - const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange()); - FillHatchPrimitive2D* pNewHatch = new FillHatchPrimitive2D(aPolyPolygonRange, getBackgroundColor(), getFillHatch()); - const Primitive2DReference xSubRef(pNewHatch); - const Primitive2DSequence aSubSequence(&xSubRef, 1L); - - // create mask primitive - MaskPrimitive2D* pNewMask = new MaskPrimitive2D(getB2DPolyPolygon(), aSubSequence); - const Primitive2DReference xRef(pNewMask); - - return Primitive2DSequence(&xRef, 1); - } - else - { - return Primitive2DSequence(); - } - } - - PolyPolygonHatchPrimitive2D::PolyPolygonHatchPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const basegfx::BColor& rBackgroundColor, - const attribute::FillHatchAttribute& rFillHatch) - : BufferedDecompositionPrimitive2D(), - maPolyPolygon(rPolyPolygon), - maBackgroundColor(rBackgroundColor), - maFillHatch(rFillHatch) - { - } - - bool PolyPolygonHatchPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const PolyPolygonHatchPrimitive2D& rCompare = (PolyPolygonHatchPrimitive2D&)rPrimitive; - - return (getBackgroundColor() == rCompare.getBackgroundColor() - && getFillHatch() == rCompare.getFillHatch()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolyPolygonHatchPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONHATCHPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence PolyPolygonBitmapPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - if(!getFillBitmap().isDefault()) - { - // create SubSequence with FillBitmapPrimitive2D - const basegfx::B2DRange aPolyPolygonRange(getB2DPolyPolygon().getB2DRange()); - basegfx::B2DHomMatrix aNewObjectTransform; - aNewObjectTransform.set(0, 0, aPolyPolygonRange.getWidth()); - aNewObjectTransform.set(1, 1, aPolyPolygonRange.getHeight()); - aNewObjectTransform.set(0, 2, aPolyPolygonRange.getMinX()); - aNewObjectTransform.set(1, 2, aPolyPolygonRange.getMinY()); - FillBitmapPrimitive2D* pNewBitmap = new FillBitmapPrimitive2D(aNewObjectTransform, getFillBitmap()); - const Primitive2DReference xSubRef(pNewBitmap); - const Primitive2DSequence aSubSequence(&xSubRef, 1L); - - // create mask primitive - MaskPrimitive2D* pNewMask = new MaskPrimitive2D(getB2DPolyPolygon(), aSubSequence); - const Primitive2DReference xRef(pNewMask); - - return Primitive2DSequence(&xRef, 1); - } - else - { - return Primitive2DSequence(); - } - } - - PolyPolygonBitmapPrimitive2D::PolyPolygonBitmapPrimitive2D( - const basegfx::B2DPolyPolygon& rPolyPolygon, - const attribute::FillBitmapAttribute& rFillBitmap) - : BufferedDecompositionPrimitive2D(), - maPolyPolygon(rPolyPolygon), - maFillBitmap(rFillBitmap) - { - } - - bool PolyPolygonBitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const PolyPolygonBitmapPrimitive2D& rCompare = (PolyPolygonBitmapPrimitive2D&)rPrimitive; - - return (getFillBitmap() == rCompare.getFillBitmap()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(PolyPolygonBitmapPrimitive2D, PRIMITIVE2D_ID_POLYPOLYGONBITMAPPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/primitivetools2d.cxx b/drawinglayer/source/primitive2d/primitivetools2d.cxx deleted file mode 100644 index 03425a2ead..0000000000 --- a/drawinglayer/source/primitive2d/primitivetools2d.cxx +++ /dev/null @@ -1,173 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/primitivetools2d.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence DiscreteMetricDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - // get the current DiscreteUnit - const double fDiscreteUnit((rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)).getLength()); - - if(getBuffered2DDecomposition().hasElements() && !basegfx::fTools::equal(fDiscreteUnit, getDiscreteUnit())) - { - // conditions of last local decomposition have changed, delete - const_cast< DiscreteMetricDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember new valid DiscreteUnit - const_cast< DiscreteMetricDependentPrimitive2D* >(this)->mfDiscreteUnit = fDiscreteUnit; - } - - // call base implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence ViewportDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - // get the current Viewport - const basegfx::B2DRange& rViewport = rViewInformation.getViewport(); - - if(getBuffered2DDecomposition().hasElements() && !rViewport.equal(getViewport())) - { - // conditions of last local decomposition have changed, delete - const_cast< ViewportDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember new valid DiscreteUnit - const_cast< ViewportDependentPrimitive2D* >(this)->maViewport = rViewport; - } - - // call base implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence ViewTransformationDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - // get the current ViewTransformation - const basegfx::B2DHomMatrix& rViewTransformation = rViewInformation.getViewTransformation(); - - if(getBuffered2DDecomposition().hasElements() && rViewTransformation != getViewTransformation()) - { - // conditions of last local decomposition have changed, delete - const_cast< ViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember new valid ViewTransformation - const_cast< ViewTransformationDependentPrimitive2D* >(this)->maViewTransformation = rViewTransformation; - } - - // call base implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence ObjectAndViewTransformationDependentPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - // get the current ViewTransfromation - const basegfx::B2DHomMatrix& rViewTransformation = rViewInformation.getViewTransformation(); - - if(getBuffered2DDecomposition().hasElements() && rViewTransformation != getViewTransformation()) - { - // conditions of last local decomposition have changed, delete - const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - - // get the current ObjectTransformation - const basegfx::B2DHomMatrix& rObjectTransformation = rViewInformation.getObjectTransformation(); - - if(getBuffered2DDecomposition().hasElements() && rObjectTransformation != getObjectTransformation()) - { - // conditions of last local decomposition have changed, delete - const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember new valid ViewTransformation, and ObjectTransformation - const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->maViewTransformation = rViewTransformation; - const_cast< ObjectAndViewTransformationDependentPrimitive2D* >(this)->maObjectTransformation = rObjectTransformation; - } - - // call base implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/rendergraphicprimitive2d.cxx b/drawinglayer/source/primitive2d/rendergraphicprimitive2d.cxx deleted file mode 100644 index c58990a420..0000000000 --- a/drawinglayer/source/primitive2d/rendergraphicprimitive2d.cxx +++ /dev/null @@ -1,92 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <vcl/rendergraphicrasterizer.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - RenderGraphicPrimitive2D::RenderGraphicPrimitive2D( - const vcl::RenderGraphic& rRenderGraphic, - const basegfx::B2DHomMatrix& rTransform) - : BasePrimitive2D(), - maRenderGraphic(rRenderGraphic), - maTransform(rTransform) - { - } - - void RenderGraphicPrimitive2D::setCurrentRasterizer() const - { - mapCurrentRasterizer.reset(); - } - - void RenderGraphicPrimitive2D::setCurrentRasterizer( const vcl::RenderGraphicRasterizer& rCurrentRasterizer ) const - { - mapCurrentRasterizer.reset( new vcl::RenderGraphicRasterizer( rCurrentRasterizer ) ); - } - - bool RenderGraphicPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const RenderGraphicPrimitive2D& rCompare = (RenderGraphicPrimitive2D&)rPrimitive; - - return (getRenderGraphic() == rCompare.getRenderGraphic() - && getTransform() == rCompare.getTransform()); - } - - return false; - } - - basegfx::B2DRange RenderGraphicPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(maTransform); - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(RenderGraphicPrimitive2D, PRIMITIVE2D_ID_RENDERGRAPHICPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof diff --git a/drawinglayer/source/primitive2d/sceneprimitive2d.cxx b/drawinglayer/source/primitive2d/sceneprimitive2d.cxx deleted file mode 100644 index f9959744c2..0000000000 --- a/drawinglayer/source/primitive2d/sceneprimitive2d.cxx +++ /dev/null @@ -1,483 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/sceneprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygonclipper.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <drawinglayer/processor3d/zbufferprocessor3d.hxx> -#include <drawinglayer/processor3d/shadow3dextractor.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <svtools/optionsdrawinglayer.hxx> -#include <drawinglayer/processor3d/geometry2dextractor.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - bool ScenePrimitive2D::impGetShadow3D(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - // create on demand - if(!mbShadow3DChecked && getChildren3D().hasElements()) - { - basegfx::B3DVector aLightNormal; - const double fShadowSlant(getSdrSceneAttribute().getShadowSlant()); - const basegfx::B3DRange aScene3DRange(primitive3d::getB3DRangeFromPrimitive3DSequence(getChildren3D(), getViewInformation3D())); - - if(maSdrLightingAttribute.getLightVector().size()) - { - // get light normal from first light and normalize - aLightNormal = maSdrLightingAttribute.getLightVector()[0].getDirection(); - aLightNormal.normalize(); - } - - // create shadow extraction processor - processor3d::Shadow3DExtractingProcessor aShadowProcessor( - getViewInformation3D(), - getObjectTransformation(), - aLightNormal, - fShadowSlant, - aScene3DRange); - - // process local primitives - aShadowProcessor.process(getChildren3D()); - - // fetch result and set checked flag - const_cast< ScenePrimitive2D* >(this)->maShadowPrimitives = aShadowProcessor.getPrimitive2DSequence(); - const_cast< ScenePrimitive2D* >(this)->mbShadow3DChecked = true; - } - - // return if there are shadow primitives - return maShadowPrimitives.hasElements(); - } - - void ScenePrimitive2D::calculateDiscreteSizes( - const geometry::ViewInformation2D& rViewInformation, - basegfx::B2DRange& rDiscreteRange, - basegfx::B2DRange& rVisibleDiscreteRange, - basegfx::B2DRange& rUnitVisibleRange) const - { - // use unit range and transform to discrete coordinates - rDiscreteRange = basegfx::B2DRange(0.0, 0.0, 1.0, 1.0); - rDiscreteRange.transform(rViewInformation.getObjectToViewTransformation() * getObjectTransformation()); - - // clip it against discrete Viewport (if set) - rVisibleDiscreteRange = rDiscreteRange; - - if(!rViewInformation.getViewport().isEmpty()) - { - rVisibleDiscreteRange.intersect(rViewInformation.getDiscreteViewport()); - } - - if(rVisibleDiscreteRange.isEmpty()) - { - rUnitVisibleRange = rVisibleDiscreteRange; - } - else - { - // create UnitVisibleRange containing unit range values [0.0 .. 1.0] describing - // the relative position of rVisibleDiscreteRange inside rDiscreteRange - const double fDiscreteScaleFactorX(basegfx::fTools::equalZero(rDiscreteRange.getWidth()) ? 1.0 : 1.0 / rDiscreteRange.getWidth()); - const double fDiscreteScaleFactorY(basegfx::fTools::equalZero(rDiscreteRange.getHeight()) ? 1.0 : 1.0 / rDiscreteRange.getHeight()); - - const double fMinX(basegfx::fTools::equal(rVisibleDiscreteRange.getMinX(), rDiscreteRange.getMinX()) - ? 0.0 - : (rVisibleDiscreteRange.getMinX() - rDiscreteRange.getMinX()) * fDiscreteScaleFactorX); - const double fMinY(basegfx::fTools::equal(rVisibleDiscreteRange.getMinY(), rDiscreteRange.getMinY()) - ? 0.0 - : (rVisibleDiscreteRange.getMinY() - rDiscreteRange.getMinY()) * fDiscreteScaleFactorY); - - const double fMaxX(basegfx::fTools::equal(rVisibleDiscreteRange.getMaxX(), rDiscreteRange.getMaxX()) - ? 1.0 - : (rVisibleDiscreteRange.getMaxX() - rDiscreteRange.getMinX()) * fDiscreteScaleFactorX); - const double fMaxY(basegfx::fTools::equal(rVisibleDiscreteRange.getMaxY(), rDiscreteRange.getMaxY()) - ? 1.0 - : (rVisibleDiscreteRange.getMaxY() - rDiscreteRange.getMinY()) * fDiscreteScaleFactorY); - - rUnitVisibleRange = basegfx::B2DRange(fMinX, fMinY, fMaxX, fMaxY); - } - } - - Primitive2DSequence ScenePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - Primitive2DSequence aRetval; - - // create 2D shadows from contained 3D primitives. This creates the shadow primitives on demand and tells if - // there are some or not. Do this at start, the shadow might still be visible even when the scene is not - if(impGetShadow3D(rViewInformation)) - { - // test visibility - const basegfx::B2DRange aShadow2DRange( - getB2DRangeFromPrimitive2DSequence(maShadowPrimitives, rViewInformation)); - const basegfx::B2DRange aViewRange( - rViewInformation.getViewport()); - - if(aViewRange.isEmpty() || aShadow2DRange.overlaps(aViewRange)) - { - // add extracted 2d shadows (before 3d scene creations itself) - aRetval = maShadowPrimitives; - } - } - - // get the involved ranges (see helper method calculateDiscreteSizes for details) - basegfx::B2DRange aDiscreteRange; - basegfx::B2DRange aVisibleDiscreteRange; - basegfx::B2DRange aUnitVisibleRange; - - calculateDiscreteSizes(rViewInformation, aDiscreteRange, aVisibleDiscreteRange, aUnitVisibleRange); - - if(!aVisibleDiscreteRange.isEmpty()) - { - // test if discrete view size (pixel) maybe too big and limit it - double fViewSizeX(aVisibleDiscreteRange.getWidth()); - double fViewSizeY(aVisibleDiscreteRange.getHeight()); - const double fViewVisibleArea(fViewSizeX * fViewSizeY); - const SvtOptionsDrawinglayer aDrawinglayerOpt; - const double fMaximumVisibleArea(aDrawinglayerOpt.GetQuadratic3DRenderLimit()); - double fReduceFactor(1.0); - - if(fViewVisibleArea > fMaximumVisibleArea) - { - fReduceFactor = sqrt(fMaximumVisibleArea / fViewVisibleArea); - fViewSizeX *= fReduceFactor; - fViewSizeY *= fReduceFactor; - } - - if(rViewInformation.getReducedDisplayQuality()) - { - // when reducing the visualisation is allowed (e.g. an OverlayObject - // only needed for dragging), reduce resolution extra - // to speed up dragging interactions - const double fArea(fViewSizeX * fViewSizeY); - double fReducedVisualisationFactor(1.0 / (sqrt(fArea) * (1.0 / 170.0))); - - if(fReducedVisualisationFactor > 1.0) - { - fReducedVisualisationFactor = 1.0; - } - else if(fReducedVisualisationFactor < 0.20) - { - fReducedVisualisationFactor = 0.20; - } - - if(fReducedVisualisationFactor != 1.0) - { - fReduceFactor *= fReducedVisualisationFactor; - fViewSizeX *= fReducedVisualisationFactor; - fViewSizeY *= fReducedVisualisationFactor; - } - } - - // calculate logic render size in world coordinates for usage in renderer - basegfx::B2DVector aLogicRenderSize( - aDiscreteRange.getWidth() * fReduceFactor, - aDiscreteRange.getHeight() * fReduceFactor); - aLogicRenderSize *= rViewInformation.getInverseObjectToViewTransformation(); - - // determine the oversample value - static sal_uInt16 nDefaultOversampleValue(3); - const sal_uInt16 nOversampleValue(aDrawinglayerOpt.IsAntiAliasing() ? nDefaultOversampleValue : 0); - - // use default 3D primitive processor to create BitmapEx for aUnitVisiblePart and process - processor3d::ZBufferProcessor3D aZBufferProcessor3D( - getViewInformation3D(), - rViewInformation, - getSdrSceneAttribute(), - getSdrLightingAttribute(), - aLogicRenderSize.getX(), - aLogicRenderSize.getY(), - aUnitVisibleRange, - nOversampleValue); - - aZBufferProcessor3D.process(getChildren3D()); - aZBufferProcessor3D.finish(); - - const_cast< ScenePrimitive2D* >(this)->maOldRenderedBitmap = aZBufferProcessor3D.getBitmapEx(); - const Size aBitmapSizePixel(maOldRenderedBitmap.GetSizePixel()); - - if(aBitmapSizePixel.getWidth() && aBitmapSizePixel.getHeight()) - { - // create transform for the created bitmap in discrete coordinates first. - basegfx::B2DHomMatrix aNew2DTransform; - - aNew2DTransform.set(0, 0, aVisibleDiscreteRange.getWidth()); - aNew2DTransform.set(1, 1, aVisibleDiscreteRange.getHeight()); - aNew2DTransform.set(0, 2, aVisibleDiscreteRange.getMinX()); - aNew2DTransform.set(1, 2, aVisibleDiscreteRange.getMinY()); - - // transform back to world coordinates for usage in primitive creation - aNew2DTransform *= rViewInformation.getInverseObjectToViewTransformation(); - - // create bitmap primitive and add - const Primitive2DReference xRef(new BitmapPrimitive2D(maOldRenderedBitmap, aNew2DTransform)); - appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xRef); - - // test: Allow to add an outline in the debugger when tests are needed - static bool bAddOutlineToCreated3DSceneRepresentation(false); - - if(bAddOutlineToCreated3DSceneRepresentation) - { - basegfx::B2DPolygon aOutline(basegfx::tools::createUnitPolygon()); - aOutline.transform(aNew2DTransform); - const Primitive2DReference xRef2(new PolygonHairlinePrimitive2D(aOutline, basegfx::BColor(1.0, 0.0, 0.0))); - appendPrimitive2DReferenceToPrimitive2DSequence(aRetval, xRef2); - } - } - } - - return aRetval; - } - - Primitive2DSequence ScenePrimitive2D::getGeometry2D() const - { - Primitive2DSequence aRetval; - - // create 2D projected geometry from 3D geometry - if(getChildren3D().hasElements()) - { - // create 2D geometry extraction processor - processor3d::Geometry2DExtractingProcessor aGeometryProcessor( - getViewInformation3D(), - getObjectTransformation()); - - // process local primitives - aGeometryProcessor.process(getChildren3D()); - - // fetch result - aRetval = aGeometryProcessor.getPrimitive2DSequence(); - } - - return aRetval; - } - - Primitive2DSequence ScenePrimitive2D::getShadow2D(const geometry::ViewInformation2D& rViewInformation) const - { - Primitive2DSequence aRetval; - - // create 2D shadows from contained 3D primitives - if(impGetShadow3D(rViewInformation)) - { - // add extracted 2d shadows (before 3d scene creations itself) - aRetval = maShadowPrimitives; - } - - return aRetval; - } - - bool ScenePrimitive2D::tryToCheckLastVisualisationDirectHit(const basegfx::B2DPoint& rLogicHitPoint, bool& o_rResult) const - { - if(!maOldRenderedBitmap.IsEmpty() && !maOldUnitVisiblePart.isEmpty()) - { - basegfx::B2DHomMatrix aInverseSceneTransform(getObjectTransformation()); - aInverseSceneTransform.invert(); - const basegfx::B2DPoint aRelativePoint(aInverseSceneTransform * rLogicHitPoint); - - if(maOldUnitVisiblePart.isInside(aRelativePoint)) - { - // calculate coordinates relative to visualized part - double fDivisorX(maOldUnitVisiblePart.getWidth()); - double fDivisorY(maOldUnitVisiblePart.getHeight()); - - if(basegfx::fTools::equalZero(fDivisorX)) - { - fDivisorX = 1.0; - } - - if(basegfx::fTools::equalZero(fDivisorY)) - { - fDivisorY = 1.0; - } - - const double fRelativeX((aRelativePoint.getX() - maOldUnitVisiblePart.getMinX()) / fDivisorX); - const double fRelativeY((aRelativePoint.getY() - maOldUnitVisiblePart.getMinY()) / fDivisorY); - - // combine with real BitmapSizePixel to get bitmap coordinates - const Size aBitmapSizePixel(maOldRenderedBitmap.GetSizePixel()); - const sal_Int32 nX(basegfx::fround(fRelativeX * aBitmapSizePixel.Width())); - const sal_Int32 nY(basegfx::fround(fRelativeY * aBitmapSizePixel.Height())); - - // try to get a statement about transparency in that pixel - o_rResult = (0xff != maOldRenderedBitmap.GetTransparency(nX, nY)); - return true; - } - } - - return false; - } - - ScenePrimitive2D::ScenePrimitive2D( - const primitive3d::Primitive3DSequence& rxChildren3D, - const attribute::SdrSceneAttribute& rSdrSceneAttribute, - const attribute::SdrLightingAttribute& rSdrLightingAttribute, - const basegfx::B2DHomMatrix& rObjectTransformation, - const geometry::ViewInformation3D& rViewInformation3D) - : BufferedDecompositionPrimitive2D(), - mxChildren3D(rxChildren3D), - maSdrSceneAttribute(rSdrSceneAttribute), - maSdrLightingAttribute(rSdrLightingAttribute), - maObjectTransformation(rObjectTransformation), - maViewInformation3D(rViewInformation3D), - maShadowPrimitives(), - mbShadow3DChecked(false), - mfOldDiscreteSizeX(0.0), - mfOldDiscreteSizeY(0.0), - maOldUnitVisiblePart(), - maOldRenderedBitmap() - { - } - - bool ScenePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const ScenePrimitive2D& rCompare = (ScenePrimitive2D&)rPrimitive; - - return (primitive3d::arePrimitive3DSequencesEqual(getChildren3D(), rCompare.getChildren3D()) - && getSdrSceneAttribute() == rCompare.getSdrSceneAttribute() - && getSdrLightingAttribute() == rCompare.getSdrLightingAttribute() - && getObjectTransformation() == rCompare.getObjectTransformation() - && getViewInformation3D() == rCompare.getViewInformation3D()); - } - - return false; - } - - basegfx::B2DRange ScenePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - // transform unit range to discrete coordinate range - basegfx::B2DRange aRetval(0.0, 0.0, 1.0, 1.0); - aRetval.transform(rViewInformation.getObjectToViewTransformation() * getObjectTransformation()); - - // force to discrete expanded bounds (it grows, so expanding works perfectly well) - aRetval.expand(basegfx::B2DTuple(floor(aRetval.getMinX()), floor(aRetval.getMinY()))); - aRetval.expand(basegfx::B2DTuple(ceil(aRetval.getMaxX()), ceil(aRetval.getMaxY()))); - - // transform back from discrete (view) to world coordinates - aRetval.transform(rViewInformation.getInverseObjectToViewTransformation()); - - // expand by evtl. existing shadow primitives - if(impGetShadow3D(rViewInformation)) - { - const basegfx::B2DRange aShadow2DRange(getB2DRangeFromPrimitive2DSequence(maShadowPrimitives, rViewInformation)); - - if(!aShadow2DRange.isEmpty()) - { - aRetval.expand(aShadow2DRange); - } - } - - return aRetval; - } - - Primitive2DSequence ScenePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - // get the involved ranges (see helper method calculateDiscreteSizes for details) - basegfx::B2DRange aDiscreteRange; - basegfx::B2DRange aUnitVisibleRange; - bool bNeedNewDecomposition(false); - bool bDiscreteSizesAreCalculated(false); - - if(getBuffered2DDecomposition().hasElements()) - { - basegfx::B2DRange aVisibleDiscreteRange; - calculateDiscreteSizes(rViewInformation, aDiscreteRange, aVisibleDiscreteRange, aUnitVisibleRange); - bDiscreteSizesAreCalculated = true; - - // needs to be painted when the new part is not part of the last - // decomposition - if(!maOldUnitVisiblePart.isInside(aUnitVisibleRange)) - { - bNeedNewDecomposition = true; - } - - // display has changed and cannot be reused when resolution got bigger. It - // can be reused when resolution got smaller, though. - if(!bNeedNewDecomposition) - { - if(basegfx::fTools::more(aDiscreteRange.getWidth(), mfOldDiscreteSizeX) || - basegfx::fTools::more(aDiscreteRange.getHeight(), mfOldDiscreteSizeY)) - { - bNeedNewDecomposition = true; - } - } - } - - if(bNeedNewDecomposition) - { - // conditions of last local decomposition have changed, delete - const_cast< ScenePrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - - if(!getBuffered2DDecomposition().hasElements()) - { - if(!bDiscreteSizesAreCalculated) - { - basegfx::B2DRange aVisibleDiscreteRange; - calculateDiscreteSizes(rViewInformation, aDiscreteRange, aVisibleDiscreteRange, aUnitVisibleRange); - } - - // remember last used NewDiscreteSize and NewUnitVisiblePart - ScenePrimitive2D* pThat = const_cast< ScenePrimitive2D* >(this); - pThat->mfOldDiscreteSizeX = aDiscreteRange.getWidth(); - pThat->mfOldDiscreteSizeY = aDiscreteRange.getHeight(); - pThat->maOldUnitVisiblePart = aUnitVisibleRange; - } - - // use parent implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(ScenePrimitive2D, PRIMITIVE2D_ID_SCENEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/sdrdecompositiontools2d.cxx b/drawinglayer/source/primitive2d/sdrdecompositiontools2d.cxx deleted file mode 100644 index bde27c4796..0000000000 --- a/drawinglayer/source/primitive2d/sdrdecompositiontools2d.cxx +++ /dev/null @@ -1,127 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/sdrdecompositiontools2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DReference createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DHomMatrix& rMatrix) - { - const basegfx::B2DPolygon aUnitOutline(basegfx::tools::createUnitPolygon()); - - return createHiddenGeometryPrimitives2D( - bFilled, - basegfx::B2DPolyPolygon(aUnitOutline), - rMatrix); - } - - Primitive2DReference createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DPolyPolygon& rPolyPolygon) - { - return createHiddenGeometryPrimitives2D( - bFilled, - rPolyPolygon, - basegfx::B2DHomMatrix()); - } - - Primitive2DReference createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DRange& rRange) - { - return createHiddenGeometryPrimitives2D( - bFilled, - rRange, - basegfx::B2DHomMatrix()); - } - - Primitive2DReference createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DRange& rRange, - const basegfx::B2DHomMatrix& rMatrix) - { - const basegfx::B2DPolyPolygon aOutline(basegfx::tools::createPolygonFromRect(rRange)); - - return createHiddenGeometryPrimitives2D( - bFilled, - aOutline, - rMatrix); - } - - Primitive2DReference createHiddenGeometryPrimitives2D( - bool bFilled, - const basegfx::B2DPolyPolygon& rPolyPolygon, - const basegfx::B2DHomMatrix& rMatrix) - { - // create fill or line primitive - Primitive2DReference xReference; - basegfx::B2DPolyPolygon aScaledOutline(rPolyPolygon); - aScaledOutline.transform(rMatrix); - - if(bFilled) - { - xReference = new PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon(aScaledOutline), - basegfx::BColor(0.0, 0.0, 0.0)); - } - else - { - const basegfx::BColor aGrayTone(0xc0 / 255.0, 0xc0 / 255.0, 0xc0 / 255.0); - - xReference = new PolyPolygonHairlinePrimitive2D( - aScaledOutline, - aGrayTone); - } - - // create HiddenGeometryPrimitive2D - return Primitive2DReference( - new HiddenGeometryPrimitive2D(Primitive2DSequence(&xReference, 1))); - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/shadowprimitive2d.cxx b/drawinglayer/source/primitive2d/shadowprimitive2d.cxx deleted file mode 100644 index c0d436964e..0000000000 --- a/drawinglayer/source/primitive2d/shadowprimitive2d.cxx +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/shadowprimitive2d.hxx> -#include <basegfx/color/bcolormodifier.hxx> -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - ShadowPrimitive2D::ShadowPrimitive2D( - const basegfx::B2DHomMatrix& rShadowTransform, - const basegfx::BColor& rShadowColor, - const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren), - maShadowTransform(rShadowTransform), - maShadowColor(rShadowColor) - { - } - - bool ShadowPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const ShadowPrimitive2D& rCompare = static_cast< const ShadowPrimitive2D& >(rPrimitive); - - return (getShadowTransform() == rCompare.getShadowTransform() - && getShadowColor() == rCompare.getShadowColor()); - } - - return false; - } - - basegfx::B2DRange ShadowPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - basegfx::B2DRange aRetval(getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation)); - aRetval.transform(getShadowTransform()); - return aRetval; - } - - Primitive2DSequence ShadowPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence aRetval; - - if(getChildren().hasElements()) - { - // create a modifiedColorPrimitive containing the shadow color and the content - const basegfx::BColorModifier aBColorModifier(getShadowColor()); - const Primitive2DReference xRefA(new ModifiedColorPrimitive2D(getChildren(), aBColorModifier)); - const Primitive2DSequence aSequenceB(&xRefA, 1L); - - // build transformed primitiveVector with shadow offset and add to target - const Primitive2DReference xRefB(new TransformPrimitive2D(getShadowTransform(), aSequenceB)); - aRetval = Primitive2DSequence(&xRefB, 1L); - } - - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(ShadowPrimitive2D, PRIMITIVE2D_ID_SHADOWPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/structuretagprimitive2d.cxx b/drawinglayer/source/primitive2d/structuretagprimitive2d.cxx deleted file mode 100644 index 4e26a06e02..0000000000 --- a/drawinglayer/source/primitive2d/structuretagprimitive2d.cxx +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/structuretagprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - StructureTagPrimitive2D::StructureTagPrimitive2D( - const vcl::PDFWriter::StructElement& rStructureElement, - const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren), - maStructureElement(rStructureElement) - { - } - - // provide unique ID - ImplPrimitrive2DIDBlock(StructureTagPrimitive2D, PRIMITIVE2D_ID_STRUCTURETAGPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx b/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx deleted file mode 100644 index 6b5c4aab0f..0000000000 --- a/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx +++ /dev/null @@ -1,610 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/textdecoratedprimitive2d.hxx> -#include <drawinglayer/primitive2d/textlayoutdevice.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/attribute/strokeattribute.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> -#include <comphelper/processfactory.hxx> -#include <com/sun/star/i18n/WordType.hpp> -#include <drawinglayer/primitive2d/texteffectprimitive2d.hxx> -#include <drawinglayer/primitive2d/shadowprimitive2d.hxx> -#include <com/sun/star/i18n/XBreakIterator.hpp> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/textlineprimitive2d.hxx> -#include <drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - void TextDecoratedPortionPrimitive2D::impCreateGeometryContent( - std::vector< Primitive2DReference >& rTarget, - basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose& rDecTrans, - const String& rText, - xub_StrLen aTextPosition, - xub_StrLen aTextLength, - const ::std::vector< double >& rDXArray, - const attribute::FontAttribute& rFontAttribute) const - { - // create the SimpleTextPrimitive needed in any case - rTarget.push_back(Primitive2DReference( - new TextSimplePortionPrimitive2D( - rDecTrans.getB2DHomMatrix(), - rText, - aTextPosition, - aTextLength, - rDXArray, - rFontAttribute, - getLocale(), - getFontColor()))); - - // see if something else needs to be done - const bool bOverlineUsed(TEXT_LINE_NONE != getFontOverline()); - const bool bUnderlineUsed(TEXT_LINE_NONE != getFontUnderline()); - const bool bStrikeoutUsed(TEXT_STRIKEOUT_NONE != getTextStrikeout()); - - if(bUnderlineUsed || bStrikeoutUsed || bOverlineUsed) - { - // common preparations - TextLayouterDevice aTextLayouter; - - // TextLayouterDevice is needed to get metrics for text decorations like - // underline/strikeout/emphasis marks from it. For setup, the font size is needed - aTextLayouter.setFontAttribute( - getFontAttribute(), - rDecTrans.getScale().getX(), - rDecTrans.getScale().getY(), - getLocale()); - - // get text width - double fTextWidth(0.0); - - if(rDXArray.empty()) - { - fTextWidth = aTextLayouter.getTextWidth(rText, aTextPosition, aTextLength); - } - else - { - fTextWidth = rDXArray.back() * rDecTrans.getScale().getX(); - const double fFontScaleX(rDecTrans.getScale().getX()); - - if(!basegfx::fTools::equal(fFontScaleX, 1.0) - && !basegfx::fTools::equalZero(fFontScaleX)) - { - // need to take FontScaling out of the DXArray - fTextWidth /= fFontScaleX; - } - } - - if(bOverlineUsed) - { - // create primitive geometry for overline - rTarget.push_back(Primitive2DReference( - new TextLinePrimitive2D( - rDecTrans.getB2DHomMatrix(), - fTextWidth, - aTextLayouter.getOverlineOffset(), - aTextLayouter.getOverlineHeight(), - getFontOverline(), - getOverlineColor()))); - } - - if(bUnderlineUsed) - { - // create primitive geometry for underline - rTarget.push_back(Primitive2DReference( - new TextLinePrimitive2D( - rDecTrans.getB2DHomMatrix(), - fTextWidth, - aTextLayouter.getUnderlineOffset(), - aTextLayouter.getUnderlineHeight(), - getFontUnderline(), - getTextlineColor()))); - } - - if(bStrikeoutUsed) - { - // create primitive geometry for strikeout - if(TEXT_STRIKEOUT_SLASH == getTextStrikeout() || TEXT_STRIKEOUT_X == getTextStrikeout()) - { - // strikeout with character - const sal_Unicode aStrikeoutChar(TEXT_STRIKEOUT_SLASH == getTextStrikeout() ? '/' : 'X'); - - rTarget.push_back(Primitive2DReference( - new TextCharacterStrikeoutPrimitive2D( - rDecTrans.getB2DHomMatrix(), - fTextWidth, - getFontColor(), - aStrikeoutChar, - getFontAttribute(), - getLocale()))); - } - else - { - // strikeout with geometry - rTarget.push_back(Primitive2DReference( - new TextGeometryStrikeoutPrimitive2D( - rDecTrans.getB2DHomMatrix(), - fTextWidth, - getFontColor(), - aTextLayouter.getUnderlineHeight(), - aTextLayouter.getStrikeoutOffset(), - getTextStrikeout()))); - } - } - } - - // TODO: Handle Font Emphasis Above/Below - } - - void TextDecoratedPortionPrimitive2D::impCorrectTextBoundary(::com::sun::star::i18n::Boundary& rNextWordBoundary) const - { - // truncate aNextWordBoundary to min/max possible values. This is necessary since the word start may be - // before/after getTextPosition() when a long string is the content and getTextPosition() - // is right inside a word. Same for end. - const sal_Int32 aMinPos(static_cast< sal_Int32 >(getTextPosition())); - const sal_Int32 aMaxPos(aMinPos + static_cast< sal_Int32 >(getTextLength())); - - if(rNextWordBoundary.startPos < aMinPos) - { - rNextWordBoundary.startPos = aMinPos; - } - else if(rNextWordBoundary.startPos > aMaxPos) - { - rNextWordBoundary.startPos = aMaxPos; - } - - if(rNextWordBoundary.endPos < aMinPos) - { - rNextWordBoundary.endPos = aMinPos; - } - else if(rNextWordBoundary.endPos > aMaxPos) - { - rNextWordBoundary.endPos = aMaxPos; - } - } - - void TextDecoratedPortionPrimitive2D::impSplitSingleWords( - std::vector< Primitive2DReference >& rTarget, - basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose& rDecTrans) const - { - // break iterator support - // made static so it only needs to be fetched once, even with many single - // constructed VclMetafileProcessor2D. It's still incarnated on demand, - // but exists for OOo runtime now by purpose. - static ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XBreakIterator > xLocalBreakIterator; - - if(!xLocalBreakIterator.is()) - { - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xMSF(::comphelper::getProcessServiceFactory()); - xLocalBreakIterator.set(xMSF->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.i18n.BreakIterator"))), ::com::sun::star::uno::UNO_QUERY); - } - - if(xLocalBreakIterator.is() && getTextLength()) - { - // init word iterator, get first word and truncate to possibilities - ::com::sun::star::i18n::Boundary aNextWordBoundary(xLocalBreakIterator->getWordBoundary( - getText(), getTextPosition(), getLocale(), ::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES, sal_True)); - - if(aNextWordBoundary.endPos == getTextPosition()) - { - // backward hit, force next word - aNextWordBoundary = xLocalBreakIterator->getWordBoundary( - getText(), getTextPosition() + 1, getLocale(), ::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES, sal_True); - } - - impCorrectTextBoundary(aNextWordBoundary); - - // prepare new font attributes WITHOUT outline - const attribute::FontAttribute aNewFontAttribute( - getFontAttribute().getFamilyName(), - getFontAttribute().getStyleName(), - getFontAttribute().getWeight(), - getFontAttribute().getSymbol(), - getFontAttribute().getVertical(), - getFontAttribute().getItalic(), - getFontAttribute().getMonospaced(), - false, // no outline anymore, handled locally - getFontAttribute().getRTL(), - getFontAttribute().getBiDiStrong()); - - if(aNextWordBoundary.startPos == getTextPosition() && aNextWordBoundary.endPos == getTextLength()) - { - // it IS only a single word, handle as one word - impCreateGeometryContent(rTarget, rDecTrans, getText(), getTextPosition(), getTextLength(), getDXArray(), aNewFontAttribute); - } - else - { - // prepare TextLayouter - const bool bNoDXArray(getDXArray().empty()); - TextLayouterDevice aTextLayouter; - - if(bNoDXArray) - { - // ..but only completely when no DXArray - aTextLayouter.setFontAttribute( - getFontAttribute(), - rDecTrans.getScale().getX(), - rDecTrans.getScale().getY(), - getLocale()); - } - - // do iterate over single words - while(aNextWordBoundary.startPos != aNextWordBoundary.endPos) - { - // prepare values for new portion - const xub_StrLen nNewTextStart(static_cast< xub_StrLen >(aNextWordBoundary.startPos)); - const xub_StrLen nNewTextEnd(static_cast< xub_StrLen >(aNextWordBoundary.endPos)); - - // prepare transform for the single word - basegfx::B2DHomMatrix aNewTransform; - ::std::vector< double > aNewDXArray; - const bool bNewStartIsNotOldStart(nNewTextStart > getTextPosition()); - - if(!bNoDXArray) - { - // prepare new DXArray for the single word - aNewDXArray = ::std::vector< double >( - getDXArray().begin() + static_cast< sal_uInt32 >(nNewTextStart - getTextPosition()), - getDXArray().begin() + static_cast< sal_uInt32 >(nNewTextEnd - getTextPosition())); - } - - if(bNewStartIsNotOldStart) - { - // needs to be moved to a new start position - double fOffset(0.0); - - if(bNoDXArray) - { - // evaluate using TextLayouter - fOffset = aTextLayouter.getTextWidth(getText(), getTextPosition(), nNewTextStart); - } - else - { - // get from DXArray - const sal_uInt32 nIndex(static_cast< sal_uInt32 >(nNewTextStart - getTextPosition())); - fOffset = getDXArray()[nIndex - 1]; - } - - // need offset without FontScale for building the new transformation. The - // new transformation will be multiplied with the current text transformation - // so FontScale would be double - double fOffsetNoScale(fOffset); - const double fFontScaleX(rDecTrans.getScale().getX()); - - if(!basegfx::fTools::equal(fFontScaleX, 1.0) - && !basegfx::fTools::equalZero(fFontScaleX)) - { - fOffsetNoScale /= fFontScaleX; - } - - // apply needed offset to transformation - aNewTransform.translate(fOffsetNoScale, 0.0); - - if(!bNoDXArray) - { - // DXArray values need to be corrected with the offset, too. Here, - // take the scaled offset since the DXArray is scaled - const sal_uInt32 nArraySize(aNewDXArray.size()); - - for(sal_uInt32 a(0); a < nArraySize; a++) - { - aNewDXArray[a] -= fOffset; - } - } - } - - // add text transformation to new transformation - aNewTransform *= rDecTrans.getB2DHomMatrix(); - - // create geometry content for the single word. Do not forget - // to use the new transformation - basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose aDecTrans(aNewTransform); - - impCreateGeometryContent(rTarget, aDecTrans, getText(), nNewTextStart, - nNewTextEnd - nNewTextStart, aNewDXArray, aNewFontAttribute); - - if(aNextWordBoundary.endPos >= getTextPosition() + getTextLength()) - { - // end reached - aNextWordBoundary.startPos = aNextWordBoundary.endPos; - } - else - { - // get new word portion - const sal_Int32 nLastEndPos(aNextWordBoundary.endPos); - - aNextWordBoundary = xLocalBreakIterator->getWordBoundary( - getText(), aNextWordBoundary.endPos, getLocale(), - ::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES, sal_True); - - if(nLastEndPos == aNextWordBoundary.endPos) - { - // backward hit, force next word - aNextWordBoundary = xLocalBreakIterator->getWordBoundary( - getText(), nLastEndPos + 1, getLocale(), - ::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES, sal_True); - } - - impCorrectTextBoundary(aNextWordBoundary); - } - } - } - } - } - - Primitive2DSequence TextDecoratedPortionPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - std::vector< Primitive2DReference > aNewPrimitives; - basegfx::tools::B2DHomMatrixBufferedOnDemandDecompose aDecTrans(getTextTransform()); - Primitive2DSequence aRetval; - - // create basic geometry such as SimpleTextPrimitive, Overline, Underline, - // Strikeout, etc... - if(getWordLineMode()) - { - // support for single word mode - impSplitSingleWords(aNewPrimitives, aDecTrans); - } - else - { - // prepare new font attributes WITHOUT outline - const attribute::FontAttribute aNewFontAttribute( - getFontAttribute().getFamilyName(), - getFontAttribute().getStyleName(), - getFontAttribute().getWeight(), - getFontAttribute().getSymbol(), - getFontAttribute().getVertical(), - getFontAttribute().getItalic(), - false, // no outline anymore, handled locally - getFontAttribute().getRTL(), - getFontAttribute().getBiDiStrong()); - - // handle as one word - impCreateGeometryContent(aNewPrimitives, aDecTrans, getText(), getTextPosition(), getTextLength(), getDXArray(), aNewFontAttribute); - } - - // convert to Primitive2DSequence - const sal_uInt32 nMemberCount(aNewPrimitives.size()); - - if(nMemberCount) - { - aRetval.realloc(nMemberCount); - - for(sal_uInt32 a(0); a < nMemberCount; a++) - { - aRetval[a] = aNewPrimitives[a]; - } - } - - // Handle Shadow, Outline and TextRelief - if(aRetval.hasElements()) - { - // outline AND shadow depend on NO TextRelief (see dialog) - const bool bHasTextRelief(TEXT_RELIEF_NONE != getTextRelief()); - const bool bHasShadow(!bHasTextRelief && getShadow()); - const bool bHasOutline(!bHasTextRelief && getFontAttribute().getOutline()); - - if(bHasShadow || bHasTextRelief || bHasOutline) - { - Primitive2DReference aShadow; - - if(bHasShadow) - { - // create shadow with current content (in aRetval). Text shadow - // is constant, relative to font size, rotated with the text and has a - // constant color. - // shadow parameter values - static double fFactor(1.0 / 24.0); - const double fTextShadowOffset(aDecTrans.getScale().getY() * fFactor); - static basegfx::BColor aShadowColor(0.3, 0.3, 0.3); - - // preapare shadow transform matrix - const basegfx::B2DHomMatrix aShadowTransform(basegfx::tools::createTranslateB2DHomMatrix( - fTextShadowOffset, fTextShadowOffset)); - - // create shadow primitive - aShadow = Primitive2DReference(new ShadowPrimitive2D( - aShadowTransform, - aShadowColor, - aRetval)); - } - - if(bHasTextRelief) - { - // create emboss using an own helper primitive since this will - // be view-dependent - const basegfx::BColor aBBlack(0.0, 0.0, 0.0); - const bool bDefaultTextColor(aBBlack == getFontColor()); - TextEffectStyle2D aTextEffectStyle2D(TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED); - - if(bDefaultTextColor) - { - if(TEXT_RELIEF_ENGRAVED == getTextRelief()) - { - aTextEffectStyle2D = TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED_DEFAULT; - } - else - { - aTextEffectStyle2D = TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT; - } - } - else - { - if(TEXT_RELIEF_ENGRAVED == getTextRelief()) - { - aTextEffectStyle2D = TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED; - } - else - { - aTextEffectStyle2D = TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED; - } - } - - Primitive2DReference aNewTextEffect(new TextEffectPrimitive2D( - aRetval, - aDecTrans.getTranslate(), - aDecTrans.getRotate(), - aTextEffectStyle2D)); - aRetval = Primitive2DSequence(&aNewTextEffect, 1); - } - else if(bHasOutline) - { - // create outline using an own helper primitive since this will - // be view-dependent - Primitive2DReference aNewTextEffect(new TextEffectPrimitive2D( - aRetval, - aDecTrans.getTranslate(), - aDecTrans.getRotate(), - TEXTEFFECTSTYLE2D_OUTLINE)); - aRetval = Primitive2DSequence(&aNewTextEffect, 1); - } - - if(aShadow.is()) - { - // put shadow in front if there is one to paint timely before - // but placed behind content - const Primitive2DSequence aContent(aRetval); - aRetval = Primitive2DSequence(&aShadow, 1); - appendPrimitive2DSequenceToPrimitive2DSequence(aRetval, aContent); - } - } - } - - return aRetval; - } - - TextDecoratedPortionPrimitive2D::TextDecoratedPortionPrimitive2D( - - // TextSimplePortionPrimitive2D parameters - const basegfx::B2DHomMatrix& rNewTransform, - const String& rText, - xub_StrLen aTextPosition, - xub_StrLen aTextLength, - const ::std::vector< double >& rDXArray, - const attribute::FontAttribute& rFontAttribute, - const ::com::sun::star::lang::Locale& rLocale, - const basegfx::BColor& rFontColor, - - // local parameters - const basegfx::BColor& rOverlineColor, - const basegfx::BColor& rTextlineColor, - TextLine eFontOverline, - TextLine eFontUnderline, - bool bUnderlineAbove, - TextStrikeout eTextStrikeout, - bool bWordLineMode, - TextEmphasisMark eTextEmphasisMark, - bool bEmphasisMarkAbove, - bool bEmphasisMarkBelow, - TextRelief eTextRelief, - bool bShadow) - : TextSimplePortionPrimitive2D(rNewTransform, rText, aTextPosition, aTextLength, rDXArray, rFontAttribute, rLocale, rFontColor), - maOverlineColor(rOverlineColor), - maTextlineColor(rTextlineColor), - meFontOverline(eFontOverline), - meFontUnderline(eFontUnderline), - meTextStrikeout(eTextStrikeout), - meTextEmphasisMark(eTextEmphasisMark), - meTextRelief(eTextRelief), - mbUnderlineAbove(bUnderlineAbove), - mbWordLineMode(bWordLineMode), - mbEmphasisMarkAbove(bEmphasisMarkAbove), - mbEmphasisMarkBelow(bEmphasisMarkBelow), - mbShadow(bShadow) - { - } - - bool TextDecoratedPortionPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(TextSimplePortionPrimitive2D::operator==(rPrimitive)) - { - const TextDecoratedPortionPrimitive2D& rCompare = (TextDecoratedPortionPrimitive2D&)rPrimitive; - - return (getOverlineColor() == rCompare.getOverlineColor() - && getTextlineColor() == rCompare.getTextlineColor() - && getFontOverline() == rCompare.getFontOverline() - && getFontUnderline() == rCompare.getFontUnderline() - && getTextStrikeout() == rCompare.getTextStrikeout() - && getTextEmphasisMark() == rCompare.getTextEmphasisMark() - && getTextRelief() == rCompare.getTextRelief() - && getUnderlineAbove() == rCompare.getUnderlineAbove() - && getWordLineMode() == rCompare.getWordLineMode() - && getEmphasisMarkAbove() == rCompare.getEmphasisMarkAbove() - && getEmphasisMarkBelow() == rCompare.getEmphasisMarkBelow() - && getShadow() == rCompare.getShadow()); - } - - return false; - } - - // #i96475# - // Added missing implementation. Decorations may (will) stick out of the text's - // inking area, so add them if needed - basegfx::B2DRange TextDecoratedPortionPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - const bool bDecoratedIsNeeded( - TEXT_LINE_NONE != getFontOverline() - || TEXT_LINE_NONE != getFontUnderline() - || TEXT_STRIKEOUT_NONE != getTextStrikeout() - || TEXT_EMPHASISMARK_NONE != getTextEmphasisMark() - || TEXT_RELIEF_NONE != getTextRelief() - || getShadow()); - - if(bDecoratedIsNeeded) - { - // decoration is used, fallback to BufferedDecompositionPrimitive2D::getB2DRange which uses - // the own local decomposition for computation and thus creates all necessary - // geometric objects - return BufferedDecompositionPrimitive2D::getB2DRange(rViewInformation); - } - else - { - // no relevant decoration used, fallback to TextSimplePortionPrimitive2D::getB2DRange - return TextSimplePortionPrimitive2D::getB2DRange(rViewInformation); - } - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextDecoratedPortionPrimitive2D, PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx b/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx deleted file mode 100644 index cf29d00e3b..0000000000 --- a/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx +++ /dev/null @@ -1,242 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/texteffectprimitive2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - static double fDiscreteSize(1.1); - - Primitive2DSequence TextEffectPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - Primitive2DSequence aRetval; - - // get the distance of one discrete units from target display. Use between 1.0 and sqrt(2) to - // have good results on rotated objects, too - const basegfx::B2DVector aDistance(rViewInformation.getInverseObjectToViewTransformation() * - basegfx::B2DVector(fDiscreteSize, fDiscreteSize)); - const basegfx::B2DVector aDiagonalDistance(aDistance * (1.0 / 1.44)); - - switch(getTextEffectStyle2D()) - { - case TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED: - case TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED: - case TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT: - case TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED_DEFAULT: - { - // prepare transform of sub-group back to (0,0) and align to X-Axis - basegfx::B2DHomMatrix aBackTransform(basegfx::tools::createTranslateB2DHomMatrix( - -getRotationCenter().getX(), -getRotationCenter().getY())); - aBackTransform.rotate(-getDirection()); - - // prepare transform of sub-group back to it's position and rotation - basegfx::B2DHomMatrix aForwardTransform(basegfx::tools::createRotateB2DHomMatrix(getDirection())); - aForwardTransform.translate(getRotationCenter().getX(), getRotationCenter().getY()); - - // create transformation for one discrete unit - const bool bEmbossed( - TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED == getTextEffectStyle2D() - || TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT == getTextEffectStyle2D()); - const bool bDefaultTextColor( - TEXTEFFECTSTYLE2D_RELIEF_EMBOSSED_DEFAULT == getTextEffectStyle2D() - || TEXTEFFECTSTYLE2D_RELIEF_ENGRAVED_DEFAULT == getTextEffectStyle2D()); - basegfx::B2DHomMatrix aTransform(aBackTransform); - aRetval.realloc(2); - - if(bEmbossed) - { - // to bottom-right - aTransform.translate(aDiagonalDistance.getX(), aDiagonalDistance.getY()); - } - else - { - // to top-left - aTransform.translate(-aDiagonalDistance.getX(), -aDiagonalDistance.getY()); - } - - aTransform *= aForwardTransform; - - if(bDefaultTextColor) - { - // emboss/engrave in black, original forced to white - const basegfx::BColorModifier aBColorModifierToGray(basegfx::BColor(0.0)); - const Primitive2DReference xModifiedColor(new ModifiedColorPrimitive2D(getTextContent(), aBColorModifierToGray)); - aRetval[0] = Primitive2DReference(new TransformPrimitive2D(aTransform, Primitive2DSequence(&xModifiedColor, 1))); - - // add original, too - const basegfx::BColorModifier aBColorModifierToWhite(basegfx::BColor(1.0)); - aRetval[1] = Primitive2DReference(new ModifiedColorPrimitive2D(getTextContent(), aBColorModifierToWhite)); - } - else - { - // emboss/engrave in gray, keep original's color - const basegfx::BColorModifier aBColorModifierToGray(basegfx::BColor(0.75)); // 192 - const Primitive2DReference xModifiedColor(new ModifiedColorPrimitive2D(getTextContent(), aBColorModifierToGray)); - aRetval[0] = Primitive2DReference(new TransformPrimitive2D(aTransform, Primitive2DSequence(&xModifiedColor, 1))); - - // add original, too - aRetval[1] = Primitive2DReference(new GroupPrimitive2D(getTextContent())); - } - - break; - } - case TEXTEFFECTSTYLE2D_OUTLINE: - { - // create transform primitives in all directions - basegfx::B2DHomMatrix aTransform; - aRetval.realloc(9); - - aTransform.set(0, 2, aDistance.getX()); - aTransform.set(1, 2, 0.0); - aRetval[0] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent())); - - aTransform.set(0, 2, aDiagonalDistance.getX()); - aTransform.set(1, 2, aDiagonalDistance.getY()); - aRetval[1] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent())); - - aTransform.set(0, 2, 0.0); - aTransform.set(1, 2, aDistance.getY()); - aRetval[2] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent())); - - aTransform.set(0, 2, -aDiagonalDistance.getX()); - aTransform.set(1, 2, aDiagonalDistance.getY()); - aRetval[3] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent())); - - aTransform.set(0, 2, -aDistance.getX()); - aTransform.set(1, 2, 0.0); - aRetval[4] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent())); - - aTransform.set(0, 2, -aDiagonalDistance.getX()); - aTransform.set(1, 2, -aDiagonalDistance.getY()); - aRetval[5] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent())); - - aTransform.set(0, 2, 0.0); - aTransform.set(1, 2, -aDistance.getY()); - aRetval[6] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent())); - - aTransform.set(0, 2, aDiagonalDistance.getX()); - aTransform.set(1, 2, -aDiagonalDistance.getY()); - aRetval[7] = Primitive2DReference(new TransformPrimitive2D(aTransform, getTextContent())); - - // at last, place original over it, but force to white - const basegfx::BColorModifier aBColorModifierToWhite(basegfx::BColor(1.0, 1.0, 1.0)); - aRetval[8] = Primitive2DReference(new ModifiedColorPrimitive2D(getTextContent(), aBColorModifierToWhite)); - - break; - } - } - - return aRetval; - } - - TextEffectPrimitive2D::TextEffectPrimitive2D( - const Primitive2DSequence& rTextContent, - const basegfx::B2DPoint& rRotationCenter, - double fDirection, - TextEffectStyle2D eTextEffectStyle2D) - : BufferedDecompositionPrimitive2D(), - maTextContent(rTextContent), - maRotationCenter(rRotationCenter), - mfDirection(fDirection), - meTextEffectStyle2D(eTextEffectStyle2D) - { - } - - bool TextEffectPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BasePrimitive2D::operator==(rPrimitive)) - { - const TextEffectPrimitive2D& rCompare = (TextEffectPrimitive2D&)rPrimitive; - - return (getTextContent() == rCompare.getTextContent() - && getRotationCenter() == rCompare.getRotationCenter() - && getDirection() == rCompare.getDirection() - && getTextEffectStyle2D() == rCompare.getTextEffectStyle2D()); - } - - return false; - } - - basegfx::B2DRange TextEffectPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - // get range of content and grow by used fDiscreteSize. That way it is not necessary to ask - // the whole decomposition for it's ranges (which may be expensive with outline mode which - // then will ask 9 times at nearly the same content. This may even be refined here using the - // TextEffectStyle information, e.g. for TEXTEFFECTSTYLE2D_RELIEF the grow needs only to - // be in two directions - basegfx::B2DRange aRetval(getB2DRangeFromPrimitive2DSequence(getTextContent(), rViewInformation)); - aRetval.grow(fDiscreteSize); - - return aRetval; - } - - Primitive2DSequence TextEffectPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - if(getBuffered2DDecomposition().hasElements()) - { - if(maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation()) - { - // conditions of last local decomposition have changed, delete - const_cast< TextEffectPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DSequence()); - } - } - - if(!getBuffered2DDecomposition().hasElements()) - { - // remember ViewRange and ViewTransformation - const_cast< TextEffectPrimitive2D* >(this)->maLastObjectToViewTransformation = rViewInformation.getObjectToViewTransformation(); - } - - // use parent implementation - return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextEffectPrimitive2D, PRIMITIVE2D_ID_TEXTEFFECTPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/textenumsprimitive2d.cxx b/drawinglayer/source/primitive2d/textenumsprimitive2d.cxx deleted file mode 100644 index 5247d4404e..0000000000 --- a/drawinglayer/source/primitive2d/textenumsprimitive2d.cxx +++ /dev/null @@ -1,124 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/textenumsprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TextLine mapFontUnderlineToTextLine(FontUnderline eLineStyle) - { - switch(eLineStyle) - { - case UNDERLINE_SINGLE: return TEXT_LINE_SINGLE; - case UNDERLINE_DOUBLE: return TEXT_LINE_DOUBLE; - case UNDERLINE_DOTTED: return TEXT_LINE_DOTTED; - case UNDERLINE_DASH: return TEXT_LINE_DASH; - case UNDERLINE_LONGDASH: return TEXT_LINE_LONGDASH; - case UNDERLINE_DASHDOT: return TEXT_LINE_DASHDOT; - case UNDERLINE_DASHDOTDOT: return TEXT_LINE_DASHDOTDOT; - case UNDERLINE_SMALLWAVE: return TEXT_LINE_SMALLWAVE; - case UNDERLINE_WAVE: return TEXT_LINE_WAVE; - case UNDERLINE_DOUBLEWAVE: return TEXT_LINE_DOUBLEWAVE; - case UNDERLINE_BOLD: return TEXT_LINE_BOLD; - case UNDERLINE_BOLDDOTTED: return TEXT_LINE_BOLDDOTTED; - case UNDERLINE_BOLDDASH: return TEXT_LINE_BOLDDASH; - case UNDERLINE_BOLDLONGDASH: return TEXT_LINE_BOLDLONGDASH; - case UNDERLINE_BOLDDASHDOT: return TEXT_LINE_BOLDDASHDOT; - case UNDERLINE_BOLDDASHDOTDOT: return TEXT_LINE_BOLDDASHDOTDOT; - case UNDERLINE_BOLDWAVE: return TEXT_LINE_BOLDWAVE; - // FontUnderline_FORCE_EQUAL_SIZE, UNDERLINE_DONTKNOW, UNDERLINE_NONE - default: return TEXT_LINE_NONE; - } - } - - FontUnderline mapTextLineToFontUnderline(TextLine eLineStyle) - { - switch(eLineStyle) - { - default: /*TEXT_LINE_NONE*/ return UNDERLINE_NONE; - case TEXT_LINE_SINGLE: return UNDERLINE_SINGLE; - case TEXT_LINE_DOUBLE: return UNDERLINE_DOUBLE; - case TEXT_LINE_DOTTED: return UNDERLINE_DOTTED; - case TEXT_LINE_DASH: return UNDERLINE_DASH; - case TEXT_LINE_LONGDASH: return UNDERLINE_LONGDASH; - case TEXT_LINE_DASHDOT: return UNDERLINE_DASHDOT; - case TEXT_LINE_DASHDOTDOT: return UNDERLINE_DASHDOTDOT; - case TEXT_LINE_SMALLWAVE: return UNDERLINE_SMALLWAVE; - case TEXT_LINE_WAVE: return UNDERLINE_WAVE; - case TEXT_LINE_DOUBLEWAVE: return UNDERLINE_DOUBLEWAVE; - case TEXT_LINE_BOLD: return UNDERLINE_BOLD; - case TEXT_LINE_BOLDDOTTED: return UNDERLINE_BOLDDOTTED; - case TEXT_LINE_BOLDDASH: return UNDERLINE_BOLDDASH; - case TEXT_LINE_BOLDLONGDASH: return UNDERLINE_LONGDASH; - case TEXT_LINE_BOLDDASHDOT: return UNDERLINE_BOLDDASHDOT; - case TEXT_LINE_BOLDDASHDOTDOT:return UNDERLINE_BOLDDASHDOT; - case TEXT_LINE_BOLDWAVE: return UNDERLINE_BOLDWAVE; - } - } - - TextStrikeout mapFontStrikeoutToTextStrikeout(FontStrikeout eFontStrikeout) - { - switch(eFontStrikeout) - { - case STRIKEOUT_SINGLE: return TEXT_STRIKEOUT_SINGLE; - case STRIKEOUT_DOUBLE: return TEXT_STRIKEOUT_DOUBLE; - case STRIKEOUT_BOLD: return TEXT_STRIKEOUT_BOLD; - case STRIKEOUT_SLASH: return TEXT_STRIKEOUT_SLASH; - case STRIKEOUT_X: return TEXT_STRIKEOUT_X; - // FontStrikeout_FORCE_EQUAL_SIZE, STRIKEOUT_NONE, STRIKEOUT_DONTKNOW - default: return TEXT_STRIKEOUT_NONE; - } - } - - FontStrikeout mapTextStrikeoutToFontStrikeout(TextStrikeout eTextStrikeout) - { - switch(eTextStrikeout) - { - default: /*case primitive2d::TEXT_STRIKEOUT_NONE*/ return STRIKEOUT_NONE; - case TEXT_STRIKEOUT_SINGLE: return STRIKEOUT_SINGLE; - case TEXT_STRIKEOUT_DOUBLE: return STRIKEOUT_DOUBLE; - case TEXT_STRIKEOUT_BOLD: return STRIKEOUT_BOLD; - case TEXT_STRIKEOUT_SLASH: return STRIKEOUT_SLASH; - case TEXT_STRIKEOUT_X: return STRIKEOUT_X; - } - } - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/texthierarchyprimitive2d.cxx b/drawinglayer/source/primitive2d/texthierarchyprimitive2d.cxx deleted file mode 100644 index 896b37252f..0000000000 --- a/drawinglayer/source/primitive2d/texthierarchyprimitive2d.cxx +++ /dev/null @@ -1,161 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/texthierarchyprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TextHierarchyLinePrimitive2D::TextHierarchyLinePrimitive2D(const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren) - { - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextHierarchyLinePrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TextHierarchyParagraphPrimitive2D::TextHierarchyParagraphPrimitive2D(const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren) - { - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextHierarchyParagraphPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TextHierarchyBulletPrimitive2D::TextHierarchyBulletPrimitive2D(const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren) - { - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextHierarchyBulletPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYBULLETPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TextHierarchyBlockPrimitive2D::TextHierarchyBlockPrimitive2D(const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren) - { - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextHierarchyBlockPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TextHierarchyFieldPrimitive2D::TextHierarchyFieldPrimitive2D( - const Primitive2DSequence& rChildren, - const FieldType& rFieldType, - const rtl::OUString& rString) - : GroupPrimitive2D(rChildren), - meType(rFieldType), - maString(rString) - { - } - - bool TextHierarchyFieldPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(GroupPrimitive2D::operator==(rPrimitive)) - { - const TextHierarchyFieldPrimitive2D& rCompare = (TextHierarchyFieldPrimitive2D&)rPrimitive; - - return (getType() == rCompare.getType() - && getString() == rCompare.getString()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextHierarchyFieldPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D) - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TextHierarchyEditPrimitive2D::TextHierarchyEditPrimitive2D(const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren) - { - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextHierarchyEditPrimitive2D, PRIMITIVE2D_ID_TEXTHIERARCHYEDITPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/textlayoutdevice.cxx b/drawinglayer/source/primitive2d/textlayoutdevice.cxx deleted file mode 100644 index 0c37200c77..0000000000 --- a/drawinglayer/source/primitive2d/textlayoutdevice.cxx +++ /dev/null @@ -1,503 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/textlayoutdevice.hxx> -#include <comphelper/processfactory.hxx> -#include <comphelper/scoped_disposing_ptr.hxx> -#include <vcl/timer.hxx> -#include <vcl/virdev.hxx> -#include <vcl/font.hxx> -#include <vcl/metric.hxx> -#include <i18npool/mslangid.hxx> -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <vcl/svapp.hxx> - -////////////////////////////////////////////////////////////////////////////// -// VDev RevDevice provider - -namespace -{ - class ImpTimedRefDev; - - //the scoped_timed_RefDev owns a ImpTimeRefDev and releases it on dtor - //or disposing of the default XComponentContext which causes the underlying - //OutputDevice to get released - // - //The ImpTimerRefDev itself, if the timeout ever gets hit, will call - //reset on the scoped_timed_RefDev to release the ImpTimerRefDev early - //if its unused for a few minutes - class scoped_timed_RefDev : public comphelper::scoped_disposing_ptr<ImpTimedRefDev> - { - public: - scoped_timed_RefDev() : comphelper::scoped_disposing_ptr<ImpTimedRefDev>((::com::sun::star::uno::Reference<com::sun::star::lang::XComponent>(::comphelper::getProcessComponentContext(), ::com::sun::star::uno::UNO_QUERY_THROW))) - { - } - }; - - class the_scoped_timed_RefDev : public rtl::Static<scoped_timed_RefDev, the_scoped_timed_RefDev> {}; - - class ImpTimedRefDev : public Timer - { - scoped_timed_RefDev& mrOwnerOfMe; - VirtualDevice* mpVirDev; - sal_uInt32 mnUseCount; - - public: - ImpTimedRefDev(scoped_timed_RefDev& rOwnerofMe); - ~ImpTimedRefDev(); - virtual void Timeout(); - - VirtualDevice& acquireVirtualDevice(); - void releaseVirtualDevice(); - }; - - ImpTimedRefDev::ImpTimedRefDev(scoped_timed_RefDev& rOwnerOfMe) - : mrOwnerOfMe(rOwnerOfMe), - mpVirDev(0L), - mnUseCount(0L) - { - SetTimeout(3L * 60L * 1000L); // three minutes - Start(); - } - - ImpTimedRefDev::~ImpTimedRefDev() - { - OSL_ENSURE(0L == mnUseCount, "destruction of a still used ImpTimedRefDev (!)"); - delete mpVirDev; - } - - void ImpTimedRefDev::Timeout() - { - // for obvious reasons, do not call anything after this - mrOwnerOfMe.reset(); - } - - VirtualDevice& ImpTimedRefDev::acquireVirtualDevice() - { - if(!mpVirDev) - { - mpVirDev = new VirtualDevice(); - mpVirDev->SetReferenceDevice( VirtualDevice::REFDEV_MODE_MSO1 ); - } - - if(!mnUseCount) - { - Stop(); - } - - mnUseCount++; - - return *mpVirDev; - } - - void ImpTimedRefDev::releaseVirtualDevice() - { - OSL_ENSURE(mnUseCount, "mismatch call number to releaseVirtualDevice() (!)"); - mnUseCount--; - - if(!mnUseCount) - { - Start(); - } - } -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// -// access to one global ImpTimedRefDev incarnation in namespace drawinglayer::primitive - -namespace drawinglayer -{ - namespace primitive2d - { - // static methods here - VirtualDevice& acquireGlobalVirtualDevice() - { - scoped_timed_RefDev& rStdRefDevice = the_scoped_timed_RefDev::get(); - - if(!rStdRefDevice) - rStdRefDevice.reset(new ImpTimedRefDev(rStdRefDevice)); - - return rStdRefDevice->acquireVirtualDevice(); - } - - void releaseGlobalVirtualDevice() - { - scoped_timed_RefDev& rStdRefDevice = the_scoped_timed_RefDev::get(); - - OSL_ENSURE(rStdRefDevice, "releaseGlobalVirtualDevice() without prior acquireGlobalVirtualDevice() call(!)"); - rStdRefDevice->releaseVirtualDevice(); - } - - TextLayouterDevice::TextLayouterDevice() - : mrDevice(acquireGlobalVirtualDevice()) - { - } - - TextLayouterDevice::~TextLayouterDevice() - { - releaseGlobalVirtualDevice(); - } - - void TextLayouterDevice::setFont(const Font& rFont) - { - mrDevice.SetFont( rFont ); - } - - void TextLayouterDevice::setFontAttribute( - const attribute::FontAttribute& rFontAttribute, - double fFontScaleX, - double fFontScaleY, - const ::com::sun::star::lang::Locale& rLocale) - { - setFont(getVclFontFromFontAttribute( - rFontAttribute, - fFontScaleX, - fFontScaleY, - 0.0, - rLocale)); - } - - double TextLayouterDevice::getOverlineOffset() const - { - const ::FontMetric& rMetric = mrDevice.GetFontMetric(); - double fRet = (rMetric.GetIntLeading() / 2.0) - rMetric.GetAscent(); - return fRet; - } - - double TextLayouterDevice::getUnderlineOffset() const - { - const ::FontMetric& rMetric = mrDevice.GetFontMetric(); - double fRet = rMetric.GetDescent() / 2.0; - return fRet; - } - - double TextLayouterDevice::getStrikeoutOffset() const - { - const ::FontMetric& rMetric = mrDevice.GetFontMetric(); - double fRet = (rMetric.GetAscent() - rMetric.GetIntLeading()) / 3.0; - return fRet; - } - - double TextLayouterDevice::getOverlineHeight() const - { - const ::FontMetric& rMetric = mrDevice.GetFontMetric(); - double fRet = rMetric.GetIntLeading() / 2.5; - return fRet; - } - - double TextLayouterDevice::getUnderlineHeight() const - { - const ::FontMetric& rMetric = mrDevice.GetFontMetric(); - double fRet = rMetric.GetDescent() / 4.0; - return fRet; - } - - double TextLayouterDevice::getTextHeight() const - { - return mrDevice.GetTextHeight(); - } - - double TextLayouterDevice::getTextWidth( - const String& rText, - sal_uInt32 nIndex, - sal_uInt32 nLength) const - { - return mrDevice.GetTextWidth(rText, nIndex, nLength); - } - - bool TextLayouterDevice::getTextOutlines( - basegfx::B2DPolyPolygonVector& rB2DPolyPolyVector, - const String& rText, - sal_uInt32 nIndex, - sal_uInt32 nLength, - const ::std::vector< double >& rDXArray) const - { - const sal_uInt32 nDXArrayCount(rDXArray.size()); - sal_uInt32 nTextLength(nLength); - const sal_uInt32 nStringLength(rText.Len()); - - if(nTextLength + nIndex > nStringLength) - { - nTextLength = nStringLength - nIndex; - } - - if(nDXArrayCount) - { - OSL_ENSURE(nDXArrayCount == nTextLength, "DXArray size does not correspond to text portion size (!)"); - std::vector< sal_Int32 > aIntegerDXArray(nDXArrayCount); - - for(sal_uInt32 a(0); a < nDXArrayCount; a++) - { - aIntegerDXArray[a] = basegfx::fround(rDXArray[a]); - } - - return mrDevice.GetTextOutlines( - rB2DPolyPolyVector, - rText, - nIndex, - nIndex, - nLength, - true, - 0, - &(aIntegerDXArray[0])); - } - else - { - return mrDevice.GetTextOutlines( - rB2DPolyPolyVector, - rText, - nIndex, - nIndex, - nLength, - true, - 0, - 0); - } - } - - basegfx::B2DRange TextLayouterDevice::getTextBoundRect( - const String& rText, - sal_uInt32 nIndex, - sal_uInt32 nLength) const - { - sal_uInt32 nTextLength(nLength); - const sal_uInt32 nStringLength(rText.Len()); - - if(nTextLength + nIndex > nStringLength) - { - nTextLength = nStringLength - nIndex; - } - - if(nTextLength) - { - Rectangle aRect; - - mrDevice.GetTextBoundRect( - aRect, - rText, - nIndex, - nIndex, - nLength); - - // #i104432#, #i102556# take empty results into account - if(!aRect.IsEmpty()) - { - return basegfx::B2DRange( - aRect.Left(), aRect.Top(), - aRect.Right(), aRect.Bottom()); - } - } - - return basegfx::B2DRange(); - } - - double TextLayouterDevice::getFontAscent() const - { - const ::FontMetric& rMetric = mrDevice.GetFontMetric(); - return rMetric.GetAscent(); - } - - double TextLayouterDevice::getFontDescent() const - { - const ::FontMetric& rMetric = mrDevice.GetFontMetric(); - return rMetric.GetDescent(); - } - - void TextLayouterDevice::addTextRectActions( - const Rectangle& rRectangle, - const String& rText, - sal_uInt16 nStyle, - GDIMetaFile& rGDIMetaFile) const - { - mrDevice.AddTextRectActions( - rRectangle, rText, nStyle, rGDIMetaFile); - } - - ::std::vector< double > TextLayouterDevice::getTextArray( - const String& rText, - sal_uInt32 nIndex, - sal_uInt32 nLength) const - { - ::std::vector< double > aRetval; - sal_uInt32 nTextLength(nLength); - const sal_uInt32 nStringLength(rText.Len()); - - if(nTextLength + nIndex > nStringLength) - { - nTextLength = nStringLength - nIndex; - } - - if(nTextLength) - { - aRetval.reserve(nTextLength); - ::std::vector<sal_Int32> aArray(nTextLength); - mrDevice.GetTextArray(rText, &aArray[0], nIndex, nLength); - aRetval.assign(aArray.begin(), aArray.end()); - } - - return aRetval; - } - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// helper methods for vcl font handling - -namespace drawinglayer -{ - namespace primitive2d - { - Font getVclFontFromFontAttribute( - const attribute::FontAttribute& rFontAttribute, - double fFontScaleX, - double fFontScaleY, - double fFontRotation, - const ::com::sun::star::lang::Locale& rLocale) - { - // detect FontScaling - const sal_uInt32 nHeight(basegfx::fround(fabs(fFontScaleY))); - const sal_uInt32 nWidth(basegfx::fround(fabs(fFontScaleX))); - const bool bFontIsScaled(nHeight != nWidth); - -#ifdef WIN32 - // for WIN32 systems, start with creating an unscaled font. If FontScaling - // is wanted, that width needs to be adapted using FontMetric again to get a - // width of the unscaled font - Font aRetval( - rFontAttribute.getFamilyName(), - rFontAttribute.getStyleName(), - Size(0, nHeight)); -#else - // for non-WIN32 systems things are easier since these accept a Font creation - // with initially nWidth != nHeight for FontScaling. Despite that, use zero for - // FontWidth when no scaling is used to explicitely have that zero when e.g. the - // Font would be recorded in a MetaFile (The MetaFile FontAction WILL record a - // set FontWidth; import that in a WIN32 system, and trouble is there) - Font aRetval( - rFontAttribute.getFamilyName(), - rFontAttribute.getStyleName(), - Size(bFontIsScaled ? nWidth : 0, nHeight)); -#endif - // define various other FontAttribute - aRetval.SetAlign(ALIGN_BASELINE); - aRetval.SetCharSet(rFontAttribute.getSymbol() ? RTL_TEXTENCODING_SYMBOL : RTL_TEXTENCODING_UNICODE); - aRetval.SetVertical(rFontAttribute.getVertical() ? sal_True : sal_False); - aRetval.SetWeight(static_cast<FontWeight>(rFontAttribute.getWeight())); - aRetval.SetItalic(rFontAttribute.getItalic() ? ITALIC_NORMAL : ITALIC_NONE); - aRetval.SetOutline(rFontAttribute.getOutline()); - aRetval.SetPitch(rFontAttribute.getMonospaced() ? PITCH_FIXED : PITCH_VARIABLE); - aRetval.SetLanguage(MsLangId::convertLocaleToLanguage(rLocale)); - -#ifdef WIN32 - // for WIN32 systems, correct the FontWidth if FontScaling is used - if(bFontIsScaled && nHeight > 0) - { - const FontMetric aUnscaledFontMetric(Application::GetDefaultDevice()->GetFontMetric(aRetval)); - - if(aUnscaledFontMetric.GetWidth() > 0) - { - const double fScaleFactor((double)nWidth / (double)nHeight); - const sal_uInt32 nScaledWidth(basegfx::fround((double)aUnscaledFontMetric.GetWidth() * fScaleFactor)); - aRetval.SetWidth(nScaledWidth); - } - } -#endif - // handle FontRotation (if defined) - if(!basegfx::fTools::equalZero(fFontRotation)) - { - sal_Int16 aRotate10th((sal_Int16)(fFontRotation * (-1800.0/F_PI))); - aRetval.SetOrientation(aRotate10th % 3600); - } - - return aRetval; - } - - attribute::FontAttribute getFontAttributeFromVclFont( - basegfx::B2DVector& o_rSize, - const Font& rFont, - bool bRTL, - bool bBiDiStrong) - { - const attribute::FontAttribute aRetval( - rFont.GetName(), - rFont.GetStyleName(), - static_cast<sal_uInt16>(rFont.GetWeight()), - RTL_TEXTENCODING_SYMBOL == rFont.GetCharSet(), - rFont.IsVertical(), - ITALIC_NONE != rFont.GetItalic(), - PITCH_FIXED == rFont.GetPitch(), - rFont.IsOutline(), - bRTL, - bBiDiStrong); - // TODO: eKerning - - // set FontHeight and init to no FontScaling - o_rSize.setY(rFont.GetSize().getHeight() > 0 ? rFont.GetSize().getHeight() : 0); - o_rSize.setX(o_rSize.getY()); - -#ifdef WIN32 - // for WIN32 systems, the FontScaling at the Font is detected by - // checking that FontWidth != 0. When FontScaling is used, WIN32 - // needs to do extra stuff to detect the correct width (since it's - // zero and not equal the font height) and it's relationship to - // the height - if(rFont.GetSize().getWidth() > 0) - { - Font aUnscaledFont(rFont); - aUnscaledFont.SetWidth(0); - const FontMetric aUnscaledFontMetric(Application::GetDefaultDevice()->GetFontMetric(aUnscaledFont)); - - if(aUnscaledFontMetric.GetWidth() > 0) - { - const double fScaleFactor((double)rFont.GetSize().getWidth() / (double)aUnscaledFontMetric.GetWidth()); - o_rSize.setX(fScaleFactor * o_rSize.getY()); - } - } -#else - // For non-WIN32 systems the detection is the same, but the value - // is easier achieved since width == height is interpreted as no - // scaling. Ergo, Width == 0 means width == height, and width != 0 - // means the scaling is in the direct relation of width to height - if(rFont.GetSize().getWidth() > 0) - { - o_rSize.setX((double)rFont.GetSize().getWidth()); - } -#endif - return aRetval; - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/textlineprimitive2d.cxx b/drawinglayer/source/primitive2d/textlineprimitive2d.cxx deleted file mode 100644 index f04021c77f..0000000000 --- a/drawinglayer/source/primitive2d/textlineprimitive2d.cxx +++ /dev/null @@ -1,312 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/textlineprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/attribute/strokeattribute.hxx> -#include <drawinglayer/attribute/lineattribute.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence TextLinePrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence xRetval; - - if(TEXT_LINE_NONE != getTextLine()) - { - bool bDoubleLine(false); - bool bWaveLine(false); - bool bBoldLine(false); - const int* pDotDashArray(0); - basegfx::B2DLineJoin eLineJoin(basegfx::B2DLINEJOIN_NONE); - double fOffset(getOffset()); - double fHeight(getHeight()); - - static const int aDottedArray[] = { 1, 1, 0}; // DOTTED LINE - static const int aDotDashArray[] = { 1, 1, 4, 1, 0}; // DASHDOT - static const int aDashDotDotArray[] = { 1, 1, 1, 1, 4, 1, 0}; // DASHDOTDOT - static const int aDashedArray[] = { 5, 2, 0}; // DASHED LINE - static const int aLongDashArray[] = { 7, 2, 0}; // LONGDASH - - // get decomposition - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - getObjectTransformation().decompose(aScale, aTranslate, fRotate, fShearX); - - switch(getTextLine()) - { - default: // case TEXT_LINE_SINGLE: - { - break; - } - case TEXT_LINE_DOUBLE: - { - bDoubleLine = true; - break; - } - case TEXT_LINE_DOTTED: - { - pDotDashArray = aDottedArray; - break; - } - case TEXT_LINE_DASH: - { - pDotDashArray = aDashedArray; - break; - } - case TEXT_LINE_LONGDASH: - { - pDotDashArray = aLongDashArray; - break; - } - case TEXT_LINE_DASHDOT: - { - pDotDashArray = aDotDashArray; - break; - } - case TEXT_LINE_DASHDOTDOT: - { - pDotDashArray = aDashDotDotArray; - break; - } - case TEXT_LINE_SMALLWAVE: - { - bWaveLine = true; - break; - } - case TEXT_LINE_WAVE: - { - bWaveLine = true; - break; - } - case TEXT_LINE_DOUBLEWAVE: - { - bDoubleLine = true; - bWaveLine = true; - break; - } - case TEXT_LINE_BOLD: - { - bBoldLine = true; - break; - } - case TEXT_LINE_BOLDDOTTED: - { - bBoldLine = true; - pDotDashArray = aDottedArray; - break; - } - case TEXT_LINE_BOLDDASH: - { - bBoldLine = true; - pDotDashArray = aDashedArray; - break; - } - case TEXT_LINE_BOLDLONGDASH: - { - bBoldLine = true; - pDotDashArray = aLongDashArray; - break; - } - case TEXT_LINE_BOLDDASHDOT: - { - bBoldLine = true; - pDotDashArray = aDotDashArray; - break; - } - case TEXT_LINE_BOLDDASHDOTDOT: - { - bBoldLine = true; - pDotDashArray = aDashDotDotArray; - break; - } - case TEXT_LINE_BOLDWAVE: - { - bWaveLine = true; - bBoldLine = true; - break; - } - } - - if(bBoldLine) - { - fHeight *= 2.0; - } - - if(bDoubleLine) - { - fOffset -= 0.50 * fHeight; - fHeight *= 0.64; - } - - if(bWaveLine) - { - eLineJoin = basegfx::B2DLINEJOIN_ROUND; - fHeight *= 0.25; - } - - // prepare Line and Stroke Attributes - const attribute::LineAttribute aLineAttribute(getLineColor(), fHeight, eLineJoin); - attribute::StrokeAttribute aStrokeAttribute; - - if(pDotDashArray) - { - ::std::vector< double > aDoubleArray; - - for(const int* p = pDotDashArray; *p; ++p) - { - aDoubleArray.push_back((double)(*p) * fHeight); - } - - aStrokeAttribute = attribute::StrokeAttribute(aDoubleArray); - } - - // create base polygon and new primitive - basegfx::B2DPolygon aLine; - Primitive2DReference aNewPrimitive; - - aLine.append(basegfx::B2DPoint(0.0, fOffset)); - aLine.append(basegfx::B2DPoint(getWidth(), fOffset)); - - const basegfx::B2DHomMatrix aUnscaledTransform( - basegfx::tools::createShearXRotateTranslateB2DHomMatrix( - fShearX, fRotate, aTranslate)); - - aLine.transform(aUnscaledTransform); - - if(bWaveLine) - { - double fWaveWidth(10.6 * fHeight); - - if(TEXT_LINE_SMALLWAVE == getTextLine()) - { - fWaveWidth *= 0.7; - } - else if(TEXT_LINE_WAVE == getTextLine()) - { - // extra multiply to get the same WaveWidth as with the bold version - fWaveWidth *= 2.0; - } - - aNewPrimitive = Primitive2DReference(new PolygonWavePrimitive2D(aLine, aLineAttribute, aStrokeAttribute, fWaveWidth, fWaveWidth * 0.5)); - } - else - { - aNewPrimitive = Primitive2DReference(new PolygonStrokePrimitive2D(aLine, aLineAttribute, aStrokeAttribute)); - } - - // add primitive - appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, aNewPrimitive); - - if(bDoubleLine) - { - // double line, create 2nd primitive with offset using TransformPrimitive based on - // already created NewPrimitive - double fLineDist(2.3 * fHeight); - - if(bWaveLine) - { - fLineDist = 6.3 * fHeight; - } - - // move base point of text to 0.0 and de-rotate - basegfx::B2DHomMatrix aTransform(basegfx::tools::createTranslateB2DHomMatrix( - -aTranslate.getX(), -aTranslate.getY())); - aTransform.rotate(-fRotate); - - // translate in Y by offset - aTransform.translate(0.0, fLineDist); - - // move back and rotate - aTransform.rotate(fRotate); - aTransform.translate(aTranslate.getX(), aTranslate.getY()); - - // add transform primitive - const Primitive2DSequence aContent(&aNewPrimitive, 1); - appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, - Primitive2DReference(new TransformPrimitive2D(aTransform, aContent))); - } - } - - return xRetval; - } - - TextLinePrimitive2D::TextLinePrimitive2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - double fWidth, - double fOffset, - double fHeight, - TextLine eTextLine, - const basegfx::BColor& rLineColor) - : BufferedDecompositionPrimitive2D(), - maObjectTransformation(rObjectTransformation), - mfWidth(fWidth), - mfOffset(fOffset), - mfHeight(fHeight), - meTextLine(eTextLine), - maLineColor(rLineColor) - { - } - - bool TextLinePrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const TextLinePrimitive2D& rCompare = (TextLinePrimitive2D&)rPrimitive; - - return (getObjectTransformation() == rCompare.getObjectTransformation() - && getWidth() == rCompare.getWidth() - && getOffset() == rCompare.getOffset() - && getHeight() == rCompare.getHeight() - && getTextLine() == rCompare.getTextLine() - && getLineColor() == rCompare.getLineColor()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextLinePrimitive2D, PRIMITIVE2D_ID_TEXTLINEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/textprimitive2d.cxx b/drawinglayer/source/primitive2d/textprimitive2d.cxx deleted file mode 100644 index fc5296e7d2..0000000000 --- a/drawinglayer/source/primitive2d/textprimitive2d.cxx +++ /dev/null @@ -1,348 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <drawinglayer/primitive2d/textlayoutdevice.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/texteffectprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - // adapts fontScale for usage with TextLayouter. Input is rScale which is the extracted - // scale from a text transformation. A copy is modified so that it contains only positive - // scalings and XY-equal scalings to allow to get a non-X-scaled Vcl-Font for TextLayouter. - // rScale is adapted accordingly to contain the corrected scale which would need to be - // applied to e.g. outlines received from TextLayouter under usage of fontScale. This - // includes Y-Scale, X-Scale-correction and mirrorings. - basegfx::B2DVector getCorrectedScaleAndFontScale(basegfx::B2DVector& rScale) - { - // copy input value - basegfx::B2DVector aFontScale(rScale); - - // correct FontHeight settings - if(basegfx::fTools::equalZero(aFontScale.getY())) - { - // no font height; choose one and adapt scale to get back to original scaling - static double fDefaultFontScale(100.0); - rScale.setY(1.0 / fDefaultFontScale); - aFontScale.setY(fDefaultFontScale); - } - else if(basegfx::fTools::less(aFontScale.getY(), 0.0)) - { - // negative font height; invert and adapt scale to get back to original scaling - aFontScale.setY(-aFontScale.getY()); - rScale.setY(-1.0); - } - else - { - // positive font height; adapt scale; scaling will be part of the polygons - rScale.setY(1.0); - } - - // correct FontWidth settings - if(basegfx::fTools::equal(aFontScale.getX(), aFontScale.getY())) - { - // no FontScale, adapt scale - rScale.setX(1.0); - } - else - { - // If FontScale is used, force to no FontScale to get a non-scaled VCL font. - // Adapt scaling in X accordingly. - rScale.setX(aFontScale.getX() / aFontScale.getY()); - aFontScale.setX(aFontScale.getY()); - } - - return aFontScale; - } -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - void TextSimplePortionPrimitive2D::getTextOutlinesAndTransformation(basegfx::B2DPolyPolygonVector& rTarget, basegfx::B2DHomMatrix& rTransformation) const - { - if(getTextLength()) - { - // decompose object transformation to single values - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - - // if decomposition returns false, create no geometry since e.g. scaling may - // be zero - if(getTextTransform().decompose(aScale, aTranslate, fRotate, fShearX)) - { - // handle special case: If scale is negative in (x,y) (3rd quadrant), it can - // be expressed as rotation by PI - if(basegfx::fTools::less(aScale.getX(), 0.0) && basegfx::fTools::less(aScale.getY(), 0.0)) - { - aScale = basegfx::absolute(aScale); - fRotate += F_PI; - } - - // for the TextLayouterDevice, it is necessary to have a scaling representing - // the font size. Since we want to extract polygons here, it is okay to - // work just with scaling and to ignore shear, rotation and translation, - // all that can be applied to the polygons later - const basegfx::B2DVector aFontScale(getCorrectedScaleAndFontScale(aScale)); - - // prepare textlayoutdevice - TextLayouterDevice aTextLayouter; - aTextLayouter.setFontAttribute( - getFontAttribute(), - aFontScale.getX(), - aFontScale.getY(), - getLocale()); - - // When getting outlines from stretched text (aScale.getX() != 1.0) it - // is necessary to inverse-scale the DXArray (if used) to not get the - // outlines already aligned to given, but wrong DXArray - if(getDXArray().size() && !basegfx::fTools::equal(aScale.getX(), 1.0)) - { - ::std::vector< double > aScaledDXArray = getDXArray(); - const double fDXArrayScale(1.0 / aScale.getX()); - - for(sal_uInt32 a(0); a < aScaledDXArray.size(); a++) - { - aScaledDXArray[a] *= fDXArrayScale; - } - - // get the text outlines - aTextLayouter.getTextOutlines( - rTarget, - getText(), - getTextPosition(), - getTextLength(), - aScaledDXArray); - } - else - { - // get the text outlines - aTextLayouter.getTextOutlines( - rTarget, - getText(), - getTextPosition(), - getTextLength(), - getDXArray()); - } - - // create primitives for the outlines - const sal_uInt32 nCount(rTarget.size()); - - if(nCount) - { - // prepare object transformation for polygons - rTransformation = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix( - aScale, fShearX, fRotate, aTranslate); - } - } - } - } - - Primitive2DSequence TextSimplePortionPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence aRetval; - - if(getTextLength()) - { - basegfx::B2DPolyPolygonVector aB2DPolyPolyVector; - basegfx::B2DHomMatrix aPolygonTransform; - - // get text outlines and their object transformation - getTextOutlinesAndTransformation(aB2DPolyPolyVector, aPolygonTransform); - - // create primitives for the outlines - const sal_uInt32 nCount(aB2DPolyPolyVector.size()); - - if(nCount) - { - // alloc space for the primitives - aRetval.realloc(nCount); - - // color-filled polypolygons - for(sal_uInt32 a(0L); a < nCount; a++) - { - // prepare polypolygon - basegfx::B2DPolyPolygon& rPolyPolygon = aB2DPolyPolyVector[a]; - rPolyPolygon.transform(aPolygonTransform); - aRetval[a] = new PolyPolygonColorPrimitive2D(rPolyPolygon, getFontColor()); - } - - if(getFontAttribute().getOutline()) - { - // decompose polygon transformation to single values - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - aPolygonTransform.decompose(aScale, aTranslate, fRotate, fShearX); - - // create outline text effect with current content and replace - Primitive2DReference aNewTextEffect(new TextEffectPrimitive2D( - aRetval, - aTranslate, - fRotate, - TEXTEFFECTSTYLE2D_OUTLINE)); - - aRetval = Primitive2DSequence(&aNewTextEffect, 1); - } - } - } - - return aRetval; - } - - TextSimplePortionPrimitive2D::TextSimplePortionPrimitive2D( - const basegfx::B2DHomMatrix& rNewTransform, - const String& rText, - xub_StrLen aTextPosition, - xub_StrLen aTextLength, - const ::std::vector< double >& rDXArray, - const attribute::FontAttribute& rFontAttribute, - const ::com::sun::star::lang::Locale& rLocale, - const basegfx::BColor& rFontColor, - bool bFilled, - long nWidthToFill) - : BufferedDecompositionPrimitive2D(), - maTextTransform(rNewTransform), - maText(rText), - maTextPosition(aTextPosition), - maTextLength(aTextLength), - maDXArray(rDXArray), - maFontAttribute(rFontAttribute), - maLocale(rLocale), - maFontColor(rFontColor), - maB2DRange(), - mbFilled(bFilled), - mnWidthToFill(nWidthToFill) - { -#if OSL_DEBUG_LEVEL > 0 - const xub_StrLen aStringLength(getText().Len()); - OSL_ENSURE(aStringLength >= getTextPosition() && aStringLength >= getTextPosition() + getTextLength(), - "TextSimplePortionPrimitive2D with text out of range (!)"); -#endif - } - - bool LocalesAreEqual(const ::com::sun::star::lang::Locale& rA, const ::com::sun::star::lang::Locale& rB) - { - return (rA.Language == rB.Language - && rA.Country == rB.Country - && rA.Variant == rB.Variant); - } - - bool TextSimplePortionPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const TextSimplePortionPrimitive2D& rCompare = (TextSimplePortionPrimitive2D&)rPrimitive; - - return (getTextTransform() == rCompare.getTextTransform() - && getText() == rCompare.getText() - && getTextPosition() == rCompare.getTextPosition() - && getTextLength() == rCompare.getTextLength() - && getDXArray() == rCompare.getDXArray() - && getFontAttribute() == rCompare.getFontAttribute() - && LocalesAreEqual(getLocale(), rCompare.getLocale()) - && getFontColor() == rCompare.getFontColor() - && mbFilled == rCompare.mbFilled - && mnWidthToFill == rCompare.mnWidthToFill); - } - - return false; - } - - basegfx::B2DRange TextSimplePortionPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - if(maB2DRange.isEmpty() && getTextLength()) - { - // get TextBoundRect as base size - // decompose object transformation to single values - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - - if(getTextTransform().decompose(aScale, aTranslate, fRotate, fShearX)) - { - // for the TextLayouterDevice, it is necessary to have a scaling representing - // the font size. Since we want to extract polygons here, it is okay to - // work just with scaling and to ignore shear, rotation and translation, - // all that can be applied to the polygons later - const basegfx::B2DVector aFontScale(getCorrectedScaleAndFontScale(aScale)); - - // prepare textlayoutdevice - TextLayouterDevice aTextLayouter; - aTextLayouter.setFontAttribute( - getFontAttribute(), - aFontScale.getX(), - aFontScale.getY(), - getLocale()); - - // get basic text range - basegfx::B2DRange aNewRange(aTextLayouter.getTextBoundRect(getText(), getTextPosition(), getTextLength())); - - // #i104432#, #i102556# take empty results into account - if(!aNewRange.isEmpty()) - { - // prepare object transformation for range - const basegfx::B2DHomMatrix aRangeTransformation(basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix( - aScale, fShearX, fRotate, aTranslate)); - - // apply range transformation to it - aNewRange.transform(aRangeTransformation); - - // assign to buffered value - const_cast< TextSimplePortionPrimitive2D* >(this)->maB2DRange = aNewRange; - } - } - } - - return maB2DRange; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextSimplePortionPrimitive2D, PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/textstrikeoutprimitive2d.cxx b/drawinglayer/source/primitive2d/textstrikeoutprimitive2d.cxx deleted file mode 100644 index c278ba7494..0000000000 --- a/drawinglayer/source/primitive2d/textstrikeoutprimitive2d.cxx +++ /dev/null @@ -1,289 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/textstrikeoutprimitive2d.hxx> -#include <drawinglayer/primitive2d/textlayoutdevice.hxx> -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> -#include <drawinglayer/attribute/lineattribute.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - BaseTextStrikeoutPrimitive2D::BaseTextStrikeoutPrimitive2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - double fWidth, - const basegfx::BColor& rFontColor) - : BufferedDecompositionPrimitive2D(), - maObjectTransformation(rObjectTransformation), - mfWidth(fWidth), - maFontColor(rFontColor) - { - } - - bool BaseTextStrikeoutPrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const BaseTextStrikeoutPrimitive2D& rCompare = (BaseTextStrikeoutPrimitive2D&)rPrimitive; - - return (getObjectTransformation() == rCompare.getObjectTransformation() - && getWidth() == rCompare.getWidth() - && getFontColor() == rCompare.getFontColor()); - } - - return false; - } - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence TextCharacterStrikeoutPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // strikeout with character - const String aSingleCharString(getStrikeoutChar()); - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - - // get decomposition - getObjectTransformation().decompose(aScale, aTranslate, fRotate, fShearX); - - // prepare TextLayouter - TextLayouterDevice aTextLayouter; - - aTextLayouter.setFontAttribute( - getFontAttribute(), - aScale.getX(), - aScale.getY(), - getLocale()); - - const double fStrikeCharWidth(aTextLayouter.getTextWidth(aSingleCharString, 0, 1)); - const double fStrikeCharCount(fabs(getWidth()/fStrikeCharWidth)); - const sal_uInt32 nStrikeCharCount(static_cast< sal_uInt32 >(fStrikeCharCount + 0.5)); - std::vector<double> aDXArray(nStrikeCharCount); - String aStrikeoutString; - - for(sal_uInt32 a(0); a < nStrikeCharCount; a++) - { - aStrikeoutString += aSingleCharString; - aDXArray[a] = (a + 1) * fStrikeCharWidth; - } - - Primitive2DReference xReference( - new TextSimplePortionPrimitive2D( - getObjectTransformation(), - aStrikeoutString, - 0, - aStrikeoutString.Len(), - aDXArray, - getFontAttribute(), - getLocale(), - getFontColor())); - - return Primitive2DSequence(&xReference, 1); - } - - TextCharacterStrikeoutPrimitive2D::TextCharacterStrikeoutPrimitive2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - double fWidth, - const basegfx::BColor& rFontColor, - sal_Unicode aStrikeoutChar, - const attribute::FontAttribute& rFontAttribute, - const ::com::sun::star::lang::Locale& rLocale) - : BaseTextStrikeoutPrimitive2D(rObjectTransformation, fWidth, rFontColor), - maStrikeoutChar(aStrikeoutChar), - maFontAttribute(rFontAttribute), - maLocale(rLocale) - { - } - - bool TextCharacterStrikeoutPrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const - { - if(BaseTextStrikeoutPrimitive2D::operator==(rPrimitive)) - { - const TextCharacterStrikeoutPrimitive2D& rCompare = (TextCharacterStrikeoutPrimitive2D&)rPrimitive; - - return (getStrikeoutChar() == rCompare.getStrikeoutChar() - && getFontAttribute() == rCompare.getFontAttribute() - && LocalesAreEqual(getLocale(), rCompare.getLocale())); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextCharacterStrikeoutPrimitive2D, PRIMITIVE2D_ID_TEXTCHARACTERSTRIKEOUTPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence TextGeometryStrikeoutPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - OSL_ENSURE(TEXT_STRIKEOUT_SLASH != getTextStrikeout() && TEXT_STRIKEOUT_X != getTextStrikeout(), - "Wrong TEXT_STRIKEOUT type; a TextCharacterStrikeoutPrimitive2D should be used (!)"); - - // strikeout with geometry - double fStrikeoutHeight(getHeight()); - double fStrikeoutOffset(getOffset()); - bool bDoubleLine(false); - - // get decomposition - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - getObjectTransformation().decompose(aScale, aTranslate, fRotate, fShearX); - - // set line attribute - switch(getTextStrikeout()) - { - default : // case primitive2d::TEXT_STRIKEOUT_SINGLE: - { - break; - } - case primitive2d::TEXT_STRIKEOUT_DOUBLE: - { - bDoubleLine = true; - break; - } - case primitive2d::TEXT_STRIKEOUT_BOLD: - { - fStrikeoutHeight *= 2.0; - break; - } - } - - if(bDoubleLine) - { - fStrikeoutOffset -= 0.50 * fStrikeoutHeight; - fStrikeoutHeight *= 0.64; - } - - // create base polygon and new primitive - basegfx::B2DPolygon aStrikeoutLine; - - aStrikeoutLine.append(basegfx::B2DPoint(0.0, -fStrikeoutOffset)); - aStrikeoutLine.append(basegfx::B2DPoint(getWidth(), -fStrikeoutOffset)); - - const basegfx::B2DHomMatrix aUnscaledTransform( - basegfx::tools::createShearXRotateTranslateB2DHomMatrix( - fShearX, fRotate, aTranslate)); - - aStrikeoutLine.transform(aUnscaledTransform); - - // add primitive - const attribute::LineAttribute aLineAttribute(getFontColor(), fStrikeoutHeight, basegfx::B2DLINEJOIN_NONE); - Primitive2DSequence xRetval(1); - xRetval[0] = Primitive2DReference(new PolygonStrokePrimitive2D(aStrikeoutLine, aLineAttribute)); - - if(bDoubleLine) - { - // double line, create 2nd primitive with offset using TransformPrimitive based on - // already created NewPrimitive - const double fLineDist(2.0 * fStrikeoutHeight); - - // move base point of text to 0.0 and de-rotate - basegfx::B2DHomMatrix aTransform(basegfx::tools::createTranslateB2DHomMatrix( - -aTranslate.getX(), -aTranslate.getY())); - aTransform.rotate(-fRotate); - - // translate in Y by offset - aTransform.translate(0.0, -fLineDist); - - // move back and rotate - aTransform.rotate(fRotate); - aTransform.translate(aTranslate.getX(), aTranslate.getY()); - - // add transform primitive - appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, - Primitive2DReference( - new TransformPrimitive2D( - aTransform, - xRetval))); - } - - return xRetval; - } - - TextGeometryStrikeoutPrimitive2D::TextGeometryStrikeoutPrimitive2D( - const basegfx::B2DHomMatrix& rObjectTransformation, - double fWidth, - const basegfx::BColor& rFontColor, - double fHeight, - double fOffset, - TextStrikeout eTextStrikeout) - : BaseTextStrikeoutPrimitive2D(rObjectTransformation, fWidth, rFontColor), - mfHeight(fHeight), - mfOffset(fOffset), - meTextStrikeout(eTextStrikeout) - { - } - - bool TextGeometryStrikeoutPrimitive2D::operator==( const BasePrimitive2D& rPrimitive ) const - { - if(BaseTextStrikeoutPrimitive2D::operator==(rPrimitive)) - { - const TextGeometryStrikeoutPrimitive2D& rCompare = (TextGeometryStrikeoutPrimitive2D&)rPrimitive; - - return (getHeight() == rCompare.getHeight() - && getOffset() == rCompare.getOffset() - && getTextStrikeout() == rCompare.getTextStrikeout()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TextGeometryStrikeoutPrimitive2D, PRIMITIVE2D_ID_TEXTGEOMETRYSTRIKEOUTPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/transformprimitive2d.cxx b/drawinglayer/source/primitive2d/transformprimitive2d.cxx deleted file mode 100644 index f8ad7e2e36..0000000000 --- a/drawinglayer/source/primitive2d/transformprimitive2d.cxx +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TransformPrimitive2D::TransformPrimitive2D( - const basegfx::B2DHomMatrix& rTransformation, - const Primitive2DSequence& rChildren) - : GroupPrimitive2D(rChildren), - maTransformation(rTransformation) - { - } - - bool TransformPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(GroupPrimitive2D::operator==(rPrimitive)) - { - const TransformPrimitive2D& rCompare = static_cast< const TransformPrimitive2D& >(rPrimitive); - - return (getTransformation() == rCompare.getTransformation()); - } - - return false; - } - - basegfx::B2DRange TransformPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - basegfx::B2DRange aRetval(getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation)); - aRetval.transform(getTransformation()); - return aRetval; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TransformPrimitive2D, PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/transparenceprimitive2d.cxx b/drawinglayer/source/primitive2d/transparenceprimitive2d.cxx deleted file mode 100644 index c62699e070..0000000000 --- a/drawinglayer/source/primitive2d/transparenceprimitive2d.cxx +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - TransparencePrimitive2D::TransparencePrimitive2D( - const Primitive2DSequence& rChildren, - const Primitive2DSequence& rTransparence) - : GroupPrimitive2D(rChildren), - maTransparence(rTransparence) - { - } - - bool TransparencePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(GroupPrimitive2D::operator==(rPrimitive)) - { - const TransparencePrimitive2D& rCompare = (TransparencePrimitive2D&)rPrimitive; - - return (getTransparence() == rCompare.getTransparence()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(TransparencePrimitive2D, PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D) - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d.cxx b/drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d.cxx deleted file mode 100644 index cedb90b188..0000000000 --- a/drawinglayer/source/primitive2d/unifiedtransparenceprimitive2d.cxx +++ /dev/null @@ -1,133 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/color/bcolor.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - UnifiedTransparencePrimitive2D::UnifiedTransparencePrimitive2D( - const Primitive2DSequence& rChildren, - double fTransparence) - : GroupPrimitive2D(rChildren), - mfTransparence(fTransparence) - { - } - - bool UnifiedTransparencePrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(GroupPrimitive2D::operator==(rPrimitive)) - { - const UnifiedTransparencePrimitive2D& rCompare = (UnifiedTransparencePrimitive2D&)rPrimitive; - - return (getTransparence() == rCompare.getTransparence()); - } - - return false; - } - - basegfx::B2DRange UnifiedTransparencePrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const - { - // do not use the fallback to decomposition here since for a correct BoundRect we also - // need invisible (1.0 == getTransparence()) geometry; these would be deleted in the decomposition - return getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation); - } - - Primitive2DSequence UnifiedTransparencePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const - { - if(0.0 == getTransparence()) - { - // no transparence used, so just use the content - return getChildren(); - } - else if(getTransparence() > 0.0 && getTransparence() < 1.0) - { - // The idea is to create a TransparencePrimitive2D with transparent content using a fill color - // corresponding to the transparence value. Problem is that in most systems, the right - // and bottom pixel array is not filled when filling polygons, thus this would not - // always produce a complete transparent bitmap. There are some solutions: - // - // - Grow the used polygon range by one discrete unit in X and Y. This - // will make the decomposition view-dependent. - // - // - For all filled polygon renderings, dra wthe polygon outline extra. This - // would lead to unwanted side effects when using concatenated polygons. - // - // - At this decomposition, add a filled polygon and a hairline polygon. This - // solution stays view-independent. - // - // I will take the last one here. The small overhead of two primitives will only be - // used when UnifiedTransparencePrimitive2D is not handled directly. - const basegfx::B2DRange aPolygonRange(getB2DRangeFromPrimitive2DSequence(getChildren(), rViewInformation)); - const basegfx::B2DPolygon aPolygon(basegfx::tools::createPolygonFromRect(aPolygonRange)); - const basegfx::BColor aGray(getTransparence(), getTransparence(), getTransparence()); - Primitive2DSequence aTransparenceContent(2); - - aTransparenceContent[0] = Primitive2DReference(new PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aPolygon), aGray)); - aTransparenceContent[1] = Primitive2DReference(new PolygonHairlinePrimitive2D(aPolygon, aGray)); - - // create sub-transparence group with a gray-colored rectangular fill polygon - const Primitive2DReference xRefB(new TransparencePrimitive2D(getChildren(), aTransparenceContent)); - return Primitive2DSequence(&xRefB, 1L); - } - else - { - // completely transparent or invalid definition, add nothing - return Primitive2DSequence(); - } - } - - // provide unique ID - ImplPrimitrive2DIDBlock(UnifiedTransparencePrimitive2D, PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/wallpaperprimitive2d.cxx b/drawinglayer/source/primitive2d/wallpaperprimitive2d.cxx deleted file mode 100644 index 625cd5db13..0000000000 --- a/drawinglayer/source/primitive2d/wallpaperprimitive2d.cxx +++ /dev/null @@ -1,272 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/wallpaperprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence WallpaperBitmapPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - Primitive2DSequence aRetval; - - if(!getLocalObjectRange().isEmpty() && !getBitmapEx().IsEmpty()) - { - // get bitmap PIXEL size - const Size& rPixelSize = getBitmapEx().GetSizePixel(); - - if(rPixelSize.Width() > 0 && rPixelSize.Height() > 0) - { - if(WALLPAPER_SCALE == getWallpaperStyle()) - { - // shortcut for scale; use simple BitmapPrimitive2D - basegfx::B2DHomMatrix aObjectTransform; - - aObjectTransform.set(0, 0, getLocalObjectRange().getWidth()); - aObjectTransform.set(1, 1, getLocalObjectRange().getHeight()); - aObjectTransform.set(0, 2, getLocalObjectRange().getMinX()); - aObjectTransform.set(1, 2, getLocalObjectRange().getMinY()); - - Primitive2DReference xReference( - new BitmapPrimitive2D( - getBitmapEx(), - aObjectTransform)); - - aRetval = Primitive2DSequence(&xReference, 1); - } - else - { - // transform to logic size - basegfx::B2DHomMatrix aInverseViewTransformation(getViewTransformation()); - aInverseViewTransformation.invert(); - basegfx::B2DVector aLogicSize(rPixelSize.Width(), rPixelSize.Height()); - aLogicSize = aInverseViewTransformation * aLogicSize; - - // apply laout - basegfx::B2DPoint aTargetTopLeft(getLocalObjectRange().getMinimum()); - bool bUseTargetTopLeft(true); - bool bNeedsClipping(false); - - switch(getWallpaperStyle()) - { - default: //case WALLPAPER_TILE :, also WALLPAPER_NULL and WALLPAPER_APPLICATIONGRADIENT - { - bUseTargetTopLeft = false; - break; - } - case WALLPAPER_SCALE : - { - // handled by shortcut above - break; - } - case WALLPAPER_TOPLEFT : - { - // nothing to do - break; - } - case WALLPAPER_TOP : - { - const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter()); - aTargetTopLeft.setX(aCenter.getX() - (aLogicSize.getX() * 0.5)); - break; - } - case WALLPAPER_TOPRIGHT : - { - aTargetTopLeft.setX(getLocalObjectRange().getMaxX() - aLogicSize.getX()); - break; - } - case WALLPAPER_LEFT : - { - const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter()); - aTargetTopLeft.setY(aCenter.getY() - (aLogicSize.getY() * 0.5)); - break; - } - case WALLPAPER_CENTER : - { - const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter()); - aTargetTopLeft = aCenter - (aLogicSize * 0.5); - break; - } - case WALLPAPER_RIGHT : - { - const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter()); - aTargetTopLeft.setX(getLocalObjectRange().getMaxX() - aLogicSize.getX()); - aTargetTopLeft.setY(aCenter.getY() - (aLogicSize.getY() * 0.5)); - break; - } - case WALLPAPER_BOTTOMLEFT : - { - aTargetTopLeft.setY(getLocalObjectRange().getMaxY() - aLogicSize.getY()); - break; - } - case WALLPAPER_BOTTOM : - { - const basegfx::B2DPoint aCenter(getLocalObjectRange().getCenter()); - aTargetTopLeft.setX(aCenter.getX() - (aLogicSize.getX() * 0.5)); - aTargetTopLeft.setY(getLocalObjectRange().getMaxY() - aLogicSize.getY()); - break; - } - case WALLPAPER_BOTTOMRIGHT : - { - aTargetTopLeft = getLocalObjectRange().getMaximum() - aLogicSize; - break; - } - } - - if(bUseTargetTopLeft) - { - // fill target range - const basegfx::B2DRange aTargetRange(aTargetTopLeft, aTargetTopLeft + aLogicSize); - - // create aligned, single BitmapPrimitive2D - basegfx::B2DHomMatrix aObjectTransform; - - aObjectTransform.set(0, 0, aTargetRange.getWidth()); - aObjectTransform.set(1, 1, aTargetRange.getHeight()); - aObjectTransform.set(0, 2, aTargetRange.getMinX()); - aObjectTransform.set(1, 2, aTargetRange.getMinY()); - - Primitive2DReference xReference( - new BitmapPrimitive2D( - getBitmapEx(), - aObjectTransform)); - aRetval = Primitive2DSequence(&xReference, 1); - - // clip when not completely inside object range - bNeedsClipping = !getLocalObjectRange().isInside(aTargetRange); - } - else - { - // WALLPAPER_TILE, WALLPAPER_NULL, WALLPAPER_APPLICATIONGRADIENT - // convert to relative positions - const basegfx::B2DVector aRelativeSize( - aLogicSize.getX() / (getLocalObjectRange().getWidth() ? getLocalObjectRange().getWidth() : 1.0), - aLogicSize.getY() / (getLocalObjectRange().getHeight() ? getLocalObjectRange().getHeight() : 1.0)); - basegfx::B2DPoint aRelativeTopLeft(0.0, 0.0); - - if(WALLPAPER_TILE != getWallpaperStyle()) - { - aRelativeTopLeft.setX(0.5 - aRelativeSize.getX()); - aRelativeTopLeft.setY(0.5 - aRelativeSize.getY()); - } - - // prepare FillBitmapAttribute - const attribute::FillBitmapAttribute aFillBitmapAttribute( - getBitmapEx(), - aRelativeTopLeft, - aRelativeSize, - true); - - // create ObjectTransform - basegfx::B2DHomMatrix aObjectTransform; - - aObjectTransform.set(0, 0, getLocalObjectRange().getWidth()); - aObjectTransform.set(1, 1, getLocalObjectRange().getHeight()); - aObjectTransform.set(0, 2, getLocalObjectRange().getMinX()); - aObjectTransform.set(1, 2, getLocalObjectRange().getMinY()); - - // create FillBitmapPrimitive - const drawinglayer::primitive2d::Primitive2DReference xFillBitmap( - new drawinglayer::primitive2d::FillBitmapPrimitive2D( - aObjectTransform, - aFillBitmapAttribute)); - aRetval = Primitive2DSequence(&xFillBitmap, 1); - - // always embed tiled fill to clipping - bNeedsClipping = true; - } - - if(bNeedsClipping) - { - // embed to clipping; this is necessary for tiled fills - const basegfx::B2DPolyPolygon aPolyPolygon( - basegfx::tools::createPolygonFromRect(getLocalObjectRange())); - const drawinglayer::primitive2d::Primitive2DReference xClippedFill( - new drawinglayer::primitive2d::MaskPrimitive2D( - aPolyPolygon, - aRetval)); - aRetval = Primitive2DSequence(&xClippedFill, 1); - } - } - } - } - - return aRetval; - } - - WallpaperBitmapPrimitive2D::WallpaperBitmapPrimitive2D( - const basegfx::B2DRange& rObjectRange, - const BitmapEx& rBitmapEx, - WallpaperStyle eWallpaperStyle) - : ViewTransformationDependentPrimitive2D(), - maObjectRange(rObjectRange), - maBitmapEx(rBitmapEx), - meWallpaperStyle(eWallpaperStyle) - { - } - - bool WallpaperBitmapPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(ViewTransformationDependentPrimitive2D::operator==(rPrimitive)) - { - const WallpaperBitmapPrimitive2D& rCompare = (WallpaperBitmapPrimitive2D&)rPrimitive; - - return (getLocalObjectRange() == rCompare.getLocalObjectRange() - && getBitmapEx() == rCompare.getBitmapEx() - && getWallpaperStyle() == rCompare.getWallpaperStyle()); - } - - return false; - } - - basegfx::B2DRange WallpaperBitmapPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - return getLocalObjectRange(); - } - - // provide unique ID - ImplPrimitrive2DIDBlock(WallpaperBitmapPrimitive2D, PRIMITIVE2D_ID_WALLPAPERBITMAPPRIMITIVE2D) - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive2d/wrongspellprimitive2d.cxx b/drawinglayer/source/primitive2d/wrongspellprimitive2d.cxx deleted file mode 100644 index 2e38ed8bed..0000000000 --- a/drawinglayer/source/primitive2d/wrongspellprimitive2d.cxx +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive2d/wrongspellprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive2d - { - Primitive2DSequence WrongSpellPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const - { - // ATM this decompose is view-independent, what the original VCL-Display is not. To mimic - // the old behaviour here if wanted it is necessary to add get2DDecomposition and implement - // it similar to the usage in e.g. HelplinePrimitive2D. Remembering the ViewTransformation - // should be enough then. - // The view-independent wavelines work well (if You ask me). Maybe the old VCL-Behaviour is only - // in place because it was not possible/too expensive at that time to scale the wavelines with the - // view... - // With the VCL-PixelRenderer this will not even be used since it implements WrongSpellPrimitive2D - // directly and mimics the old VCL-Display there. If You implemented a new renderer without - // direct WrongSpellPrimitive2D support, You may want to do the described change here. - - // get the font height (part of scale), so decompose the matrix - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - getTransformation().decompose(aScale, aTranslate, fRotate, fShearX); - - // calculate distances based on a static default (to allow testing in debugger) - static double fDefaultDistance(0.03); - const double fFontHeight(aScale.getY()); - const double fUnderlineDistance(fFontHeight * fDefaultDistance); - const double fWaveWidth(2.0 * fUnderlineDistance); - - // the Y-distance needs to be relativated to FontHeight since the points get - // transformed with the transformation containing that scale already. - const double fRelativeUnderlineDistance(basegfx::fTools::equalZero(aScale.getY()) ? 0.0 : fUnderlineDistance / aScale.getY()); - basegfx::B2DPoint aStart(getStart(), fRelativeUnderlineDistance); - basegfx::B2DPoint aStop(getStop(), fRelativeUnderlineDistance); - basegfx::B2DPolygon aPolygon; - - aPolygon.append(getTransformation() * aStart); - aPolygon.append(getTransformation() * aStop); - - // prepare line attribute - const attribute::LineAttribute aLineAttribute(getColor()); - - // create the waveline primitive - Primitive2DReference xPrimitive(new PolygonWavePrimitive2D(aPolygon, aLineAttribute, fWaveWidth, 0.5 * fWaveWidth)); - Primitive2DSequence xRetval(&xPrimitive, 1); - - return xRetval; - } - - WrongSpellPrimitive2D::WrongSpellPrimitive2D( - const basegfx::B2DHomMatrix& rTransformation, - double fStart, - double fStop, - const basegfx::BColor& rColor) - : BufferedDecompositionPrimitive2D(), - maTransformation(rTransformation), - mfStart(fStart), - mfStop(fStop), - maColor(rColor) - { - } - - bool WrongSpellPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const - { - if(BufferedDecompositionPrimitive2D::operator==(rPrimitive)) - { - const WrongSpellPrimitive2D& rCompare = (WrongSpellPrimitive2D&)rPrimitive; - - return (getTransformation() == rCompare.getTransformation() - && getStart() == rCompare.getStart() - && getStop() == rCompare.getStop() - && getColor() == rCompare.getColor()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive2DIDBlock(WrongSpellPrimitive2D, PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D) - - } // end of namespace primitive2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/baseprimitive3d.cxx b/drawinglayer/source/primitive3d/baseprimitive3d.cxx deleted file mode 100644 index 022cd65d5a..0000000000 --- a/drawinglayer/source/primitive3d/baseprimitive3d.cxx +++ /dev/null @@ -1,281 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <drawinglayer/geometry/viewinformation3d.hxx> -#include <basegfx/tools/canvastools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - BasePrimitive3D::BasePrimitive3D() - : BasePrimitive3DImplBase(m_aMutex) - { - } - - BasePrimitive3D::~BasePrimitive3D() - { - } - - bool BasePrimitive3D::operator==( const BasePrimitive3D& rPrimitive ) const - { - return (getPrimitive3DID() == rPrimitive.getPrimitive3DID()); - } - - basegfx::B3DRange BasePrimitive3D::getB3DRange(const geometry::ViewInformation3D& rViewInformation) const - { - return getB3DRangeFromPrimitive3DSequence(get3DDecomposition(rViewInformation), rViewInformation); - } - - Primitive3DSequence BasePrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - return Primitive3DSequence(); - } - - Primitive3DSequence SAL_CALL BasePrimitive3D::getDecomposition( const uno::Sequence< beans::PropertyValue >& rViewParameters ) throw ( uno::RuntimeException ) - { - const geometry::ViewInformation3D aViewInformation(rViewParameters); - return get3DDecomposition(rViewParameters); - } - - com::sun::star::geometry::RealRectangle3D SAL_CALL BasePrimitive3D::getRange( const uno::Sequence< beans::PropertyValue >& rViewParameters ) throw ( uno::RuntimeException ) - { - const geometry::ViewInformation3D aViewInformation(rViewParameters); - return basegfx::unotools::rectangle3DFromB3DRectangle(getB3DRange(aViewInformation)); - } - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence BufferedDecompositionPrimitive3D::create3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - return Primitive3DSequence(); - } - - BufferedDecompositionPrimitive3D::BufferedDecompositionPrimitive3D() - : BasePrimitive3D(), - maBuffered3DDecomposition() - { - } - - Primitive3DSequence BufferedDecompositionPrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - if(!getBuffered3DDecomposition().hasElements()) - { - const Primitive3DSequence aNewSequence(create3DDecomposition(rViewInformation)); - const_cast< BufferedDecompositionPrimitive3D* >(this)->setBuffered3DDecomposition(aNewSequence); - } - - return getBuffered3DDecomposition(); - } - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// tooling - -namespace drawinglayer -{ - namespace primitive3d - { - // get range3D from a given Primitive3DReference - basegfx::B3DRange getB3DRangeFromPrimitive3DReference(const Primitive3DReference& rCandidate, const geometry::ViewInformation3D& aViewInformation) - { - basegfx::B3DRange aRetval; - - if(rCandidate.is()) - { - // try to get C++ implementation base - const BasePrimitive3D* pCandidate(dynamic_cast< BasePrimitive3D* >(rCandidate.get())); - - if(pCandidate) - { - // use it if possible - aRetval.expand(pCandidate->getB3DRange(aViewInformation)); - } - else - { - // use UNO API call instead - const uno::Sequence< beans::PropertyValue >& rViewParameters(aViewInformation.getViewInformationSequence()); - aRetval.expand(basegfx::unotools::b3DRectangleFromRealRectangle3D(rCandidate->getRange(rViewParameters))); - } - } - - return aRetval; - } - - // get range3D from a given Primitive3DSequence - basegfx::B3DRange getB3DRangeFromPrimitive3DSequence(const Primitive3DSequence& rCandidate, const geometry::ViewInformation3D& aViewInformation) - { - basegfx::B3DRange aRetval; - - if(rCandidate.hasElements()) - { - const sal_Int32 nCount(rCandidate.getLength()); - - for(sal_Int32 a(0L); a < nCount; a++) - { - aRetval.expand(getB3DRangeFromPrimitive3DReference(rCandidate[a], aViewInformation)); - } - } - - return aRetval; - } - - bool arePrimitive3DReferencesEqual(const Primitive3DReference& rxA, const Primitive3DReference& rxB) - { - const sal_Bool bAIs(rxA.is()); - - if(bAIs != rxB.is()) - { - return false; - } - - if(!bAIs) - { - return true; - } - - const BasePrimitive3D* pA(dynamic_cast< const BasePrimitive3D* >(rxA.get())); - const BasePrimitive3D* pB(dynamic_cast< const BasePrimitive3D* >(rxB.get())); - const bool bAEqualZero(pA == 0L); - - if(bAEqualZero != (pB == 0L)) - { - return false; - } - - if(bAEqualZero) - { - return false; - } - - return (pA->operator==(*pB)); - } - - bool arePrimitive3DSequencesEqual(const Primitive3DSequence& rA, const Primitive3DSequence& rB) - { - const sal_Bool bAHasElements(rA.hasElements()); - - if(bAHasElements != rB.hasElements()) - { - return false; - } - - if(!bAHasElements) - { - return true; - } - - const sal_Int32 nCount(rA.getLength()); - - if(nCount != rB.getLength()) - { - return false; - } - - for(sal_Int32 a(0L); a < nCount; a++) - { - if(!arePrimitive3DReferencesEqual(rA[a], rB[a])) - { - return false; - } - } - - return true; - } - - // concatenate sequence - void appendPrimitive3DSequenceToPrimitive3DSequence(Primitive3DSequence& rDest, const Primitive3DSequence& rSource) - { - if(rSource.hasElements()) - { - if(rDest.hasElements()) - { - const sal_Int32 nSourceCount(rSource.getLength()); - const sal_Int32 nDestCount(rDest.getLength()); - const sal_Int32 nTargetCount(nSourceCount + nDestCount); - sal_Int32 nInsertPos(nDestCount); - - rDest.realloc(nTargetCount); - - for(sal_Int32 a(0L); a < nSourceCount; a++) - { - if(rSource[a].is()) - { - rDest[nInsertPos++] = rSource[a]; - } - } - - if(nInsertPos != nTargetCount) - { - rDest.realloc(nInsertPos); - } - } - else - { - rDest = rSource; - } - } - } - - // concatenate single Primitive3D - void appendPrimitive3DReferenceToPrimitive3DSequence(Primitive3DSequence& rDest, const Primitive3DReference& rSource) - { - if(rSource.is()) - { - const sal_Int32 nDestCount(rDest.getLength()); - rDest.realloc(nDestCount + 1L); - rDest[nDestCount] = rSource; - } - } - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/groupprimitive3d.cxx b/drawinglayer/source/primitive3d/groupprimitive3d.cxx deleted file mode 100644 index 56b0dde494..0000000000 --- a/drawinglayer/source/primitive3d/groupprimitive3d.cxx +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/groupprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - GroupPrimitive3D::GroupPrimitive3D( const Primitive3DSequence& rChildren ) - : BasePrimitive3D(), - maChildren(rChildren) - { - } - - /** The compare opertator uses the Sequence::==operator, so only checking if - the rererences are equal. All non-equal references are interpreted as - non-equal. - */ - bool GroupPrimitive3D::operator==( const BasePrimitive3D& rPrimitive ) const - { - if(BasePrimitive3D::operator==(rPrimitive)) - { - const GroupPrimitive3D& rCompare = static_cast< const GroupPrimitive3D& >(rPrimitive); - - return (arePrimitive3DSequencesEqual(getChildren(), rCompare.getChildren())); - } - - return false; - } - - /// default: just return children, so all renderers not supporting group will use it's content - Primitive3DSequence GroupPrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - return getChildren(); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(GroupPrimitive3D, PRIMITIVE3D_ID_GROUPPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/hatchtextureprimitive3d.cxx b/drawinglayer/source/primitive3d/hatchtextureprimitive3d.cxx deleted file mode 100644 index 519d2f8330..0000000000 --- a/drawinglayer/source/primitive3d/hatchtextureprimitive3d.cxx +++ /dev/null @@ -1,322 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/hatchtextureprimitive3d.hxx> -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <basegfx/range/b2drange.hxx> -#include <drawinglayer/texture/texture.hxx> -#include <basegfx/polygon/b2dpolygonclipper.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <drawinglayer/primitive3d/polygonprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence HatchTexturePrimitive3D::impCreate3DDecomposition() const - { - Primitive3DSequence aRetval; - - if(getChildren().hasElements()) - { - const Primitive3DSequence aSource(getChildren()); - const sal_uInt32 nSourceCount(aSource.getLength()); - std::vector< Primitive3DReference > aDestination; - - for(sal_uInt32 a(0); a < nSourceCount; a++) - { - // get reference - const Primitive3DReference xReference(aSource[a]); - - if(xReference.is()) - { - // try to cast to BasePrimitive2D implementation - const BasePrimitive3D* pBasePrimitive = dynamic_cast< const BasePrimitive3D* >(xReference.get()); - - if(pBasePrimitive) - { - // it is a BasePrimitive3D implementation, use getPrimitive3DID() call for switch - // not all content is needed, remove transparencies and ModifiedColorPrimitives - switch(pBasePrimitive->getPrimitive3DID()) - { - case PRIMITIVE3D_ID_POLYPOLYGONMATERIALPRIMITIVE3D : - { - // polyPolygonMaterialPrimitive3D, check texturing and hatching - const PolyPolygonMaterialPrimitive3D& rPrimitive = static_cast< const PolyPolygonMaterialPrimitive3D& >(*pBasePrimitive); - const basegfx::B3DPolyPolygon aFillPolyPolygon(rPrimitive.getB3DPolyPolygon()); - - if(maHatch.isFillBackground()) - { - // add original primitive for background - aDestination.push_back(xReference); - } - - if(aFillPolyPolygon.areTextureCoordinatesUsed()) - { - const sal_uInt32 nPolyCount(aFillPolyPolygon.count()); - basegfx::B2DPolyPolygon aTexPolyPolygon; - basegfx::B2DPoint a2N; - basegfx::B2DVector a2X, a2Y; - basegfx::B3DPoint a3N; - basegfx::B3DVector a3X, a3Y; - bool b2N(false), b2X(false), b2Y(false); - - for(sal_uInt32 b(0); b < nPolyCount; b++) - { - const basegfx::B3DPolygon aPartPoly(aFillPolyPolygon.getB3DPolygon(b)); - const sal_uInt32 nPointCount(aPartPoly.count()); - basegfx::B2DPolygon aTexPolygon; - - for(sal_uInt32 c(0); c < nPointCount; c++) - { - const basegfx::B2DPoint a2Candidate(aPartPoly.getTextureCoordinate(c)); - - if(!b2N) - { - a2N = a2Candidate; - a3N = aPartPoly.getB3DPoint(c); - b2N = true; - } - else if(!b2X && !a2N.equal(a2Candidate)) - { - a2X = a2Candidate - a2N; - a3X = aPartPoly.getB3DPoint(c) - a3N; - b2X = true; - } - else if(!b2Y && !a2N.equal(a2Candidate) && !a2X.equal(a2Candidate)) - { - a2Y = a2Candidate - a2N; - - const double fCross(a2X.cross(a2Y)); - - if(!basegfx::fTools::equalZero(fCross)) - { - a3Y = aPartPoly.getB3DPoint(c) - a3N; - b2Y = true; - } - } - - aTexPolygon.append(a2Candidate); - } - - aTexPolygon.setClosed(true); - aTexPolyPolygon.append(aTexPolygon); - } - - if(b2N && b2X && b2Y) - { - // found two linearly independent 2D vectors - // get 2d range of texture coordinates - const basegfx::B2DRange aOutlineRange(basegfx::tools::getRange(aTexPolyPolygon)); - const basegfx::BColor aHatchColor(getHatch().getColor()); - const double fAngle(getHatch().getAngle()); - ::std::vector< basegfx::B2DHomMatrix > aMatrices; - - // get hatch transformations - switch(getHatch().getStyle()) - { - case attribute::HATCHSTYLE_TRIPLE: - { - // rotated 45 degrees - texture::GeoTexSvxHatch aHatch(aOutlineRange, getHatch().getDistance(), fAngle - F_PI4); - aHatch.appendTransformations(aMatrices); - } - case attribute::HATCHSTYLE_DOUBLE: - { - // rotated 90 degrees - texture::GeoTexSvxHatch aHatch(aOutlineRange, getHatch().getDistance(), fAngle - F_PI2); - aHatch.appendTransformations(aMatrices); - } - case attribute::HATCHSTYLE_SINGLE: - { - // angle as given - texture::GeoTexSvxHatch aHatch(aOutlineRange, getHatch().getDistance(), fAngle); - aHatch.appendTransformations(aMatrices); - } - } - - // create geometry from unit line - basegfx::B2DPolyPolygon a2DHatchLines; - basegfx::B2DPolygon a2DUnitLine; - a2DUnitLine.append(basegfx::B2DPoint(0.0, 0.0)); - a2DUnitLine.append(basegfx::B2DPoint(1.0, 0.0)); - - for(sal_uInt32 c(0); c < aMatrices.size(); c++) - { - const basegfx::B2DHomMatrix& rMatrix = aMatrices[c]; - basegfx::B2DPolygon aNewLine(a2DUnitLine); - aNewLine.transform(rMatrix); - a2DHatchLines.append(aNewLine); - } - - if(a2DHatchLines.count()) - { - // clip against texture polygon - a2DHatchLines = basegfx::tools::clipPolyPolygonOnPolyPolygon(a2DHatchLines, aTexPolyPolygon, true, true); - } - - if(a2DHatchLines.count()) - { - // create 2d matrix with 2d vectors as column vectors and 2d point as offset, this represents - // a coordinate system transformation from unit coordinates to the new coordinate system - basegfx::B2DHomMatrix a2D; - a2D.set(0, 0, a2X.getX()); - a2D.set(1, 0, a2X.getY()); - a2D.set(0, 1, a2Y.getX()); - a2D.set(1, 1, a2Y.getY()); - a2D.set(0, 2, a2N.getX()); - a2D.set(1, 2, a2N.getY()); - - // invert that transformation, so we have a back-transformation from texture coordinates - // to unit coordinates - a2D.invert(); - a2DHatchLines.transform(a2D); - - // expand back-transformated geometry tpo 3D - basegfx::B3DPolyPolygon a3DHatchLines(basegfx::tools::createB3DPolyPolygonFromB2DPolyPolygon(a2DHatchLines, 0.0)); - - // create 3d matrix with 3d vectors as column vectors (0,0,1 as Z) and 3d point as offset, this represents - // a coordinate system transformation from unit coordinates to the object's 3d coordinate system - basegfx::B3DHomMatrix a3D; - a3D.set(0, 0, a3X.getX()); - a3D.set(1, 0, a3X.getY()); - a3D.set(2, 0, a3X.getZ()); - a3D.set(0, 1, a3Y.getX()); - a3D.set(1, 1, a3Y.getY()); - a3D.set(2, 1, a3Y.getZ()); - a3D.set(0, 3, a3N.getX()); - a3D.set(1, 3, a3N.getY()); - a3D.set(2, 3, a3N.getZ()); - - // transform hatch lines to 3D object coordinates - a3DHatchLines.transform(a3D); - - // build primitives from this geometry - const sal_uInt32 nHatchLines(a3DHatchLines.count()); - - for(sal_uInt32 d(0); d < nHatchLines; d++) - { - const Primitive3DReference xRef(new PolygonHairlinePrimitive3D(a3DHatchLines.getB3DPolygon(d), aHatchColor)); - aDestination.push_back(xRef); - } - } - } - } - - break; - } - default : - { - // add reference to result - aDestination.push_back(xReference); - break; - } - } - } - else - { - // unknown implementation, add to result - aDestination.push_back(xReference); - } - } - } - - // prepare return value - const sal_uInt32 nDestSize(aDestination.size()); - aRetval.realloc(nDestSize); - - for(sal_uInt32 b(0); b < nDestSize; b++) - { - aRetval[b] = aDestination[b]; - } - } - - return aRetval; - } - - HatchTexturePrimitive3D::HatchTexturePrimitive3D( - const attribute::FillHatchAttribute& rHatch, - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize, - bool bModulate, - bool bFilter) - : TexturePrimitive3D(rChildren, rTextureSize, bModulate, bFilter), - maHatch(rHatch), - maBuffered3DDecomposition() - { - } - - bool HatchTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(TexturePrimitive3D::operator==(rPrimitive)) - { - const HatchTexturePrimitive3D& rCompare = (HatchTexturePrimitive3D&)rPrimitive; - - return (getHatch() == rCompare.getHatch()); - } - - return false; - } - - Primitive3DSequence HatchTexturePrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - if(!getBuffered3DDecomposition().hasElements()) - { - const Primitive3DSequence aNewSequence(impCreate3DDecomposition()); - const_cast< HatchTexturePrimitive3D* >(this)->setBuffered3DDecomposition(aNewSequence); - } - - return getBuffered3DDecomposition(); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(HatchTexturePrimitive3D, PRIMITIVE3D_ID_HATCHTEXTUREPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/hiddengeometryprimitive3d.cxx b/drawinglayer/source/primitive3d/hiddengeometryprimitive3d.cxx deleted file mode 100644 index 0cf95b2ac8..0000000000 --- a/drawinglayer/source/primitive3d/hiddengeometryprimitive3d.cxx +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * OpenOffice.org - a multi-platform office productivity suite - * - * The Contents of this file are made available subject to - * the terms of GNU Lesser General Public License Version 2.1. - * - * - * GNU Lesser General Public License Version 2.1 - * ============================================= - * Copyright 2005 by Sun Microsystems, Inc. - * 901 San Antonio Road, Palo Alto, CA 94303, USA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - HiddenGeometryPrimitive3D::HiddenGeometryPrimitive3D( - const Primitive3DSequence& rChildren) - : GroupPrimitive3D(rChildren) - { - } - - basegfx::B3DRange HiddenGeometryPrimitive3D::getB3DRange(const geometry::ViewInformation3D& rViewInformation) const - { - return getB3DRangeFromPrimitive3DSequence(getChildren(), rViewInformation); - } - - Primitive3DSequence HiddenGeometryPrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - // return empty sequence - return Primitive3DSequence(); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(HiddenGeometryPrimitive3D, PRIMITIVE3D_ID_HIDDENGEOMETRYPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/modifiedcolorprimitive3d.cxx b/drawinglayer/source/primitive3d/modifiedcolorprimitive3d.cxx deleted file mode 100644 index 8a5c98be4d..0000000000 --- a/drawinglayer/source/primitive3d/modifiedcolorprimitive3d.cxx +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - ModifiedColorPrimitive3D::ModifiedColorPrimitive3D( - const Primitive3DSequence& rChildren, - const basegfx::BColorModifier& rColorModifier) - : GroupPrimitive3D(rChildren), - maColorModifier(rColorModifier) - { - } - - bool ModifiedColorPrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(GroupPrimitive3D::operator==(rPrimitive)) - { - const ModifiedColorPrimitive3D& rCompare = (ModifiedColorPrimitive3D&)rPrimitive; - - return (maColorModifier == rCompare.maColorModifier); - } - - return false; - } - - // provide unique ID - ImplPrimitrive3DIDBlock(ModifiedColorPrimitive3D, PRIMITIVE3D_ID_MODIFIEDCOLORPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/polygonprimitive3d.cxx b/drawinglayer/source/primitive3d/polygonprimitive3d.cxx deleted file mode 100644 index 1ecc2ab49e..0000000000 --- a/drawinglayer/source/primitive3d/polygonprimitive3d.cxx +++ /dev/null @@ -1,181 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/polygonprimitive3d.hxx> -#include <basegfx/polygon/b3dpolygontools.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/primitive3d/polygontubeprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - PolygonHairlinePrimitive3D::PolygonHairlinePrimitive3D( - const basegfx::B3DPolygon& rPolygon, - const basegfx::BColor& rBColor) - : BasePrimitive3D(), - maPolygon(rPolygon), - maBColor(rBColor) - { - } - - bool PolygonHairlinePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(BasePrimitive3D::operator==(rPrimitive)) - { - const PolygonHairlinePrimitive3D& rCompare = (PolygonHairlinePrimitive3D&)rPrimitive; - - return (getB3DPolygon() == rCompare.getB3DPolygon() - && getBColor() == rCompare.getBColor()); - } - - return false; - } - - basegfx::B3DRange PolygonHairlinePrimitive3D::getB3DRange(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - return basegfx::tools::getRange(getB3DPolygon()); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(PolygonHairlinePrimitive3D, PRIMITIVE3D_ID_POLYGONHAIRLINEPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence PolygonStrokePrimitive3D::create3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - Primitive3DSequence aRetval; - - if(getB3DPolygon().count()) - { - basegfx::B3DPolyPolygon aHairLinePolyPolygon; - - if(0.0 == getStrokeAttribute().getFullDotDashLen()) - { - aHairLinePolyPolygon = basegfx::B3DPolyPolygon(getB3DPolygon()); - } - else - { - // apply LineStyle - basegfx::tools::applyLineDashing(getB3DPolygon(), getStrokeAttribute().getDotDashArray(), &aHairLinePolyPolygon, 0, getStrokeAttribute().getFullDotDashLen()); - } - - // prepare result - aRetval.realloc(aHairLinePolyPolygon.count()); - - if(getLineAttribute().getWidth()) - { - // create fat line data - const double fRadius(getLineAttribute().getWidth() / 2.0); - const basegfx::B2DLineJoin aLineJoin(getLineAttribute().getLineJoin()); - - for(sal_uInt32 a(0L); a < aHairLinePolyPolygon.count(); a++) - { - // create tube primitives - const Primitive3DReference xRef(new PolygonTubePrimitive3D(aHairLinePolyPolygon.getB3DPolygon(a), getLineAttribute().getColor(), fRadius, aLineJoin)); - aRetval[a] = xRef; - } - } - else - { - // create hair line data for all sub polygons - for(sal_uInt32 a(0L); a < aHairLinePolyPolygon.count(); a++) - { - const basegfx::B3DPolygon aCandidate = aHairLinePolyPolygon.getB3DPolygon(a); - const Primitive3DReference xRef(new PolygonHairlinePrimitive3D(aCandidate, getLineAttribute().getColor())); - aRetval[a] = xRef; - } - } - } - - return aRetval; - } - - PolygonStrokePrimitive3D::PolygonStrokePrimitive3D( - const basegfx::B3DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute, - const attribute::StrokeAttribute& rStrokeAttribute) - : BufferedDecompositionPrimitive3D(), - maPolygon(rPolygon), - maLineAttribute(rLineAttribute), - maStrokeAttribute(rStrokeAttribute) - { - } - - PolygonStrokePrimitive3D::PolygonStrokePrimitive3D( - const basegfx::B3DPolygon& rPolygon, - const attribute::LineAttribute& rLineAttribute) - : BufferedDecompositionPrimitive3D(), - maPolygon(rPolygon), - maLineAttribute(rLineAttribute), - maStrokeAttribute() - { - } - - bool PolygonStrokePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(BufferedDecompositionPrimitive3D::operator==(rPrimitive)) - { - const PolygonStrokePrimitive3D& rCompare = (PolygonStrokePrimitive3D&)rPrimitive; - - return (getB3DPolygon() == rCompare.getB3DPolygon() - && getLineAttribute() == rCompare.getLineAttribute() - && getStrokeAttribute() == rCompare.getStrokeAttribute()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive3DIDBlock(PolygonStrokePrimitive3D, PRIMITIVE3D_ID_POLYGONSTROKEPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/polygontubeprimitive3d.cxx b/drawinglayer/source/primitive3d/polygontubeprimitive3d.cxx deleted file mode 100644 index dcc63dd1c3..0000000000 --- a/drawinglayer/source/primitive3d/polygontubeprimitive3d.cxx +++ /dev/null @@ -1,582 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/polygontubeprimitive3d.hxx> -#include <drawinglayer/attribute/materialattribute3d.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <basegfx/polygon/b3dpolypolygon.hxx> -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/primitive3d/transformprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - namespace // anonymous namespace - { - Primitive3DSequence getLineTubeSegments( - sal_uInt32 nSegments, - const attribute::MaterialAttribute3D& rMaterial) - { - // static data for buffered tube primitives - static Primitive3DSequence aLineTubeList; - static sal_uInt32 nLineTubeSegments(0L); - static attribute::MaterialAttribute3D aLineMaterial; - - // may exclusively change static data, use mutex - ::osl::Mutex m_mutex; - - if(nSegments != nLineTubeSegments || !(rMaterial == aLineMaterial)) - { - nLineTubeSegments = nSegments; - aLineMaterial = rMaterial; - aLineTubeList = Primitive3DSequence(); - } - - if(!aLineTubeList.hasElements() && 0L != nLineTubeSegments) - { - const basegfx::B3DPoint aLeft(0.0, 0.0, 0.0); - const basegfx::B3DPoint aRight(1.0, 0.0, 0.0); - basegfx::B3DPoint aLastLeft(0.0, 1.0, 0.0); - basegfx::B3DPoint aLastRight(1.0, 1.0, 0.0); - basegfx::B3DHomMatrix aRot; - aRot.rotate(F_2PI / (double)nLineTubeSegments, 0.0, 0.0); - aLineTubeList.realloc(nLineTubeSegments); - - for(sal_uInt32 a(0L); a < nLineTubeSegments; a++) - { - const basegfx::B3DPoint aNextLeft(aRot * aLastLeft); - const basegfx::B3DPoint aNextRight(aRot * aLastRight); - basegfx::B3DPolygon aNewPolygon; - - aNewPolygon.append(aNextLeft); - aNewPolygon.setNormal(0L, basegfx::B3DVector(aNextLeft - aLeft)); - - aNewPolygon.append(aLastLeft); - aNewPolygon.setNormal(1L, basegfx::B3DVector(aLastLeft - aLeft)); - - aNewPolygon.append(aLastRight); - aNewPolygon.setNormal(2L, basegfx::B3DVector(aLastRight - aRight)); - - aNewPolygon.append(aNextRight); - aNewPolygon.setNormal(3L, basegfx::B3DVector(aNextRight - aRight)); - - aNewPolygon.setClosed(true); - - const basegfx::B3DPolyPolygon aNewPolyPolygon(aNewPolygon); - const Primitive3DReference xRef(new PolyPolygonMaterialPrimitive3D(aNewPolyPolygon, aLineMaterial, false)); - aLineTubeList[a] = xRef; - - aLastLeft = aNextLeft; - aLastRight = aNextRight; - } - } - - return aLineTubeList; - } - - Primitive3DSequence getLineCapSegments( - sal_uInt32 nSegments, - const attribute::MaterialAttribute3D& rMaterial) - { - // static data for buffered tube primitives - static Primitive3DSequence aLineCapList; - static sal_uInt32 nLineCapSegments(0L); - static attribute::MaterialAttribute3D aLineMaterial; - - // may exclusively change static data, use mutex - ::osl::Mutex m_mutex; - - if(nSegments != nLineCapSegments || !(rMaterial == aLineMaterial)) - { - nLineCapSegments = nSegments; - aLineMaterial = rMaterial; - aLineCapList = Primitive3DSequence(); - } - - if(!aLineCapList.hasElements() && 0L != nLineCapSegments) - { - const basegfx::B3DPoint aNull(0.0, 0.0, 0.0); - basegfx::B3DPoint aLast(0.0, 1.0, 0.0); - basegfx::B3DHomMatrix aRot; - aRot.rotate(F_2PI / (double)nLineCapSegments, 0.0, 0.0); - aLineCapList.realloc(nLineCapSegments); - - for(sal_uInt32 a(0L); a < nLineCapSegments; a++) - { - const basegfx::B3DPoint aNext(aRot * aLast); - basegfx::B3DPolygon aNewPolygon; - - aNewPolygon.append(aLast); - aNewPolygon.setNormal(0L, basegfx::B3DVector(aLast - aNull)); - - aNewPolygon.append(aNext); - aNewPolygon.setNormal(1L, basegfx::B3DVector(aNext - aNull)); - - aNewPolygon.append(aNull); - aNewPolygon.setNormal(2L, basegfx::B3DVector(-1.0, 0.0, 0.0)); - - aNewPolygon.setClosed(true); - - const basegfx::B3DPolyPolygon aNewPolyPolygon(aNewPolygon); - const Primitive3DReference xRef(new PolyPolygonMaterialPrimitive3D(aNewPolyPolygon, aLineMaterial, false)); - aLineCapList[a] = xRef; - - aLast = aNext; - } - } - - return aLineCapList; - } - - Primitive3DSequence getLineJoinSegments( - sal_uInt32 nSegments, - const attribute::MaterialAttribute3D& rMaterial, - double fAngle, - double /*fDegreeStepWidth*/, - double fMiterMinimumAngle, - basegfx::B2DLineJoin aLineJoin) - { - // nSegments is for whole circle, adapt to half circle - const sal_uInt32 nVerSeg(nSegments >> 1L); - std::vector< BasePrimitive3D* > aResultVector; - - if(nVerSeg) - { - if(basegfx::B2DLINEJOIN_ROUND == aLineJoin) - { - // calculate new horizontal segments - const sal_uInt32 nHorSeg((sal_uInt32)((fAngle / F_2PI) * (double)nSegments)); - - if(nHorSeg) - { - // create half-sphere - const basegfx::B3DPolyPolygon aSphere(basegfx::tools::createUnitSphereFillPolyPolygon(nHorSeg, nVerSeg, true, F_PI2, -F_PI2, 0.0, fAngle)); - - for(sal_uInt32 a(0L); a < aSphere.count(); a++) - { - const basegfx::B3DPolygon aPartPolygon(aSphere.getB3DPolygon(a)); - const basegfx::B3DPolyPolygon aPartPolyPolygon(aPartPolygon); - BasePrimitive3D* pNew = new PolyPolygonMaterialPrimitive3D(aPartPolyPolygon, rMaterial, false); - aResultVector.push_back(pNew); - } - } - else - { - // fallback to bevel when there is not at least one segment hor and ver - aLineJoin = basegfx::B2DLINEJOIN_BEVEL; - } - } - - if(basegfx::B2DLINEJOIN_MIDDLE == aLineJoin - || basegfx::B2DLINEJOIN_BEVEL == aLineJoin - || basegfx::B2DLINEJOIN_MITER == aLineJoin) - { - if(basegfx::B2DLINEJOIN_MITER == aLineJoin) - { - const double fMiterAngle(fAngle/2.0); - - if(fMiterAngle < fMiterMinimumAngle) - { - // fallback to bevel when miter's angle is too small - aLineJoin = basegfx::B2DLINEJOIN_BEVEL; - } - } - - const double fInc(F_PI / (double)nVerSeg); - const double fSin(sin(-fAngle)); - const double fCos(cos(-fAngle)); - const bool bMiter(basegfx::B2DLINEJOIN_MITER == aLineJoin); - const double fMiterSin(bMiter ? sin(-(fAngle/2.0)) : 0.0); - const double fMiterCos(bMiter ? cos(-(fAngle/2.0)) : 0.0); - double fPos(-F_PI2); - basegfx::B3DPoint aPointOnXY, aPointRotY, aNextPointOnXY, aNextPointRotY; - basegfx::B3DPoint aCurrMiter, aNextMiter; - basegfx::B3DPolygon aNewPolygon, aMiterPolygon; - - // close polygon - aNewPolygon.setClosed(true); - aMiterPolygon.setClosed(true); - - for(sal_uInt32 a(0L); a < nVerSeg; a++) - { - const bool bFirst(0L == a); - const bool bLast(a + 1L == nVerSeg); - - if(bFirst || !bLast) - { - fPos += fInc; - - aNextPointOnXY = basegfx::B3DPoint( - cos(fPos), - sin(fPos), - 0.0); - - aNextPointRotY = basegfx::B3DPoint( - aNextPointOnXY.getX() * fCos, - aNextPointOnXY.getY(), - aNextPointOnXY.getX() * fSin); - - if(bMiter) - { - aNextMiter = basegfx::B3DPoint( - aNextPointOnXY.getX(), - aNextPointOnXY.getY(), - fMiterSin * (aNextPointOnXY.getX() / fMiterCos)); - } - } - - if(bFirst) - { - aNewPolygon.clear(); - - if(bMiter) - { - aNewPolygon.append(basegfx::B3DPoint(0.0, -1.0, 0.0)); - aNewPolygon.append(aNextPointOnXY); - aNewPolygon.append(aNextMiter); - - aMiterPolygon.clear(); - aMiterPolygon.append(basegfx::B3DPoint(0.0, -1.0, 0.0)); - aMiterPolygon.append(aNextMiter); - aMiterPolygon.append(aNextPointRotY); - } - else - { - aNewPolygon.append(basegfx::B3DPoint(0.0, -1.0, 0.0)); - aNewPolygon.append(aNextPointOnXY); - aNewPolygon.append(aNextPointRotY); - } - } - else if(bLast) - { - aNewPolygon.clear(); - - if(bMiter) - { - aNewPolygon.append(basegfx::B3DPoint(0.0, 1.0, 0.0)); - aNewPolygon.append(aCurrMiter); - aNewPolygon.append(aPointOnXY); - - aMiterPolygon.clear(); - aMiterPolygon.append(basegfx::B3DPoint(0.0, 1.0, 0.0)); - aMiterPolygon.append(aPointRotY); - aMiterPolygon.append(aCurrMiter); - } - else - { - aNewPolygon.append(basegfx::B3DPoint(0.0, 1.0, 0.0)); - aNewPolygon.append(aPointRotY); - aNewPolygon.append(aPointOnXY); - } - } - else - { - aNewPolygon.clear(); - - if(bMiter) - { - aNewPolygon.append(aPointOnXY); - aNewPolygon.append(aNextPointOnXY); - aNewPolygon.append(aNextMiter); - aNewPolygon.append(aCurrMiter); - - aMiterPolygon.clear(); - aMiterPolygon.append(aCurrMiter); - aMiterPolygon.append(aNextMiter); - aMiterPolygon.append(aNextPointRotY); - aMiterPolygon.append(aPointRotY); - } - else - { - aNewPolygon.append(aPointRotY); - aNewPolygon.append(aPointOnXY); - aNewPolygon.append(aNextPointOnXY); - aNewPolygon.append(aNextPointRotY); - } - } - - // set normals - for(sal_uInt32 b(0L); b < aNewPolygon.count(); b++) - { - aNewPolygon.setNormal(b, basegfx::B3DVector(aNewPolygon.getB3DPoint(b))); - } - - // create primitive - if(aNewPolygon.count()) - { - const basegfx::B3DPolyPolygon aNewPolyPolygon(aNewPolygon); - BasePrimitive3D* pNew = new PolyPolygonMaterialPrimitive3D(aNewPolyPolygon, rMaterial, false); - aResultVector.push_back(pNew); - } - - if(bMiter && aMiterPolygon.count()) - { - // set normals - for(sal_uInt32 c(0L); c < aMiterPolygon.count(); c++) - { - aMiterPolygon.setNormal(c, basegfx::B3DVector(aMiterPolygon.getB3DPoint(c))); - } - - // create primitive - const basegfx::B3DPolyPolygon aMiterPolyPolygon(aMiterPolygon); - BasePrimitive3D* pNew = new PolyPolygonMaterialPrimitive3D(aMiterPolyPolygon, rMaterial, false); - aResultVector.push_back(pNew); - } - - // prepare next step - if(bFirst || !bLast) - { - aPointOnXY = aNextPointOnXY; - aPointRotY = aNextPointRotY; - - if(bMiter) - { - aCurrMiter = aNextMiter; - } - } - } - } - } - - Primitive3DSequence aRetval(aResultVector.size()); - - for(sal_uInt32 a(0L); a < aResultVector.size(); a++) - { - aRetval[a] = Primitive3DReference(aResultVector[a]); - } - - return aRetval; - } - - basegfx::B3DHomMatrix getRotationFromVector(const basegfx::B3DVector& rVector) - { - // build transformation from unit vector to vector - basegfx::B3DHomMatrix aRetval; - - // get applied rotations from angles in XY and in XZ (cartesian) - const double fRotInXY(atan2(rVector.getY(), rVector.getXZLength())); - const double fRotInXZ(atan2(-rVector.getZ(), rVector.getX())); - - // apply rotations. Rot around Z needs to be done first, so apply in two steps - aRetval.rotate(0.0, 0.0, fRotInXY); - aRetval.rotate(0.0, fRotInXZ, 0.0); - - return aRetval; - } - } // end of anonymous namespace - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence PolygonTubePrimitive3D::impCreate3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - const sal_uInt32 nPointCount(getB3DPolygon().count()); - std::vector< BasePrimitive3D* > aResultVector; - - if(0L != nPointCount) - { - if(basegfx::fTools::more(getRadius(), 0.0)) - { - const attribute::MaterialAttribute3D aMaterial(getBColor()); - static sal_uInt32 nSegments(8L); // default for 3d line segments, for more quality just raise this value (in even steps) - const bool bClosed(getB3DPolygon().isClosed()); - const bool bNoLineJoin(basegfx::B2DLINEJOIN_NONE == getLineJoin()); - const sal_uInt32 nLoopCount(bClosed ? nPointCount : nPointCount - 1L); - basegfx::B3DPoint aLast(getB3DPolygon().getB3DPoint(nPointCount - 1L)); - basegfx::B3DPoint aCurr(getB3DPolygon().getB3DPoint(0L)); - - for(sal_uInt32 a(0L); a < nLoopCount; a++) - { - // get next data - const basegfx::B3DPoint aNext(getB3DPolygon().getB3DPoint((a + 1L) % nPointCount)); - const basegfx::B3DVector aForw(aNext - aCurr); - const double fForwLen(aForw.getLength()); - - if(basegfx::fTools::more(fForwLen, 0.0)) - { - // get rotation from vector, this describes rotation from (1, 0, 0) to aForw - basegfx::B3DHomMatrix aRotVector(getRotationFromVector(aForw)); - - // create default transformation with scale and rotate - basegfx::B3DHomMatrix aVectorTrans; - aVectorTrans.scale(fForwLen, getRadius(), getRadius()); - aVectorTrans *= aRotVector; - aVectorTrans.translate(aCurr.getX(), aCurr.getY(), aCurr.getZ()); - - if(bNoLineJoin || (!bClosed && !a)) - { - // line start edge, build transformed primitiveVector3D - TransformPrimitive3D* pNewTransformedA = new TransformPrimitive3D(aVectorTrans, getLineCapSegments(nSegments, aMaterial)); - aResultVector.push_back(pNewTransformedA); - } - else - { - const basegfx::B3DVector aBack(aCurr - aLast); - const double fCross(basegfx::cross(aBack, aForw).getLength()); - - if(!basegfx::fTools::equalZero(fCross)) - { - // line connect non-parallel, aBack, aForw, use getLineJoin() - const double fAngle(acos(aBack.scalar(aForw) / (fForwLen * aBack.getLength()))); // 0.0 .. F_PI2 - Primitive3DSequence aNewList(getLineJoinSegments(nSegments, aMaterial, fAngle, getDegreeStepWidth(), getMiterMinimumAngle(), getLineJoin())); - - // calculate transformation. First, get angle in YZ between nForw projected on (1, 0, 0) and nBack - basegfx::B3DHomMatrix aInvRotVector(aRotVector); - aInvRotVector.invert(); - basegfx::B3DVector aTransBack(aInvRotVector * aBack); - const double fRotInYZ(atan2(aTransBack.getY(), aTransBack.getZ())); - - // create trans by rotating unit sphere with angle 90 degrees around Y, then 180-fRot in X. - // Also apply usual scaling and translation - basegfx::B3DHomMatrix aSphereTrans; - aSphereTrans.rotate(0.0, F_PI2, 0.0); - aSphereTrans.rotate(F_PI - fRotInYZ, 0.0, 0.0); - aSphereTrans *= aRotVector; - aSphereTrans.scale(getRadius(), getRadius(), getRadius()); - aSphereTrans.translate(aCurr.getX(), aCurr.getY(), aCurr.getZ()); - - // line start edge, build transformed primitiveVector3D - TransformPrimitive3D* pNewTransformedB = new TransformPrimitive3D(aSphereTrans, aNewList); - aResultVector.push_back(pNewTransformedB); - } - } - - // create line segments, build transformed primitiveVector3D - TransformPrimitive3D* pNewTransformedC = new TransformPrimitive3D(aVectorTrans, getLineTubeSegments(nSegments, aMaterial)); - aResultVector.push_back(pNewTransformedC); - - if(bNoLineJoin || (!bClosed && ((a + 1L) == nLoopCount))) - { - // line end edge, first rotate (mirror) and translate, then use use aRotVector - basegfx::B3DHomMatrix aBackTrans; - aBackTrans.rotate(0.0, F_PI, 0.0); - aBackTrans.translate(1.0, 0.0, 0.0); - aBackTrans.scale(fForwLen, getRadius(), getRadius()); - aBackTrans *= aRotVector; - aBackTrans.translate(aCurr.getX(), aCurr.getY(), aCurr.getZ()); - - // line end edge, build transformed primitiveVector3D - TransformPrimitive3D* pNewTransformedD = new TransformPrimitive3D(aBackTrans, getLineCapSegments(nSegments, aMaterial)); - aResultVector.push_back(pNewTransformedD); - } - } - - // prepare next loop step - aLast = aCurr; - aCurr = aNext; - } - } - else - { - // create hairline - PolygonHairlinePrimitive3D* pNew = new PolygonHairlinePrimitive3D(getB3DPolygon(), getBColor()); - aResultVector.push_back(pNew); - } - } - - // prepare return value - Primitive3DSequence aRetval(aResultVector.size()); - - for(sal_uInt32 a(0L); a < aResultVector.size(); a++) - { - aRetval[a] = Primitive3DReference(aResultVector[a]); - } - - return aRetval; - } - - PolygonTubePrimitive3D::PolygonTubePrimitive3D( - const basegfx::B3DPolygon& rPolygon, - const basegfx::BColor& rBColor, - double fRadius, basegfx::B2DLineJoin aLineJoin, - double fDegreeStepWidth, - double fMiterMinimumAngle) - : PolygonHairlinePrimitive3D(rPolygon, rBColor), - maLast3DDecomposition(), - mfRadius(fRadius), - mfDegreeStepWidth(fDegreeStepWidth), - mfMiterMinimumAngle(fMiterMinimumAngle), - maLineJoin(aLineJoin) - { - } - - bool PolygonTubePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(PolygonHairlinePrimitive3D::operator==(rPrimitive)) - { - const PolygonTubePrimitive3D& rCompare = (PolygonTubePrimitive3D&)rPrimitive; - - return (getRadius() == rCompare.getRadius() - && getDegreeStepWidth() == rCompare.getDegreeStepWidth() - && getMiterMinimumAngle() == rCompare.getMiterMinimumAngle() - && getLineJoin() == rCompare.getLineJoin()); - } - - return false; - } - - Primitive3DSequence PolygonTubePrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - if(!getLast3DDecomposition().hasElements()) - { - const Primitive3DSequence aNewSequence(impCreate3DDecomposition(rViewInformation)); - const_cast< PolygonTubePrimitive3D* >(this)->setLast3DDecomposition(aNewSequence); - } - - return getLast3DDecomposition(); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(PolygonTubePrimitive3D, PRIMITIVE3D_ID_POLYGONTUBEPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/polypolygonprimitive3d.cxx b/drawinglayer/source/primitive3d/polypolygonprimitive3d.cxx deleted file mode 100644 index 4066dfe163..0000000000 --- a/drawinglayer/source/primitive3d/polypolygonprimitive3d.cxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - PolyPolygonMaterialPrimitive3D::PolyPolygonMaterialPrimitive3D( - const basegfx::B3DPolyPolygon& rPolyPolygon, - const attribute::MaterialAttribute3D& rMaterial, - bool bDoubleSided) - : BasePrimitive3D(), - maPolyPolygon(rPolyPolygon), - maMaterial(rMaterial), - mbDoubleSided(bDoubleSided) - { - } - - bool PolyPolygonMaterialPrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(BasePrimitive3D::operator==(rPrimitive)) - { - const PolyPolygonMaterialPrimitive3D& rCompare = (PolyPolygonMaterialPrimitive3D&)rPrimitive; - - return (getB3DPolyPolygon() == rCompare.getB3DPolyPolygon() - && getMaterial() == rCompare.getMaterial() - && getDoubleSided() == rCompare.getDoubleSided()); - } - - return false; - } - - basegfx::B3DRange PolyPolygonMaterialPrimitive3D::getB3DRange(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - return basegfx::tools::getRange(getB3DPolyPolygon()); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(PolyPolygonMaterialPrimitive3D, PRIMITIVE3D_ID_POLYPOLYGONMATERIALPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/sdrcubeprimitive3d.cxx b/drawinglayer/source/primitive3d/sdrcubeprimitive3d.cxx deleted file mode 100644 index 287bc4e43e..0000000000 --- a/drawinglayer/source/primitive3d/sdrcubeprimitive3d.cxx +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/sdrcubeprimitive3d.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <drawinglayer/primitive3d/sdrdecompositiontools3d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <drawinglayer/attribute/sdrfillattribute.hxx> -#include <drawinglayer/attribute/sdrlineattribute.hxx> -#include <drawinglayer/attribute/sdrshadowattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence SdrCubePrimitive3D::create3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - const basegfx::B3DRange aUnitRange(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); - Primitive3DSequence aRetval; - basegfx::B3DPolyPolygon aFill(basegfx::tools::createCubeFillPolyPolygonFromB3DRange(aUnitRange)); - - // normal creation - if(!getSdrLFSAttribute().getFill().isDefault()) - { - if(::com::sun::star::drawing::NormalsKind_SPECIFIC == getSdr3DObjectAttribute().getNormalsKind() - || ::com::sun::star::drawing::NormalsKind_SPHERE == getSdr3DObjectAttribute().getNormalsKind()) - { - // create sphere normals - const basegfx::B3DPoint aCenter(basegfx::tools::getRange(aFill).getCenter()); - aFill = basegfx::tools::applyDefaultNormalsSphere(aFill, aCenter); - } - - if(getSdr3DObjectAttribute().getNormalsInvert()) - { - // invert normals - aFill = basegfx::tools::invertNormals(aFill); - } - } - - // texture coordinates - if(!getSdrLFSAttribute().getFill().isDefault()) - { - // handle texture coordinates X - const bool bParallelX(::com::sun::star::drawing::TextureProjectionMode_PARALLEL == getSdr3DObjectAttribute().getTextureProjectionX()); - const bool bObjectSpecificX(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC == getSdr3DObjectAttribute().getTextureProjectionX()); - const bool bSphereX(!bParallelX && (::com::sun::star::drawing::TextureProjectionMode_SPHERE == getSdr3DObjectAttribute().getTextureProjectionX())); - - // handle texture coordinates Y - const bool bParallelY(::com::sun::star::drawing::TextureProjectionMode_PARALLEL == getSdr3DObjectAttribute().getTextureProjectionY()); - const bool bObjectSpecificY(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC == getSdr3DObjectAttribute().getTextureProjectionY()); - const bool bSphereY(!bParallelY && (::com::sun::star::drawing::TextureProjectionMode_SPHERE == getSdr3DObjectAttribute().getTextureProjectionY())); - - if(bParallelX || bParallelY) - { - // apply parallel texture coordinates in X and/or Y - const basegfx::B3DRange aRange(basegfx::tools::getRange(aFill)); - aFill = basegfx::tools::applyDefaultTextureCoordinatesParallel(aFill, aRange, bParallelX, bParallelY); - } - - if(bSphereX || bSphereY) - { - // apply spherical texture coordinates in X and/or Y - const basegfx::B3DRange aRange(basegfx::tools::getRange(aFill)); - const basegfx::B3DPoint aCenter(aRange.getCenter()); - aFill = basegfx::tools::applyDefaultTextureCoordinatesSphere(aFill, aCenter, bSphereX, bSphereY); - } - - if(bObjectSpecificX || bObjectSpecificY) - { - // object-specific - for(sal_uInt32 a(0L); a < aFill.count(); a++) - { - basegfx::B3DPolygon aTmpPoly(aFill.getB3DPolygon(a)); - - if(aTmpPoly.count() >= 4L) - { - for(sal_uInt32 b(0L); b < 4L; b++) - { - basegfx::B2DPoint aPoint(aTmpPoly.getTextureCoordinate(b)); - - if(bObjectSpecificX) - { - aPoint.setX((1L == b || 2L == b) ? 1.0 : 0.0); - } - - if(bObjectSpecificY) - { - aPoint.setY((2L == b || 3L == b) ? 1.0 : 0.0); - } - - aTmpPoly.setTextureCoordinate(b, aPoint); - } - - aFill.setB3DPolygon(a, aTmpPoly); - } - } - } - - // transform texture coordinates to texture size - basegfx::B2DHomMatrix aTexMatrix; - aTexMatrix.scale(getTextureSize().getX(), getTextureSize().getY()); - aFill.transformTextureCoordiantes(aTexMatrix); - } - - // build vector of PolyPolygons - ::std::vector< basegfx::B3DPolyPolygon > a3DPolyPolygonVector; - - for(sal_uInt32 a(0L); a < aFill.count(); a++) - { - a3DPolyPolygonVector.push_back(basegfx::B3DPolyPolygon(aFill.getB3DPolygon(a))); - } - - if(!getSdrLFSAttribute().getFill().isDefault()) - { - // add fill - aRetval = create3DPolyPolygonFillPrimitives( - a3DPolyPolygonVector, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute(), - getSdrLFSAttribute().getFill(), - getSdrLFSAttribute().getFillFloatTransGradient()); - } - else - { - // create simplified 3d hit test geometry - aRetval = createHiddenGeometryPrimitives3D( - a3DPolyPolygonVector, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute()); - } - - // add line - if(!getSdrLFSAttribute().getLine().isDefault()) - { - basegfx::B3DPolyPolygon aLine(basegfx::tools::createCubePolyPolygonFromB3DRange(aUnitRange)); - const Primitive3DSequence aLines(create3DPolyPolygonLinePrimitives( - aLine, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aLines); - } - - // add shadow - if(!getSdrLFSAttribute().getShadow().isDefault() && aRetval.hasElements()) - { - const Primitive3DSequence aShadow(createShadowPrimitive3D( - aRetval, getSdrLFSAttribute().getShadow(), getSdr3DObjectAttribute().getShadow3D())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aShadow); - } - - return aRetval; - } - - SdrCubePrimitive3D::SdrCubePrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute) - : SdrPrimitive3D(rTransform, rTextureSize, rSdrLFSAttribute, rSdr3DObjectAttribute) - { - } - - bool SdrCubePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - return SdrPrimitive3D::operator==(rPrimitive); - } - - basegfx::B3DRange SdrCubePrimitive3D::getB3DRange(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - // use defaut from sdrPrimitive3D which uses transformation expanded by line width/2. - // The parent implementation which uses the ranges of the decomposition would be more - // corrcet, but for historical reasons it is necessary to do the old method: To get - // the range of the non-transformed geometry and transform it then. This leads to different - // ranges where the new method is more correct, but the need to keep the old behaviour - // has priority here. - return getStandard3DRange(); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(SdrCubePrimitive3D, PRIMITIVE3D_ID_SDRCUBEPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/sdrdecompositiontools3d.cxx b/drawinglayer/source/primitive3d/sdrdecompositiontools3d.cxx deleted file mode 100644 index a75772cf9c..0000000000 --- a/drawinglayer/source/primitive3d/sdrdecompositiontools3d.cxx +++ /dev/null @@ -1,342 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/sdrdecompositiontools3d.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <drawinglayer/attribute/strokeattribute.hxx> -#include <drawinglayer/primitive3d/baseprimitive3d.hxx> -#include <drawinglayer/primitive3d/polygonprimitive3d.hxx> -#include <basegfx/polygon/b3dpolypolygon.hxx> -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <vcl/vclenum.hxx> -#include <drawinglayer/attribute/fillbitmapattribute.hxx> -#include <drawinglayer/attribute/sdrfillbitmapattribute.hxx> -#include <vcl/bmpacc.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/primitive3d/textureprimitive3d.hxx> -#include <drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx> -#include <drawinglayer/primitive3d/hatchtextureprimitive3d.hxx> -#include <drawinglayer/primitive3d/shadowprimitive3d.hxx> -#include <basegfx/range/b2drange.hxx> -#include <drawinglayer/attribute/sdrlineattribute.hxx> -#include <drawinglayer/attribute/sdrobjectattribute3d.hxx> -#include <drawinglayer/attribute/sdrfillattribute.hxx> -#include <drawinglayer/attribute/sdrshadowattribute.hxx> -#include <drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - basegfx::B3DRange getRangeFrom3DGeometry(::std::vector< basegfx::B3DPolyPolygon >& rFill) - { - basegfx::B3DRange aRetval; - - for(sal_uInt32 a(0); a < rFill.size(); a++) - { - aRetval.expand(basegfx::tools::getRange(rFill[a])); - } - - return aRetval; - } - - void applyNormalsKindSphereTo3DGeometry(::std::vector< basegfx::B3DPolyPolygon >& rFill, const basegfx::B3DRange& rRange) - { - // create sphere normals - const basegfx::B3DPoint aCenter(rRange.getCenter()); - - for(sal_uInt32 a(0); a < rFill.size(); a++) - { - rFill[a] = basegfx::tools::applyDefaultNormalsSphere(rFill[a], aCenter); - } - } - - void applyNormalsKindFlatTo3DGeometry(::std::vector< basegfx::B3DPolyPolygon >& rFill) - { - for(sal_uInt32 a(0); a < rFill.size(); a++) - { - rFill[a].clearNormals(); - } - } - - void applyNormalsInvertTo3DGeometry(::std::vector< basegfx::B3DPolyPolygon >& rFill) - { - // invert normals - for(sal_uInt32 a(0); a < rFill.size(); a++) - { - rFill[a] = basegfx::tools::invertNormals(rFill[a]); - } - } - - void applyTextureTo3DGeometry( - ::com::sun::star::drawing::TextureProjectionMode eModeX, - ::com::sun::star::drawing::TextureProjectionMode eModeY, - ::std::vector< basegfx::B3DPolyPolygon >& rFill, - const basegfx::B3DRange& rRange, - const basegfx::B2DVector& rTextureSize) - { - sal_uInt32 a; - - // handle texture coordinates X - const bool bParallelX(::com::sun::star::drawing::TextureProjectionMode_PARALLEL == eModeX); - const bool bSphereX(!bParallelX && (::com::sun::star::drawing::TextureProjectionMode_SPHERE == eModeX)); - - // handle texture coordinates Y - const bool bParallelY(::com::sun::star::drawing::TextureProjectionMode_PARALLEL == eModeY); - const bool bSphereY(!bParallelY && (::com::sun::star::drawing::TextureProjectionMode_SPHERE == eModeY)); - - if(bParallelX || bParallelY) - { - // apply parallel texture coordinates in X and/or Y - for(a = 0; a < rFill.size(); a++) - { - rFill[a] = basegfx::tools::applyDefaultTextureCoordinatesParallel(rFill[a], rRange, bParallelX, bParallelY); - } - } - - if(bSphereX || bSphereY) - { - // apply spherical texture coordinates in X and/or Y - const basegfx::B3DPoint aCenter(rRange.getCenter()); - - for(a = 0; a < rFill.size(); a++) - { - rFill[a] = basegfx::tools::applyDefaultTextureCoordinatesSphere(rFill[a], aCenter, bSphereX, bSphereY); - } - } - - // transform texture coordinates to texture size - basegfx::B2DHomMatrix aTexMatrix; - aTexMatrix.scale(rTextureSize.getX(), rTextureSize.getY()); - - for(a = 0; a < rFill.size(); a++) - { - rFill[a].transformTextureCoordiantes(aTexMatrix); - } - } - - Primitive3DSequence create3DPolyPolygonLinePrimitives( - const basegfx::B3DPolyPolygon& rUnitPolyPolygon, - const basegfx::B3DHomMatrix& rObjectTransform, - const attribute::SdrLineAttribute& rLine) - { - // prepare fully scaled polyPolygon - basegfx::B3DPolyPolygon aScaledPolyPolygon(rUnitPolyPolygon); - aScaledPolyPolygon.transform(rObjectTransform); - - // create line and stroke attribute - const attribute::LineAttribute aLineAttribute(rLine.getColor(), rLine.getWidth(), rLine.getJoin()); - const attribute::StrokeAttribute aStrokeAttribute(rLine.getDotDashArray(), rLine.getFullDotDashLen()); - - // create primitives - Primitive3DSequence aRetval(aScaledPolyPolygon.count()); - - for(sal_uInt32 a(0L); a < aScaledPolyPolygon.count(); a++) - { - const Primitive3DReference xRef(new PolygonStrokePrimitive3D(aScaledPolyPolygon.getB3DPolygon(a), aLineAttribute, aStrokeAttribute)); - aRetval[a] = xRef; - } - - if(0.0 != rLine.getTransparence()) - { - // create UnifiedTransparenceTexturePrimitive3D, add created primitives and exchange - const Primitive3DReference xRef(new UnifiedTransparenceTexturePrimitive3D(rLine.getTransparence(), aRetval)); - aRetval = Primitive3DSequence(&xRef, 1L); - } - - return aRetval; - } - - Primitive3DSequence create3DPolyPolygonFillPrimitives( - const ::std::vector< basegfx::B3DPolyPolygon >& r3DPolyPolygonVector, - const basegfx::B3DHomMatrix& rObjectTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::Sdr3DObjectAttribute& aSdr3DObjectAttribute, - const attribute::SdrFillAttribute& rFill, - const attribute::FillGradientAttribute& rFillGradient) - { - Primitive3DSequence aRetval; - - if(r3DPolyPolygonVector.size()) - { - // create list of simple fill primitives - aRetval.realloc(r3DPolyPolygonVector.size()); - - for(sal_uInt32 a(0L); a < r3DPolyPolygonVector.size(); a++) - { - // get scaled PolyPolygon - basegfx::B3DPolyPolygon aScaledPolyPolygon(r3DPolyPolygonVector[a]); - aScaledPolyPolygon.transform(rObjectTransform); - - if(aScaledPolyPolygon.areNormalsUsed()) - { - aScaledPolyPolygon.transformNormals(rObjectTransform); - } - - const Primitive3DReference xRef(new PolyPolygonMaterialPrimitive3D( - aScaledPolyPolygon, - aSdr3DObjectAttribute.getMaterial(), - aSdr3DObjectAttribute.getDoubleSided())); - aRetval[a] = xRef; - } - - // look for and evtl. build texture sub-group primitive - if(!rFill.getGradient().isDefault() - || !rFill.getHatch().isDefault() - || !rFill.getBitmap().isDefault()) - { - bool bModulate(::com::sun::star::drawing::TextureMode_MODULATE == aSdr3DObjectAttribute.getTextureMode()); - bool bFilter(aSdr3DObjectAttribute.getTextureFilter()); - BasePrimitive3D* pNewTexturePrimitive3D = 0; - - if(!rFill.getGradient().isDefault()) - { - // create gradientTexture3D with sublist, add to local aRetval - pNewTexturePrimitive3D = new GradientTexturePrimitive3D( - rFill.getGradient(), - aRetval, - rTextureSize, - bModulate, - bFilter); - } - else if(!rFill.getHatch().isDefault()) - { - // create hatchTexture3D with sublist, add to local aRetval - pNewTexturePrimitive3D = new HatchTexturePrimitive3D( - rFill.getHatch(), - aRetval, - rTextureSize, - bModulate, - bFilter); - } - else // if(!rFill.getBitmap().isDefault()) - { - // create bitmapTexture3D with sublist, add to local aRetval - basegfx::B2DRange aTexRange(0.0, 0.0, rTextureSize.getX(), rTextureSize.getY()); - - pNewTexturePrimitive3D = new BitmapTexturePrimitive3D( - rFill.getBitmap().getFillBitmapAttribute(aTexRange), - aRetval, - rTextureSize, - bModulate, - bFilter); - } - - // exchange aRetval content with texture group - const Primitive3DReference xRef(pNewTexturePrimitive3D); - aRetval = Primitive3DSequence(&xRef, 1L); - - if(::com::sun::star::drawing::TextureKind2_LUMINANCE == aSdr3DObjectAttribute.getTextureKind()) - { - // use modified color primitive to force textures to gray - const basegfx::BColorModifier aBColorModifier(basegfx::BColor(), 0.0, basegfx::BCOLORMODIFYMODE_GRAY); - const Primitive3DReference xRef2(new ModifiedColorPrimitive3D(aRetval, aBColorModifier)); - aRetval = Primitive3DSequence(&xRef2, 1L); - } - } - - if(0.0 != rFill.getTransparence()) - { - // create UnifiedTransparenceTexturePrimitive3D with sublist and exchange - const Primitive3DReference xRef(new UnifiedTransparenceTexturePrimitive3D(rFill.getTransparence(), aRetval)); - aRetval = Primitive3DSequence(&xRef, 1L); - } - else if(!rFillGradient.isDefault()) - { - // create TransparenceTexturePrimitive3D with sublist and exchange - const Primitive3DReference xRef(new TransparenceTexturePrimitive3D(rFillGradient, aRetval, rTextureSize)); - aRetval = Primitive3DSequence(&xRef, 1L); - } - } - - return aRetval; - } - - Primitive3DSequence createShadowPrimitive3D( - const Primitive3DSequence& rSource, - const attribute::SdrShadowAttribute& rShadow, - bool bShadow3D) - { - // create Shadow primitives. Uses already created primitives - if(rSource.hasElements() && !basegfx::fTools::moreOrEqual(rShadow.getTransparence(), 1.0)) - { - // prepare new list for shadow geometry - basegfx::B2DHomMatrix aShadowOffset; - aShadowOffset.set(0, 2, rShadow.getOffset().getX()); - aShadowOffset.set(1, 2, rShadow.getOffset().getY()); - - // create shadow primitive and add primitives - const Primitive3DReference xRef(new ShadowPrimitive3D(aShadowOffset, rShadow.getColor(), rShadow.getTransparence(), bShadow3D, rSource)); - return Primitive3DSequence(&xRef, 1L); - } - else - { - return Primitive3DSequence(); - } - } - - Primitive3DSequence createHiddenGeometryPrimitives3D( - const ::std::vector< basegfx::B3DPolyPolygon >& r3DPolyPolygonVector, - const basegfx::B3DHomMatrix& rObjectTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::Sdr3DObjectAttribute& aSdr3DObjectAttribute) - { - // create hidden sub-geometry which can be used for HitTest - // and BoundRect calculations, but will not be visualized - const attribute::SdrFillAttribute aSimplifiedFillAttribute( - 0.0, - basegfx::BColor(), - attribute::FillGradientAttribute(), - attribute::FillHatchAttribute(), - attribute::SdrFillBitmapAttribute()); - - const Primitive3DReference aHidden( - new HiddenGeometryPrimitive3D( - create3DPolyPolygonFillPrimitives( - r3DPolyPolygonVector, - rObjectTransform, - rTextureSize, - aSdr3DObjectAttribute, - aSimplifiedFillAttribute, - attribute::FillGradientAttribute()))); - - return Primitive3DSequence(&aHidden, 1); - } - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/sdrextrudelathetools3d.cxx b/drawinglayer/source/primitive3d/sdrextrudelathetools3d.cxx deleted file mode 100644 index 8d52439781..0000000000 --- a/drawinglayer/source/primitive3d/sdrextrudelathetools3d.cxx +++ /dev/null @@ -1,994 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/sdrextrudelathetools3d.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/point/b3dpoint.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <basegfx/polygon/b3dpolygontools.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <basegfx/range/b3drange.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/geometry/viewinformation3d.hxx> -#include <numeric> - -////////////////////////////////////////////////////////////////////////////// -// decompositon helpers for extrude/lathe (rotation) objects - -namespace -{ - ////////////////////////////////////////////////////////////////////////////// - // common helpers - - basegfx::B2DPolyPolygon impScalePolyPolygonOnCenter( - const basegfx::B2DPolyPolygon& rSource, - double fScale) - { - basegfx::B2DPolyPolygon aRetval(rSource); - - if(!basegfx::fTools::equalZero(fScale)) - { - const basegfx::B2DRange aRange(basegfx::tools::getRange(rSource)); - const basegfx::B2DPoint aCenter(aRange.getCenter()); - basegfx::B2DHomMatrix aTrans; - - aTrans.translate(-aCenter.getX(), -aCenter.getY()); - aTrans.scale(fScale, fScale); - aTrans.translate(aCenter.getX(), aCenter.getY()); - aRetval.transform(aTrans); - } - - return aRetval; - } - - void impGetOuterPolyPolygon( - basegfx::B2DPolyPolygon& rPolygon, - basegfx::B2DPolyPolygon& rOuterPolyPolygon, - double fOffset, - bool bCharacterMode) - { - rOuterPolyPolygon = rPolygon; - - if(basegfx::fTools::more(fOffset, 0.0)) - { - if(bCharacterMode) - { - // grow the outside polygon and scale all polygons to original size. This is done - // to avoid a shrink which potentially would lead to self-intersections, but changes - // the original polygon -> not a precision step, so e.g. not usable for charts - const basegfx::B2DRange aRange(basegfx::tools::getRange(rPolygon)); - rPolygon = basegfx::tools::growInNormalDirection(rPolygon, fOffset); - const basegfx::B2DRange aGrownRange(basegfx::tools::getRange(rPolygon)); - const double fScaleX(basegfx::fTools::equalZero(aGrownRange.getWidth()) ? 1.0 : aRange.getWidth() / aGrownRange.getWidth()); - const double fScaleY(basegfx::fTools::equalZero(aGrownRange.getHeight())? 1.0 : aRange.getHeight() / aGrownRange.getHeight()); - basegfx::B2DHomMatrix aScaleTrans; - - aScaleTrans.translate(-aGrownRange.getMinX(), -aGrownRange.getMinY()); - aScaleTrans.scale(fScaleX, fScaleY); - aScaleTrans.translate(aRange.getMinX(), aRange.getMinY()); - rPolygon.transform(aScaleTrans); - rOuterPolyPolygon.transform(aScaleTrans); - } - else - { - // use more precision, shrink the outer polygons. Since this may lead to self-intersections, - // some kind of correction should be applied here after that step - rOuterPolyPolygon = basegfx::tools::growInNormalDirection(rPolygon, -fOffset); - basegfx::tools::correctGrowShrinkPolygonPair(rPolygon, rOuterPolyPolygon); - } - } - } - - void impAddInBetweenFill( - basegfx::B3DPolyPolygon& rTarget, - const basegfx::B3DPolyPolygon& rPolA, - const basegfx::B3DPolyPolygon& rPolB, - double fTexVerStart, - double fTexVerStop, - bool bCreateNormals, - bool bCreateTextureCoordinates) - { - OSL_ENSURE(rPolA.count() == rPolB.count(), "impAddInBetweenFill: unequally sized polygons (!)"); - const sal_uInt32 nPolygonCount(rPolA.count()); - - for(sal_uInt32 a(0L); a < nPolygonCount; a++) - { - const basegfx::B3DPolygon aSubA(rPolA.getB3DPolygon(a)); - const basegfx::B3DPolygon aSubB(rPolB.getB3DPolygon(a)); - OSL_ENSURE(aSubA.count() == aSubB.count(), "impAddInBetweenFill: unequally sized polygons (!)"); - const sal_uInt32 nPointCount(aSubA.count()); - - if(nPointCount) - { - const sal_uInt32 nEdgeCount(aSubA.isClosed() ? nPointCount : nPointCount - 1L); - double fTexHorMultiplicatorA(0.0), fTexHorMultiplicatorB(0.0); - double fPolygonPosA(0.0), fPolygonPosB(0.0); - - if(bCreateTextureCoordinates) - { - const double fPolygonLengthA(basegfx::tools::getLength(aSubA)); - fTexHorMultiplicatorA = basegfx::fTools::equalZero(fPolygonLengthA) ? 1.0 : 1.0 / fPolygonLengthA; - - const double fPolygonLengthB(basegfx::tools::getLength(aSubB)); - fTexHorMultiplicatorB = basegfx::fTools::equalZero(fPolygonLengthB) ? 1.0 : 1.0 / fPolygonLengthB; - } - - for(sal_uInt32 b(0L); b < nEdgeCount; b++) - { - const sal_uInt32 nIndexA(b); - const sal_uInt32 nIndexB((b + 1L) % nPointCount); - - const basegfx::B3DPoint aStartA(aSubA.getB3DPoint(nIndexA)); - const basegfx::B3DPoint aEndA(aSubA.getB3DPoint(nIndexB)); - const basegfx::B3DPoint aStartB(aSubB.getB3DPoint(nIndexA)); - const basegfx::B3DPoint aEndB(aSubB.getB3DPoint(nIndexB)); - - basegfx::B3DPolygon aNew; - aNew.setClosed(true); - - aNew.append(aStartA); - aNew.append(aStartB); - aNew.append(aEndB); - aNew.append(aEndA); - - if(bCreateNormals) - { - aNew.setNormal(0L, aSubA.getNormal(nIndexA)); - aNew.setNormal(1L, aSubB.getNormal(nIndexA)); - aNew.setNormal(2L, aSubB.getNormal(nIndexB)); - aNew.setNormal(3L, aSubA.getNormal(nIndexB)); - } - - if(bCreateTextureCoordinates) - { - const double fRelTexAL(fPolygonPosA * fTexHorMultiplicatorA); - const double fEdgeLengthA(basegfx::B3DVector(aEndA - aStartA).getLength()); - fPolygonPosA += fEdgeLengthA; - const double fRelTexAR(fPolygonPosA * fTexHorMultiplicatorA); - - const double fRelTexBL(fPolygonPosB * fTexHorMultiplicatorB); - const double fEdgeLengthB(basegfx::B3DVector(aEndB - aStartB).getLength()); - fPolygonPosB += fEdgeLengthB; - const double fRelTexBR(fPolygonPosB * fTexHorMultiplicatorB); - - aNew.setTextureCoordinate(0L, basegfx::B2DPoint(fRelTexAL, fTexVerStart)); - aNew.setTextureCoordinate(1L, basegfx::B2DPoint(fRelTexBL, fTexVerStop)); - aNew.setTextureCoordinate(2L, basegfx::B2DPoint(fRelTexBR, fTexVerStop)); - aNew.setTextureCoordinate(3L, basegfx::B2DPoint(fRelTexAR, fTexVerStart)); - } - - rTarget.append(aNew); - } - } - } - } - - void impSetNormal( - basegfx::B3DPolyPolygon& rCandidate, - const basegfx::B3DVector& rNormal) - { - for(sal_uInt32 a(0L); a < rCandidate.count(); a++) - { - basegfx::B3DPolygon aSub(rCandidate.getB3DPolygon(a)); - - for(sal_uInt32 b(0L); b < aSub.count(); b++) - { - aSub.setNormal(b, rNormal); - } - - rCandidate.setB3DPolygon(a, aSub); - } - } - - void impCreateInBetweenNormals( - basegfx::B3DPolyPolygon& rPolA, - basegfx::B3DPolyPolygon& rPolB, - bool bSmoothHorizontalNormals) - { - OSL_ENSURE(rPolA.count() == rPolB.count(), "sdrExtrudePrimitive3D: unequally sized polygons (!)"); - - for(sal_uInt32 a(0L); a < rPolA.count(); a++) - { - basegfx::B3DPolygon aSubA(rPolA.getB3DPolygon(a)); - basegfx::B3DPolygon aSubB(rPolB.getB3DPolygon(a)); - OSL_ENSURE(aSubA.count() == aSubB.count(), "sdrExtrudePrimitive3D: unequally sized polygons (!)"); - const sal_uInt32 nPointCount(aSubA.count()); - - if(nPointCount) - { - basegfx::B3DPoint aPrevA(aSubA.getB3DPoint(nPointCount - 1L)); - basegfx::B3DPoint aCurrA(aSubA.getB3DPoint(0L)); - const bool bClosed(aSubA.isClosed()); - - for(sal_uInt32 b(0L); b < nPointCount; b++) - { - const sal_uInt32 nIndNext((b + 1L) % nPointCount); - const basegfx::B3DPoint aNextA(aSubA.getB3DPoint(nIndNext)); - const basegfx::B3DPoint aCurrB(aSubB.getB3DPoint(b)); - - // vector to back - basegfx::B3DVector aDepth(aCurrB - aCurrA); - aDepth.normalize(); - - if(aDepth.equalZero()) - { - // no difference, try to get depth from next point - const basegfx::B3DPoint aNextB(aSubB.getB3DPoint(nIndNext)); - aDepth = aNextB - aNextA; - aDepth.normalize(); - } - - // vector to left (correct for non-closed lines) - const bool bFirstAndNotClosed(!bClosed && 0L == b); - basegfx::B3DVector aLeft(bFirstAndNotClosed ? aCurrA - aNextA : aPrevA - aCurrA); - aLeft.normalize(); - - // create left normal - const basegfx::B3DVector aNormalLeft(aDepth.getPerpendicular(aLeft)); - - if(bSmoothHorizontalNormals) - { - // vector to right (correct for non-closed lines) - const bool bLastAndNotClosed(!bClosed && b + 1L == nPointCount); - basegfx::B3DVector aRight(bLastAndNotClosed ? aCurrA - aPrevA : aNextA - aCurrA); - aRight.normalize(); - - // create right normal - const basegfx::B3DVector aNormalRight(aRight.getPerpendicular(aDepth)); - - // create smoothed in-between normal - basegfx::B3DVector aNewNormal(aNormalLeft + aNormalRight); - aNewNormal.normalize(); - - // set as new normal at polygons - aSubA.setNormal(b, aNewNormal); - aSubB.setNormal(b, aNewNormal); - } - else - { - // set aNormalLeft as new normal at polygons - aSubA.setNormal(b, aNormalLeft); - aSubB.setNormal(b, aNormalLeft); - } - - // prepare next step - aPrevA = aCurrA; - aCurrA = aNextA; - } - - rPolA.setB3DPolygon(a, aSubA); - rPolB.setB3DPolygon(a, aSubB); - } - } - } - - void impMixNormals( - basegfx::B3DPolyPolygon& rPolA, - const basegfx::B3DPolyPolygon& rPolB, - double fWeightA) - { - const double fWeightB(1.0 - fWeightA); - OSL_ENSURE(rPolA.count() == rPolB.count(), "sdrExtrudePrimitive3D: unequally sized polygons (!)"); - - for(sal_uInt32 a(0L); a < rPolA.count(); a++) - { - basegfx::B3DPolygon aSubA(rPolA.getB3DPolygon(a)); - const basegfx::B3DPolygon aSubB(rPolB.getB3DPolygon(a)); - OSL_ENSURE(aSubA.count() == aSubB.count(), "sdrExtrudePrimitive3D: unequally sized polygons (!)"); - const sal_uInt32 nPointCount(aSubA.count()); - - for(sal_uInt32 b(0L); b < nPointCount; b++) - { - const basegfx::B3DVector aVA(aSubA.getNormal(b) * fWeightA); - const basegfx::B3DVector aVB(aSubB.getNormal(b) * fWeightB); - basegfx::B3DVector aVNew(aVA + aVB); - aVNew.normalize(); - aSubA.setNormal(b, aVNew); - } - - rPolA.setB3DPolygon(a, aSubA); - } - } - - bool impHasCutWith(const basegfx::B2DPolygon& rPoly, const basegfx::B2DPoint& rStart, const basegfx::B2DPoint& rEnd) - { - // polygon is closed, one of the points is a member - const sal_uInt32 nPointCount(rPoly.count()); - - if(nPointCount) - { - basegfx::B2DPoint aCurrent(rPoly.getB2DPoint(0)); - const basegfx::B2DVector aVector(rEnd - rStart); - - for(sal_uInt32 a(0); a < nPointCount; a++) - { - const sal_uInt32 nNextIndex((a + 1) % nPointCount); - const basegfx::B2DPoint aNext(rPoly.getB2DPoint(nNextIndex)); - const basegfx::B2DVector aEdgeVector(aNext - aCurrent); - - if(basegfx::tools::findCut( - rStart, aVector, - aCurrent, aEdgeVector)) - { - return true; - } - - aCurrent = aNext; - } - } - - return false; - } -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - void createLatheSlices( - Slice3DVector& rSliceVector, - const basegfx::B2DPolyPolygon& rSource, - double fBackScale, - double fDiagonal, - double fRotation, - sal_uInt32 nSteps, - bool bCharacterMode, - bool bCloseFront, - bool bCloseBack) - { - if(basegfx::fTools::equalZero(fRotation) || 0L == nSteps) - { - // no rotation or no steps, just one plane - rSliceVector.push_back(Slice3D(rSource, basegfx::B3DHomMatrix())); - } - else - { - const bool bBackScale(!basegfx::fTools::equal(fBackScale, 1.0)); - const bool bClosedRotation(!bBackScale && basegfx::fTools::equal(fRotation, F_2PI)); - basegfx::B2DPolyPolygon aFront(rSource); - basegfx::B2DPolyPolygon aBack(rSource); - basegfx::B3DHomMatrix aTransformBack; - basegfx::B2DPolyPolygon aOuterBack; - - if(bClosedRotation) - { - bCloseFront = bCloseBack = false; - } - - if(bBackScale) - { - // avoid null zoom - if(basegfx::fTools::equalZero(fBackScale)) - { - fBackScale = 0.000001; - } - - // back is scaled compared to front, create scaled version - aBack = impScalePolyPolygonOnCenter(aBack, fBackScale); - } - - if(bCloseFront || bCloseBack) - { - const basegfx::B2DRange aBaseRange(basegfx::tools::getRange(aFront)); - const double fOuterLength(aBaseRange.getMaxX() * fRotation); - const double fInnerLength(aBaseRange.getMinX() * fRotation); - const double fAverageLength((fOuterLength + fInnerLength) * 0.5); - - if(bCloseFront) - { - const double fOffsetLen((fAverageLength / 12.0) * fDiagonal); - basegfx::B2DPolyPolygon aOuterFront; - impGetOuterPolyPolygon(aFront, aOuterFront, fOffsetLen, bCharacterMode); - basegfx::B3DHomMatrix aTransform; - aTransform.translate(0.0, 0.0, fOffsetLen); - rSliceVector.push_back(Slice3D(aOuterFront, aTransform, SLICETYPE3D_FRONTCAP)); - } - - if(bCloseBack) - { - const double fOffsetLen((fAverageLength / 12.0) * fDiagonal); - impGetOuterPolyPolygon(aBack, aOuterBack, fOffsetLen, bCharacterMode); - aTransformBack.translate(0.0, 0.0, -fOffsetLen); - aTransformBack.rotate(0.0, fRotation, 0.0); - } - } - - // add start polygon (a = 0L) - if(!bClosedRotation) - { - rSliceVector.push_back(Slice3D(aFront, basegfx::B3DHomMatrix())); - } - - // create segments (a + 1 .. nSteps) - const double fStepSize(1.0 / (double)nSteps); - - for(sal_uInt32 a(0L); a < nSteps; a++) - { - const double fStep((double)(a + 1L) * fStepSize); - basegfx::B2DPolyPolygon aNewPoly(bBackScale ? basegfx::tools::interpolate(aFront, aBack, fStep) : aFront); - basegfx::B3DHomMatrix aNewMat; - aNewMat.rotate(0.0, fRotation * fStep, 0.0); - rSliceVector.push_back(Slice3D(aNewPoly, aNewMat)); - } - - if(bCloseBack) - { - rSliceVector.push_back(Slice3D(aOuterBack, aTransformBack, SLICETYPE3D_BACKCAP)); - } - } - } - - void createExtrudeSlices( - Slice3DVector& rSliceVector, - const basegfx::B2DPolyPolygon& rSource, - double fBackScale, - double fDiagonal, - double fDepth, - bool bCharacterMode, - bool bCloseFront, - bool bCloseBack) - { - if(basegfx::fTools::equalZero(fDepth)) - { - // no depth, just one plane - rSliceVector.push_back(Slice3D(rSource, basegfx::B3DHomMatrix())); - } - else - { - // there is depth, create Polygons for front,back and their default depth positions - basegfx::B2DPolyPolygon aFront(rSource); - basegfx::B2DPolyPolygon aBack(rSource); - const bool bBackScale(!basegfx::fTools::equal(fBackScale, 1.0)); - double fZFront(fDepth); // default depth for aFront - double fZBack(0.0); // default depth for aBack - basegfx::B2DPolyPolygon aOuterBack; - - if(bBackScale) - { - // avoid null zoom - if(basegfx::fTools::equalZero(fBackScale)) - { - fBackScale = 0.000001; - } - - // aFront is scaled compared to aBack, create scaled version - aFront = impScalePolyPolygonOnCenter(aFront, fBackScale); - } - - if(bCloseFront) - { - const double fOffset(fDepth * fDiagonal * 0.5); - fZFront = fDepth - fOffset; - basegfx::B2DPolyPolygon aOuterFront; - impGetOuterPolyPolygon(aFront, aOuterFront, fOffset, bCharacterMode); - basegfx::B3DHomMatrix aTransformFront; - aTransformFront.translate(0.0, 0.0, fDepth); - rSliceVector.push_back(Slice3D(aOuterFront, aTransformFront, SLICETYPE3D_FRONTCAP)); - } - - if(bCloseBack) - { - const double fOffset(fDepth * fDiagonal * 0.5); - fZBack = fOffset; - impGetOuterPolyPolygon(aBack, aOuterBack, fOffset, bCharacterMode); - } - - // add front and back polygons at evtl. changed depths - { - basegfx::B3DHomMatrix aTransformA, aTransformB; - - aTransformA.translate(0.0, 0.0, fZFront); - rSliceVector.push_back(Slice3D(aFront, aTransformA)); - - aTransformB.translate(0.0, 0.0, fZBack); - rSliceVector.push_back(Slice3D(aBack, aTransformB)); - } - - if(bCloseBack) - { - rSliceVector.push_back(Slice3D(aOuterBack, basegfx::B3DHomMatrix(), SLICETYPE3D_BACKCAP)); - } - } - } - - basegfx::B3DPolyPolygon extractHorizontalLinesFromSlice(const Slice3DVector& rSliceVector, bool bCloseHorLines) - { - basegfx::B3DPolyPolygon aRetval; - const sal_uInt32 nNumSlices(rSliceVector.size()); - - if(nNumSlices) - { - const sal_uInt32 nSlideSubPolygonCount(rSliceVector[0].getB3DPolyPolygon().count()); - - for(sal_uInt32 b(0); b < nSlideSubPolygonCount; b++) - { - const sal_uInt32 nSubPolygonPointCount(rSliceVector[0].getB3DPolyPolygon().getB3DPolygon(b).count()); - - for(sal_uInt32 c(0); c < nSubPolygonPointCount; c++) - { - basegfx::B3DPolygon aNew; - - for(sal_uInt32 d(0); d < nNumSlices; d++) - { - OSL_ENSURE(nSlideSubPolygonCount == rSliceVector[d].getB3DPolyPolygon().count(), - "Slice PolyPolygon with different Polygon count (!)"); - OSL_ENSURE(nSubPolygonPointCount == rSliceVector[d].getB3DPolyPolygon().getB3DPolygon(b).count(), - "Slice Polygon with different point count (!)"); - aNew.append(rSliceVector[d].getB3DPolyPolygon().getB3DPolygon(b).getB3DPoint(c)); - } - - aNew.setClosed(bCloseHorLines); - aRetval.append(aNew); - } - } - } - - return aRetval; - } - - basegfx::B3DPolyPolygon extractVerticalLinesFromSlice(const Slice3DVector& rSliceVector) - { - basegfx::B3DPolyPolygon aRetval; - const sal_uInt32 nNumSlices(rSliceVector.size()); - - for(sal_uInt32 a(0L); a < nNumSlices; a++) - { - aRetval.append(rSliceVector[a].getB3DPolyPolygon()); - } - - return aRetval; - } - - void extractPlanesFromSlice( - ::std::vector< basegfx::B3DPolyPolygon >& rFill, - const Slice3DVector& rSliceVector, - bool bCreateNormals, - bool bSmoothHorizontalNormals, - bool bSmoothNormals, - bool bSmoothLids, - bool bClosed, - double fSmoothNormalsMix, - double fSmoothLidsMix, - bool bCreateTextureCoordinates, - const basegfx::B2DHomMatrix& rTexTransform) - { - const sal_uInt32 nNumSlices(rSliceVector.size()); - - if(nNumSlices) - { - // common parameters - const sal_uInt32 nLoopCount(bClosed ? nNumSlices : nNumSlices - 1L); - basegfx::B3DPolyPolygon aEdgeRounding; - sal_uInt32 a; - - // tetxture parameters - double fInvTexHeight(1.0); - double fTexHeightPos(0.0); - double fTexStart(0.0); - double fTexStop(1.0); - ::std::vector<double> aTexHeightArray; - basegfx::B3DRange aTexRangeFront; - basegfx::B3DRange aTexRangeBack; - - if(bCreateTextureCoordinates) - { - aTexRangeFront = basegfx::tools::getRange(rSliceVector[0L].getB3DPolyPolygon()); - aTexRangeBack = basegfx::tools::getRange(rSliceVector[nNumSlices - 1L].getB3DPolyPolygon()); - - if(aTexRangeBack.getDepth() > aTexRangeBack.getWidth()) - { - // last polygon is rotated so that depth is bigger than width, exchange X and Z - // for making applyDefaultTextureCoordinatesParallel use Z instead of X for - // horizontal texture coordinate - aTexRangeBack = basegfx::B3DRange( - aTexRangeBack.getMinZ(), aTexRangeBack.getMinY(), aTexRangeBack.getMinX(), - aTexRangeBack.getMaxZ(), aTexRangeBack.getMaxY(), aTexRangeBack.getMaxX()); - } - - basegfx::B3DPoint aCenter(basegfx::tools::getRange(rSliceVector[0L].getB3DPolyPolygon()).getCenter()); - - for(a = 0L; a < nLoopCount; a++) - { - const basegfx::B3DPoint aNextCenter(basegfx::tools::getRange(rSliceVector[(a + 1L) % nNumSlices].getB3DPolyPolygon()).getCenter()); - const double fLength(basegfx::B3DVector(aNextCenter - aCenter).getLength()); - aTexHeightArray.push_back(fLength); - aCenter = aNextCenter; - } - - const double fTexHeight(::std::accumulate(aTexHeightArray.begin(), aTexHeightArray.end(), 0.0)); - - if(!basegfx::fTools::equalZero(fTexHeight)) - { - fInvTexHeight = 1.0 / fTexHeight; - } - } - - if(nLoopCount) - { - for(a = 0L; a < nLoopCount; a++) - { - const Slice3D& rSliceA(rSliceVector[a]); - const Slice3D& rSliceB(rSliceVector[(a + 1L) % nNumSlices]); - const bool bAcceptPair(SLICETYPE3D_REGULAR == rSliceA.getSliceType() && SLICETYPE3D_REGULAR == rSliceB.getSliceType()); - basegfx::B3DPolyPolygon aPolA(rSliceA.getB3DPolyPolygon()); - basegfx::B3DPolyPolygon aPolB(rSliceB.getB3DPolyPolygon()); - - if(bAcceptPair) - { - if(bCreateNormals) - { - impCreateInBetweenNormals(aPolB, aPolA, bSmoothHorizontalNormals); - } - - { - const sal_uInt32 nIndPrev((a + nNumSlices - 1L) % nNumSlices); - const Slice3D& rSlicePrev(rSliceVector[nIndPrev]); - basegfx::B3DPolyPolygon aPrev(rSlicePrev.getB3DPolyPolygon()); - basegfx::B3DPolyPolygon aPolAA(rSliceA.getB3DPolyPolygon()); - - if(SLICETYPE3D_FRONTCAP == rSlicePrev.getSliceType()) - { - basegfx::B3DPolyPolygon aFront(rSlicePrev.getB3DPolyPolygon()); - const bool bHasSlant(aPolAA != aPrev); - - if(bCreateTextureCoordinates) - { - aFront = basegfx::tools::applyDefaultTextureCoordinatesParallel(aFront, aTexRangeFront); - } - - if(bCreateNormals) - { - basegfx::B3DVector aNormal(0.0, 0.0, -1.0); - - if(aFront.count()) - { - aNormal = -aFront.getB3DPolygon(0L).getNormal(); - } - - impSetNormal(aFront, aNormal); - - if(bHasSlant) - { - impCreateInBetweenNormals(aPolAA, aPrev, bSmoothHorizontalNormals); - - if(bSmoothNormals) - { - // smooth and copy - impMixNormals(aPolA, aPolAA, fSmoothNormalsMix); - aPolAA = aPolA; - } - else - { - // take over from surface - aPolAA = aPolA; - } - - if(bSmoothLids) - { - // smooth and copy - impMixNormals(aFront, aPrev, fSmoothLidsMix); - aPrev = aFront; - } - else - { - // take over from front - aPrev = aFront; - } - } - else - { - if(bSmoothNormals) - { - // smooth - impMixNormals(aPolA, aFront, fSmoothNormalsMix); - } - - if(bSmoothLids) - { - // smooth and copy - impMixNormals(aFront, aPolA, fSmoothLidsMix); - aPolA = aFront; - } - } - } - - if(bHasSlant) - { - if(bCreateTextureCoordinates) - { - fTexStart = fTexHeightPos * fInvTexHeight; - fTexStop = (fTexHeightPos - aTexHeightArray[(a + nLoopCount - 1L) % nLoopCount]) * fInvTexHeight; - } - - impAddInBetweenFill(aEdgeRounding, aPolAA, aPrev, fTexStart, fTexStop, bCreateNormals, bCreateTextureCoordinates); - } - - aFront.flip(); - rFill.push_back(aFront); - } - else - { - if(bCreateNormals && bSmoothNormals && (nIndPrev != a + 1L)) - { - impCreateInBetweenNormals(aPolAA, aPrev, bSmoothHorizontalNormals); - impMixNormals(aPolA, aPolAA, 0.5); - } - } - } - - { - const sal_uInt32 nIndNext((a + 2L) % nNumSlices); - const Slice3D& rSliceNext(rSliceVector[nIndNext]); - basegfx::B3DPolyPolygon aNext(rSliceNext.getB3DPolyPolygon()); - basegfx::B3DPolyPolygon aPolBB(rSliceB.getB3DPolyPolygon()); - - if(SLICETYPE3D_BACKCAP == rSliceNext.getSliceType()) - { - basegfx::B3DPolyPolygon aBack(rSliceNext.getB3DPolyPolygon()); - const bool bHasSlant(aPolBB != aNext); - - if(bCreateTextureCoordinates) - { - aBack = basegfx::tools::applyDefaultTextureCoordinatesParallel(aBack, aTexRangeBack); - } - - if(bCreateNormals) - { - const basegfx::B3DVector aNormal(aBack.count() ? aBack.getB3DPolygon(0L).getNormal() : basegfx::B3DVector(0.0, 0.0, 1.0)); - impSetNormal(aBack, aNormal); - - if(bHasSlant) - { - impCreateInBetweenNormals(aNext, aPolBB, bSmoothHorizontalNormals); - - if(bSmoothNormals) - { - // smooth and copy - impMixNormals(aPolB, aPolBB, fSmoothNormalsMix); - aPolBB = aPolB; - } - else - { - // take over from surface - aPolBB = aPolB; - } - - if(bSmoothLids) - { - // smooth and copy - impMixNormals(aBack, aNext, fSmoothLidsMix); - aNext = aBack; - } - else - { - // take over from back - aNext = aBack; - } - } - else - { - if(bSmoothNormals) - { - // smooth - impMixNormals(aPolB, aBack, fSmoothNormalsMix); - } - - if(bSmoothLids) - { - // smooth and copy - impMixNormals(aBack, aPolB, fSmoothLidsMix); - aPolB = aBack; - } - } - } - - if(bHasSlant) - { - if(bCreateTextureCoordinates) - { - fTexStart = (fTexHeightPos + aTexHeightArray[a] + aTexHeightArray[(a + 1L) % nLoopCount]) * fInvTexHeight; - fTexStop = (fTexHeightPos + aTexHeightArray[a]) * fInvTexHeight; - } - - impAddInBetweenFill(aEdgeRounding, aNext, aPolBB, fTexStart, fTexStop, bCreateNormals, bCreateTextureCoordinates); - } - - rFill.push_back(aBack); - } - else - { - if(bCreateNormals && bSmoothNormals && (nIndNext != a)) - { - impCreateInBetweenNormals(aNext, aPolBB, bSmoothHorizontalNormals); - impMixNormals(aPolB, aPolBB, 0.5); - } - } - } - - if(bCreateTextureCoordinates) - { - fTexStart = (fTexHeightPos + aTexHeightArray[a]) * fInvTexHeight; - fTexStop = fTexHeightPos * fInvTexHeight; - } - - impAddInBetweenFill(aEdgeRounding, aPolB, aPolA, fTexStart, fTexStop, bCreateNormals, bCreateTextureCoordinates); - } - - if(bCreateTextureCoordinates) - { - fTexHeightPos += aTexHeightArray[a]; - } - } - } - else - { - // no loop, but a single slice (1 == nNumSlices), create a filling from the single - // front plane - const Slice3D& rSlice(rSliceVector[0]); - basegfx::B3DPolyPolygon aFront(rSlice.getB3DPolyPolygon()); - - if(bCreateTextureCoordinates) - { - aFront = basegfx::tools::applyDefaultTextureCoordinatesParallel(aFront, aTexRangeFront); - } - - if(bCreateNormals) - { - basegfx::B3DVector aNormal(0.0, 0.0, -1.0); - - if(aFront.count()) - { - aNormal = -aFront.getB3DPolygon(0L).getNormal(); - } - - impSetNormal(aFront, aNormal); - } - - aFront.flip(); - rFill.push_back(aFront); - } - - if(bCreateTextureCoordinates) - { - aEdgeRounding.transformTextureCoordiantes(rTexTransform); - } - - for(a = 0L; a < aEdgeRounding.count(); a++) - { - rFill.push_back(basegfx::B3DPolyPolygon(aEdgeRounding.getB3DPolygon(a))); - } - } - } - - void createReducedOutlines( - const geometry::ViewInformation3D& rViewInformation, - const basegfx::B3DHomMatrix& rObjectTransform, - const basegfx::B3DPolygon& rLoopA, - const basegfx::B3DPolygon& rLoopB, - basegfx::B3DPolyPolygon& rTarget) - { - const sal_uInt32 nPointCount(rLoopA.count()); - - // with idetic polygons there are no outlines - if(rLoopA != rLoopB) - { - if(nPointCount && nPointCount == rLoopB.count()) - { - const basegfx::B3DHomMatrix aObjectTransform(rViewInformation.getObjectToView() * rObjectTransform); - const basegfx::B2DPolygon a2DLoopA(basegfx::tools::createB2DPolygonFromB3DPolygon(rLoopA, aObjectTransform)); - const basegfx::B2DPolygon a2DLoopB(basegfx::tools::createB2DPolygonFromB3DPolygon(rLoopB, aObjectTransform)); - const basegfx::B2DPoint a2DCenterA(a2DLoopA.getB2DRange().getCenter()); - const basegfx::B2DPoint a2DCenterB(a2DLoopB.getB2DRange().getCenter()); - - // without detectable Y-Axis there are no outlines - if(!a2DCenterA.equal(a2DCenterB)) - { - // search for outmost left and right inter-loop-edges which do not cut the loops - const basegfx::B2DPoint aCommonCenter(basegfx::average(a2DCenterA, a2DCenterB)); - const basegfx::B2DVector aAxisVector(a2DCenterA - a2DCenterB); - double fMaxLeft(0.0); - double fMaxRight(0.0); - sal_uInt32 nIndexLeft(0); - sal_uInt32 nIndexRight(0); - - for(sal_uInt32 a(0); a < nPointCount; a++) - { - const basegfx::B2DPoint aStart(a2DLoopA.getB2DPoint(a)); - const basegfx::B2DPoint aEnd(a2DLoopB.getB2DPoint(a)); - const basegfx::B2DPoint aMiddle(basegfx::average(aStart, aEnd)); - - if(!basegfx::tools::isInside(a2DLoopA, aMiddle)) - { - if(!basegfx::tools::isInside(a2DLoopB, aMiddle)) - { - if(!impHasCutWith(a2DLoopA, aStart, aEnd)) - { - if(!impHasCutWith(a2DLoopB, aStart, aEnd)) - { - const basegfx::B2DVector aCandidateVector(aMiddle - aCommonCenter); - const double fCross(aCandidateVector.cross(aAxisVector)); - const double fDistance(aCandidateVector.getLength()); - - if(fCross > 0.0) - { - if(fDistance > fMaxLeft) - { - fMaxLeft = fDistance; - nIndexLeft = a; - } - } - else if(fCross < 0.0) - { - if(fDistance > fMaxRight) - { - fMaxRight = fDistance; - nIndexRight = a; - } - } - } - } - } - } - } - - if(fMaxLeft != 0.0) - { - basegfx::B3DPolygon aToBeAdded; - aToBeAdded.append(rLoopA.getB3DPoint(nIndexLeft)); - aToBeAdded.append(rLoopB.getB3DPoint(nIndexLeft)); - rTarget.append(aToBeAdded); - } - - if(fMaxRight != 0.0) - { - basegfx::B3DPolygon aToBeAdded; - aToBeAdded.append(rLoopA.getB3DPoint(nIndexRight)); - aToBeAdded.append(rLoopB.getB3DPoint(nIndexRight)); - rTarget.append(aToBeAdded); - } - } - } - } - } - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/sdrextrudeprimitive3d.cxx b/drawinglayer/source/primitive3d/sdrextrudeprimitive3d.cxx deleted file mode 100644 index c1f958f4ef..0000000000 --- a/drawinglayer/source/primitive3d/sdrextrudeprimitive3d.cxx +++ /dev/null @@ -1,528 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/sdrextrudeprimitive3d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/primitive3d/sdrdecompositiontools3d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <drawinglayer/geometry/viewinformation3d.hxx> -#include <drawinglayer/attribute/sdrfillattribute.hxx> -#include <drawinglayer/attribute/sdrlineattribute.hxx> -#include <drawinglayer/attribute/sdrshadowattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence SdrExtrudePrimitive3D::create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const - { - Primitive3DSequence aRetval; - - // get slices - const Slice3DVector& rSliceVector = getSlices(); - - if(rSliceVector.size()) - { - sal_uInt32 a; - - // decide what to create - const ::com::sun::star::drawing::NormalsKind eNormalsKind(getSdr3DObjectAttribute().getNormalsKind()); - const bool bCreateNormals(::com::sun::star::drawing::NormalsKind_SPECIFIC == eNormalsKind); - const bool bCreateTextureCoordiantesX(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC == getSdr3DObjectAttribute().getTextureProjectionX()); - const bool bCreateTextureCoordiantesY(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC == getSdr3DObjectAttribute().getTextureProjectionY()); - basegfx::B2DHomMatrix aTexTransform; - - if(!getSdrLFSAttribute().getFill().isDefault() && (bCreateTextureCoordiantesX || bCreateTextureCoordiantesY)) - { - const basegfx::B2DPolygon aFirstPolygon(maCorrectedPolyPolygon.getB2DPolygon(0L)); - const double fFrontLength(basegfx::tools::getLength(aFirstPolygon)); - const double fFrontArea(basegfx::tools::getArea(aFirstPolygon)); - const double fSqrtFrontArea(sqrt(fFrontArea)); - double fRelativeTextureWidth = basegfx::fTools::equalZero(fSqrtFrontArea) ? 1.0 : fFrontLength / fSqrtFrontArea; - fRelativeTextureWidth = (double)((sal_uInt32)(fRelativeTextureWidth - 0.5)); - - if(fRelativeTextureWidth < 1.0) - { - fRelativeTextureWidth = 1.0; - } - - aTexTransform.translate(-0.5, -0.5); - aTexTransform.scale(-1.0, -1.0); - aTexTransform.translate(0.5, 0.5); - aTexTransform.scale(fRelativeTextureWidth, 1.0); - } - - // create geometry - ::std::vector< basegfx::B3DPolyPolygon > aFill; - extractPlanesFromSlice(aFill, rSliceVector, - bCreateNormals, getSmoothHorizontalNormals(), getSmoothNormals(), getSmoothLids(), false, - 0.5, 0.6, bCreateTextureCoordiantesX || bCreateTextureCoordiantesY, aTexTransform); - - // get full range - const basegfx::B3DRange aRange(getRangeFrom3DGeometry(aFill)); - - // normal creation - if(!getSdrLFSAttribute().getFill().isDefault()) - { - if(::com::sun::star::drawing::NormalsKind_SPHERE == eNormalsKind) - { - applyNormalsKindSphereTo3DGeometry(aFill, aRange); - } - else if(::com::sun::star::drawing::NormalsKind_FLAT == eNormalsKind) - { - applyNormalsKindFlatTo3DGeometry(aFill); - } - - if(getSdr3DObjectAttribute().getNormalsInvert()) - { - applyNormalsInvertTo3DGeometry(aFill); - } - } - - // texture coordinates - if(!getSdrLFSAttribute().getFill().isDefault()) - { - applyTextureTo3DGeometry( - getSdr3DObjectAttribute().getTextureProjectionX(), - getSdr3DObjectAttribute().getTextureProjectionY(), - aFill, - aRange, - getTextureSize()); - } - - if(!getSdrLFSAttribute().getFill().isDefault()) - { - // add fill - aRetval = create3DPolyPolygonFillPrimitives( - aFill, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute(), - getSdrLFSAttribute().getFill(), - getSdrLFSAttribute().getFillFloatTransGradient()); - } - else - { - // create simplified 3d hit test geometry - aRetval = createHiddenGeometryPrimitives3D( - aFill, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute()); - } - - // add line - if(!getSdrLFSAttribute().getLine().isDefault()) - { - if(getSdr3DObjectAttribute().getReducedLineGeometry()) - { - // create geometric outlines with reduced line geometry for chart. - const basegfx::B3DPolyPolygon aVerLine(extractVerticalLinesFromSlice(rSliceVector)); - const sal_uInt32 nCount(aVerLine.count()); - basegfx::B3DPolyPolygon aReducedLoops; - basegfx::B3DPolyPolygon aNewLineGeometry; - - // sort out doubles (front and back planes when no edge rounding is done). Since - // this is a line geometry merged from PolyPolygons, loop over all Polygons - for(a = 0; a < nCount; a++) - { - const sal_uInt32 nReducedCount(aReducedLoops.count()); - const basegfx::B3DPolygon aCandidate(aVerLine.getB3DPolygon(a)); - bool bAdd(true); - - if(nReducedCount) - { - for(sal_uInt32 b(0); bAdd && b < nReducedCount; b++) - { - if(aCandidate == aReducedLoops.getB3DPolygon(b)) - { - bAdd = false; - } - } - } - - if(bAdd) - { - aReducedLoops.append(aCandidate); - } - } - - // from here work with reduced loops and reduced count without changing them - const sal_uInt32 nReducedCount(aReducedLoops.count()); - - if(nReducedCount > 1) - { - for(sal_uInt32 b(1); b < nReducedCount; b++) - { - // get loop pair - const basegfx::B3DPolygon aCandA(aReducedLoops.getB3DPolygon(b - 1)); - const basegfx::B3DPolygon aCandB(aReducedLoops.getB3DPolygon(b)); - - // for each loop pair create the connection edges - createReducedOutlines( - rViewInformation, - getTransform(), - aCandA, - aCandB, - aNewLineGeometry); - } - } - - // add reduced loops themselves - aNewLineGeometry.append(aReducedLoops); - - // to create vertical edges at non-C1/C2 steady loops, use maCorrectedPolyPolygon - // directly since the 3D Polygons do not suport this. - // - // Unfortunately there is no bezier polygon provided by the chart module; one reason is - // that the API for extrude wants a 3D polygon geometry (for historical reasons, i guess) - // and those have no beziers. Another reason is that he chart module uses self-created - // stuff to create the 2D geometry (in ShapeFactory::createPieSegment), but this geometry - // does not contain bezier infos, either. The only way which is possible for now is to 'detect' - // candidates for vertical edges of pie segments by looking for the angles in the polygon. - // - // This is all not very well designed ATM. Ideally, the ReducedLineGeometry is responsible - // for creating the outer geometry edges (createReducedOutlines), but for special edges - // like the vertical ones for pie center and both start/end, the incarnation with the - // knowledge about that it needs to create those and IS a pie segment -> in this case, - // the chart itself. - const sal_uInt32 nPolyCount(maCorrectedPolyPolygon.count()); - - for(sal_uInt32 c(0); c < nPolyCount; c++) - { - const basegfx::B2DPolygon aCandidate(maCorrectedPolyPolygon.getB2DPolygon(c)); - const sal_uInt32 nPointCount(aCandidate.count()); - - if(nPointCount > 2) - { - sal_uInt32 nIndexA(nPointCount); - sal_uInt32 nIndexB(nPointCount); - sal_uInt32 nIndexC(nPointCount); - - for(sal_uInt32 d(0); d < nPointCount; d++) - { - const sal_uInt32 nPrevInd((d + nPointCount - 1) % nPointCount); - const sal_uInt32 nNextInd((d + 1) % nPointCount); - const basegfx::B2DPoint aPoint(aCandidate.getB2DPoint(d)); - const basegfx::B2DVector aPrev(aCandidate.getB2DPoint(nPrevInd) - aPoint); - const basegfx::B2DVector aNext(aCandidate.getB2DPoint(nNextInd) - aPoint); - const double fAngle(aPrev.angle(aNext)); - - // take each angle which deviates more than 10% from going straight as - // special edge. This will detect the two outer edges of pie segments, - // but not always the center one (think about a near 180 degree pie) - if(F_PI - fabs(fAngle) > F_PI * 0.1) - { - if(nPointCount == nIndexA) - { - nIndexA = d; - } - else if(nPointCount == nIndexB) - { - nIndexB = d; - } - else if(nPointCount == nIndexC) - { - nIndexC = d; - d = nPointCount; - } - } - } - - const bool bIndexAUsed(nIndexA != nPointCount); - const bool bIndexBUsed(nIndexB != nPointCount); - bool bIndexCUsed(nIndexC != nPointCount); - - if(bIndexCUsed) - { - // already three special edges found, so the center one was already detected - // and does not need to be searched - } - else if(bIndexAUsed && bIndexBUsed) - { - // outer edges detected (they are approx. 90 degrees), but center one not. - // Look with the knowledge that it's in-between the two found ones - if(((nIndexA + 2) % nPointCount) == nIndexB) - { - nIndexC = (nIndexA + 1) % nPointCount; - } - else if(((nIndexA + nPointCount - 2) % nPointCount) == nIndexB) - { - nIndexC = (nIndexA + nPointCount - 1) % nPointCount; - } - - bIndexCUsed = (nIndexC != nPointCount); - } - - if(bIndexAUsed) - { - const basegfx::B2DPoint aPoint(aCandidate.getB2DPoint(nIndexA)); - const basegfx::B3DPoint aStart(aPoint.getX(), aPoint.getY(), 0.0); - const basegfx::B3DPoint aEnd(aPoint.getX(), aPoint.getY(), getDepth()); - basegfx::B3DPolygon aToBeAdded; - - aToBeAdded.append(aStart); - aToBeAdded.append(aEnd); - aNewLineGeometry.append(aToBeAdded); - } - - if(bIndexBUsed) - { - const basegfx::B2DPoint aPoint(aCandidate.getB2DPoint(nIndexB)); - const basegfx::B3DPoint aStart(aPoint.getX(), aPoint.getY(), 0.0); - const basegfx::B3DPoint aEnd(aPoint.getX(), aPoint.getY(), getDepth()); - basegfx::B3DPolygon aToBeAdded; - - aToBeAdded.append(aStart); - aToBeAdded.append(aEnd); - aNewLineGeometry.append(aToBeAdded); - } - - if(bIndexCUsed) - { - const basegfx::B2DPoint aPoint(aCandidate.getB2DPoint(nIndexC)); - const basegfx::B3DPoint aStart(aPoint.getX(), aPoint.getY(), 0.0); - const basegfx::B3DPoint aEnd(aPoint.getX(), aPoint.getY(), getDepth()); - basegfx::B3DPolygon aToBeAdded; - - aToBeAdded.append(aStart); - aToBeAdded.append(aEnd); - aNewLineGeometry.append(aToBeAdded); - } - } - } - - // append loops themselves - aNewLineGeometry.append(aReducedLoops); - - if(aNewLineGeometry.count()) - { - const Primitive3DSequence aLines(create3DPolyPolygonLinePrimitives( - aNewLineGeometry, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aLines); - } - } - else - { - // extract line geometry from slices - const basegfx::B3DPolyPolygon aHorLine(extractHorizontalLinesFromSlice(rSliceVector, false)); - const basegfx::B3DPolyPolygon aVerLine(extractVerticalLinesFromSlice(rSliceVector)); - - // add horizontal lines - const Primitive3DSequence aHorLines(create3DPolyPolygonLinePrimitives( - aHorLine, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aHorLines); - - // add vertical lines - const Primitive3DSequence aVerLines(create3DPolyPolygonLinePrimitives( - aVerLine, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aVerLines); - } - } - - // add shadow - if(!getSdrLFSAttribute().getShadow().isDefault() && aRetval.hasElements()) - { - const Primitive3DSequence aShadow(createShadowPrimitive3D( - aRetval, getSdrLFSAttribute().getShadow(), getSdr3DObjectAttribute().getShadow3D())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aShadow); - } - } - - return aRetval; - } - - void SdrExtrudePrimitive3D::impCreateSlices() - { - // prepare the polygon. No double points, correct orientations and a correct - // outmost polygon are needed - maCorrectedPolyPolygon = getPolyPolygon(); - maCorrectedPolyPolygon.removeDoublePoints(); - maCorrectedPolyPolygon = basegfx::tools::correctOrientations(maCorrectedPolyPolygon); - maCorrectedPolyPolygon = basegfx::tools::correctOutmostPolygon(maCorrectedPolyPolygon); - - // prepare slices as geometry - createExtrudeSlices(maSlices, maCorrectedPolyPolygon, getBackScale(), getDiagonal(), getDepth(), getCharacterMode(), getCloseFront(), getCloseBack()); - } - - const Slice3DVector& SdrExtrudePrimitive3D::getSlices() const - { - // This can be made dependent of getSdrLFSAttribute().getFill() and getSdrLFSAttribute().getLine() - // again when no longer geometry is needed for non-visible 3D objects as it is now for chart - if(getPolyPolygon().count() && !maSlices.size()) - { - ::osl::Mutex m_mutex; - const_cast< SdrExtrudePrimitive3D& >(*this).impCreateSlices(); - } - - return maSlices; - } - - SdrExtrudePrimitive3D::SdrExtrudePrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute, - const basegfx::B2DPolyPolygon& rPolyPolygon, - double fDepth, - double fDiagonal, - double fBackScale, - bool bSmoothNormals, - bool bSmoothHorizontalNormals, - bool bSmoothLids, - bool bCharacterMode, - bool bCloseFront, - bool bCloseBack) - : SdrPrimitive3D(rTransform, rTextureSize, rSdrLFSAttribute, rSdr3DObjectAttribute), - maCorrectedPolyPolygon(), - maSlices(), - maPolyPolygon(rPolyPolygon), - mfDepth(fDepth), - mfDiagonal(fDiagonal), - mfBackScale(fBackScale), - mpLastRLGViewInformation(0), - mbSmoothNormals(bSmoothNormals), - mbSmoothHorizontalNormals(bSmoothHorizontalNormals), - mbSmoothLids(bSmoothLids), - mbCharacterMode(bCharacterMode), - mbCloseFront(bCloseFront), - mbCloseBack(bCloseBack) - { - // make sure depth is positive - if(basegfx::fTools::lessOrEqual(getDepth(), 0.0)) - { - mfDepth = 0.0; - } - - // make sure the percentage value getDiagonal() is between 0.0 and 1.0 - if(basegfx::fTools::lessOrEqual(getDiagonal(), 0.0)) - { - mfDiagonal = 0.0; - } - else if(basegfx::fTools::moreOrEqual(getDiagonal(), 1.0)) - { - mfDiagonal = 1.0; - } - - // no close front/back when polygon is not closed - if(getPolyPolygon().count() && !getPolyPolygon().getB2DPolygon(0L).isClosed()) - { - mbCloseFront = mbCloseBack = false; - } - - // no edge rounding when not closing - if(!getCloseFront() && !getCloseBack()) - { - mfDiagonal = 0.0; - } - } - - SdrExtrudePrimitive3D::~SdrExtrudePrimitive3D() - { - if(mpLastRLGViewInformation) - { - delete mpLastRLGViewInformation; - } - } - - bool SdrExtrudePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(SdrPrimitive3D::operator==(rPrimitive)) - { - const SdrExtrudePrimitive3D& rCompare = static_cast< const SdrExtrudePrimitive3D& >(rPrimitive); - - return (getPolyPolygon() == rCompare.getPolyPolygon() - && getDepth() == rCompare.getDepth() - && getDiagonal() == rCompare.getDiagonal() - && getBackScale() == rCompare.getBackScale() - && getSmoothNormals() == rCompare.getSmoothNormals() - && getSmoothHorizontalNormals() == rCompare.getSmoothHorizontalNormals() - && getSmoothLids() == rCompare.getSmoothLids() - && getCharacterMode() == rCompare.getCharacterMode() - && getCloseFront() == rCompare.getCloseFront() - && getCloseBack() == rCompare.getCloseBack()); - } - - return false; - } - - basegfx::B3DRange SdrExtrudePrimitive3D::getB3DRange(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - // use defaut from sdrPrimitive3D which uses transformation expanded by line width/2 - // The parent implementation which uses the ranges of the decomposition would be more - // corrcet, but for historical reasons it is necessary to do the old method: To get - // the range of the non-transformed geometry and transform it then. This leads to different - // ranges where the new method is more correct, but the need to keep the old behaviour - // has priority here. - return get3DRangeFromSlices(getSlices()); - } - - Primitive3DSequence SdrExtrudePrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const - { - if(getSdr3DObjectAttribute().getReducedLineGeometry()) - { - if(!mpLastRLGViewInformation || - (getBuffered3DDecomposition().hasElements() - && *mpLastRLGViewInformation != rViewInformation)) - { - // conditions of last local decomposition with reduced lines have changed. Remember - // new one and clear current decompositiopn - ::osl::Mutex m_mutex; - SdrExtrudePrimitive3D* pThat = const_cast< SdrExtrudePrimitive3D* >(this); - pThat->setBuffered3DDecomposition(Primitive3DSequence()); - delete pThat->mpLastRLGViewInformation; - pThat->mpLastRLGViewInformation = new geometry::ViewInformation3D(rViewInformation); - } - } - - // no test for buffering needed, call parent - return SdrPrimitive3D::get3DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(SdrExtrudePrimitive3D, PRIMITIVE3D_ID_SDREXTRUDEPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/sdrlatheprimitive3d.cxx b/drawinglayer/source/primitive3d/sdrlatheprimitive3d.cxx deleted file mode 100644 index dcb5409ae9..0000000000 --- a/drawinglayer/source/primitive3d/sdrlatheprimitive3d.cxx +++ /dev/null @@ -1,390 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/sdrlatheprimitive3d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/primitive3d/sdrdecompositiontools3d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <drawinglayer/geometry/viewinformation3d.hxx> -#include <drawinglayer/attribute/sdrfillattribute.hxx> -#include <drawinglayer/attribute/sdrlineattribute.hxx> -#include <drawinglayer/attribute/sdrshadowattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence SdrLathePrimitive3D::create3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const - { - Primitive3DSequence aRetval; - - // get slices - const Slice3DVector& rSliceVector = getSlices(); - - if(rSliceVector.size()) - { - const bool bBackScale(!basegfx::fTools::equal(getBackScale(), 1.0)); - const bool bClosedRotation(!bBackScale && getHorizontalSegments() && basegfx::fTools::equal(getRotation(), F_2PI)); - sal_uInt32 a; - - // decide what to create - const ::com::sun::star::drawing::NormalsKind eNormalsKind(getSdr3DObjectAttribute().getNormalsKind()); - const bool bCreateNormals(::com::sun::star::drawing::NormalsKind_SPECIFIC == eNormalsKind); - const bool bCreateTextureCoordiantesX(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC == getSdr3DObjectAttribute().getTextureProjectionX()); - const bool bCreateTextureCoordiantesY(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC == getSdr3DObjectAttribute().getTextureProjectionY()); - basegfx::B2DHomMatrix aTexTransform; - - if(!getSdrLFSAttribute().getFill().isDefault() - && (bCreateTextureCoordiantesX || bCreateTextureCoordiantesY)) - { - aTexTransform.set(0, 0, 0.0); - aTexTransform.set(0, 1, 1.0); - aTexTransform.set(1, 0, 1.0); - aTexTransform.set(1, 1, 0.0); - - aTexTransform.translate(0.0, -0.5); - aTexTransform.scale(1.0, -1.0); - aTexTransform.translate(0.0, 0.5); - } - - // create geometry - ::std::vector< basegfx::B3DPolyPolygon > aFill; - extractPlanesFromSlice(aFill, rSliceVector, - bCreateNormals, getSmoothHorizontalNormals(), getSmoothNormals(), getSmoothLids(), bClosedRotation, - 0.85, 0.6, bCreateTextureCoordiantesX || bCreateTextureCoordiantesY, aTexTransform); - - // get full range - const basegfx::B3DRange aRange(getRangeFrom3DGeometry(aFill)); - - // normal creation - if(!getSdrLFSAttribute().getFill().isDefault()) - { - if(::com::sun::star::drawing::NormalsKind_SPHERE == eNormalsKind) - { - applyNormalsKindSphereTo3DGeometry(aFill, aRange); - } - else if(::com::sun::star::drawing::NormalsKind_FLAT == eNormalsKind) - { - applyNormalsKindFlatTo3DGeometry(aFill); - } - - if(getSdr3DObjectAttribute().getNormalsInvert()) - { - applyNormalsInvertTo3DGeometry(aFill); - } - } - - // texture coordinates - if(!getSdrLFSAttribute().getFill().isDefault()) - { - applyTextureTo3DGeometry( - getSdr3DObjectAttribute().getTextureProjectionX(), - getSdr3DObjectAttribute().getTextureProjectionY(), - aFill, - aRange, - getTextureSize()); - } - - if(!getSdrLFSAttribute().getFill().isDefault()) - { - // add fill - aRetval = create3DPolyPolygonFillPrimitives( - aFill, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute(), - getSdrLFSAttribute().getFill(), - getSdrLFSAttribute().getFillFloatTransGradient()); - } - else - { - // create simplified 3d hit test geometry - aRetval = createHiddenGeometryPrimitives3D( - aFill, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute()); - } - - // add line - if(!getSdrLFSAttribute().getLine().isDefault()) - { - if(getSdr3DObjectAttribute().getReducedLineGeometry()) - { - // create geometric outlines with reduced line geometry for chart - const basegfx::B3DPolyPolygon aHorLine(extractHorizontalLinesFromSlice(rSliceVector, bClosedRotation)); - const sal_uInt32 nCount(aHorLine.count()); - basegfx::B3DPolyPolygon aNewLineGeometry; - - for(a = 1; a < nCount; a++) - { - // for each loop pair create the connection edges - createReducedOutlines( - rViewInformation, - getTransform(), - aHorLine.getB3DPolygon(a - 1), - aHorLine.getB3DPolygon(a), - aNewLineGeometry); - } - - for(a = 0; a < nCount; a++) - { - // filter hor lines for empty loops (those who have their defining point on the Y-Axis) - basegfx::B3DPolygon aCandidate(aHorLine.getB3DPolygon(a)); - aCandidate.removeDoublePoints(); - - if(aCandidate.count()) - { - aNewLineGeometry.append(aCandidate); - } - } - - if(aNewLineGeometry.count()) - { - const Primitive3DSequence aLines(create3DPolyPolygonLinePrimitives( - aNewLineGeometry, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aLines); - } - } - else - { - // extract line geometry from slices - const basegfx::B3DPolyPolygon aHorLine(extractHorizontalLinesFromSlice(rSliceVector, bClosedRotation)); - const basegfx::B3DPolyPolygon aVerLine(extractVerticalLinesFromSlice(rSliceVector)); - - // add horizontal lines - const Primitive3DSequence aHorLines(create3DPolyPolygonLinePrimitives( - aHorLine, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aHorLines); - - // add vertical lines - const Primitive3DSequence aVerLines(create3DPolyPolygonLinePrimitives( - aVerLine, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aVerLines); - } - } - - // add shadow - if(!getSdrLFSAttribute().getShadow().isDefault() - && aRetval.hasElements()) - { - const Primitive3DSequence aShadow(createShadowPrimitive3D( - aRetval, getSdrLFSAttribute().getShadow(), getSdr3DObjectAttribute().getShadow3D())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aShadow); - } - } - - return aRetval; - } - - void SdrLathePrimitive3D::impCreateSlices() - { - // prepare the polygon. No double points, correct orientations and a correct - // outmost polygon are needed - maCorrectedPolyPolygon = basegfx::tools::adaptiveSubdivideByAngle(getPolyPolygon()); - maCorrectedPolyPolygon.removeDoublePoints(); - maCorrectedPolyPolygon = basegfx::tools::correctOrientations(maCorrectedPolyPolygon); - maCorrectedPolyPolygon = basegfx::tools::correctOutmostPolygon(maCorrectedPolyPolygon); - - // check edge count of first sub-polygon. If different, reSegment polyPolygon. This ensures - // that for polyPolygons, the subPolys 1..n only get reSegmented when polygon 0L is different - // at all (and not always) - const basegfx::B2DPolygon aSubCandidate(maCorrectedPolyPolygon.getB2DPolygon(0)); - const sal_uInt32 nSubEdgeCount(aSubCandidate.isClosed() ? aSubCandidate.count() : (aSubCandidate.count() ? aSubCandidate.count() - 1L : 0L)); - - if(nSubEdgeCount != getVerticalSegments()) - { - maCorrectedPolyPolygon = basegfx::tools::reSegmentPolyPolygon(maCorrectedPolyPolygon, getVerticalSegments()); - } - - // prepare slices as geometry - createLatheSlices(maSlices, maCorrectedPolyPolygon, getBackScale(), getDiagonal(), getRotation(), getHorizontalSegments(), getCharacterMode(), getCloseFront(), getCloseBack()); - } - - const Slice3DVector& SdrLathePrimitive3D::getSlices() const - { - // This can be made dependent of getSdrLFSAttribute().getFill() and getSdrLFSAttribute().getLine() - // again when no longer geometry is needed for non-visible 3D objects as it is now for chart - if(getPolyPolygon().count() && !maSlices.size()) - { - ::osl::Mutex m_mutex; - const_cast< SdrLathePrimitive3D& >(*this).impCreateSlices(); - } - - return maSlices; - } - - SdrLathePrimitive3D::SdrLathePrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute, - const basegfx::B2DPolyPolygon& rPolyPolygon, - sal_uInt32 nHorizontalSegments, - sal_uInt32 nVerticalSegments, - double fDiagonal, - double fBackScale, - double fRotation, - bool bSmoothNormals, - bool bSmoothHorizontalNormals, - bool bSmoothLids, - bool bCharacterMode, - bool bCloseFront, - bool bCloseBack) - : SdrPrimitive3D(rTransform, rTextureSize, rSdrLFSAttribute, rSdr3DObjectAttribute), - maCorrectedPolyPolygon(), - maSlices(), - maPolyPolygon(rPolyPolygon), - mnHorizontalSegments(nHorizontalSegments), - mnVerticalSegments(nVerticalSegments), - mfDiagonal(fDiagonal), - mfBackScale(fBackScale), - mfRotation(fRotation), - mpLastRLGViewInformation(0), - mbSmoothNormals(bSmoothNormals), - mbSmoothHorizontalNormals(bSmoothHorizontalNormals), - mbSmoothLids(bSmoothLids), - mbCharacterMode(bCharacterMode), - mbCloseFront(bCloseFront), - mbCloseBack(bCloseBack) - { - // make sure Rotation is positive - if(basegfx::fTools::lessOrEqual(getRotation(), 0.0)) - { - mfRotation = 0.0; - } - - // make sure the percentage value getDiagonal() is between 0.0 and 1.0 - if(basegfx::fTools::lessOrEqual(getDiagonal(), 0.0)) - { - mfDiagonal = 0.0; - } - else if(basegfx::fTools::moreOrEqual(getDiagonal(), 1.0)) - { - mfDiagonal = 1.0; - } - - // no close front/back when polygon is not closed - if(getPolyPolygon().count() && !getPolyPolygon().getB2DPolygon(0L).isClosed()) - { - mbCloseFront = mbCloseBack = false; - } - - // no edge rounding when not closing - if(!getCloseFront() && !getCloseBack()) - { - mfDiagonal = 0.0; - } - } - - SdrLathePrimitive3D::~SdrLathePrimitive3D() - { - if(mpLastRLGViewInformation) - { - delete mpLastRLGViewInformation; - } - } - - bool SdrLathePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(SdrPrimitive3D::operator==(rPrimitive)) - { - const SdrLathePrimitive3D& rCompare = static_cast< const SdrLathePrimitive3D& >(rPrimitive); - - return (getPolyPolygon() == rCompare.getPolyPolygon() - && getHorizontalSegments() == rCompare.getHorizontalSegments() - && getVerticalSegments() == rCompare.getVerticalSegments() - && getDiagonal() == rCompare.getDiagonal() - && getBackScale() == rCompare.getBackScale() - && getRotation() == rCompare.getRotation() - && getSmoothNormals() == rCompare.getSmoothNormals() - && getSmoothHorizontalNormals() == rCompare.getSmoothHorizontalNormals() - && getSmoothLids() == rCompare.getSmoothLids() - && getCharacterMode() == rCompare.getCharacterMode() - && getCloseFront() == rCompare.getCloseFront() - && getCloseBack() == rCompare.getCloseBack()); - } - - return false; - } - - basegfx::B3DRange SdrLathePrimitive3D::getB3DRange(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - // use defaut from sdrPrimitive3D which uses transformation expanded by line width/2 - // The parent implementation which uses the ranges of the decomposition would be more - // corrcet, but for historical reasons it is necessary to do the old method: To get - // the range of the non-transformed geometry and transform it then. This leads to different - // ranges where the new method is more correct, but the need to keep the old behaviour - // has priority here. - return get3DRangeFromSlices(getSlices()); - } - - Primitive3DSequence SdrLathePrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const - { - if(getSdr3DObjectAttribute().getReducedLineGeometry()) - { - if(!mpLastRLGViewInformation || - (getBuffered3DDecomposition().hasElements() - && *mpLastRLGViewInformation != rViewInformation)) - { - // conditions of last local decomposition with reduced lines have changed. Remember - // new one and clear current decompositiopn - ::osl::Mutex m_mutex; - SdrLathePrimitive3D* pThat = const_cast< SdrLathePrimitive3D* >(this); - pThat->setBuffered3DDecomposition(Primitive3DSequence()); - delete pThat->mpLastRLGViewInformation; - pThat->mpLastRLGViewInformation = new geometry::ViewInformation3D(rViewInformation); - } - } - - // no test for buffering needed, call parent - return SdrPrimitive3D::get3DDecomposition(rViewInformation); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(SdrLathePrimitive3D, PRIMITIVE3D_ID_SDRLATHEPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/sdrpolypolygonprimitive3d.cxx b/drawinglayer/source/primitive3d/sdrpolypolygonprimitive3d.cxx deleted file mode 100644 index 46b3225c29..0000000000 --- a/drawinglayer/source/primitive3d/sdrpolypolygonprimitive3d.cxx +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/sdrpolypolygonprimitive3d.hxx> -#include <drawinglayer/primitive3d/sdrdecompositiontools3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/attribute/sdrfillattribute.hxx> -#include <drawinglayer/attribute/sdrlineattribute.hxx> -#include <drawinglayer/attribute/sdrshadowattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence SdrPolyPolygonPrimitive3D::create3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - Primitive3DSequence aRetval; - - if(getPolyPolygon3D().count()) - { - ::std::vector< basegfx::B3DPolyPolygon > aFill; - aFill.push_back(getPolyPolygon3D()); - - // get full range - const basegfx::B3DRange aRange(getRangeFrom3DGeometry(aFill)); - - // #i98295# normal creation - if(!getSdrLFSAttribute().getFill().isDefault()) - { - if(::com::sun::star::drawing::NormalsKind_SPHERE == getSdr3DObjectAttribute().getNormalsKind()) - { - applyNormalsKindSphereTo3DGeometry(aFill, aRange); - } - else if(::com::sun::star::drawing::NormalsKind_FLAT == getSdr3DObjectAttribute().getNormalsKind()) - { - applyNormalsKindFlatTo3DGeometry(aFill); - } - - if(getSdr3DObjectAttribute().getNormalsInvert()) - { - applyNormalsInvertTo3DGeometry(aFill); - } - } - - // #i98314# texture coordinates - if(!getSdrLFSAttribute().getFill().isDefault()) - { - applyTextureTo3DGeometry( - getSdr3DObjectAttribute().getTextureProjectionX(), - getSdr3DObjectAttribute().getTextureProjectionY(), - aFill, - aRange, - getTextureSize()); - } - - if(!getSdrLFSAttribute().getFill().isDefault()) - { - // add fill - aRetval = create3DPolyPolygonFillPrimitives( - aFill, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute(), - getSdrLFSAttribute().getFill(), - getSdrLFSAttribute().getFillFloatTransGradient()); - } - else - { - // create simplified 3d hit test geometry - aRetval = createHiddenGeometryPrimitives3D( - aFill, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute()); - } - - // add line - if(!getSdrLFSAttribute().getLine().isDefault()) - { - basegfx::B3DPolyPolygon aLine(getPolyPolygon3D()); - aLine.clearNormals(); - aLine.clearTextureCoordinates(); - const Primitive3DSequence aLines(create3DPolyPolygonLinePrimitives( - aLine, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aLines); - } - - // add shadow - if(!getSdrLFSAttribute().getShadow().isDefault() - && aRetval.hasElements()) - { - const Primitive3DSequence aShadow(createShadowPrimitive3D( - aRetval, getSdrLFSAttribute().getShadow(), getSdr3DObjectAttribute().getShadow3D())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aShadow); - } - } - - return aRetval; - } - - SdrPolyPolygonPrimitive3D::SdrPolyPolygonPrimitive3D( - const basegfx::B3DPolyPolygon& rPolyPolygon3D, - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute) - : SdrPrimitive3D(rTransform, rTextureSize, rSdrLFSAttribute, rSdr3DObjectAttribute), - maPolyPolygon3D(rPolyPolygon3D) - { - } - - bool SdrPolyPolygonPrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(SdrPrimitive3D::operator==(rPrimitive)) - { - const SdrPolyPolygonPrimitive3D& rCompare = static_cast< const SdrPolyPolygonPrimitive3D& >(rPrimitive); - - return (getPolyPolygon3D() == rCompare.getPolyPolygon3D()); - } - - return false; - } - - basegfx::B3DRange SdrPolyPolygonPrimitive3D::getB3DRange(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - // added this implementation to make sure that non-visible objects of this - // kind will deliver their expansion. If not implemented, it would never deliver - // the used space for non-visible objects since the decomposition for that - // case will be empty (what is correct). To support chart ATM which relies on - // non-visible objects occupying space in 3D, this method was added - basegfx::B3DRange aRetval; - - if(getPolyPolygon3D().count()) - { - aRetval = basegfx::tools::getRange(getPolyPolygon3D()); - aRetval.transform(getTransform()); - - if(!getSdrLFSAttribute().getLine().isDefault()) - { - const attribute::SdrLineAttribute& rLine = getSdrLFSAttribute().getLine(); - - if(!rLine.isDefault() && !basegfx::fTools::equalZero(rLine.getWidth())) - { - // expand by half LineWidth as tube radius - aRetval.grow(rLine.getWidth() / 2.0); - } - } - } - - return aRetval; - } - - // provide unique ID - ImplPrimitrive3DIDBlock(SdrPolyPolygonPrimitive3D, PRIMITIVE3D_ID_SDRPOLYPOLYGONPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/sdrprimitive3d.cxx b/drawinglayer/source/primitive3d/sdrprimitive3d.cxx deleted file mode 100644 index 19f436da86..0000000000 --- a/drawinglayer/source/primitive3d/sdrprimitive3d.cxx +++ /dev/null @@ -1,128 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/sdrprimitive3d.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/primitive3d/sdrdecompositiontools3d.hxx> -#include <drawinglayer/attribute/sdrlineattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - basegfx::B3DRange SdrPrimitive3D::getStandard3DRange() const - { - basegfx::B3DRange aUnitRange(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); - aUnitRange.transform(getTransform()); - - if(!getSdrLFSAttribute().getLine().isDefault()) - { - const attribute::SdrLineAttribute& rLine = getSdrLFSAttribute().getLine(); - - if(!rLine.isDefault() && !basegfx::fTools::equalZero(rLine.getWidth())) - { - // expand by hald LineWidth as tube radius - aUnitRange.grow(rLine.getWidth() / 2.0); - } - } - - return aUnitRange; - } - - basegfx::B3DRange SdrPrimitive3D::get3DRangeFromSlices(const Slice3DVector& rSlices) const - { - basegfx::B3DRange aRetval; - - if(rSlices.size()) - { - for(sal_uInt32 a(0L); a < rSlices.size(); a++) - { - aRetval.expand(basegfx::tools::getRange(rSlices[a].getB3DPolyPolygon())); - } - - aRetval.transform(getTransform()); - - if(!getSdrLFSAttribute().getLine().isDefault()) - { - const attribute::SdrLineAttribute& rLine = getSdrLFSAttribute().getLine(); - - if(!rLine.isDefault() && !basegfx::fTools::equalZero(rLine.getWidth())) - { - // expand by half LineWidth as tube radius - aRetval.grow(rLine.getWidth() / 2.0); - } - } - } - - return aRetval; - } - - SdrPrimitive3D::SdrPrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute) - : BufferedDecompositionPrimitive3D(), - maTransform(rTransform), - maTextureSize(rTextureSize), - maSdrLFSAttribute(rSdrLFSAttribute), - maSdr3DObjectAttribute(rSdr3DObjectAttribute) - { - } - - bool SdrPrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(BufferedDecompositionPrimitive3D::operator==(rPrimitive)) - { - const SdrPrimitive3D& rCompare = static_cast< const SdrPrimitive3D& >(rPrimitive); - - return (getTransform() == rCompare.getTransform() - && getTextureSize() == rCompare.getTextureSize() - && getSdrLFSAttribute() == rCompare.getSdrLFSAttribute() - && getSdr3DObjectAttribute() == rCompare.getSdr3DObjectAttribute()); - } - - return false; - } - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/sdrsphereprimitive3d.cxx b/drawinglayer/source/primitive3d/sdrsphereprimitive3d.cxx deleted file mode 100644 index b69bde3e5a..0000000000 --- a/drawinglayer/source/primitive3d/sdrsphereprimitive3d.cxx +++ /dev/null @@ -1,227 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/sdrsphereprimitive3d.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <drawinglayer/primitive3d/sdrdecompositiontools3d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <drawinglayer/attribute/sdrfillattribute.hxx> -#include <drawinglayer/attribute/sdrlineattribute.hxx> -#include <drawinglayer/attribute/sdrshadowattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - Primitive3DSequence SdrSpherePrimitive3D::create3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - Primitive3DSequence aRetval; - const basegfx::B3DRange aUnitRange(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); - const bool bCreateNormals(::com::sun::star::drawing::NormalsKind_SPECIFIC == getSdr3DObjectAttribute().getNormalsKind() - || ::com::sun::star::drawing::NormalsKind_SPHERE == getSdr3DObjectAttribute().getNormalsKind()); - - // create unit geometry - basegfx::B3DPolyPolygon aFill(basegfx::tools::createSphereFillPolyPolygonFromB3DRange(aUnitRange, - getHorizontalSegments(), getVerticalSegments(), bCreateNormals)); - - // normal inversion - if(!getSdrLFSAttribute().getFill().isDefault() - && bCreateNormals - && getSdr3DObjectAttribute().getNormalsInvert() - && aFill.areNormalsUsed()) - { - // invert normals - aFill = basegfx::tools::invertNormals(aFill); - } - - // texture coordinates - if(!getSdrLFSAttribute().getFill().isDefault()) - { - // handle texture coordinates X - const bool bParallelX(::com::sun::star::drawing::TextureProjectionMode_PARALLEL == getSdr3DObjectAttribute().getTextureProjectionX()); - const bool bObjectSpecificX(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC == getSdr3DObjectAttribute().getTextureProjectionX()); - const bool bSphereX(::com::sun::star::drawing::TextureProjectionMode_SPHERE == getSdr3DObjectAttribute().getTextureProjectionX()); - - // handle texture coordinates Y - const bool bParallelY(::com::sun::star::drawing::TextureProjectionMode_PARALLEL == getSdr3DObjectAttribute().getTextureProjectionY()); - const bool bObjectSpecificY(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC == getSdr3DObjectAttribute().getTextureProjectionY()); - const bool bSphereY(::com::sun::star::drawing::TextureProjectionMode_SPHERE == getSdr3DObjectAttribute().getTextureProjectionY()); - - if(bParallelX || bParallelY) - { - // apply parallel texture coordinates in X and/or Y - const basegfx::B3DRange aRange(basegfx::tools::getRange(aFill)); - aFill = basegfx::tools::applyDefaultTextureCoordinatesParallel(aFill, aRange, bParallelX, bParallelY); - } - - if(bSphereX || bObjectSpecificX || bSphereY || bObjectSpecificY) - { - double fRelativeAngle(0.0); - - if(bObjectSpecificX) - { - // Since the texture coordinates are (for historical reasons) - // different from forced to sphere texture coordinates, - // create a old version from it by rotating to old state before applying - // the texture coordinates to emulate old behaviour - fRelativeAngle = F_2PI * ((double)((getHorizontalSegments() >> 1L) - 1L) / (double)getHorizontalSegments()); - basegfx::B3DHomMatrix aRot; - aRot.rotate(0.0, fRelativeAngle, 0.0); - aFill.transform(aRot); - } - - // apply spherical texture coordinates in X and/or Y - const basegfx::B3DRange aRange(basegfx::tools::getRange(aFill)); - const basegfx::B3DPoint aCenter(aRange.getCenter()); - aFill = basegfx::tools::applyDefaultTextureCoordinatesSphere(aFill, aCenter, - bSphereX || bObjectSpecificX, bSphereY || bObjectSpecificY); - - if(bObjectSpecificX) - { - // rotate back again - basegfx::B3DHomMatrix aRot; - aRot.rotate(0.0, -fRelativeAngle, 0.0); - aFill.transform(aRot); - } - } - - // transform texture coordinates to texture size - basegfx::B2DHomMatrix aTexMatrix; - aTexMatrix.scale(getTextureSize().getX(), getTextureSize().getY()); - aFill.transformTextureCoordiantes(aTexMatrix); - } - - // build vector of PolyPolygons - ::std::vector< basegfx::B3DPolyPolygon > a3DPolyPolygonVector; - - for(sal_uInt32 a(0L); a < aFill.count(); a++) - { - a3DPolyPolygonVector.push_back(basegfx::B3DPolyPolygon(aFill.getB3DPolygon(a))); - } - - if(!getSdrLFSAttribute().getFill().isDefault()) - { - // add fill - aRetval = create3DPolyPolygonFillPrimitives( - a3DPolyPolygonVector, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute(), - getSdrLFSAttribute().getFill(), - getSdrLFSAttribute().getFillFloatTransGradient()); - } - else - { - // create simplified 3d hit test geometry - aRetval = createHiddenGeometryPrimitives3D( - a3DPolyPolygonVector, - getTransform(), - getTextureSize(), - getSdr3DObjectAttribute()); - } - - // add line - if(!getSdrLFSAttribute().getLine().isDefault()) - { - basegfx::B3DPolyPolygon aSphere(basegfx::tools::createSpherePolyPolygonFromB3DRange(aUnitRange, getHorizontalSegments(), getVerticalSegments())); - const Primitive3DSequence aLines(create3DPolyPolygonLinePrimitives( - aSphere, getTransform(), getSdrLFSAttribute().getLine())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aLines); - } - - // add shadow - if(!getSdrLFSAttribute().getShadow().isDefault() - && aRetval.hasElements()) - { - const Primitive3DSequence aShadow(createShadowPrimitive3D( - aRetval, getSdrLFSAttribute().getShadow(), getSdr3DObjectAttribute().getShadow3D())); - appendPrimitive3DSequenceToPrimitive3DSequence(aRetval, aShadow); - } - - return aRetval; - } - - SdrSpherePrimitive3D::SdrSpherePrimitive3D( - const basegfx::B3DHomMatrix& rTransform, - const basegfx::B2DVector& rTextureSize, - const attribute::SdrLineFillShadowAttribute3D& rSdrLFSAttribute, - const attribute::Sdr3DObjectAttribute& rSdr3DObjectAttribute, - sal_uInt32 nHorizontalSegments, - sal_uInt32 nVerticalSegments) - : SdrPrimitive3D(rTransform, rTextureSize, rSdrLFSAttribute, rSdr3DObjectAttribute), - mnHorizontalSegments(nHorizontalSegments), - mnVerticalSegments(nVerticalSegments) - { - } - - bool SdrSpherePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(SdrPrimitive3D::operator==(rPrimitive)) - { - const SdrSpherePrimitive3D& rCompare = static_cast< const SdrSpherePrimitive3D& >(rPrimitive); - - return (getHorizontalSegments() == rCompare.getHorizontalSegments() - && getVerticalSegments() == rCompare.getVerticalSegments()); - } - - return false; - } - - basegfx::B3DRange SdrSpherePrimitive3D::getB3DRange(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - // use defaut from sdrPrimitive3D which uses transformation expanded by line width/2 - // The parent implementation which uses the ranges of the decomposition would be more - // corrcet, but for historical reasons it is necessary to do the old method: To get - // the range of the non-transformed geometry and transform it then. This leads to different - // ranges where the new method is more correct, but the need to keep the old behaviour - // has priority here. - return getStandard3DRange(); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(SdrSpherePrimitive3D, PRIMITIVE3D_ID_SDRSPHEREPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/shadowprimitive3d.cxx b/drawinglayer/source/primitive3d/shadowprimitive3d.cxx deleted file mode 100644 index 02818c74af..0000000000 --- a/drawinglayer/source/primitive3d/shadowprimitive3d.cxx +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/shadowprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - ShadowPrimitive3D::ShadowPrimitive3D( - const basegfx::B2DHomMatrix& rShadowTransform, - const basegfx::BColor& rShadowColor, - double fShadowTransparence, - bool bShadow3D, - const Primitive3DSequence& rChildren) - : GroupPrimitive3D(rChildren), - maShadowTransform(rShadowTransform), - maShadowColor(rShadowColor), - mfShadowTransparence(fShadowTransparence), - mbShadow3D(bShadow3D) - { - } - - bool ShadowPrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(GroupPrimitive3D::operator==(rPrimitive)) - { - const ShadowPrimitive3D& rCompare = (ShadowPrimitive3D&)rPrimitive; - - return (getShadowTransform() == rCompare.getShadowTransform() - && getShadowColor() == rCompare.getShadowColor() - && getShadowTransparence() == rCompare.getShadowTransparence() - && getShadow3D() == rCompare.getShadow3D()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive3DIDBlock(ShadowPrimitive3D, PRIMITIVE3D_ID_SHADOWPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/textureprimitive3d.cxx b/drawinglayer/source/primitive3d/textureprimitive3d.cxx deleted file mode 100644 index 1285549380..0000000000 --- a/drawinglayer/source/primitive3d/textureprimitive3d.cxx +++ /dev/null @@ -1,230 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/textureprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <basegfx/color/bcolor.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - TexturePrimitive3D::TexturePrimitive3D( - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize, - bool bModulate, bool bFilter) - : GroupPrimitive3D(rChildren), - maTextureSize(rTextureSize), - mbModulate(bModulate), - mbFilter(bFilter) - { - } - - bool TexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(GroupPrimitive3D::operator==(rPrimitive)) - { - const TexturePrimitive3D& rCompare = (TexturePrimitive3D&)rPrimitive; - - return (getModulate() == rCompare.getModulate() - && getFilter() == rCompare.getFilter()); - } - - return false; - } - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - UnifiedTransparenceTexturePrimitive3D::UnifiedTransparenceTexturePrimitive3D( - double fTransparence, - const Primitive3DSequence& rChildren) - : TexturePrimitive3D(rChildren, basegfx::B2DVector(), false, false), - mfTransparence(fTransparence) - { - } - - bool UnifiedTransparenceTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(TexturePrimitive3D::operator==(rPrimitive)) - { - const UnifiedTransparenceTexturePrimitive3D& rCompare = (UnifiedTransparenceTexturePrimitive3D&)rPrimitive; - - return (getTransparence() == rCompare.getTransparence()); - } - - return false; - } - - basegfx::B3DRange UnifiedTransparenceTexturePrimitive3D::getB3DRange(const geometry::ViewInformation3D& rViewInformation) const - { - // do not use the fallback to decomposition here since for a correct BoundRect we also - // need invisible (1.0 == getTransparence()) geometry; these would be deleted in the decomposition - return getB3DRangeFromPrimitive3DSequence(getChildren(), rViewInformation); - } - - Primitive3DSequence UnifiedTransparenceTexturePrimitive3D::get3DDecomposition(const geometry::ViewInformation3D& /*rViewInformation*/) const - { - if(0.0 == getTransparence()) - { - // no transparence used, so just use content - return getChildren(); - } - else if(getTransparence() > 0.0 && getTransparence() < 1.0) - { - // create TransparenceTexturePrimitive3D with fixed transparence as replacement - const basegfx::BColor aGray(getTransparence(), getTransparence(), getTransparence()); - const attribute::FillGradientAttribute aFillGradient(attribute::GRADIENTSTYLE_LINEAR, 0.0, 0.0, 0.0, 0.0, aGray, aGray, 1); - const Primitive3DReference xRef(new TransparenceTexturePrimitive3D(aFillGradient, getChildren(), getTextureSize())); - return Primitive3DSequence(&xRef, 1L); - } - else - { - // completely transparent or invalid definition, add nothing - return Primitive3DSequence(); - } - } - - // provide unique ID - ImplPrimitrive3DIDBlock(UnifiedTransparenceTexturePrimitive3D, PRIMITIVE3D_ID_UNIFIEDTRANSPARENCETEXTUREPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - GradientTexturePrimitive3D::GradientTexturePrimitive3D( - const attribute::FillGradientAttribute& rGradient, - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize, - bool bModulate, - bool bFilter) - : TexturePrimitive3D(rChildren, rTextureSize, bModulate, bFilter), - maGradient(rGradient) - { - } - - bool GradientTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(TexturePrimitive3D::operator==(rPrimitive)) - { - const GradientTexturePrimitive3D& rCompare = (GradientTexturePrimitive3D&)rPrimitive; - - return (getGradient() == rCompare.getGradient()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive3DIDBlock(GradientTexturePrimitive3D, PRIMITIVE3D_ID_GRADIENTTEXTUREPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - BitmapTexturePrimitive3D::BitmapTexturePrimitive3D( - const attribute::FillBitmapAttribute& rFillBitmapAttribute, - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize, - bool bModulate, bool bFilter) - : TexturePrimitive3D(rChildren, rTextureSize, bModulate, bFilter), - maFillBitmapAttribute(rFillBitmapAttribute) - { - } - - bool BitmapTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(TexturePrimitive3D::operator==(rPrimitive)) - { - const BitmapTexturePrimitive3D& rCompare = (BitmapTexturePrimitive3D&)rPrimitive; - - return (getFillBitmapAttribute() == rCompare.getFillBitmapAttribute()); - } - - return false; - } - - // provide unique ID - ImplPrimitrive3DIDBlock(BitmapTexturePrimitive3D, PRIMITIVE3D_ID_BITMAPTEXTUREPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - TransparenceTexturePrimitive3D::TransparenceTexturePrimitive3D( - const attribute::FillGradientAttribute& rGradient, - const Primitive3DSequence& rChildren, - const basegfx::B2DVector& rTextureSize) - : GradientTexturePrimitive3D(rGradient, rChildren, rTextureSize, false, false) - { - } - - bool TransparenceTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - return (GradientTexturePrimitive3D::operator==(rPrimitive)); - } - - // provide unique ID - ImplPrimitrive3DIDBlock(TransparenceTexturePrimitive3D, PRIMITIVE3D_ID_TRANSPARENCETEXTUREPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/primitive3d/transformprimitive3d.cxx b/drawinglayer/source/primitive3d/transformprimitive3d.cxx deleted file mode 100644 index a452c28c53..0000000000 --- a/drawinglayer/source/primitive3d/transformprimitive3d.cxx +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/primitive3d/transformprimitive3d.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace primitive3d - { - TransformPrimitive3D::TransformPrimitive3D( - const basegfx::B3DHomMatrix& rTransformation, - const Primitive3DSequence& rChildren) - : GroupPrimitive3D(rChildren), - maTransformation(rTransformation) - { - } - - bool TransformPrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const - { - if(GroupPrimitive3D::operator==(rPrimitive)) - { - const TransformPrimitive3D& rCompare = static_cast< const TransformPrimitive3D& >(rPrimitive); - - return (getTransformation() == rCompare.getTransformation()); - } - - return false; - } - - basegfx::B3DRange TransformPrimitive3D::getB3DRange(const geometry::ViewInformation3D& rViewInformation) const - { - basegfx::B3DRange aRetval(getB3DRangeFromPrimitive3DSequence(getChildren(), rViewInformation)); - aRetval.transform(getTransformation()); - return aRetval; - } - - // provide unique ID - ImplPrimitrive3DIDBlock(TransformPrimitive3D, PRIMITIVE3D_ID_TRANSFORMPRIMITIVE3D) - - } // end of namespace primitive3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/baseprocessor2d.cxx b/drawinglayer/source/processor2d/baseprocessor2d.cxx deleted file mode 100644 index 7dce36b364..0000000000 --- a/drawinglayer/source/processor2d/baseprocessor2d.cxx +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/baseprocessor2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - void BaseProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& /*rCandidate*/) - { - } - - BaseProcessor2D::BaseProcessor2D(const geometry::ViewInformation2D& rViewInformation) - : maViewInformation2D(rViewInformation) - { - } - - BaseProcessor2D::~BaseProcessor2D() - { - } - - void BaseProcessor2D::process(const primitive2d::Primitive2DSequence& rSource) - { - if(rSource.hasElements()) - { - const sal_Int32 nCount(rSource.getLength()); - - for(sal_Int32 a(0L); a < nCount; a++) - { - // get reference - const primitive2d::Primitive2DReference xReference(rSource[a]); - - if(xReference.is()) - { - // try to cast to BasePrimitive2D implementation - const primitive2d::BasePrimitive2D* pBasePrimitive = dynamic_cast< const primitive2d::BasePrimitive2D* >(xReference.get()); - - if(pBasePrimitive) - { - // it is a BasePrimitive2D implementation, use local processor - processBasePrimitive2D(*pBasePrimitive); - } - else - { - // unknown implementation, use UNO API call instead and process recursively - const uno::Sequence< beans::PropertyValue >& rViewParameters(getViewInformation2D().getViewInformationSequence()); - process(xReference->getDecomposition(rViewParameters)); - } - } - } - } - } - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/canvasprocessor.cxx b/drawinglayer/source/processor2d/canvasprocessor.cxx deleted file mode 100644 index 3e59746d97..0000000000 --- a/drawinglayer/source/processor2d/canvasprocessor.cxx +++ /dev/null @@ -1,1029 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/canvasprocessor.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <com/sun/star/rendering/XCanvas.hpp> -#include <vcl/canvastools.hxx> -#include <basegfx/tools/canvastools.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <canvas/canvastools.hxx> -#include <svl/ctloptions.hxx> -#include <vcl/svapp.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygonclipper.hxx> -#include <drawinglayer/primitive2d/pagepreviewprimitive2d.hxx> -#include <drawinglayer/primitive2d/metafileprimitive2d.hxx> -#include <cppcanvas/basegfxfactory.hxx> -#include <com/sun/star/rendering/XBitmapCanvas.hpp> -#include <cppcanvas/vclfactory.hxx> -#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx> -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <com/sun/star/rendering/TextDirection.hpp> -#include <vclhelperbitmaptransform.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <basegfx/tuple/b2i64tuple.hxx> -#include <basegfx/range/b2irange.hxx> -#include <com/sun/star/rendering/XIntegerReadOnlyBitmap.hpp> -#include <com/sun/star/rendering/PanoseProportion.hpp> -#include <com/sun/star/rendering/CompositeOperation.hpp> -#include <com/sun/star/rendering/StrokeAttributes.hpp> -#include <com/sun/star/rendering/PathJoinType.hpp> -#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx> -#include <com/sun/star/rendering/TexturingMode.hpp> -#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> -#include <vclhelperbufferdevice.hxx> -#include <drawinglayer/primitive2d/chartprimitive2d.hxx> -#include <helperchartrenderer.hxx> -#include <drawinglayer/primitive2d/wrongspellprimitive2d.hxx> -#include <helperwrongspellrenderer.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - ////////////////////////////////////////////////////////////////////////////// - // single primitive renderers - - void canvasProcessor2D::impRenderMaskPrimitive2D(const primitive2d::MaskPrimitive2D& rMaskCandidate) - { - const primitive2d::Primitive2DSequence& rChildren = rMaskCandidate.getChildren(); - static bool bUseMaskBitmapMethod(true); - - if(rChildren.hasElements()) - { - basegfx::B2DPolyPolygon aMask(rMaskCandidate.getMask()); - - if(!aMask.count()) - { - // no mask, no clipping. recursively paint content - process(rChildren); - } - else - { - // there are principally two methods for implementing the mask primitive. One - // is to set a clip polygon at the canvas, the other is to create and use a - // transparence-using XBitmap for content and draw the mask as transparence. Both have their - // advantages and disadvantages, so here are both with a bool allowing simple - // change - if(bUseMaskBitmapMethod) - { - // get logic range of transparent part, clip with ViewRange - basegfx::B2DRange aLogicRange(aMask.getB2DRange()); - - if(!getViewInformation2D().getViewport().isEmpty()) - { - aLogicRange.intersect(getViewInformation2D().getViewport()); - } - - if(!aLogicRange.isEmpty()) - { - // get discrete range of transparent part - basegfx::B2DRange aDiscreteRange(aLogicRange); - aDiscreteRange.transform(getViewInformation2D().getObjectToViewTransformation()); - - // expand to next covering discrete values (pixel bounds) - aDiscreteRange.expand(basegfx::B2DTuple(floor(aDiscreteRange.getMinX()), floor(aDiscreteRange.getMinY()))); - aDiscreteRange.expand(basegfx::B2DTuple(ceil(aDiscreteRange.getMaxX()), ceil(aDiscreteRange.getMaxY()))); - - // use VCL-based buffer device - impBufferDevice aBufferDevice(*mpOutputDevice, aDiscreteRange, false); - - if(aBufferDevice.isVisible()) - { - // remember current OutDev, Canvas and ViewInformation - OutputDevice* pLastOutputDevice = mpOutputDevice; - uno::Reference< rendering::XCanvas > xLastCanvas(mxCanvas); - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // prepare discrete offset for XBitmap, do not forget that the buffer bitmap - // may be truncated to discrete visible pixels - const basegfx::B2DHomMatrix aDiscreteOffset(basegfx::tools::createTranslateB2DHomMatrix( - aDiscreteRange.getMinX() > 0.0 ? -aDiscreteRange.getMinX() : 0.0, - aDiscreteRange.getMinY() > 0.0 ? -aDiscreteRange.getMinY() : 0.0)); - - // create new local ViewInformation2D with new transformation - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation(), - aDiscreteOffset * getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // set OutDev and Canvas to content target - mpOutputDevice = &aBufferDevice.getContent(); - mxCanvas = mpOutputDevice->GetCanvas(); - canvas::tools::setViewStateTransform(maViewState, getViewInformation2D().getViewTransformation()); - - // if ViewState transform is changed, the clipping polygon needs to be adapted, too - const basegfx::B2DPolyPolygon aOldClipPolyPolygon(maClipPolyPolygon); - - if(maClipPolyPolygon.count()) - { - maClipPolyPolygon.transform(aDiscreteOffset); - maViewState.Clip = basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), maClipPolyPolygon); - } - - // paint content - process(rChildren); - - // draw mask - const basegfx::BColor aBlack(0.0, 0.0, 0.0); - maRenderState.DeviceColor = aBlack.colorToDoubleSequence(mxCanvas->getDevice()); - - if(getOptionsDrawinglayer().IsAntiAliasing()) - { - // with AA, use 8bit AlphaMask to get nice borders - VirtualDevice& rTransparence = aBufferDevice.getTransparence(); - rTransparence.GetCanvas()->fillPolyPolygon( - basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), aMask), - maViewState, maRenderState); - } - else - { - // No AA, use 1bit mask - VirtualDevice& rMask = aBufferDevice.getMask(); - rMask.GetCanvas()->fillPolyPolygon( - basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), aMask), - maViewState, maRenderState); - } - - // back to old color stack, OutDev, Canvas and ViewTransform - mpOutputDevice = pLastOutputDevice; - mxCanvas = xLastCanvas; - updateViewInformation(aLastViewInformation2D); - canvas::tools::setViewStateTransform(maViewState, getViewInformation2D().getViewTransformation()); - - // restore clipping polygon - maClipPolyPolygon = aOldClipPolyPolygon; - - if(maClipPolyPolygon.count()) - { - maViewState.Clip = basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), maClipPolyPolygon); - } - - // dump buffer to outdev - aBufferDevice.paint(); - } - } - } - else - { - // transform new mask polygon to view coordinates for processing. All masks - // are processed in view coordinates and clipped against each other evtl. to - // create multi-clips - aMask.transform(getViewInformation2D().getObjectTransformation()); - - // remember last current clip polygon - const basegfx::B2DPolyPolygon aLastClipPolyPolygon(maClipPolyPolygon); - - if(maClipPolyPolygon.count()) - { - // there is already a clip polygon set; build clipped union of - // current mask polygon and new one - maClipPolyPolygon = basegfx::tools::clipPolyPolygonOnPolyPolygon(aMask, maClipPolyPolygon, false, false); - } - else - { - // use mask directly - maClipPolyPolygon = aMask; - } - - // set at ViewState - if(maClipPolyPolygon.count()) - { - // set new as clip polygon - maViewState.Clip = basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), maClipPolyPolygon); - } - else - { - // empty, reset - maViewState.Clip.clear(); - } - - // paint content - process(rChildren); - - // restore local current to rescued clip polygon - maClipPolyPolygon = aLastClipPolyPolygon; - - // set at ViewState - if(maClipPolyPolygon.count()) - { - // set new as clip polygon - maViewState.Clip = basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), maClipPolyPolygon); - } - else - { - // empty, reset - maViewState.Clip.clear(); - } - } - } - } - } - - void canvasProcessor2D::impRenderMetafilePrimitive2D(const primitive2d::MetafilePrimitive2D& rMetaCandidate) - { - GDIMetaFile aMetaFile; - - if(maBColorModifierStack.count()) - { - const basegfx::BColor aRGBBaseColor(0, 0, 0); - const basegfx::BColor aRGBColor(maBColorModifierStack.getModifiedColor(aRGBBaseColor)); - aMetaFile = rMetaCandidate.getMetaFile().GetMonochromeMtf(Color(aRGBColor)); - } - else - { - aMetaFile = rMetaCandidate.getMetaFile(); - } - - cppcanvas::BitmapCanvasSharedPtr pCanvas(cppcanvas::VCLFactory::getInstance().createCanvas( - uno::Reference<rendering::XBitmapCanvas>(mxCanvas, uno::UNO_QUERY_THROW))); - cppcanvas::RendererSharedPtr pMtfRenderer(cppcanvas::VCLFactory::getInstance().createRenderer( - pCanvas, aMetaFile, cppcanvas::Renderer::Parameters())); - - if(pMtfRenderer) - { - pCanvas->setTransformation(getViewInformation2D().getObjectToViewTransformation()); - pMtfRenderer->setTransformation(rMetaCandidate.getTransform()); - pMtfRenderer->draw(); - } - } - - void canvasProcessor2D::impRenderTextSimplePortionPrimitive2D(const primitive2d::TextSimplePortionPrimitive2D& rTextCandidate) - { - if(rTextCandidate.getTextLength()) - { - double fShearX(0.0); - { - const basegfx::B2DHomMatrix aLocalTransform(getViewInformation2D().getObjectToViewTransformation() * rTextCandidate.getTextTransform()); - basegfx::B2DVector aScale, aTranslate; - double fRotate; - aLocalTransform.decompose(aScale, aTranslate, fRotate, fShearX); - } - - if(!basegfx::fTools::equalZero(fShearX)) - { - // text is sheared. As long as the canvas renderers do not support this, - // use the decomposed primitive - process(rTextCandidate.get2DDecomposition(getViewInformation2D())); - } - else - { - const attribute::FontAttribute& rFontAttr(rTextCandidate.getFontAttribute()); - rendering::FontRequest aFontRequest; - - aFontRequest.FontDescription.FamilyName = rFontAttr.getFamilyName(); - aFontRequest.FontDescription.StyleName = rFontAttr.getStyleName(); - aFontRequest.FontDescription.IsSymbolFont = rFontAttr.getSymbol() ? util::TriState_YES : util::TriState_NO; - aFontRequest.FontDescription.IsVertical = rFontAttr.getVertical() ? util::TriState_YES : util::TriState_NO; - // TODO(F2): improve vclenum->panose conversion - aFontRequest.FontDescription.FontDescription.Weight = static_cast< sal_uInt8 >(rFontAttr.getWeight()); - aFontRequest.FontDescription.FontDescription.Proportion = - rFontAttr.getMonospaced() - ? rendering::PanoseProportion::MONO_SPACED - : rendering::PanoseProportion::ANYTHING; - aFontRequest.FontDescription.FontDescription.Letterform = rFontAttr.getItalic() ? 9 : 0; - - // init CellSize to 1.0, else a default font height will be used - aFontRequest.CellSize = 1.0; - aFontRequest.Locale = rTextCandidate.getLocale(); - - // font matrix should only be used for glyph rotations etc. - com::sun::star::geometry::Matrix2D aFontMatrix; - canvas::tools::setIdentityMatrix2D(aFontMatrix); - - uno::Reference<rendering::XCanvasFont> xFont(mxCanvas->createFont( - aFontRequest, uno::Sequence< beans::PropertyValue >(), aFontMatrix)); - - if(xFont.is()) - { - // got a font, now try to get a TextLayout - const rendering::StringContext aStringContext( - rTextCandidate.getText(), rTextCandidate.getTextPosition(), rTextCandidate.getTextLength()); - uno::Reference<rendering::XTextLayout> xLayout(xFont->createTextLayout( - aStringContext, com::sun::star::rendering::TextDirection::WEAK_LEFT_TO_RIGHT, 0)); - - if(xLayout.is()) - { - // got a text layout, apply DXArray if given - const ::std::vector< double >& rDXArray = rTextCandidate.getDXArray(); - const sal_uInt32 nDXCount(rDXArray.size()); - - if(nDXCount) - { - // DXArray does not need to be adapted to getTextPosition/getTextLength, - // it is already provided correctly - const uno::Sequence< double > aDXSequence(&rDXArray[0], nDXCount); - xLayout->applyLogicalAdvancements(aDXSequence); - } - - // set text color - const basegfx::BColor aRGBColor(maBColorModifierStack.getModifiedColor(rTextCandidate.getFontColor())); - maRenderState.DeviceColor = aRGBColor.colorToDoubleSequence(mxCanvas->getDevice()); - - // set text transformation - canvas::tools::setRenderStateTransform(maRenderState, - getViewInformation2D().getObjectTransformation() * rTextCandidate.getTextTransform()); - - // paint - mxCanvas->drawTextLayout(xLayout, maViewState, maRenderState); - } - } - } - } - } - - void canvasProcessor2D::impRenderBitmapPrimitive2D(const primitive2d::BitmapPrimitive2D& rBitmapCandidate) - { - // apply possible color modification to BitmapEx - BitmapEx aModifiedBitmapEx(impModifyBitmapEx(maBColorModifierStack, rBitmapCandidate.getBitmapEx())); - - if(aModifiedBitmapEx.IsEmpty()) - { - // replace with color filled polygon - const basegfx::BColor aModifiedColor(maBColorModifierStack.getModifiedColor(basegfx::BColor())); - const basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon()); - - maRenderState.DeviceColor = aModifiedColor.colorToDoubleSequence(mxCanvas->getDevice()); - canvas::tools::setRenderStateTransform(maRenderState, - getViewInformation2D().getObjectTransformation() * rBitmapCandidate.getTransform()); - - mxCanvas->fillPolyPolygon(basegfx::unotools::xPolyPolygonFromB2DPolyPolygon( - mxCanvas->getDevice(), basegfx::B2DPolyPolygon(aPolygon)), maViewState, maRenderState); - } - else - { - // adapt object's transformation to the correct scale - basegfx::B2DVector aScale, aTranslate; - const Size aSizePixel(aModifiedBitmapEx.GetSizePixel()); - - if(0 != aSizePixel.Width() && 0 != aSizePixel.Height()) - { - double fRotate, fShearX; - rBitmapCandidate.getTransform().decompose(aScale, aTranslate, fRotate, fShearX); - const basegfx::B2DHomMatrix aNewMatrix(basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix( - aScale.getX() / aSizePixel.Width(), aScale.getY() / aSizePixel.Height(), - fShearX, fRotate, aTranslate.getX(), aTranslate.getY())); - - canvas::tools::setRenderStateTransform(maRenderState, - getViewInformation2D().getObjectTransformation() * aNewMatrix); - - mxCanvas->drawBitmap( - vcl::unotools::xBitmapFromBitmapEx(mxCanvas->getDevice(), aModifiedBitmapEx), - maViewState, maRenderState); - } - } - } - - void canvasProcessor2D::impRenderTransparencePrimitive2D(const primitive2d::TransparencePrimitive2D& rTransparenceCandidate) - { - const primitive2d::Primitive2DSequence& rChildren = rTransparenceCandidate.getChildren(); - const primitive2d::Primitive2DSequence& rTransparence = rTransparenceCandidate.getTransparence(); - - if(rChildren.hasElements() && rTransparence.hasElements()) - { - // get logic range of transparent part and clip with ViewRange - basegfx::B2DRange aLogicRange(primitive2d::getB2DRangeFromPrimitive2DSequence(rChildren, getViewInformation2D())); - - if(!getViewInformation2D().getViewport().isEmpty()) - { - aLogicRange.intersect(getViewInformation2D().getViewport()); - } - - if(!aLogicRange.isEmpty()) - { - // get discrete range of transparent part - basegfx::B2DRange aDiscreteRange(aLogicRange); - aDiscreteRange.transform(getViewInformation2D().getObjectToViewTransformation()); - - // expand to next covering discrete values (pixel bounds) - aDiscreteRange.expand(basegfx::B2DTuple(floor(aDiscreteRange.getMinX()), floor(aDiscreteRange.getMinY()))); - aDiscreteRange.expand(basegfx::B2DTuple(ceil(aDiscreteRange.getMaxX()), ceil(aDiscreteRange.getMaxY()))); - - // use VCL-based buffer device - impBufferDevice aBufferDevice(*mpOutputDevice, aDiscreteRange, false); - - if(aBufferDevice.isVisible()) - { - // remember current OutDev, Canvas and ViewInformation - OutputDevice* pLastOutputDevice = mpOutputDevice; - uno::Reference< rendering::XCanvas > xLastCanvas(mxCanvas); - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // prepare discrete offset for XBitmap, do not forget that the buffer bitmap - // may be truncated to discrete visible pixels - const basegfx::B2DHomMatrix aDiscreteOffset(basegfx::tools::createTranslateB2DHomMatrix( - aDiscreteRange.getMinX() > 0.0 ? -aDiscreteRange.getMinX() : 0.0, - aDiscreteRange.getMinY() > 0.0 ? -aDiscreteRange.getMinY() : 0.0)); - - // create new local ViewInformation2D with new transformation - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation(), - aDiscreteOffset * getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // set OutDev and Canvas to content target - mpOutputDevice = &aBufferDevice.getContent(); - mxCanvas = mpOutputDevice->GetCanvas(); - canvas::tools::setViewStateTransform(maViewState, getViewInformation2D().getViewTransformation()); - - // if ViewState transform is changed, the clipping polygon needs to be adapted, too - const basegfx::B2DPolyPolygon aOldClipPolyPolygon(maClipPolyPolygon); - - if(maClipPolyPolygon.count()) - { - maClipPolyPolygon.transform(aDiscreteOffset); - maViewState.Clip = basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), maClipPolyPolygon); - } - - // paint content - process(rChildren); - - // set to mask - mpOutputDevice = &aBufferDevice.getTransparence(); - mxCanvas = mpOutputDevice->GetCanvas(); - canvas::tools::setViewStateTransform(maViewState, getViewInformation2D().getViewTransformation()); - - // when painting transparence masks, reset the color stack - basegfx::BColorModifierStack aLastBColorModifierStack(maBColorModifierStack); - maBColorModifierStack = basegfx::BColorModifierStack(); - - // paint mask to it (always with transparence intensities, evtl. with AA) - process(rTransparence); - - // back to old color stack, OutDev, Canvas and ViewTransform - maBColorModifierStack = aLastBColorModifierStack; - mpOutputDevice = pLastOutputDevice; - mxCanvas = xLastCanvas; - updateViewInformation(aLastViewInformation2D); - canvas::tools::setViewStateTransform(maViewState, getViewInformation2D().getViewTransformation()); - - // restore clipping polygon - maClipPolyPolygon = aOldClipPolyPolygon; - - if(maClipPolyPolygon.count()) - { - maViewState.Clip = basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), maClipPolyPolygon); - } - - // dump buffer to outdev - aBufferDevice.paint(); - } - } - } - } - - void canvasProcessor2D::impRenderPolygonStrokePrimitive2D(const primitive2d::PolygonStrokePrimitive2D& rPolygonStrokePrimitive) - { - // support direct fat line geometry. This moves the decomposition to the canvas. - // As long as our canvases are used (which also use basegfx tooling) this makes - // no difference, but potentially canvases may better support this - static bool bSupportFatLineDirectly(true); - bool bOutputDone(false); - - if(bSupportFatLineDirectly) - { - const attribute::LineAttribute& rLineAttribute = rPolygonStrokePrimitive.getLineAttribute(); - const attribute::StrokeAttribute& rStrokeAttribute = rPolygonStrokePrimitive.getStrokeAttribute(); - - if(0.0 < rLineAttribute.getWidth() || 0 != rStrokeAttribute.getDotDashArray().size()) - { - rendering::StrokeAttributes aStrokeAttribute; - - aStrokeAttribute.StrokeWidth = rLineAttribute.getWidth(); - aStrokeAttribute.MiterLimit = 15.0; // degrees; maybe here (15.0 * F_PI180) is needed, not clear in the documentation - const ::std::vector< double >& rDotDashArray = rStrokeAttribute.getDotDashArray(); - - if(rDotDashArray.size()) - { - aStrokeAttribute.DashArray = uno::Sequence< double >(&rDotDashArray[0], rDotDashArray.size()); - } - - switch(rLineAttribute.getLineJoin()) - { - default: // B2DLINEJOIN_NONE, B2DLINEJOIN_MIDDLE - aStrokeAttribute.JoinType = rendering::PathJoinType::NONE; - break; - case basegfx::B2DLINEJOIN_BEVEL: - aStrokeAttribute.JoinType = rendering::PathJoinType::BEVEL; - break; - case basegfx::B2DLINEJOIN_MITER: - aStrokeAttribute.JoinType = rendering::PathJoinType::MITER; - break; - case basegfx::B2DLINEJOIN_ROUND: - aStrokeAttribute.JoinType = rendering::PathJoinType::ROUND; - break; - } - - const basegfx::BColor aHairlineColor(maBColorModifierStack.getModifiedColor(rLineAttribute.getColor())); - maRenderState.DeviceColor = aHairlineColor.colorToDoubleSequence(mxCanvas->getDevice()); - canvas::tools::setRenderStateTransform(maRenderState, getViewInformation2D().getObjectTransformation()); - - mxCanvas->strokePolyPolygon( - basegfx::unotools::xPolyPolygonFromB2DPolygon(mxCanvas->getDevice(), rPolygonStrokePrimitive.getB2DPolygon()), - maViewState, maRenderState, aStrokeAttribute); - - bOutputDone = true; - } - } - - if(!bOutputDone) - { - // process decomposition - process(rPolygonStrokePrimitive.get2DDecomposition(getViewInformation2D())); - } - } - - void canvasProcessor2D::impRenderFillBitmapPrimitive2D(const primitive2d::FillBitmapPrimitive2D& rFillBitmapPrimitive2D) - { - // support tiled fills directly when tiling is on - static bool bSupportFillBitmapDirectly(true); - bool bOutputDone(false); - - if(bSupportFillBitmapDirectly) - { - const attribute::FillBitmapAttribute& rFillBitmapAttribute = rFillBitmapPrimitive2D.getFillBitmap(); - - if(rFillBitmapAttribute.getTiling()) - { - // apply possible color modification to Bitmap - const BitmapEx aChangedBitmapEx(impModifyBitmapEx(maBColorModifierStack, rFillBitmapAttribute.getBitmapEx())); - - if(aChangedBitmapEx.IsEmpty()) - { - // replace with color filled polygon - const basegfx::BColor aModifiedColor(maBColorModifierStack.getModifiedColor(basegfx::BColor())); - const basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon()); - - maRenderState.DeviceColor = aModifiedColor.colorToDoubleSequence(mxCanvas->getDevice()); - canvas::tools::setRenderStateTransform(maRenderState, - getViewInformation2D().getObjectTransformation() * rFillBitmapPrimitive2D.getTransformation()); - - mxCanvas->fillPolyPolygon(basegfx::unotools::xPolyPolygonFromB2DPolyPolygon( - mxCanvas->getDevice(), basegfx::B2DPolyPolygon(aPolygon)), maViewState, maRenderState); - } - else - { - const Size aSizePixel(aChangedBitmapEx.GetSizePixel()); - - if(0 != aSizePixel.Width() && 0 != aSizePixel.Height()) - { - // create texture matrix from texture to object (where object is unit square here), - // so use values directly - const basegfx::B2DHomMatrix aTextureMatrix(basegfx::tools::createScaleTranslateB2DHomMatrix( - rFillBitmapAttribute.getSize().getX(), rFillBitmapAttribute.getSize().getY(), - rFillBitmapAttribute.getTopLeft().getX(), rFillBitmapAttribute.getTopLeft().getY())); - - // create and fill texture - rendering::Texture aTexture; - - basegfx::unotools::affineMatrixFromHomMatrix(aTexture.AffineTransform, aTextureMatrix); - aTexture.Alpha = 1.0; - aTexture.Bitmap = vcl::unotools::xBitmapFromBitmapEx(mxCanvas->getDevice(), aChangedBitmapEx); - aTexture.RepeatModeX = rendering::TexturingMode::REPEAT; - aTexture.RepeatModeY = rendering::TexturingMode::REPEAT; - - // canvas needs a polygon to fill, create unit rectangle polygon - const basegfx::B2DPolygon aOutlineRectangle(basegfx::tools::createUnitPolygon()); - - // set primitive's transformation as render state transform - canvas::tools::setRenderStateTransform(maRenderState, - getViewInformation2D().getObjectTransformation() * rFillBitmapPrimitive2D.getTransformation()); - - // put texture into a uno sequence for handover - uno::Sequence< rendering::Texture > aSeq(1); - aSeq[0] = aTexture; - - // draw textured rectangle - mxCanvas->fillTexturedPolyPolygon( - basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), basegfx::B2DPolyPolygon(aOutlineRectangle)), - maViewState, maRenderState, aSeq); - } - } - - bOutputDone = true; - } - } - - if(!bOutputDone) - { - // process decomposition - process(rFillBitmapPrimitive2D.get2DDecomposition(getViewInformation2D())); - } - } - - void canvasProcessor2D::impRenderUnifiedTransparencePrimitive2D(const primitive2d::UnifiedTransparencePrimitive2D& rUniTransparenceCandidate) - { - if(0.0 == rUniTransparenceCandidate.getTransparence()) - { - // not transparent at all, directly use content - process(rUniTransparenceCandidate.getChildren()); - } - else if(rUniTransparenceCandidate.getTransparence() > 0.0 && rUniTransparenceCandidate.getTransparence() < 1.0) - { - const primitive2d::Primitive2DSequence rChildren = rUniTransparenceCandidate.getChildren(); - - if(rChildren.hasElements()) - { - bool bOutputDone(false); - - // Detect if a single PolyPolygonColorPrimitive2D is contained; in that case, - // use the fillPolyPolygon method with correctly set transparence. This is a often used - // case, so detectiong it is valuable - if(1 == rChildren.getLength()) - { - const primitive2d::Primitive2DReference xReference(rChildren[0]); - const primitive2d::PolyPolygonColorPrimitive2D* pPoPoColor = dynamic_cast< const primitive2d::PolyPolygonColorPrimitive2D* >(xReference.get()); - - if(pPoPoColor && PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D == pPoPoColor->getPrimitive2DID()) - { - // direct draw of PolyPolygon with color and transparence - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(pPoPoColor->getBColor())); - - // add transparence modulation value to DeviceColor - uno::Sequence< double > aColor(4); - - aColor[0] = aPolygonColor.getRed(); - aColor[1] = aPolygonColor.getGreen(); - aColor[2] = aPolygonColor.getBlue(); - aColor[3] = 1.0 - rUniTransparenceCandidate.getTransparence(); - maRenderState.DeviceColor = aColor; - - canvas::tools::setRenderStateTransform(maRenderState, getViewInformation2D().getObjectTransformation()); - mxCanvas->fillPolyPolygon( - basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), pPoPoColor->getB2DPolyPolygon()), - maViewState, maRenderState); - bOutputDone = true; - } - } - - if(!bOutputDone) - { - // process decomposition. This will be decomposed to an TransparencePrimitive2D - // with the same child context and a single polygon for transparent context. This could be - // directly handled here with known VCL-buffer technology, but would only - // make a small difference compared to directly rendering the TransparencePrimitive2D - // using impRenderTransparencePrimitive2D above. - process(rUniTransparenceCandidate.get2DDecomposition(getViewInformation2D())); - } - } - } - } - - ////////////////////////////////////////////////////////////////////////////// - // internal processing support - - void canvasProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) - { - switch(rCandidate.getPrimitive2DID()) - { - case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D : - { - // direct draw of hairline - const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate = static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate); - const basegfx::BColor aHairlineColor(maBColorModifierStack.getModifiedColor(rPolygonCandidate.getBColor())); - - maRenderState.DeviceColor = aHairlineColor.colorToDoubleSequence(mxCanvas->getDevice()); - canvas::tools::setRenderStateTransform(maRenderState, getViewInformation2D().getObjectTransformation()); - mxCanvas->drawPolyPolygon( - basegfx::unotools::xPolyPolygonFromB2DPolygon(mxCanvas->getDevice(), rPolygonCandidate.getB2DPolygon()), - maViewState, maRenderState); - - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : - { - // direct draw of PolyPolygon with color - const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate = static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate); - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rPolygonCandidate.getBColor())); - - maRenderState.DeviceColor = aPolygonColor.colorToDoubleSequence(mxCanvas->getDevice()); - canvas::tools::setRenderStateTransform(maRenderState, getViewInformation2D().getObjectTransformation()); - mxCanvas->fillPolyPolygon( - basegfx::unotools::xPolyPolygonFromB2DPolyPolygon(mxCanvas->getDevice(), rPolygonCandidate.getB2DPolyPolygon()), - maViewState, maRenderState); - - break; - } - case PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D : - { - // modified color group. Force output to unified color. - const primitive2d::ModifiedColorPrimitive2D& rModifiedCandidate = static_cast< const primitive2d::ModifiedColorPrimitive2D& >(rCandidate); - - if(rModifiedCandidate.getChildren().hasElements()) - { - maBColorModifierStack.push(rModifiedCandidate.getColorModifier()); - process(rModifiedCandidate.getChildren()); - maBColorModifierStack.pop(); - } - - break; - } - case PRIMITIVE2D_ID_MASKPRIMITIVE2D : - { - // mask group - impRenderMaskPrimitive2D(static_cast< const primitive2d::MaskPrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D : - { - // transform group. Remember current ViewInformation2D - const primitive2d::TransformPrimitive2D& rTransformCandidate = static_cast< const primitive2d::TransformPrimitive2D& >(rCandidate); - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // create new local ViewInformation2D with new transformation - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation() * rTransformCandidate.getTransformation(), - getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // set at canvas - canvas::tools::setRenderStateTransform(maRenderState, getViewInformation2D().getObjectTransformation()); - - // proccess content - process(rTransformCandidate.getChildren()); - - // restore transformations - updateViewInformation(aLastViewInformation2D); - - // restore at canvas - canvas::tools::setRenderStateTransform(maRenderState, getViewInformation2D().getObjectTransformation()); - - break; - } - case PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D : - { - // new XDrawPage for ViewInformation2D - const primitive2d::PagePreviewPrimitive2D& rPagePreviewCandidate = static_cast< const primitive2d::PagePreviewPrimitive2D& >(rCandidate); - - // remember current transformation and ViewInformation - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // create new local ViewInformation2D - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation(), - getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - rPagePreviewCandidate.getXDrawPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // proccess decomposed content - process(rPagePreviewCandidate.get2DDecomposition(getViewInformation2D())); - - // restore transformations - updateViewInformation(aLastViewInformation2D); - break; - } - case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : - { - // MetaFile primitive - impRenderMetafilePrimitive2D(static_cast< const primitive2d::MetafilePrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D : - { - // PointArray primitive - const primitive2d::PointArrayPrimitive2D& rPointArrayCandidate = static_cast< const primitive2d::PointArrayPrimitive2D& >(rCandidate); - - // set point color - const basegfx::BColor aRGBColor(maBColorModifierStack.getModifiedColor(rPointArrayCandidate.getRGBColor())); - maRenderState.DeviceColor = aRGBColor.colorToDoubleSequence(mxCanvas->getDevice()); - canvas::tools::setRenderStateTransform(maRenderState, getViewInformation2D().getObjectTransformation()); - - const std::vector< basegfx::B2DPoint >& rPointVector = rPointArrayCandidate.getPositions(); - const sal_uInt32 nPointCount(rPointVector.size()); - - for(sal_uInt32 a(0); a < nPointCount; a++) - { - const basegfx::B2DPoint& rPoint = rPointVector[a]; - mxCanvas->drawPoint(basegfx::unotools::point2DFromB2DPoint(rPoint), maViewState, maRenderState); - } - - break; - } - case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D : - { - // TextSimplePortion primitive - impRenderTextSimplePortionPrimitive2D(static_cast< const primitive2d::TextSimplePortionPrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : - { - // Bitmap primitive - impRenderBitmapPrimitive2D(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D : - { - // Transparence primitive - impRenderTransparencePrimitive2D(static_cast< const primitive2d::TransparencePrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D: - { - // PolygonStrokePrimitive - impRenderPolygonStrokePrimitive2D(static_cast< const primitive2d::PolygonStrokePrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_FILLBITMAPPRIMITIVE2D : - { - // FillBitmapPrimitive2D - impRenderFillBitmapPrimitive2D(static_cast< const primitive2d::FillBitmapPrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D : - { - // UnifiedTransparencePrimitive2D - impRenderUnifiedTransparencePrimitive2D(static_cast< const primitive2d::UnifiedTransparencePrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_CHARTPRIMITIVE2D : - { - // chart primitive in canvas renderer; restore original DrawMode during call - // since the evtl. used ChartPrettyPainter will use the MapMode - const primitive2d::ChartPrimitive2D& rChartPrimitive = static_cast< const primitive2d::ChartPrimitive2D& >(rCandidate); - mpOutputDevice->Push(PUSH_MAPMODE); - mpOutputDevice->SetMapMode(maOriginalMapMode); - - if(!renderChartPrimitive2D( - rChartPrimitive, - *mpOutputDevice, - getViewInformation2D())) - { - // fallback to decomposition (MetaFile) - process(rChartPrimitive.get2DDecomposition(getViewInformation2D())); - } - - mpOutputDevice->Pop(); - break; - } - case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D : - { - // wrong spell primitive. Handled directly here using VCL since VCL has a nice and - // very direct waveline painting which is needed for this. If VCL is to be avoided, - // this can be removed anytime and the decomposition may be used - const primitive2d::WrongSpellPrimitive2D& rWrongSpellPrimitive = static_cast< const primitive2d::WrongSpellPrimitive2D& >(rCandidate); - - if(!renderWrongSpellPrimitive2D( - rWrongSpellPrimitive, - *mpOutputDevice, - getViewInformation2D().getObjectToViewTransformation(), - maBColorModifierStack)) - { - // fallback to decomposition (MetaFile) - process(rWrongSpellPrimitive.get2DDecomposition(getViewInformation2D())); - } - - break; - } - - // nice to have: - // - // case PRIMITIVE2D_ID_CONTROLPRIMITIVE2D : - // - support FormControls more direct eventually, not sure if this is needed - // with the canvas renderer. The decomposition provides a bitmap representation - // of the control which will work - // - - default : - { - // process recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - - break; - } - } - } - - ////////////////////////////////////////////////////////////////////////////// - // process support - - canvasProcessor2D::canvasProcessor2D( - const geometry::ViewInformation2D& rViewInformation, - OutputDevice& rOutDev) - : BaseProcessor2D(rViewInformation), - maOriginalMapMode(rOutDev.GetMapMode()), - mpOutputDevice(&rOutDev), - mxCanvas(rOutDev.GetCanvas()), - maViewState(), - maRenderState(), - maBColorModifierStack(), - maDrawinglayerOpt(), - maClipPolyPolygon(), - meLang(LANGUAGE_SYSTEM) - { - const SvtCTLOptions aSvtCTLOptions; - - canvas::tools::initViewState(maViewState); - canvas::tools::initRenderState(maRenderState); - canvas::tools::setViewStateTransform(maViewState, getViewInformation2D().getViewTransformation()); - - // set digit language, derived from SvtCTLOptions to have the correct - // number display for arabic/hindi numerals - if(SvtCTLOptions::NUMERALS_HINDI == aSvtCTLOptions.GetCTLTextNumerals()) - { - meLang = LANGUAGE_ARABIC_SAUDI_ARABIA; - } - else if(SvtCTLOptions::NUMERALS_ARABIC == aSvtCTLOptions.GetCTLTextNumerals()) - { - meLang = LANGUAGE_ENGLISH; - } - else - { - meLang = (LanguageType)Application::GetSettings().GetLanguage(); - } - - rOutDev.SetDigitLanguage(meLang); - - // prepare output directly to pixels - mpOutputDevice->Push(PUSH_MAPMODE); - mpOutputDevice->SetMapMode(); - - // react on AntiAliasing settings - if(getOptionsDrawinglayer().IsAntiAliasing()) - { - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() | ANTIALIASING_ENABLE_B2DDRAW); - } - else - { - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); - } - } - - canvasProcessor2D::~canvasProcessor2D() - { - // restore MapMode - mpOutputDevice->Pop(); - - // restore AntiAliasing - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); - } - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/contourextractor2d.cxx b/drawinglayer/source/processor2d/contourextractor2d.cxx deleted file mode 100644 index b7089f23eb..0000000000 --- a/drawinglayer/source/processor2d/contourextractor2d.cxx +++ /dev/null @@ -1,206 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/contourextractor2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/metafileprimitive2d.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/sceneprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - ContourExtractor2D::ContourExtractor2D(const geometry::ViewInformation2D& rViewInformation) - : BaseProcessor2D(rViewInformation), - maExtractedContour() - { - } - - ContourExtractor2D::~ContourExtractor2D() - { - } - - void ContourExtractor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) - { - switch(rCandidate.getPrimitive2DID()) - { - case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D : - { - // extract hairline in world coordinates - const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate)); - basegfx::B2DPolygon aLocalPolygon(rPolygonCandidate.getB2DPolygon()); - aLocalPolygon.transform(getViewInformation2D().getObjectTransformation()); - - if(aLocalPolygon.isClosed()) - { - // line polygons need to be represented as open polygons to differentiate them - // from filled polygons - basegfx::tools::openWithGeometryChange(aLocalPolygon); - } - - maExtractedContour.push_back(basegfx::B2DPolyPolygon(aLocalPolygon)); - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : - { - // extract fill in world coordinates - const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate)); - basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolygonCandidate.getB2DPolyPolygon()); - aLocalPolyPolygon.transform(getViewInformation2D().getObjectTransformation()); - maExtractedContour.push_back(aLocalPolyPolygon); - break; - } - case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : - { - // extract BoundRect from bitmaps in world coordinates - const primitive2d::BitmapPrimitive2D& rBitmapCandidate(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate)); - basegfx::B2DHomMatrix aLocalTransform(getViewInformation2D().getObjectTransformation() * rBitmapCandidate.getTransform()); - basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon()); - aPolygon.transform(aLocalTransform); - maExtractedContour.push_back(basegfx::B2DPolyPolygon(aPolygon)); - break; - } - case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : - { - // extract BoundRect from MetaFiles in world coordinates - const primitive2d::MetafilePrimitive2D& rMetaCandidate(static_cast< const primitive2d::MetafilePrimitive2D& >(rCandidate)); - basegfx::B2DHomMatrix aLocalTransform(getViewInformation2D().getObjectTransformation() * rMetaCandidate.getTransform()); - basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon()); - aPolygon.transform(aLocalTransform); - maExtractedContour.push_back(basegfx::B2DPolyPolygon(aPolygon)); - break; - } - case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D : - { - // sub-transparence group. Look at children - const primitive2d::TransparencePrimitive2D& rTransCandidate(static_cast< const primitive2d::TransparencePrimitive2D& >(rCandidate)); - process(rTransCandidate.getChildren()); - break; - } - case PRIMITIVE2D_ID_MASKPRIMITIVE2D : - { - // extract mask in world coordinates, ignore content - const primitive2d::MaskPrimitive2D& rMaskCandidate(static_cast< const primitive2d::MaskPrimitive2D& >(rCandidate)); - basegfx::B2DPolyPolygon aMask(rMaskCandidate.getMask()); - aMask.transform(getViewInformation2D().getObjectTransformation()); - maExtractedContour.push_back(basegfx::B2DPolyPolygon(aMask)); - break; - } - case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D : - { - // remember current ViewInformation2D - const primitive2d::TransformPrimitive2D& rTransformCandidate(static_cast< const primitive2d::TransformPrimitive2D& >(rCandidate)); - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // create new local ViewInformation2D - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation() * rTransformCandidate.getTransformation(), - getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // proccess content - process(rTransformCandidate.getChildren()); - - // restore transformations - updateViewInformation(aLastViewInformation2D); - - break; - } - case PRIMITIVE2D_ID_SCENEPRIMITIVE2D : - { - // 2D Scene primitive containing 3D stuff; extract 2D contour in world coordinates - const primitive2d::ScenePrimitive2D& rScenePrimitive2DCandidate(static_cast< const primitive2d::ScenePrimitive2D& >(rCandidate)); - const primitive2d::Primitive2DSequence xExtracted2DSceneGeometry(rScenePrimitive2DCandidate.getGeometry2D()); - const primitive2d::Primitive2DSequence xExtracted2DSceneShadow(rScenePrimitive2DCandidate.getShadow2D(getViewInformation2D())); - - // proccess content - if(xExtracted2DSceneGeometry.hasElements()) - { - process(xExtracted2DSceneGeometry); - } - - // proccess content - if(xExtracted2DSceneShadow.hasElements()) - { - process(xExtracted2DSceneShadow); - } - - break; - } - case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D : - case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D : - case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D : - { - // ignorable primitives - break; - } - case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D : - case PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D : - { - // primitives who's BoundRect will be added in world coordinates - basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D())); - aRange.transform(getViewInformation2D().getObjectTransformation()); - maExtractedContour.push_back(basegfx::B2DPolyPolygon(basegfx::tools::createPolygonFromRect(aRange))); - break; - } - default : - { - // process recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - break; - } - } - } - - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/helperchartrenderer.cxx b/drawinglayer/source/processor2d/helperchartrenderer.cxx deleted file mode 100644 index a3a24767c1..0000000000 --- a/drawinglayer/source/processor2d/helperchartrenderer.cxx +++ /dev/null @@ -1,158 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <helperchartrenderer.hxx> -#include <drawinglayer/primitive2d/chartprimitive2d.hxx> -#include <svtools/chartprettypainter.hxx> -#include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <drawinglayer/geometry/viewinformation2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - bool renderChartPrimitive2D( - const primitive2d::ChartPrimitive2D& rChartCandidate, - OutputDevice& rOutputDevice, - const geometry::ViewInformation2D& rViewInformation2D) - { - bool bChartRendered(false); - - // code from chart PrettyPrinter - try - { - uno::Reference< lang::XMultiServiceFactory > xFact( rChartCandidate.getChartModel(), uno::UNO_QUERY ); - OSL_ENSURE( xFact.is(), "Chart cannot be painted pretty!\n" ); - - if( xFact.is() ) - { - uno::Reference< lang::XUnoTunnel > xChartRenderer( xFact->createInstance( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart2.ChartRenderer" ) ) ), uno::UNO_QUERY ); - OSL_ENSURE( xChartRenderer.is(), "Chart cannot be painted pretty!\n" ); - - if( xChartRenderer.is() ) - { - ChartPrettyPainter* pPrettyPainter = reinterpret_cast<ChartPrettyPainter*>( - xChartRenderer->getSomething( ChartPrettyPainter::getUnoTunnelId() )); - - if( pPrettyPainter ) - { - // create logic object range; do NOT use ObjectTransformation for this - // (rViewInformation2D.getObjectTransformation()), only the logic object - // size is wanted - basegfx::B2DRange aObjectRange(0.0, 0.0, 1.0, 1.0); - aObjectRange.transform(rChartCandidate.getTransformation()); - const Rectangle aRectangle( - (sal_Int32)aObjectRange.getMinX(), (sal_Int32)aObjectRange.getMinY(), - (sal_Int32)aObjectRange.getMaxX(), (sal_Int32)aObjectRange.getMaxY()); - - // #i101811# - if(rViewInformation2D.getObjectTransformation().isIdentity()) - { - // no embedding in another transfromation, just paint with existing - // MapMode. This is just a shortcut; using the below code will also - // work; it has just a neutral ObjectTransformation - bChartRendered = pPrettyPainter->DoPaint(&rOutputDevice, aRectangle); - } - else - { - // rViewInformation2D.getObjectTransformation() is used and - // needs to be expressed in the MapMode for the PrettyPainter; - // else it would call ChartModelHelper::setPageSize(...) with the - // changed size what really will change the chart model and leads - // to re-layouts and re-formattings - const MapMode aOldMapMode(rOutputDevice.GetMapMode()); - basegfx::B2DVector aVTScale, aScale, aTranslate; - double fRotate, fShearX; - - // get basic scaling with current MapMode (aVTScale), containing - // mapping for set MapUnit (e.g. for 100th mm, the basic scale is - // not 1.0, 1.0). This is needed since this scale is included in - // the ObjectToView Transformation and needs to be removed (see - // correction below) to re-create a MapMode - rOutputDevice.SetMapMode(aOldMapMode.GetMapUnit()); - rOutputDevice.GetViewTransformation().decompose(aVTScale, aTranslate, fRotate, fShearX); - - // get complete ObjectToView Transformation scale and translate from current - // transformation chain (combined view and object transform) - rViewInformation2D.getObjectToViewTransformation().decompose(aScale, aTranslate, fRotate, fShearX); - - // assert when shear and/or rotation is used - OSL_ENSURE(basegfx::fTools::equalZero(fRotate), "Chart PrettyPrinting with unsupportable rotation (!)"); - OSL_ENSURE(basegfx::fTools::equalZero(fShearX), "Chart PrettyPrinting with unsupportable shear (!)"); - - // clean scale and translate from basic scaling (DPI, etc...) - // since this will implicitely be part of the to-be-created MapMode - const basegfx::B2DTuple aBasicCleaner( - basegfx::fTools::equalZero(aVTScale.getX()) ? 1.0 : 1.0 / aVTScale.getX(), - basegfx::fTools::equalZero(aVTScale.getY()) ? 1.0 : 1.0 / aVTScale.getY()); - aScale *= aBasicCleaner; - aTranslate *= aBasicCleaner; - - // for MapMode, take scale out of translation - const basegfx::B2DTuple aScaleRemover( - basegfx::fTools::equalZero(aScale.getX()) ? 1.0 : 1.0 / aScale.getX(), - basegfx::fTools::equalZero(aScale.getY()) ? 1.0 : 1.0 / aScale.getY()); - aTranslate *= aScaleRemover; - - // build new MapMode - const MapMode aNewMapMode(aOldMapMode.GetMapUnit(), - Point(basegfx::fround(aTranslate.getX()), basegfx::fround(aTranslate.getY())), - Fraction(aScale.getX()), Fraction(aScale.getY())); - - // use, paint, restore - rOutputDevice.SetMapMode(aNewMapMode); - bChartRendered = pPrettyPainter->DoPaint(&rOutputDevice, aRectangle); - rOutputDevice.SetMapMode(aOldMapMode); - } - } - } - } - } - catch( uno::Exception& e ) - { - (void)e; - OSL_FAIL( "Chart cannot be painted pretty!" ); - } - - return bChartRendered; - } -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/helperchartrenderer.hxx b/drawinglayer/source/processor2d/helperchartrenderer.hxx deleted file mode 100644 index 0f1da6e515..0000000000 --- a/drawinglayer/source/processor2d/helperchartrenderer.hxx +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_HELPERCHARTRENDER_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_HELPERCHARTRENDER_HXX - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -class OutputDevice; - -namespace drawinglayer { namespace primitive2d { class ChartPrimitive2D; }} -namespace drawinglayer { namespace geometry { class ViewInformation2D; }} - -////////////////////////////////////////////////////////////////////////////// -// support chart PrettyPrinter usage from primitives - -namespace drawinglayer -{ - // #i101811# - // Added current ViewInformation2D to take evtl. changed - // ObjectTransformation into account - bool renderChartPrimitive2D( - const primitive2d::ChartPrimitive2D& rChartCandidate, - OutputDevice& rOutputDevice, - const geometry::ViewInformation2D& rViewInformation2D); - -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_HELPERCHARTRENDER_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/helperwrongspellrenderer.cxx b/drawinglayer/source/processor2d/helperwrongspellrenderer.cxx deleted file mode 100644 index a1be549911..0000000000 --- a/drawinglayer/source/processor2d/helperwrongspellrenderer.cxx +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <helperwrongspellrenderer.hxx> -#include <drawinglayer/primitive2d/wrongspellprimitive2d.hxx> -#include <tools/gen.hxx> -#include <vcl/outdev.hxx> -#include <basegfx/color/bcolormodifier.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - bool renderWrongSpellPrimitive2D( - const primitive2d::WrongSpellPrimitive2D& rWrongSpellCandidate, - OutputDevice& rOutputDevice, - const basegfx::B2DHomMatrix& rObjectToViewTransformation, - const basegfx::BColorModifierStack& rBColorModifierStack) - { - const basegfx::B2DHomMatrix aLocalTransform(rObjectToViewTransformation * rWrongSpellCandidate.getTransformation()); - const basegfx::B2DVector aFontVectorPixel(aLocalTransform * basegfx::B2DVector(0.0, 1.0)); - const sal_uInt32 nFontPixelHeight(basegfx::fround(aFontVectorPixel.getLength())); - - static const sal_uInt32 nMinimumFontHeight(5); // #define WRONG_SHOW_MIN 5 - static const sal_uInt32 nSmallFontHeight(11); // #define WRONG_SHOW_SMALL 11 - static const sal_uInt32 nMediumFontHeight(15); // #define WRONG_SHOW_MEDIUM 15 - - if(nFontPixelHeight > nMinimumFontHeight) - { - const basegfx::B2DPoint aStart(aLocalTransform * basegfx::B2DPoint(rWrongSpellCandidate.getStart(), 0.0)); - const basegfx::B2DPoint aStop(aLocalTransform * basegfx::B2DPoint(rWrongSpellCandidate.getStop(), 0.0)); - const Point aVclStart(basegfx::fround(aStart.getX()), basegfx::fround(aStart.getY())); - const Point aVclStop(basegfx::fround(aStop.getX()), basegfx::fround(aStop.getY())); - sal_uInt16 nWaveStyle(WAVE_FLAT); - - if(nFontPixelHeight > nMediumFontHeight) - { - nWaveStyle = WAVE_NORMAL; - } - else if(nFontPixelHeight > nSmallFontHeight) - { - nWaveStyle = WAVE_SMALL; - } - - // #i101075# draw it. Do not forget to use the evtl. offsetted origin of the target device, - // e.g. when used with mask/transparence buffer device - const Point aOrigin(rOutputDevice.GetMapMode().GetOrigin()); - - const basegfx::BColor aProcessedColor(rBColorModifierStack.getModifiedColor(rWrongSpellCandidate.getColor())); - const bool bMapModeEnabledState(rOutputDevice.IsMapModeEnabled()); - - rOutputDevice.EnableMapMode(false); - rOutputDevice.SetLineColor(Color(aProcessedColor)); - rOutputDevice.SetFillColor(); - rOutputDevice.DrawWaveLine(aOrigin + aVclStart, aOrigin + aVclStop, nWaveStyle); - rOutputDevice.EnableMapMode(bMapModeEnabledState); - } - - // cannot really go wrong - return true; - } -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/helperwrongspellrenderer.hxx b/drawinglayer/source/processor2d/helperwrongspellrenderer.hxx deleted file mode 100644 index cdc572dba0..0000000000 --- a/drawinglayer/source/processor2d/helperwrongspellrenderer.hxx +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_HELPERWRONGSPELLRENDER_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_HELPERWRONGSPELLRENDER_HXX - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -class OutputDevice; - -namespace drawinglayer { namespace primitive2d { - class WrongSpellPrimitive2D; -}} - -namespace basegfx { - class B2DHomMatrix; - class BColorModifierStack; -} - -////////////////////////////////////////////////////////////////////////////// -// support WrongSpell rendreing using VCL from primitives due to VCLs nice -// and fast solution with wavelines - -namespace drawinglayer -{ - bool renderWrongSpellPrimitive2D( - const primitive2d::WrongSpellPrimitive2D& rWrongSpellCandidate, - OutputDevice& rOutputDevice, - const basegfx::B2DHomMatrix& rObjectToViewTransformation, - const basegfx::BColorModifierStack& rBColorModifierStack); - -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_HELPERWRONGSPELLRENDER_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/hittestprocessor2d.cxx b/drawinglayer/source/processor2d/hittestprocessor2d.cxx deleted file mode 100644 index 4349ee6d19..0000000000 --- a/drawinglayer/source/processor2d/hittestprocessor2d.cxx +++ /dev/null @@ -1,610 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/hittestprocessor2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <drawinglayer/primitive2d/sceneprimitive2d.hxx> -#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx> -#include <basegfx/matrix/b3dhommatrix.hxx> -#include <drawinglayer/processor3d/cutfindprocessor3d.hxx> -#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - HitTestProcessor2D::HitTestProcessor2D(const geometry::ViewInformation2D& rViewInformation, - const basegfx::B2DPoint& rLogicHitPosition, - double fLogicHitTolerance, - bool bHitTextOnly) - : BaseProcessor2D(rViewInformation), - maDiscreteHitPosition(), - mfDiscreteHitTolerance(0.0), - mbHit(false), - mbHitToleranceUsed(false), - mbUseInvisiblePrimitiveContent(true), - mbHitTextOnly(bHitTextOnly) - { - // init hit tolerance - mfDiscreteHitTolerance = fLogicHitTolerance; - - if(basegfx::fTools::less(mfDiscreteHitTolerance, 0.0)) - { - // ensure input parameter for hit tolerance is >= 0.0 - mfDiscreteHitTolerance = 0.0; - } - else if(basegfx::fTools::more(mfDiscreteHitTolerance, 0.0)) - { - // generate discrete hit tolerance - mfDiscreteHitTolerance = (getViewInformation2D().getObjectToViewTransformation() - * basegfx::B2DVector(mfDiscreteHitTolerance, 0.0)).getLength(); - } - - // gererate discrete hit position - maDiscreteHitPosition = getViewInformation2D().getObjectToViewTransformation() * rLogicHitPosition; - - // check if HitTolerance is used - mbHitToleranceUsed = basegfx::fTools::more(getDiscreteHitTolerance(), 0.0); - } - - HitTestProcessor2D::~HitTestProcessor2D() - { - } - - bool HitTestProcessor2D::checkHairlineHitWithTolerance( - const basegfx::B2DPolygon& rPolygon, - double fDiscreteHitTolerance) - { - basegfx::B2DPolygon aLocalPolygon(rPolygon); - aLocalPolygon.transform(getViewInformation2D().getObjectToViewTransformation()); - - // get discrete range - basegfx::B2DRange aPolygonRange(aLocalPolygon.getB2DRange()); - - if(basegfx::fTools::more(fDiscreteHitTolerance, 0.0)) - { - aPolygonRange.grow(fDiscreteHitTolerance); - } - - // do rough range test first - if(aPolygonRange.isInside(getDiscreteHitPosition())) - { - // check if a polygon edge is hit - return basegfx::tools::isInEpsilonRange( - aLocalPolygon, - getDiscreteHitPosition(), - fDiscreteHitTolerance); - } - - return false; - } - - bool HitTestProcessor2D::checkFillHitWithTolerance( - const basegfx::B2DPolyPolygon& rPolyPolygon, - double fDiscreteHitTolerance) - { - bool bRetval(false); - basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolyPolygon); - aLocalPolyPolygon.transform(getViewInformation2D().getObjectToViewTransformation()); - - // get discrete range - basegfx::B2DRange aPolygonRange(aLocalPolyPolygon.getB2DRange()); - const bool bDiscreteHitToleranceUsed(basegfx::fTools::more(fDiscreteHitTolerance, 0.0)); - - if(bDiscreteHitToleranceUsed) - { - aPolygonRange.grow(fDiscreteHitTolerance); - } - - // do rough range test first - if(aPolygonRange.isInside(getDiscreteHitPosition())) - { - // if a HitTolerance is given, check for polygon edge hit in epsilon first - if(bDiscreteHitToleranceUsed && - basegfx::tools::isInEpsilonRange( - aLocalPolyPolygon, - getDiscreteHitPosition(), - fDiscreteHitTolerance)) - { - bRetval = true; - } - - // check for hit in filled polyPolygon - if(!bRetval && basegfx::tools::isInside( - aLocalPolyPolygon, - getDiscreteHitPosition(), - true)) - { - bRetval = true; - } - } - - return bRetval; - } - - void HitTestProcessor2D::check3DHit(const primitive2d::ScenePrimitive2D& rCandidate) - { - // calculate relative point in unified 2D scene - const basegfx::B2DPoint aLogicHitPosition(getViewInformation2D().getInverseObjectToViewTransformation() * getDiscreteHitPosition()); - - // use bitmap check in ScenePrimitive2D - bool bTryFastResult(false); - - if(rCandidate.tryToCheckLastVisualisationDirectHit(aLogicHitPosition, bTryFastResult)) - { - mbHit = bTryFastResult; - } - else - { - basegfx::B2DHomMatrix aInverseSceneTransform(rCandidate.getObjectTransformation()); - aInverseSceneTransform.invert(); - const basegfx::B2DPoint aRelativePoint(aInverseSceneTransform * aLogicHitPosition); - - // check if test point is inside scene's unified area at all - if(aRelativePoint.getX() >= 0.0 && aRelativePoint.getX() <= 1.0 - && aRelativePoint.getY() >= 0.0 && aRelativePoint.getY() <= 1.0) - { - // get 3D view information - const geometry::ViewInformation3D& rObjectViewInformation3D = rCandidate.getViewInformation3D(); - - // create HitPoint Front and Back, transform to object coordinates - basegfx::B3DHomMatrix aViewToObject(rObjectViewInformation3D.getObjectToView()); - aViewToObject.invert(); - const basegfx::B3DPoint aFront(aViewToObject * basegfx::B3DPoint(aRelativePoint.getX(), aRelativePoint.getY(), 0.0)); - const basegfx::B3DPoint aBack(aViewToObject * basegfx::B3DPoint(aRelativePoint.getX(), aRelativePoint.getY(), 1.0)); - - if(!aFront.equal(aBack)) - { - const primitive3d::Primitive3DSequence& rPrimitives = rCandidate.getChildren3D(); - - if(rPrimitives.hasElements()) - { - // make BoundVolume empty and overlapping test for speedup - const basegfx::B3DRange aObjectRange( - drawinglayer::primitive3d::getB3DRangeFromPrimitive3DSequence( - rPrimitives, rObjectViewInformation3D)); - - if(!aObjectRange.isEmpty()) - { - const basegfx::B3DRange aFrontBackRange(aFront, aBack); - - if(aObjectRange.overlaps(aFrontBackRange)) - { - // bound volumes hit, geometric cut tests needed - drawinglayer::processor3d::CutFindProcessor aCutFindProcessor( - rObjectViewInformation3D, - aFront, - aBack, - true); - aCutFindProcessor.process(rPrimitives); - - mbHit = (0 != aCutFindProcessor.getCutPoints().size()); - } - } - } - } - } - - // This is needed to check hit with 3D shadows, too. HitTest is without shadow - // to keep compatible with previous versions. Keeping here as reference - // - // if(!getHit()) - // { - // // if scene has shadow, check hit with shadow, too - // const primitive2d::Primitive2DSequence xExtracted2DSceneShadow(rCandidate.getShadow2D(getViewInformation2D())); - // - // if(xExtracted2DSceneShadow.hasElements()) - // { - // // proccess extracted 2D content - // process(xExtracted2DSceneShadow); - // } - // } - - if(!getHit()) - { - // empty 3D scene; Check for border hit - basegfx::B2DPolygon aOutline(basegfx::tools::createUnitPolygon()); - aOutline.transform(rCandidate.getObjectTransformation()); - - mbHit = checkHairlineHitWithTolerance(aOutline, getDiscreteHitTolerance()); - } - - // This is what the previous version did. Keeping it here for reference - // - // // 2D Scene primitive containing 3D stuff; extract 2D contour in world coordinates - // // This may be refined later to an own 3D HitTest renderer which processes the 3D - // // geometry directly - // const primitive2d::ScenePrimitive2D& rScenePrimitive2DCandidate(static_cast< const primitive2d::ScenePrimitive2D& >(rCandidate)); - // const primitive2d::Primitive2DSequence xExtracted2DSceneGeometry(rScenePrimitive2DCandidate.getGeometry2D()); - // const primitive2d::Primitive2DSequence xExtracted2DSceneShadow(rScenePrimitive2DCandidate.getShadow2D(getViewInformation2D())); - // - // if(xExtracted2DSceneGeometry.hasElements() || xExtracted2DSceneShadow.hasElements()) - // { - // // proccess extracted 2D content - // process(xExtracted2DSceneGeometry); - // process(xExtracted2DSceneShadow); - // } - // else - // { - // // empty 3D scene; Check for border hit - // const basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D())); - // if(!aRange.isEmpty()) - // { - // const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange)); - // mbHit = checkHairlineHitWithTolerance(aOutline, getDiscreteHitTolerance()); - // } - // } - } - } - - void HitTestProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) - { - if(getHit()) - { - // stop processing as soon as a hit was recognized - return; - } - - switch(rCandidate.getPrimitive2DID()) - { - case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D : - { - // remember current ViewInformation2D - const primitive2d::TransformPrimitive2D& rTransformCandidate(static_cast< const primitive2d::TransformPrimitive2D& >(rCandidate)); - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // create new local ViewInformation2D containing transformation - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation() * rTransformCandidate.getTransformation(), - getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // proccess child content recursively - process(rTransformCandidate.getChildren()); - - // restore transformations - updateViewInformation(aLastViewInformation2D); - - break; - } - case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D : - { - if(!getHitTextOnly()) - { - // create hairline in discrete coordinates - const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate)); - - // use hairline test - mbHit = checkHairlineHitWithTolerance(rPolygonCandidate.getB2DPolygon(), getDiscreteHitTolerance()); - } - - break; - } - case PRIMITIVE2D_ID_POLYGONMARKERPRIMITIVE2D : - { - if(!getHitTextOnly()) - { - // handle marker like hairline; no need to decompose in dashes - const primitive2d::PolygonMarkerPrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonMarkerPrimitive2D& >(rCandidate)); - - // use hairline test - mbHit = checkHairlineHitWithTolerance(rPolygonCandidate.getB2DPolygon(), getDiscreteHitTolerance()); - } - - break; - } - case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D : - { - if(!getHitTextOnly()) - { - // handle stroke evtl. directly; no need to decompose to filled polygon outlines - const primitive2d::PolygonStrokePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonStrokePrimitive2D& >(rCandidate)); - const attribute::LineAttribute& rLineAttribute = rPolygonCandidate.getLineAttribute(); - - if(basegfx::fTools::more(rLineAttribute.getWidth(), 0.0)) - { - if(basegfx::B2DLINEJOIN_MITER == rLineAttribute.getLineJoin()) - { - // if line is mitered, use decomposition since mitered line - // geometry may use more space than the geometry grown by half line width - process(rCandidate.get2DDecomposition(getViewInformation2D())); - } - else - { - // for all other B2DLINEJOIN_* do a hairline HitTest with expanded tolerance - const basegfx::B2DVector aDiscreteHalfLineVector(getViewInformation2D().getObjectToViewTransformation() - * basegfx::B2DVector(rLineAttribute.getWidth() * 0.5, 0.0)); - mbHit = checkHairlineHitWithTolerance( - rPolygonCandidate.getB2DPolygon(), - getDiscreteHitTolerance() + aDiscreteHalfLineVector.getLength()); - } - } - else - { - // hairline; fallback to hairline test. Do not decompose - // since this may decompose the hairline to dashes - mbHit = checkHairlineHitWithTolerance(rPolygonCandidate.getB2DPolygon(), getDiscreteHitTolerance()); - } - } - - break; - } - case PRIMITIVE2D_ID_POLYGONWAVEPRIMITIVE2D : - { - if(!getHitTextOnly()) - { - // do not use decompose; just handle like a line with width - const primitive2d::PolygonWavePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonWavePrimitive2D& >(rCandidate)); - double fLogicHitTolerance(0.0); - - // if WaveHeight, grow by it - if(basegfx::fTools::more(rPolygonCandidate.getWaveHeight(), 0.0)) - { - fLogicHitTolerance += rPolygonCandidate.getWaveHeight(); - } - - // if line width, grow by it - if(basegfx::fTools::more(rPolygonCandidate.getLineAttribute().getWidth(), 0.0)) - { - fLogicHitTolerance += rPolygonCandidate.getLineAttribute().getWidth() * 0.5; - } - - const basegfx::B2DVector aDiscreteHalfLineVector(getViewInformation2D().getObjectToViewTransformation() - * basegfx::B2DVector(fLogicHitTolerance, 0.0)); - - mbHit = checkHairlineHitWithTolerance( - rPolygonCandidate.getB2DPolygon(), - getDiscreteHitTolerance() + aDiscreteHalfLineVector.getLength()); - } - - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : - { - if(!getHitTextOnly()) - { - // create filled polyPolygon in discrete coordinates - const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate)); - - // use fill hit test - mbHit = checkFillHitWithTolerance(rPolygonCandidate.getB2DPolyPolygon(), getDiscreteHitTolerance()); - } - - break; - } - case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D : - { - // sub-transparence group - const primitive2d::TransparencePrimitive2D& rTransCandidate(static_cast< const primitive2d::TransparencePrimitive2D& >(rCandidate)); - - // Currently the transparence content is not taken into account; only - // the children are recursively checked for hit. This may be refined for - // parts where the content is completely transparent if needed. - process(rTransCandidate.getChildren()); - - break; - } - case PRIMITIVE2D_ID_MASKPRIMITIVE2D : - { - // create mask in discrete coordinates; only recursively continue - // with content when HitTest position is inside the mask - const primitive2d::MaskPrimitive2D& rMaskCandidate(static_cast< const primitive2d::MaskPrimitive2D& >(rCandidate)); - - // use fill hit test - if(checkFillHitWithTolerance(rMaskCandidate.getMask(), getDiscreteHitTolerance())) - { - // recursively HitTest children - process(rMaskCandidate.getChildren()); - } - - break; - } - case PRIMITIVE2D_ID_SCENEPRIMITIVE2D : - { - if(!getHitTextOnly()) - { - const primitive2d::ScenePrimitive2D& rScenePrimitive2D( - static_cast< const primitive2d::ScenePrimitive2D& >(rCandidate)); - check3DHit(rScenePrimitive2D); - } - - break; - } - case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D : - case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D : - case PRIMITIVE2D_ID_GRIDPRIMITIVE2D : - case PRIMITIVE2D_ID_HELPLINEPRIMITIVE2D : - { - // ignorable primitives - break; - } - case PRIMITIVE2D_ID_SHADOWPRIMITIVE2D : - { - // Ignore shadows; we do not want to have shadows hittable. - // Remove this one to make shadows hittable on demand. - break; - } - case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D : - case PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D : - { - // for text use the BoundRect of the primitive itself - const basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D())); - - if(!aRange.isEmpty()) - { - const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange)); - mbHit = checkFillHitWithTolerance(basegfx::B2DPolyPolygon(aOutline), getDiscreteHitTolerance()); - } - - break; - } - case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : - { - if(!getHitTextOnly()) - { - // The recently added BitmapEx::GetTransparency() makes it easy to extend - // the BitmapPrimitive2D HitTest to take the contained BotmapEx and it's - // transparency into account - const basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D())); - - if(!aRange.isEmpty()) - { - const primitive2d::BitmapPrimitive2D& rBitmapCandidate(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate)); - const BitmapEx& rBitmapEx = rBitmapCandidate.getBitmapEx(); - const Size& rSizePixel(rBitmapEx.GetSizePixel()); - - if(rSizePixel.Width() && rSizePixel.Height()) - { - basegfx::B2DHomMatrix aBackTransform( - getViewInformation2D().getObjectToViewTransformation() * - rBitmapCandidate.getTransform()); - aBackTransform.invert(); - - const basegfx::B2DPoint aRelativePoint(aBackTransform * getDiscreteHitPosition()); - const basegfx::B2DRange aUnitRange(0.0, 0.0, 1.0, 1.0); - - if(aUnitRange.isInside(aRelativePoint)) - { - const sal_Int32 nX(basegfx::fround(aRelativePoint.getX() * rSizePixel.Width())); - const sal_Int32 nY(basegfx::fround(aRelativePoint.getY() * rSizePixel.Height())); - - mbHit = (0xff != rBitmapEx.GetTransparency(nX, nY)); - } - } - else - { - // fallback to standard HitTest - const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange)); - mbHit = checkFillHitWithTolerance(basegfx::B2DPolyPolygon(aOutline), getDiscreteHitTolerance()); - } - } - } - - break; - } - case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : - case PRIMITIVE2D_ID_CONTROLPRIMITIVE2D : - case PRIMITIVE2D_ID_FILLGRADIENTPRIMITIVE2D : - case PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D : - case PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D : - case PRIMITIVE2D_ID_MEDIAPRIMITIVE2D: - case PRIMITIVE2D_ID_RENDERGRAPHICPRIMITIVE2D: - { - if(!getHitTextOnly()) - { - // Class of primitives for which just the BoundRect of the primitive itself - // will be used for HitTest currently. - // - // This may be refined in the future, e.g: - // - For Bitamps, the mask and/or transparence information may be used - // - For MetaFiles, the MetaFile content may be used - const basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D())); - - if(!aRange.isEmpty()) - { - const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange)); - mbHit = checkFillHitWithTolerance(basegfx::B2DPolyPolygon(aOutline), getDiscreteHitTolerance()); - } - } - - break; - } - case PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D : - { - // HiddenGeometryPrimitive2D; the default decomposition would return an empty seqence, - // so force this primitive to process it's children directly if the switch is set - // (which is the default). Else, ignore invisible content - const primitive2d::HiddenGeometryPrimitive2D& rHiddenGeometry(static_cast< const primitive2d::HiddenGeometryPrimitive2D& >(rCandidate)); - const primitive2d::Primitive2DSequence& rChildren = rHiddenGeometry.getChildren(); - - if(rChildren.hasElements()) - { - if(getUseInvisiblePrimitiveContent()) - { - process(rChildren); - } - } - - break; - } - case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D : - { - if(!getHitTextOnly()) - { - const primitive2d::PointArrayPrimitive2D& rPointArrayCandidate(static_cast< const primitive2d::PointArrayPrimitive2D& >(rCandidate)); - const std::vector< basegfx::B2DPoint >& rPositions = rPointArrayCandidate.getPositions(); - const sal_uInt32 nCount(rPositions.size()); - - for(sal_uInt32 a(0); !getHit() && a < nCount; a++) - { - const basegfx::B2DPoint aPosition(getViewInformation2D().getObjectToViewTransformation() * rPositions[a]); - const basegfx::B2DVector aDistance(aPosition - getDiscreteHitPosition()); - - if(aDistance.getLength() <= getDiscreteHitTolerance()) - { - mbHit = true; - } - } - } - - break; - } - default : - { - // process recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - - break; - } - } - } - - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/linegeometryextractor2d.cxx b/drawinglayer/source/processor2d/linegeometryextractor2d.cxx deleted file mode 100644 index 37966678eb..0000000000 --- a/drawinglayer/source/processor2d/linegeometryextractor2d.cxx +++ /dev/null @@ -1,148 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/linegeometryextractor2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - LineGeometryExtractor2D::LineGeometryExtractor2D(const geometry::ViewInformation2D& rViewInformation) - : BaseProcessor2D(rViewInformation), - maExtractedHairlines(), - maExtractedLineFills(), - mbInLineGeometry(false) - { - } - - LineGeometryExtractor2D::~LineGeometryExtractor2D() - { - } - - void LineGeometryExtractor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) - { - switch(rCandidate.getPrimitive2DID()) - { - case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D : - case PRIMITIVE2D_ID_POLYGONSTROKEARROWPRIMITIVE2D : - { - // enter a line geometry group (with or without LineEnds) - bool bOldState(mbInLineGeometry); - mbInLineGeometry = true; - process(rCandidate.get2DDecomposition(getViewInformation2D())); - mbInLineGeometry = bOldState; - break; - } - case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D : - { - if(mbInLineGeometry) - { - // extract hairline line geometry in world coordinates - const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate)); - basegfx::B2DPolygon aLocalPolygon(rPolygonCandidate.getB2DPolygon()); - aLocalPolygon.transform(getViewInformation2D().getObjectTransformation()); - maExtractedHairlines.push_back(aLocalPolygon); - } - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : - { - if(mbInLineGeometry) - { - // extract filled line geometry (line with width) - const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate)); - basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolygonCandidate.getB2DPolyPolygon()); - aLocalPolyPolygon.transform(getViewInformation2D().getObjectTransformation()); - maExtractedLineFills.push_back(aLocalPolyPolygon); - } - break; - } - case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D : - { - // remember current transformation and ViewInformation - const primitive2d::TransformPrimitive2D& rTransformCandidate(static_cast< const primitive2d::TransformPrimitive2D& >(rCandidate)); - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // create new transformations for CurrentTransformation and for local ViewInformation2D - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation() * rTransformCandidate.getTransformation(), - getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // proccess content - process(rTransformCandidate.getChildren()); - - // restore transformations - updateViewInformation(aLastViewInformation2D); - - break; - } - case PRIMITIVE2D_ID_SCENEPRIMITIVE2D : - case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D : - case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D : - case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D : - case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : - case PRIMITIVE2D_ID_RENDERGRAPHICPRIMITIVE2D : - case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : - case PRIMITIVE2D_ID_MASKPRIMITIVE2D : - { - // ignorable primitives - break; - } - default : - { - // process recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - break; - } - } - } - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/textaspolygonextractor2d.cxx b/drawinglayer/source/processor2d/textaspolygonextractor2d.cxx deleted file mode 100644 index e23eb20f83..0000000000 --- a/drawinglayer/source/processor2d/textaspolygonextractor2d.cxx +++ /dev/null @@ -1,251 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/textaspolygonextractor2d.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - void TextAsPolygonExtractor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) - { - switch(rCandidate.getPrimitive2DID()) - { - case PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D : - { - // TextDecoratedPortionPrimitive2D can produce the following primitives - // when being decomposed: - // - // - TextSimplePortionPrimitive2D - // - PolygonWavePrimitive2D - // - PolygonStrokePrimitive2D - // - PolygonStrokePrimitive2D - // - PolyPolygonColorPrimitive2D - // - PolyPolygonHairlinePrimitive2D - // - PolygonHairlinePrimitive2D - // - ShadowPrimitive2D - // - ModifiedColorPrimitive2D - // - TransformPrimitive2D - // - TextEffectPrimitive2D - // - ModifiedColorPrimitive2D - // - TransformPrimitive2D - // - GroupPrimitive2D - - // encapsulate with flag and use decomposition - mnInText++; - process(rCandidate.get2DDecomposition(getViewInformation2D())); - mnInText--; - - break; - } - case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D : - { - // TextSimplePortionPrimitive2D can produce the following primitives - // when being decomposed: - // - // - PolyPolygonColorPrimitive2D - // - TextEffectPrimitive2D - // - ModifiedColorPrimitive2D - // - TransformPrimitive2D - // - GroupPrimitive2D - - // encapsulate with flag and use decomposition - mnInText++; - process(rCandidate.get2DDecomposition(getViewInformation2D())); - mnInText--; - - break; - } - - // as can be seen from the TextSimplePortionPrimitive2D and the - // TextDecoratedPortionPrimitive2D, inside of the mnInText marks - // the following primitives can occurr containing geometry data - // from text decomposition: - // - // - PolyPolygonColorPrimitive2D - // - PolygonHairlinePrimitive2D - // - PolyPolygonHairlinePrimitive2D (for convenience) - // - case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : - { - if(mnInText) - { - const primitive2d::PolyPolygonColorPrimitive2D& rPoPoCoCandidate(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate)); - basegfx::B2DPolyPolygon aPolyPolygon(rPoPoCoCandidate.getB2DPolyPolygon()); - - if(aPolyPolygon.count()) - { - // transform the PolyPolygon - aPolyPolygon.transform(getViewInformation2D().getObjectToViewTransformation()); - - // get evtl. corrected color - const basegfx::BColor aColor(maBColorModifierStack.getModifiedColor(rPoPoCoCandidate.getBColor())); - - // add to result vector - maTarget.push_back(TextAsPolygonDataNode(aPolyPolygon, aColor, true)); - } - } - - break; - } - case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D : - { - if(mnInText) - { - const primitive2d::PolygonHairlinePrimitive2D& rPoHaCandidate(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate)); - basegfx::B2DPolygon aPolygon(rPoHaCandidate.getB2DPolygon()); - - if(aPolygon.count()) - { - // transform the Polygon - aPolygon.transform(getViewInformation2D().getObjectToViewTransformation()); - - // get evtl. corrected color - const basegfx::BColor aColor(maBColorModifierStack.getModifiedColor(rPoHaCandidate.getBColor())); - - // add to result vector - maTarget.push_back(TextAsPolygonDataNode(basegfx::B2DPolyPolygon(aPolygon), aColor, false)); - } - } - - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONHAIRLINEPRIMITIVE2D : - { - if(mnInText) - { - const primitive2d::PolyPolygonHairlinePrimitive2D& rPoPoHaCandidate(static_cast< const primitive2d::PolyPolygonHairlinePrimitive2D& >(rCandidate)); - basegfx::B2DPolyPolygon aPolyPolygon(rPoPoHaCandidate.getB2DPolyPolygon()); - - if(aPolyPolygon.count()) - { - // transform the Polygon - aPolyPolygon.transform(getViewInformation2D().getObjectToViewTransformation()); - - // get evtl. corrected color - const basegfx::BColor aColor(maBColorModifierStack.getModifiedColor(rPoPoHaCandidate.getBColor())); - - // add to result vector - maTarget.push_back(TextAsPolygonDataNode(aPolyPolygon, aColor, false)); - } - } - - break; - } - - // usage of color modification stack is needed - case PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D : - { - const primitive2d::ModifiedColorPrimitive2D& rModifiedColorCandidate(static_cast< const primitive2d::ModifiedColorPrimitive2D& >(rCandidate)); - - if(rModifiedColorCandidate.getChildren().hasElements()) - { - maBColorModifierStack.push(rModifiedColorCandidate.getColorModifier()); - process(rModifiedColorCandidate.getChildren()); - maBColorModifierStack.pop(); - } - - break; - } - - // usage of transformation stack is needed - case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D : - { - // remember current transformation and ViewInformation - const primitive2d::TransformPrimitive2D& rTransformCandidate(static_cast< const primitive2d::TransformPrimitive2D& >(rCandidate)); - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // create new transformations for CurrentTransformation and for local ViewInformation2D - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation() * rTransformCandidate.getTransformation(), - getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // proccess content - process(rTransformCandidate.getChildren()); - - // restore transformations - updateViewInformation(aLastViewInformation2D); - - break; - } - - // ignorable primitives - case PRIMITIVE2D_ID_SCENEPRIMITIVE2D : - case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D : - case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D : - case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D : - case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : - case PRIMITIVE2D_ID_RENDERGRAPHICPRIMITIVE2D : - case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : - case PRIMITIVE2D_ID_MASKPRIMITIVE2D : - { - break; - } - - default : - { - // process recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - break; - } - } - } - - TextAsPolygonExtractor2D::TextAsPolygonExtractor2D(const geometry::ViewInformation2D& rViewInformation) - : BaseProcessor2D(rViewInformation), - maTarget(), - maBColorModifierStack(), - mnInText(0) - { - } - - TextAsPolygonExtractor2D::~TextAsPolygonExtractor2D() - { - } - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclhelperbitmaprender.cxx b/drawinglayer/source/processor2d/vclhelperbitmaprender.cxx deleted file mode 100644 index 75ace24df6..0000000000 --- a/drawinglayer/source/processor2d/vclhelperbitmaprender.cxx +++ /dev/null @@ -1,280 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <vclhelperbitmaprender.hxx> -#include <svtools/grfmgr.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/range/b2drange.hxx> -#include <vcl/outdev.hxx> -#include <vclhelperbitmaptransform.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// -// support for different kinds of bitmap rendering using vcl - -namespace drawinglayer -{ - void RenderBitmapPrimitive2D_GraphicManager( - OutputDevice& rOutDev, - const BitmapEx& rBitmapEx, - const basegfx::B2DHomMatrix& rTransform) - { - // prepare attributes - GraphicAttr aAttributes; - - // decompose matrix to check for shear, rotate and mirroring - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - rTransform.decompose(aScale, aTranslate, fRotate, fShearX); - - // mirror flags - aAttributes.SetMirrorFlags( - (basegfx::fTools::less(aScale.getX(), 0.0) ? BMP_MIRROR_HORZ : 0)| - (basegfx::fTools::less(aScale.getY(), 0.0) ? BMP_MIRROR_VERT : 0)); - - // rotation - if(!basegfx::fTools::equalZero(fRotate)) - { - double fRotation(fmod(3600.0 - (fRotate * (10.0 / F_PI180)), 3600.0)); - aAttributes.SetRotation((sal_uInt16)(fRotation)); - } - - // prepare Bitmap - basegfx::B2DRange aOutlineRange(0.0, 0.0, 1.0, 1.0); - - if(basegfx::fTools::equalZero(fRotate)) - { - aOutlineRange.transform(rTransform); - } - else - { - // if rotated, create the unrotated output rectangle for the GraphicManager paint - const basegfx::B2DHomMatrix aSimpleObjectMatrix(basegfx::tools::createScaleTranslateB2DHomMatrix( - fabs(aScale.getX()), fabs(aScale.getY()), - aTranslate.getX(), aTranslate.getY())); - - aOutlineRange.transform(aSimpleObjectMatrix); - } - - // prepare dest coordinates - const Point aPoint( - basegfx::fround(aOutlineRange.getMinX()), - basegfx::fround(aOutlineRange.getMinY())); - const Size aSize( - basegfx::fround(aOutlineRange.getWidth()), - basegfx::fround(aOutlineRange.getHeight())); - - // paint it using GraphicManager - Graphic aGraphic(rBitmapEx); - GraphicObject aGraphicObject(aGraphic); - aGraphicObject.Draw(&rOutDev, aPoint, aSize, &aAttributes); - } - - void RenderBitmapPrimitive2D_BitmapEx( - OutputDevice& rOutDev, - const BitmapEx& rBitmapEx, - const basegfx::B2DHomMatrix& rTransform) - { - // only translate and scale, use vcl's DrawBitmapEx(). - BitmapEx aContent(rBitmapEx); - - // prepare dest coor. Necessary to expand since vcl's DrawBitmapEx draws one pix less - basegfx::B2DRange aOutlineRange(0.0, 0.0, 1.0, 1.0); - aOutlineRange.transform(rTransform); - // prepare dest coordinates - const Point aPoint( - basegfx::fround(aOutlineRange.getMinX()), - basegfx::fround(aOutlineRange.getMinY())); - const Size aSize( - basegfx::fround(aOutlineRange.getWidth()), - basegfx::fround(aOutlineRange.getHeight())); - - // decompose matrix to check for shear, rotate and mirroring - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - rTransform.decompose(aScale, aTranslate, fRotate, fShearX); - - // Check mirroring. - sal_uInt32 nMirrorFlags(BMP_MIRROR_NONE); - - if(basegfx::fTools::less(aScale.getX(), 0.0)) - { - nMirrorFlags |= BMP_MIRROR_HORZ; - } - - if(basegfx::fTools::less(aScale.getY(), 0.0)) - { - nMirrorFlags |= BMP_MIRROR_VERT; - } - - if(BMP_MIRROR_NONE != nMirrorFlags) - { - aContent.Mirror(nMirrorFlags); - } - - // draw bitmap - rOutDev.DrawBitmapEx(aPoint, aSize, aContent); - } - - void RenderBitmapPrimitive2D_self( - OutputDevice& rOutDev, - const BitmapEx& rBitmapEx, - const basegfx::B2DHomMatrix& rTransform) - { - // process self with free transformation (containing shear and rotate). Get dest rect in pixels. - basegfx::B2DRange aOutlineRange(0.0, 0.0, 1.0, 1.0); - aOutlineRange.transform(rTransform); - const Rectangle aDestRectLogic( - basegfx::fround(aOutlineRange.getMinX()), - basegfx::fround(aOutlineRange.getMinY()), - basegfx::fround(aOutlineRange.getMaxX()), - basegfx::fround(aOutlineRange.getMaxY())); - const Rectangle aDestRectPixel(rOutDev.LogicToPixel(aDestRectLogic)); - - // #i96708# check if Metafile is recorded - const GDIMetaFile* pMetaFile = rOutDev.GetConnectMetaFile(); - const bool bRecordToMetaFile(pMetaFile && pMetaFile->IsRecord() && !pMetaFile->IsPause()); - - // intersect with output pixel size, but only - // when not recording to metafile - const Rectangle aOutputRectPixel(Point(), rOutDev.GetOutputSizePixel()); - Rectangle aCroppedRectPixel(bRecordToMetaFile ? aDestRectPixel : aDestRectPixel.GetIntersection(aOutputRectPixel)); - - if(!aCroppedRectPixel.IsEmpty()) - { - // as maximum for destination, orientate at aOutputRectPixel, but - // take a rotation of 45 degrees (sqrt(2)) as maximum expansion into account - const Size aSourceSizePixel(rBitmapEx.GetSizePixel()); - const double fMaximumArea( - (double)aOutputRectPixel.getWidth() * - (double)aOutputRectPixel.getHeight() * - 1.4142136); // 1.4142136 taken as sqrt(2.0) - - // test if discrete view size (pixel) maybe too big and limit it - const double fArea(aCroppedRectPixel.getWidth() * aCroppedRectPixel.getHeight()); - const bool bNeedToReduce(fArea > fMaximumArea); - double fReduceFactor(1.0); - const Size aDestSizePixel(aCroppedRectPixel.GetSize()); - - if(bNeedToReduce) - { - fReduceFactor = sqrt(fMaximumArea / fArea); - aCroppedRectPixel.setWidth(basegfx::fround(aCroppedRectPixel.getWidth() * fReduceFactor)); - aCroppedRectPixel.setHeight(basegfx::fround(aCroppedRectPixel.getHeight() * fReduceFactor)); - } - - // build transform from pixel in aDestination to pixel in rBitmapEx - // from relative in aCroppedRectPixel to relative in aDestRectPixel - // No need to take bNeedToReduce into account, TopLeft is unchanged - basegfx::B2DHomMatrix aTransform(basegfx::tools::createTranslateB2DHomMatrix( - aCroppedRectPixel.Left() - aDestRectPixel.Left(), - aCroppedRectPixel.Top() - aDestRectPixel.Top())); - - // from relative in aDestRectPixel to absolute Logic. Here it - // is essential to adapt to reduce factor (if used) - double fAdaptedDRPWidth((double)aDestRectPixel.getWidth()); - double fAdaptedDRPHeight((double)aDestRectPixel.getHeight()); - - if(bNeedToReduce) - { - fAdaptedDRPWidth *= fReduceFactor; - fAdaptedDRPHeight *= fReduceFactor; - } - - aTransform = basegfx::tools::createScaleTranslateB2DHomMatrix( - aDestRectLogic.getWidth() / fAdaptedDRPWidth, aDestRectLogic.getHeight() / fAdaptedDRPHeight, - aDestRectLogic.Left(), aDestRectLogic.Top()) - * aTransform; - - // from absolute in Logic to unified object coordinates (0.0 .. 1.0 in x and y) - basegfx::B2DHomMatrix aInvBitmapTransform(rTransform); - aInvBitmapTransform.invert(); - aTransform = aInvBitmapTransform * aTransform; - - // from unit object coordinates to rBitmapEx pixel coordintes - aTransform.scale(aSourceSizePixel.getWidth() - 1L, aSourceSizePixel.getHeight() - 1L); - - // create bitmap using source, destination and linear back-transformation - BitmapEx aDestination = impTransformBitmapEx(rBitmapEx, aCroppedRectPixel, aTransform); - - // paint - if(bNeedToReduce) - { - // paint in target size - if(bRecordToMetaFile) - { - rOutDev.DrawBitmapEx( - rOutDev.PixelToLogic(aCroppedRectPixel.TopLeft()), - rOutDev.PixelToLogic(aDestSizePixel), - aDestination); - } - else - { - const bool bWasEnabled(rOutDev.IsMapModeEnabled()); - rOutDev.EnableMapMode(false); - - rOutDev.DrawBitmapEx( - aCroppedRectPixel.TopLeft(), - aDestSizePixel, - aDestination); - - rOutDev.EnableMapMode(bWasEnabled); - } - } - else - { - if(bRecordToMetaFile) - { - rOutDev.DrawBitmapEx( - rOutDev.PixelToLogic(aCroppedRectPixel.TopLeft()), - aDestination); - } - else - { - const bool bWasEnabled(rOutDev.IsMapModeEnabled()); - rOutDev.EnableMapMode(false); - - rOutDev.DrawBitmapEx( - aCroppedRectPixel.TopLeft(), - aDestination); - - rOutDev.EnableMapMode(bWasEnabled); - } - } - } - } -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclhelperbitmaprender.hxx b/drawinglayer/source/processor2d/vclhelperbitmaprender.hxx deleted file mode 100644 index 674c578cbf..0000000000 --- a/drawinglayer/source/processor2d/vclhelperbitmaprender.hxx +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBITMAPRENDER_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBITMAPRENDER_HXX - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -class OutputDevice; -class BitmapEx; -namespace basegfx { class B2DHomMatrix; } - -////////////////////////////////////////////////////////////////////////////// -// support methods for vcl direct gradient renderering - -namespace drawinglayer -{ - void RenderBitmapPrimitive2D_GraphicManager( - OutputDevice& rOutDev, - const BitmapEx& rBitmapEx, - const basegfx::B2DHomMatrix& rTransform); - - void RenderBitmapPrimitive2D_BitmapEx( - OutputDevice& rOutDev, - const BitmapEx& rBitmapEx, - const basegfx::B2DHomMatrix& rTransform); - - void RenderBitmapPrimitive2D_self( - OutputDevice& rOutDev, - const BitmapEx& rBitmapEx, - const basegfx::B2DHomMatrix& rTransform); - -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBITMAPRENDER_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclhelperbitmaptransform.cxx b/drawinglayer/source/processor2d/vclhelperbitmaptransform.cxx deleted file mode 100644 index 0676aabc04..0000000000 --- a/drawinglayer/source/processor2d/vclhelperbitmaptransform.cxx +++ /dev/null @@ -1,434 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <vclhelperbitmaptransform.hxx> -#include <vcl/bmpacc.hxx> -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/color/bcolormodifier.hxx> - -////////////////////////////////////////////////////////////////////////////// -// support for rendering Bitmap and BitmapEx contents - -namespace drawinglayer -{ - namespace - { - void impSmoothPoint(BitmapColor& rValue, const basegfx::B2DPoint& rSource, sal_Int32 nIntX, sal_Int32 nIntY, BitmapReadAccess& rRead) - { - double fDeltaX(rSource.getX() - nIntX); - double fDeltaY(rSource.getY() - nIntY); - sal_Int32 nIndX(0L); - sal_Int32 nIndY(0L); - - if(fDeltaX > 0.0 && nIntX + 1L < rRead.Width()) - { - nIndX++; - } - else if(fDeltaX < 0.0 && nIntX >= 1L) - { - fDeltaX = -fDeltaX; - nIndX--; - } - - if(fDeltaY > 0.0 && nIntY + 1L < rRead.Height()) - { - nIndY++; - } - else if(fDeltaY < 0.0 && nIntY >= 1L) - { - fDeltaY = -fDeltaY; - nIndY--; - } - - if(nIndX || nIndY) - { - const double fColorToReal(1.0 / 255.0); - double fR(rValue.GetRed() * fColorToReal); - double fG(rValue.GetGreen() * fColorToReal); - double fB(rValue.GetBlue() * fColorToReal); - double fRBottom(0.0), fGBottom(0.0), fBBottom(0.0); - - if(nIndX) - { - const double fMulA(fDeltaX * fColorToReal); - double fMulB(1.0 - fDeltaX); - const BitmapColor aTopPartner(rRead.GetColor(nIntY, nIntX + nIndX)); - - fR = (fR * fMulB) + (aTopPartner.GetRed() * fMulA); - fG = (fG * fMulB) + (aTopPartner.GetGreen() * fMulA); - fB = (fB * fMulB) + (aTopPartner.GetBlue() * fMulA); - - if(nIndY) - { - fMulB *= fColorToReal; - const BitmapColor aBottom(rRead.GetColor(nIntY + nIndY, nIntX)); - const BitmapColor aBottomPartner(rRead.GetColor(nIntY + nIndY, nIntX + nIndX)); - - fRBottom = (aBottom.GetRed() * fMulB) + (aBottomPartner.GetRed() * fMulA); - fGBottom = (aBottom.GetGreen() * fMulB) + (aBottomPartner.GetGreen() * fMulA); - fBBottom = (aBottom.GetBlue() * fMulB) + (aBottomPartner.GetBlue() * fMulA); - } - } - - if(nIndY) - { - if(!nIndX) - { - const BitmapColor aBottom(rRead.GetColor(nIntY + nIndY, nIntX)); - - fRBottom = aBottom.GetRed() * fColorToReal; - fGBottom = aBottom.GetGreen() * fColorToReal; - fBBottom = aBottom.GetBlue() * fColorToReal; - } - - const double fMulB(1.0 - fDeltaY); - - fR = (fR * fMulB) + (fRBottom * fDeltaY); - fG = (fG * fMulB) + (fGBottom * fDeltaY); - fB = (fB * fMulB) + (fBBottom * fDeltaY); - } - - rValue.SetRed((sal_uInt8)(fR * 255.0)); - rValue.SetGreen((sal_uInt8)(fG * 255.0)); - rValue.SetBlue((sal_uInt8)(fB * 255.0)); - } - } - - void impSmoothIndex(BitmapColor& rValue, const basegfx::B2DPoint& rSource, sal_Int32 nIntX, sal_Int32 nIntY, BitmapReadAccess& rRead) - { - double fDeltaX(rSource.getX() - nIntX); - double fDeltaY(rSource.getY() - nIntY); - sal_Int32 nIndX(0L); - sal_Int32 nIndY(0L); - - if(fDeltaX > 0.0 && nIntX + 1L < rRead.Width()) - { - nIndX++; - } - else if(fDeltaX < 0.0 && nIntX >= 1L) - { - fDeltaX = -fDeltaX; - nIndX--; - } - - if(fDeltaY > 0.0 && nIntY + 1L < rRead.Height()) - { - nIndY++; - } - else if(fDeltaY < 0.0 && nIntY >= 1L) - { - fDeltaY = -fDeltaY; - nIndY--; - } - - if(nIndX || nIndY) - { - const double fColorToReal(1.0 / 255.0); - double fVal(rValue.GetIndex() * fColorToReal); - double fValBottom(0.0); - - if(nIndX) - { - const double fMulA(fDeltaX * fColorToReal); - double fMulB(1.0 - fDeltaX); - const BitmapColor aTopPartner(rRead.GetPixel(nIntY, nIntX + nIndX)); - - fVal = (fVal * fMulB) + (aTopPartner.GetIndex() * fMulA); - - if(nIndY) - { - fMulB *= fColorToReal; - const BitmapColor aBottom(rRead.GetPixel(nIntY + nIndY, nIntX)); - const BitmapColor aBottomPartner(rRead.GetPixel(nIntY + nIndY, nIntX + nIndX)); - - fValBottom = (aBottom.GetIndex() * fMulB) + (aBottomPartner.GetIndex() * fMulA); - } - } - - if(nIndY) - { - if(!nIndX) - { - const BitmapColor aBottom(rRead.GetPixel(nIntY + nIndY, nIntX)); - - fValBottom = aBottom.GetIndex() * fColorToReal; - } - - const double fMulB(1.0 - fDeltaY); - - fVal = (fVal * fMulB) + (fValBottom * fDeltaY); - } - - rValue.SetIndex((sal_uInt8)(fVal * 255.0)); - } - } - - void impTransformBitmap(const Bitmap& rSource, Bitmap& rDestination, const basegfx::B2DHomMatrix& rTransform, bool bSmooth) - { - BitmapWriteAccess* pWrite = rDestination.AcquireWriteAccess(); - - if(pWrite) - { - const Size aContentSizePixel(rSource.GetSizePixel()); - BitmapReadAccess* pRead = (const_cast< Bitmap& >(rSource)).AcquireReadAccess(); - - if(pRead) - { - const Size aDestinationSizePixel(rDestination.GetSizePixel()); - bool bWorkWithIndex(rDestination.GetBitCount() <= 8); - BitmapColor aOutside(pRead->GetBestMatchingColor(BitmapColor(0xff, 0xff, 0xff))); - - for(sal_Int32 y(0L); y < aDestinationSizePixel.getHeight(); y++) - { - for(sal_Int32 x(0L); x < aDestinationSizePixel.getWidth(); x++) - { - const basegfx::B2DPoint aSourceCoor(rTransform * basegfx::B2DPoint(x, y)); - const sal_Int32 nIntX(basegfx::fround(aSourceCoor.getX())); - - if(nIntX >= 0L && nIntX < aContentSizePixel.getWidth()) - { - const sal_Int32 nIntY(basegfx::fround(aSourceCoor.getY())); - - if(nIntY >= 0L && nIntY < aContentSizePixel.getHeight()) - { - if(bWorkWithIndex) - { - BitmapColor aValue(pRead->GetPixel(nIntY, nIntX)); - - if(bSmooth) - { - impSmoothIndex(aValue, aSourceCoor, nIntX, nIntY, *pRead); - } - - pWrite->SetPixel(y, x, aValue); - } - else - { - BitmapColor aValue(pRead->GetColor(nIntY, nIntX)); - - if(bSmooth) - { - impSmoothPoint(aValue, aSourceCoor, nIntX, nIntY, *pRead); - } - - pWrite->SetPixel(y, x, aValue.IsIndex() ? aValue : pWrite->GetBestMatchingColor(aValue)); - } - - continue; - } - } - - // here are outside pixels. Complete mask - if(bWorkWithIndex) - { - pWrite->SetPixel(y, x, aOutside); - } - } - } - - delete pRead; - } - - delete pWrite; - } - } - - Bitmap impCreateEmptyBitmapWithPattern(const Bitmap& rSource, const Size& aTargetSizePixel) - { - Bitmap aRetval; - BitmapReadAccess* pReadAccess = (const_cast< Bitmap& >(rSource)).AcquireReadAccess(); - - if(pReadAccess) - { - if(rSource.GetBitCount() <= 8) - { - BitmapPalette aPalette(pReadAccess->GetPalette()); - aRetval = Bitmap(aTargetSizePixel, rSource.GetBitCount(), &aPalette); - } - else - { - aRetval = Bitmap(aTargetSizePixel, rSource.GetBitCount()); - } - - delete pReadAccess; - } - - return aRetval; - } - } // end of anonymous namespace -} // end of namespace drawinglayer - -namespace drawinglayer -{ - BitmapEx impTransformBitmapEx( - const BitmapEx& rSource, - const Rectangle& rCroppedRectPixel, - const basegfx::B2DHomMatrix& rTransform) - { - // force destination to 24 bit, we want to smooth output - const Size aDestinationSize(rCroppedRectPixel.GetSize()); - Bitmap aDestination(impCreateEmptyBitmapWithPattern(rSource.GetBitmap(), aDestinationSize)); - static bool bDoSmoothAtAll(true); - impTransformBitmap(rSource.GetBitmap(), aDestination, rTransform, bDoSmoothAtAll); - - // create mask - if(rSource.IsTransparent()) - { - if(rSource.IsAlpha()) - { - Bitmap aAlpha(impCreateEmptyBitmapWithPattern(rSource.GetAlpha().GetBitmap(), aDestinationSize)); - impTransformBitmap(rSource.GetAlpha().GetBitmap(), aAlpha, rTransform, bDoSmoothAtAll); - return BitmapEx(aDestination, AlphaMask(aAlpha)); - } - else - { - Bitmap aMask(impCreateEmptyBitmapWithPattern(rSource.GetMask(), aDestinationSize)); - impTransformBitmap(rSource.GetMask(), aMask, rTransform, false); - return BitmapEx(aDestination, aMask); - } - } - - return BitmapEx(aDestination); - } - - BitmapEx impModifyBitmapEx( - const basegfx::BColorModifierStack& rBColorModifierStack, - const BitmapEx& rSource) - { - Bitmap aChangedBitmap(rSource.GetBitmap()); - bool bDone(false); - - for(sal_uInt32 a(rBColorModifierStack.count()); a && !bDone; ) - { - const basegfx::BColorModifier& rModifier = rBColorModifierStack.getBColorModifier(--a); - - switch(rModifier.getMode()) - { - case basegfx::BCOLORMODIFYMODE_REPLACE : - { - // complete replace - if(rSource.IsTransparent()) - { - // clear bitmap with dest color - if(aChangedBitmap.GetBitCount() <= 8) - { - // do NOT use erase; for e.g. 8bit Bitmaps, the nearest color to the given - // erase color is determined and used -> this may be different from what is - // wanted here. Better create a new bitmap with the needed color explicitely - BitmapReadAccess* pReadAccess = aChangedBitmap.AcquireReadAccess(); - OSL_ENSURE(pReadAccess, "Got no Bitmap ReadAccess ?!?"); - - if(pReadAccess) - { - BitmapPalette aNewPalette(pReadAccess->GetPalette()); - aNewPalette[0] = BitmapColor(Color(rModifier.getBColor())); - aChangedBitmap = Bitmap( - aChangedBitmap.GetSizePixel(), - aChangedBitmap.GetBitCount(), - &aNewPalette); - delete pReadAccess; - } - } - else - { - aChangedBitmap.Erase(Color(rModifier.getBColor())); - } - } - else - { - // erase bitmap, caller will know to paint direct - aChangedBitmap.SetEmpty(); - } - - bDone = true; - break; - } - - default : // BCOLORMODIFYMODE_INTERPOLATE, BCOLORMODIFYMODE_GRAY, BCOLORMODIFYMODE_BLACKANDWHITE - { - BitmapWriteAccess* pContent = aChangedBitmap.AcquireWriteAccess(); - - if(pContent) - { - const double fConvertColor(1.0 / 255.0); - - for(sal_uInt32 y(0L); y < (sal_uInt32)pContent->Height(); y++) - { - for(sal_uInt32 x(0L); x < (sal_uInt32)pContent->Width(); x++) - { - const BitmapColor aBMCol(pContent->GetColor(y, x)); - const basegfx::BColor aBSource( - (double)aBMCol.GetRed() * fConvertColor, - (double)aBMCol.GetGreen() * fConvertColor, - (double)aBMCol.GetBlue() * fConvertColor); - const basegfx::BColor aBDest(rModifier.getModifiedColor(aBSource)); - - pContent->SetPixel(y, x, BitmapColor(Color(aBDest))); - } - } - - delete pContent; - } - - break; - } - } - } - - if(aChangedBitmap.IsEmpty()) - { - return BitmapEx(); - } - else - { - if(rSource.IsTransparent()) - { - if(rSource.IsAlpha()) - { - return BitmapEx(aChangedBitmap, rSource.GetAlpha()); - } - else - { - return BitmapEx(aChangedBitmap, rSource.GetMask()); - } - } - else - { - return BitmapEx(aChangedBitmap); - } - } - } -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclhelperbitmaptransform.hxx b/drawinglayer/source/processor2d/vclhelperbitmaptransform.hxx deleted file mode 100644 index 4362ea66e5..0000000000 --- a/drawinglayer/source/processor2d/vclhelperbitmaptransform.hxx +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBITMAPTRANSFORM_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBITMAPTRANSFORM_HXX - -#include <vcl/bitmapex.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { - class B2DHomMatrix; - class BColorModifierStack; -} - -////////////////////////////////////////////////////////////////////////////// -// support methods for vcl direct gradient renderering - -namespace drawinglayer -{ - BitmapEx impTransformBitmapEx( - const BitmapEx& rSource, - const Rectangle& rCroppedRectPixel, - const basegfx::B2DHomMatrix& rTransform); - - BitmapEx impModifyBitmapEx( - const basegfx::BColorModifierStack& rBColorModifierStack, - const BitmapEx& rSource); -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBITMAPTRANSFORM_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclhelperbufferdevice.cxx b/drawinglayer/source/processor2d/vclhelperbufferdevice.cxx deleted file mode 100644 index e3bec6802c..0000000000 --- a/drawinglayer/source/processor2d/vclhelperbufferdevice.cxx +++ /dev/null @@ -1,166 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <vclhelperbufferdevice.hxx> -#include <basegfx/range/b2drange.hxx> -#include <vcl/bitmapex.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <tools/stream.hxx> - -////////////////////////////////////////////////////////////////////////////// -// support for rendering Bitmap and BitmapEx contents - -namespace drawinglayer -{ - impBufferDevice::impBufferDevice( - OutputDevice& rOutDev, - const basegfx::B2DRange& rRange, - bool bAddOffsetToMapping) - : mrOutDev(rOutDev), - maContent(rOutDev), - mpMask(0L), - mpAlpha(0L) - { - basegfx::B2DRange aRangePixel(rRange); - aRangePixel.transform(rOutDev.GetViewTransformation()); - const Rectangle aRectPixel( - (sal_Int32)floor(aRangePixel.getMinX()), (sal_Int32)floor(aRangePixel.getMinY()), - (sal_Int32)ceil(aRangePixel.getMaxX()), (sal_Int32)ceil(aRangePixel.getMaxY())); - const Point aEmptyPoint; - maDestPixel = Rectangle(aEmptyPoint, rOutDev.GetOutputSizePixel()); - maDestPixel.Intersection(aRectPixel); - - if(isVisible()) - { - maContent.SetOutputSizePixel(maDestPixel.GetSize(), false); - - // #i93485# assert when copying from window to VDev is used - OSL_ENSURE(rOutDev.GetOutDevType() != OUTDEV_WINDOW, - "impBufferDevice render helper: Copying from Window to VDev, this should be avoided (!)"); - - const bool bWasEnabledSrc(rOutDev.IsMapModeEnabled()); - rOutDev.EnableMapMode(false); - maContent.DrawOutDev(aEmptyPoint, maDestPixel.GetSize(), maDestPixel.TopLeft(), maDestPixel.GetSize(), rOutDev); - rOutDev.EnableMapMode(bWasEnabledSrc); - - MapMode aNewMapMode(rOutDev.GetMapMode()); - - if(bAddOffsetToMapping) - { - const Point aLogicTopLeft(rOutDev.PixelToLogic(maDestPixel.TopLeft())); - aNewMapMode.SetOrigin(Point(-aLogicTopLeft.X(), -aLogicTopLeft.Y())); - } - - maContent.SetMapMode(aNewMapMode); - - // copy AA flag for new target - maContent.SetAntialiasing(mrOutDev.GetAntialiasing()); - } - } - - impBufferDevice::~impBufferDevice() - { - delete mpMask; - delete mpAlpha; - } - - void impBufferDevice::paint(double fTrans) - { - const Point aEmptyPoint; - const Size aSizePixel(maContent.GetOutputSizePixel()); - const bool bWasEnabledDst(mrOutDev.IsMapModeEnabled()); - - mrOutDev.EnableMapMode(false); - maContent.EnableMapMode(false); - Bitmap aContent(maContent.GetBitmap(aEmptyPoint, aSizePixel)); - - if(mpAlpha) - { - mpAlpha->EnableMapMode(false); - const AlphaMask aAlphaMask(mpAlpha->GetBitmap(aEmptyPoint, aSizePixel)); - - mrOutDev.DrawBitmapEx(maDestPixel.TopLeft(), BitmapEx(aContent, aAlphaMask)); - } - else if(mpMask) - { - mpMask->EnableMapMode(false); - const Bitmap aMask(mpMask->GetBitmap(aEmptyPoint, aSizePixel)); - - mrOutDev.DrawBitmapEx(maDestPixel.TopLeft(), BitmapEx(aContent, aMask)); - } - else if(0.0 != fTrans) - { - sal_uInt8 nMaskValue((sal_uInt8)basegfx::fround(fTrans * 255.0)); - const AlphaMask aAlphaMask(aSizePixel, &nMaskValue); - mrOutDev.DrawBitmapEx(maDestPixel.TopLeft(), BitmapEx(aContent, aAlphaMask)); - } - else - { - mrOutDev.DrawBitmap(maDestPixel.TopLeft(), aContent); - } - - mrOutDev.EnableMapMode(bWasEnabledDst); - } - - VirtualDevice& impBufferDevice::getMask() - { - if(!mpMask) - { - mpMask = new VirtualDevice(mrOutDev, 1); - mpMask->SetOutputSizePixel(maDestPixel.GetSize(), true); - mpMask->SetMapMode(maContent.GetMapMode()); - - // do NOT copy AA flag for mask! - } - - return *mpMask; - } - - VirtualDevice& impBufferDevice::getTransparence() - { - if(!mpAlpha) - { - mpAlpha = new VirtualDevice(); - mpAlpha->SetOutputSizePixel(maDestPixel.GetSize(), true); - mpAlpha->SetMapMode(maContent.GetMapMode()); - - // copy AA flag for new target; masking needs to be smooth - mpAlpha->SetAntialiasing(maContent.GetAntialiasing()); - } - - return *mpAlpha; - } -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclhelperbufferdevice.hxx b/drawinglayer/source/processor2d/vclhelperbufferdevice.hxx deleted file mode 100644 index 21cf3f4fb6..0000000000 --- a/drawinglayer/source/processor2d/vclhelperbufferdevice.hxx +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBUFFERDEVICE_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBUFFERDEVICE_HXX - -#include <vcl/virdev.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx { class B2DRange; } - -////////////////////////////////////////////////////////////////////////////// -// support methods for vcl direct gradient renderering - -namespace drawinglayer -{ - class impBufferDevice - { - OutputDevice& mrOutDev; - VirtualDevice maContent; - VirtualDevice* mpMask; - VirtualDevice* mpAlpha; - Rectangle maDestPixel; - - public: - impBufferDevice( - OutputDevice& rOutDev, - const basegfx::B2DRange& rRange, - bool bAddOffsetToMapping); - ~impBufferDevice(); - - void paint(double fTrans = 0.0); - bool isVisible() const { return !maDestPixel.IsEmpty(); } - VirtualDevice& getContent() { return maContent; } - VirtualDevice& getMask(); - VirtualDevice& getTransparence(); - }; -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERBUFFERDEVICE_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclhelpergradient.cxx b/drawinglayer/source/processor2d/vclhelpergradient.cxx deleted file mode 100644 index 46786d72f3..0000000000 --- a/drawinglayer/source/processor2d/vclhelpergradient.cxx +++ /dev/null @@ -1,288 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <vclhelpergradient.hxx> -#include <basegfx/range/b2drange.hxx> -#include <vcl/outdev.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/texture/texture.hxx> - -////////////////////////////////////////////////////////////////////////////// -// support methods for vcl direct gradient renderering - -namespace drawinglayer -{ - namespace - { - sal_uInt32 impCalcGradientSteps(OutputDevice& rOutDev, sal_uInt32 nSteps, const basegfx::B2DRange& rRange, sal_uInt32 nMaxDist) - { - if(nSteps == 0L) - { - const Size aSize(rOutDev.LogicToPixel(Size(basegfx::fround(rRange.getWidth()), basegfx::fround(rRange.getHeight())))); - nSteps = (aSize.getWidth() + aSize.getHeight()) >> 3L; - } - - if(nSteps < 2L) - { - nSteps = 2L; - } - - if(nSteps > nMaxDist) - { - nSteps = nMaxDist; - } - - return nSteps; - } - - void impDrawGradientToOutDevSimple( - OutputDevice& rOutDev, - const basegfx::B2DPolyPolygon& rTargetForm, - const ::std::vector< basegfx::B2DHomMatrix >& rMatrices, - const ::std::vector< basegfx::BColor >& rColors, - const basegfx::B2DPolygon& rUnitPolygon) - { - rOutDev.SetLineColor(); - - for(sal_uInt32 a(0L); a < rColors.size(); a++) - { - // set correct color - const basegfx::BColor aFillColor(rColors[a]); - rOutDev.SetFillColor(Color(aFillColor)); - - if(a) - { - if(a - 1L < static_cast< sal_uInt32 >(rMatrices.size())) - { - basegfx::B2DPolygon aNewPoly(rUnitPolygon); - aNewPoly.transform(rMatrices[a - 1L]); - rOutDev.DrawPolygon(aNewPoly); - } - } - else - { - rOutDev.DrawPolyPolygon(rTargetForm); - } - } - } - - void impDrawGradientToOutDevComplex( - OutputDevice& rOutDev, - const basegfx::B2DPolyPolygon& rTargetForm, - const ::std::vector< basegfx::B2DHomMatrix >& rMatrices, - const ::std::vector< basegfx::BColor >& rColors, - const basegfx::B2DPolygon& rUnitPolygon) - { - PolyPolygon aVclTargetForm(rTargetForm); - ::std::vector< Polygon > aVclPolygons; - sal_uInt32 a; - - // remember and set to XOR - rOutDev.SetLineColor(); - rOutDev.Push(PUSH_RASTEROP); - rOutDev.SetRasterOp(ROP_XOR); - - // draw gradient PolyPolygons - for(a = 0L; a < rMatrices.size(); a++) - { - // create polygon and remember - basegfx::B2DPolygon aNewPoly(rUnitPolygon); - aNewPoly.transform(rMatrices[a]); - aVclPolygons.push_back(Polygon(aNewPoly)); - - // set correct color - if(rColors.size() > a) - { - const basegfx::BColor aFillColor(rColors[a]); - rOutDev.SetFillColor(Color(aFillColor)); - } - - // create vcl PolyPolygon and draw it - if(a) - { - PolyPolygon aVclPolyPoly(aVclPolygons[a - 1L]); - aVclPolyPoly.Insert(aVclPolygons[a]); - rOutDev.DrawPolyPolygon(aVclPolyPoly); - } - else - { - PolyPolygon aVclPolyPoly(aVclTargetForm); - aVclPolyPoly.Insert(aVclPolygons[0L]); - rOutDev.DrawPolyPolygon(aVclPolyPoly); - } - } - - // draw last poly in last color - if(rColors.size()) - { - const basegfx::BColor aFillColor(rColors[rColors.size() - 1L]); - rOutDev.SetFillColor(Color(aFillColor)); - rOutDev.DrawPolygon(aVclPolygons[aVclPolygons.size() - 1L]); - } - - // draw object form in black and go back to XOR - rOutDev.SetFillColor(COL_BLACK); - rOutDev.SetRasterOp(ROP_0); - rOutDev.DrawPolyPolygon(aVclTargetForm); - rOutDev.SetRasterOp(ROP_XOR); - - // draw gradient PolyPolygons again - for(a = 0L; a < rMatrices.size(); a++) - { - // set correct color - if(rColors.size() > a) - { - const basegfx::BColor aFillColor(rColors[a]); - rOutDev.SetFillColor(Color(aFillColor)); - } - - // create vcl PolyPolygon and draw it - if(a) - { - PolyPolygon aVclPolyPoly(aVclPolygons[a - 1L]); - aVclPolyPoly.Insert(aVclPolygons[a]); - rOutDev.DrawPolyPolygon(aVclPolyPoly); - } - else - { - PolyPolygon aVclPolyPoly(aVclTargetForm); - aVclPolyPoly.Insert(aVclPolygons[0L]); - rOutDev.DrawPolyPolygon(aVclPolyPoly); - } - } - - // draw last poly in last color - if(rColors.size()) - { - const basegfx::BColor aFillColor(rColors[rColors.size() - 1L]); - rOutDev.SetFillColor(Color(aFillColor)); - rOutDev.DrawPolygon(aVclPolygons[aVclPolygons.size() - 1L]); - } - - // reset drawmode - rOutDev.Pop(); - } - } // end of anonymous namespace -} // end of namespace drawinglayer - -namespace drawinglayer -{ - void impDrawGradientToOutDev( - OutputDevice& rOutDev, - const basegfx::B2DPolyPolygon& rTargetForm, - attribute::GradientStyle eGradientStyle, - sal_uInt32 nSteps, - const basegfx::BColor& rStart, - const basegfx::BColor& rEnd, - double fBorder, double fAngle, double fOffsetX, double fOffsetY, bool bSimple) - { - const basegfx::B2DRange aOutlineRange(basegfx::tools::getRange(rTargetForm)); - ::std::vector< basegfx::B2DHomMatrix > aMatrices; - ::std::vector< basegfx::BColor > aColors; - basegfx::B2DPolygon aUnitPolygon; - - // make sure steps is not too high/low - nSteps = impCalcGradientSteps(rOutDev, nSteps, aOutlineRange, sal_uInt32((rStart.getMaximumDistance(rEnd) * 127.5) + 0.5)); - - // create geometries - switch(eGradientStyle) - { - case attribute::GRADIENTSTYLE_LINEAR: - { - texture::GeoTexSvxGradientLinear aGradient(aOutlineRange, rStart, rEnd, nSteps, fBorder, fAngle); - aGradient.appendTransformations(aMatrices); - aGradient.appendColors(aColors); - aUnitPolygon = basegfx::tools::createUnitPolygon(); - break; - } - case attribute::GRADIENTSTYLE_AXIAL: - { - texture::GeoTexSvxGradientAxial aGradient(aOutlineRange, rStart, rEnd, nSteps, fBorder, fAngle); - aGradient.appendTransformations(aMatrices); - aGradient.appendColors(aColors); - aUnitPolygon = basegfx::tools::createPolygonFromRect(basegfx::B2DRange(-1, -1, 1, 1)); - break; - } - case attribute::GRADIENTSTYLE_RADIAL: - { - texture::GeoTexSvxGradientRadial aGradient(aOutlineRange, rStart, rEnd, nSteps, fBorder, fOffsetX, fOffsetY); - aGradient.appendTransformations(aMatrices); - aGradient.appendColors(aColors); - aUnitPolygon = basegfx::tools::createPolygonFromCircle(basegfx::B2DPoint(0,0), 1); - break; - } - case attribute::GRADIENTSTYLE_ELLIPTICAL: - { - texture::GeoTexSvxGradientElliptical aGradient(aOutlineRange, rStart, rEnd, nSteps, fBorder, fOffsetX, fOffsetX, fAngle); - aGradient.appendTransformations(aMatrices); - aGradient.appendColors(aColors); - aUnitPolygon = basegfx::tools::createPolygonFromCircle(basegfx::B2DPoint(0,0), 1); - break; - } - case attribute::GRADIENTSTYLE_SQUARE: - { - texture::GeoTexSvxGradientSquare aGradient(aOutlineRange, rStart, rEnd, nSteps, fBorder, fOffsetX, fOffsetX, fAngle); - aGradient.appendTransformations(aMatrices); - aGradient.appendColors(aColors); - aUnitPolygon = basegfx::tools::createPolygonFromRect(basegfx::B2DRange(-1, -1, 1, 1)); - break; - } - case attribute::GRADIENTSTYLE_RECT: - { - texture::GeoTexSvxGradientRect aGradient(aOutlineRange, rStart, rEnd, nSteps, fBorder, fOffsetX, fOffsetX, fAngle); - aGradient.appendTransformations(aMatrices); - aGradient.appendColors(aColors); - aUnitPolygon = basegfx::tools::createPolygonFromRect(basegfx::B2DRange(-1, -1, 1, 1)); - break; - } - } - - // paint them with mask using the XOR method - if(aMatrices.size()) - { - if(bSimple) - { - impDrawGradientToOutDevSimple(rOutDev, rTargetForm, aMatrices, aColors, aUnitPolygon); - } - else - { - impDrawGradientToOutDevComplex(rOutDev, rTargetForm, aMatrices, aColors, aUnitPolygon); - } - } - } -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclhelpergradient.hxx b/drawinglayer/source/processor2d/vclhelpergradient.hxx deleted file mode 100644 index c47c27829a..0000000000 --- a/drawinglayer/source/processor2d/vclhelpergradient.hxx +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERGRADIENT_HXX -#define INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERGRADIENT_HXX - -#include <sal/types.h> -#include <drawinglayer/attribute/fillgradientattribute.hxx> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -class OutputDevice; -namespace basegfx { - class B2DPolyPolygon; - class BColor; -} - -////////////////////////////////////////////////////////////////////////////// -// support methods for vcl direct gradient renderering - -namespace drawinglayer -{ - void impDrawGradientToOutDev( - OutputDevice& rOutDev, - const basegfx::B2DPolyPolygon& rTargetForm, - attribute::GradientStyle eGradientStyle, - sal_uInt32 nSteps, - const basegfx::BColor& rStart, - const basegfx::BColor& rEnd, - double fBorder, double fAngle, double fOffsetX, double fOffsetY, bool bSimple); -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -#endif // INCLUDED_DRAWINGLAYER_PROCESSOR2D_VCLHELPERGRADIENT_HXX - -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx deleted file mode 100644 index 7f3c22e269..0000000000 --- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx +++ /dev/null @@ -1,2031 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/vclmetafileprocessor2d.hxx> -#include <tools/gen.hxx> -#include <vcl/virdev.hxx> -#include <vcl/gdimtf.hxx> -#include <vcl/gradient.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx> -#include <drawinglayer/primitive2d/metafileprimitive2d.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygonclipper.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx> -#include <drawinglayer/processor2d/vclpixelprocessor2d.hxx> -#include <tools/stream.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/markerarrayprimitive2d.hxx> -#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx> -#include <vcl/graphictools.hxx> -#include <vcl/metaact.hxx> -#include <drawinglayer/primitive2d/texthierarchyprimitive2d.hxx> -#include <drawinglayer/primitive2d/textdecoratedprimitive2d.hxx> -#include <comphelper/processfactory.hxx> -#include <rtl/ustring.hxx> -#include <com/sun/star/i18n/CharacterIteratorMode.hdl> -#include <com/sun/star/i18n/WordType.hpp> -#include <drawinglayer/primitive2d/controlprimitive2d.hxx> -#include <drawinglayer/primitive2d/graphicprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/pagepreviewprimitive2d.hxx> -#include <helperchartrenderer.hxx> -#include <drawinglayer/primitive2d/epsprimitive2d.hxx> -#include <basegfx/polygon/b2dlinegeometry.hxx> - -////////////////////////////////////////////////////////////////////////////// -// for PDFExtOutDevData Graphic support - -#include <vcl/graph.hxx> -#include <vcl/svapp.hxx> -#include <toolkit/helper/formpdfexport.hxx> - -////////////////////////////////////////////////////////////////////////////// -// for Control printing - -#include <com/sun/star/beans/XPropertySet.hpp> - -////////////////////////////////////////////////////////////////////////////// -// for current chart PrettyPrinting support - -#include <drawinglayer/primitive2d/chartprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// -// for StructureTagPrimitive support in sd's unomodel.cxx - -#include <drawinglayer/primitive2d/structuretagprimitive2d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// -// #112245# definition for maximum allowed point count due to Metafile target. -// To be on the safe side with the old tools polygon, use slightly less then -// the theoretical maximum (bad experiences with tools polygon) - -#define MAX_POLYGON_POINT_COUNT_METAFILE (0x0000fff0) - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - // #112245# helper to split line polygon in half - void splitLinePolygon( - const basegfx::B2DPolygon& rBasePolygon, - basegfx::B2DPolygon& o_aLeft, - basegfx::B2DPolygon& o_aRight) - { - const sal_uInt32 nCount(rBasePolygon.count()); - - if(nCount) - { - const sal_uInt32 nHalfCount((nCount - 1) >> 1); - - o_aLeft = basegfx::B2DPolygon(rBasePolygon, 0, nHalfCount + 1); - o_aLeft.setClosed(false); - - o_aRight = basegfx::B2DPolygon(rBasePolygon, nHalfCount, nCount - nHalfCount); - o_aRight.setClosed(false); - - if(rBasePolygon.isClosed()) - { - o_aRight.append(rBasePolygon.getB2DPoint(0)); - - if(rBasePolygon.areControlPointsUsed()) - { - o_aRight.setControlPoints( - o_aRight.count() - 1, - rBasePolygon.getPrevControlPoint(0), - rBasePolygon.getNextControlPoint(0)); - } - } - } - else - { - o_aLeft.clear(); - o_aRight.clear(); - } - } - - // #112245# helper to evtl. split filled polygons to maximum metafile point count - bool fillPolyPolygonNeededToBeSplit(basegfx::B2DPolyPolygon& rPolyPolygon) - { - bool bRetval(false); - const sal_uInt32 nPolyCount(rPolyPolygon.count()); - - if(nPolyCount) - { - basegfx::B2DPolyPolygon aSplitted; - - for(sal_uInt32 a(0); a < nPolyCount; a++) - { - const basegfx::B2DPolygon aCandidate(rPolyPolygon.getB2DPolygon(a)); - const sal_uInt32 nPointCount(aCandidate.count()); - bool bNeedToSplit(false); - - if(aCandidate.areControlPointsUsed()) - { - // compare with the maximum for bezier curved polygons - bNeedToSplit = nPointCount > ((MAX_POLYGON_POINT_COUNT_METAFILE / 3L) - 1L); - } - else - { - // compare with the maximum for simple point polygons - bNeedToSplit = nPointCount > (MAX_POLYGON_POINT_COUNT_METAFILE - 1); - } - - if(bNeedToSplit) - { - // need to split the partial polygon - const basegfx::B2DRange aRange(aCandidate.getB2DRange()); - const basegfx::B2DPoint aCenter(aRange.getCenter()); - - if(aRange.getWidth() > aRange.getHeight()) - { - // clip in left and right - const basegfx::B2DPolyPolygon aLeft( - basegfx::tools::clipPolygonOnParallelAxis( - aCandidate, - false, - true, - aCenter.getX(), - false)); - const basegfx::B2DPolyPolygon aRight( - basegfx::tools::clipPolygonOnParallelAxis( - aCandidate, - false, - false, - aCenter.getX(), - false)); - - aSplitted.append(aLeft); - aSplitted.append(aRight); - } - else - { - // clip in top and bottom - const basegfx::B2DPolyPolygon aTop( - basegfx::tools::clipPolygonOnParallelAxis( - aCandidate, - true, - true, - aCenter.getY(), - false)); - const basegfx::B2DPolyPolygon aBottom( - basegfx::tools::clipPolygonOnParallelAxis( - aCandidate, - true, - false, - aCenter.getY(), - false)); - - aSplitted.append(aTop); - aSplitted.append(aBottom); - } - } - else - { - aSplitted.append(aCandidate); - } - } - - if(aSplitted.count() != nPolyCount) - { - rPolyPolygon = aSplitted; - } - } - - return bRetval; - } -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - Rectangle VclMetafileProcessor2D::impDumpToMetaFile( - const primitive2d::Primitive2DSequence& rContent, - GDIMetaFile& o_rContentMetafile) - { - // Prepare VDev, MetaFile and connections - OutputDevice* pLastOutputDevice = mpOutputDevice; - GDIMetaFile* pLastMetafile = mpMetaFile; - basegfx::B2DRange aPrimitiveRange(primitive2d::getB2DRangeFromPrimitive2DSequence(rContent, getViewInformation2D())); - - // transform primitive range with current transformation (e.g shadow offset) - aPrimitiveRange.transform(maCurrentTransformation); - - const Rectangle aPrimitiveRectangle( - basegfx::fround(aPrimitiveRange.getMinX()), basegfx::fround(aPrimitiveRange.getMinY()), - basegfx::fround(aPrimitiveRange.getMaxX()), basegfx::fround(aPrimitiveRange.getMaxY())); - VirtualDevice aContentVDev; - MapMode aNewMapMode(pLastOutputDevice->GetMapMode()); - - mpOutputDevice = &aContentVDev; - mpMetaFile = &o_rContentMetafile; - aContentVDev.EnableOutput(false); - aContentVDev.SetMapMode(pLastOutputDevice->GetMapMode()); - o_rContentMetafile.Record(&aContentVDev); - aContentVDev.SetLineColor(pLastOutputDevice->GetLineColor()); - aContentVDev.SetFillColor(pLastOutputDevice->GetFillColor()); - aContentVDev.SetFont(pLastOutputDevice->GetFont()); - aContentVDev.SetDrawMode(pLastOutputDevice->GetDrawMode()); - aContentVDev.SetSettings(pLastOutputDevice->GetSettings()); - aContentVDev.SetRefPoint(pLastOutputDevice->GetRefPoint()); - - // dump to MetaFile - process(rContent); - - // cleanups - o_rContentMetafile.Stop(); - o_rContentMetafile.WindStart(); - aNewMapMode.SetOrigin(aPrimitiveRectangle.TopLeft()); - o_rContentMetafile.SetPrefMapMode(aNewMapMode); - o_rContentMetafile.SetPrefSize(aPrimitiveRectangle.GetSize()); - mpOutputDevice = pLastOutputDevice; - mpMetaFile = pLastMetafile; - - return aPrimitiveRectangle; - } - - void VclMetafileProcessor2D::impConvertFillGradientAttributeToVCLGradient( - Gradient& o_rVCLGradient, - const attribute::FillGradientAttribute& rFiGrAtt, - bool bIsTransparenceGradient) - { - if(bIsTransparenceGradient) - { - // it's about transparence channel intensities (black/white), do not use color modifier - o_rVCLGradient.SetStartColor(Color(rFiGrAtt.getStartColor())); - o_rVCLGradient.SetEndColor(Color(rFiGrAtt.getEndColor())); - } - else - { - // use color modifier to influence start/end color of gradient - o_rVCLGradient.SetStartColor(Color(maBColorModifierStack.getModifiedColor(rFiGrAtt.getStartColor()))); - o_rVCLGradient.SetEndColor(Color(maBColorModifierStack.getModifiedColor(rFiGrAtt.getEndColor()))); - } - - o_rVCLGradient.SetAngle(static_cast< sal_uInt16 >(rFiGrAtt.getAngle() * (1.0 / F_PI1800))); - o_rVCLGradient.SetBorder(static_cast< sal_uInt16 >(rFiGrAtt.getBorder() * 100.0)); - o_rVCLGradient.SetOfsX(static_cast< sal_uInt16 >(rFiGrAtt.getOffsetX() * 100.0)); - o_rVCLGradient.SetOfsY(static_cast< sal_uInt16 >(rFiGrAtt.getOffsetY() * 100.0)); - o_rVCLGradient.SetSteps(rFiGrAtt.getSteps()); - - // defaults for intensity; those were computed into the start/end colors already - o_rVCLGradient.SetStartIntensity(100); - o_rVCLGradient.SetEndIntensity(100); - - switch(rFiGrAtt.getStyle()) - { - default : // attribute::GRADIENTSTYLE_LINEAR : - { - o_rVCLGradient.SetStyle(GRADIENT_LINEAR); - break; - } - case attribute::GRADIENTSTYLE_AXIAL : - { - o_rVCLGradient.SetStyle(GRADIENT_AXIAL); - break; - } - case attribute::GRADIENTSTYLE_RADIAL : - { - o_rVCLGradient.SetStyle(GRADIENT_RADIAL); - break; - } - case attribute::GRADIENTSTYLE_ELLIPTICAL : - { - o_rVCLGradient.SetStyle(GRADIENT_ELLIPTICAL); - break; - } - case attribute::GRADIENTSTYLE_SQUARE : - { - o_rVCLGradient.SetStyle(GRADIENT_SQUARE); - break; - } - case attribute::GRADIENTSTYLE_RECT : - { - o_rVCLGradient.SetStyle(GRADIENT_RECT); - break; - } - } - } - - void VclMetafileProcessor2D::impStartSvtGraphicFill(SvtGraphicFill* pSvtGraphicFill) - { - if(pSvtGraphicFill && !mnSvtGraphicFillCount) - { - SvMemoryStream aMemStm; - - aMemStm << *pSvtGraphicFill; - mpMetaFile->AddAction(new MetaCommentAction("XPATHFILL_SEQ_BEGIN", 0, static_cast< const sal_uInt8* >(aMemStm.GetData()), aMemStm.Seek(STREAM_SEEK_TO_END))); - mnSvtGraphicFillCount++; - } - } - - void VclMetafileProcessor2D::impEndSvtGraphicFill(SvtGraphicFill* pSvtGraphicFill) - { - if(pSvtGraphicFill && mnSvtGraphicFillCount) - { - mnSvtGraphicFillCount--; - mpMetaFile->AddAction(new MetaCommentAction("XPATHFILL_SEQ_END")); - delete pSvtGraphicFill; - } - } - - SvtGraphicStroke* VclMetafileProcessor2D::impTryToCreateSvtGraphicStroke( - const basegfx::B2DPolygon& rB2DPolygon, - const basegfx::BColor* pColor, - const attribute::LineAttribute* pLineAttribute, - const attribute::StrokeAttribute* pStrokeAttribute, - const attribute::LineStartEndAttribute* pStart, - const attribute::LineStartEndAttribute* pEnd) - { - SvtGraphicStroke* pRetval = 0; - - if(rB2DPolygon.count() && !mnSvtGraphicStrokeCount) - { - basegfx::BColor aStrokeColor; - basegfx::B2DPolyPolygon aStartArrow; - basegfx::B2DPolyPolygon aEndArrow; - - if(pColor) - { - aStrokeColor = *pColor; - } - else if(pLineAttribute) - { - aStrokeColor = maBColorModifierStack.getModifiedColor(pLineAttribute->getColor()); - } - - // It IS needed to record the stroke color at all in the metafile, - // SvtGraphicStroke has NO entry for stroke color(!) - mpOutputDevice->SetLineColor(Color(aStrokeColor)); - - if(!rB2DPolygon.isClosed()) - { - double fPolyLength(0.0); - - if(pStart && pStart->isActive()) - { - fPolyLength = basegfx::tools::getLength(rB2DPolygon); - - aStartArrow = basegfx::tools::createAreaGeometryForLineStartEnd( - rB2DPolygon, pStart->getB2DPolyPolygon(), true, pStart->getWidth(), - fPolyLength, pStart->isCentered() ? 0.5 : 0.0, 0); - } - - if(pEnd && pEnd->isActive()) - { - if(basegfx::fTools::equalZero(fPolyLength)) - { - fPolyLength = basegfx::tools::getLength(rB2DPolygon); - } - - aEndArrow = basegfx::tools::createAreaGeometryForLineStartEnd( - rB2DPolygon, pEnd->getB2DPolyPolygon(), false, pEnd->getWidth(), - fPolyLength, pEnd->isCentered() ? 0.5 : 0.0, 0); - } - } - - SvtGraphicStroke::JoinType eJoin(SvtGraphicStroke::joinNone); - double fLineWidth(0.0); - double fMiterLength(0.0); - SvtGraphicStroke::DashArray aDashArray; - - if(pLineAttribute) - { - // pre-fill fLineWidth - fLineWidth = pLineAttribute->getWidth(); - - // pre-fill fMiterLength - fMiterLength = fLineWidth; - - // get Join - switch(pLineAttribute->getLineJoin()) - { - default : // basegfx::B2DLINEJOIN_NONE : - { - eJoin = SvtGraphicStroke::joinNone; - break; - } - case basegfx::B2DLINEJOIN_BEVEL : - { - eJoin = SvtGraphicStroke::joinBevel; - break; - } - case basegfx::B2DLINEJOIN_MIDDLE : - case basegfx::B2DLINEJOIN_MITER : - { - eJoin = SvtGraphicStroke::joinMiter; - // ATM 15 degrees is assumed - fMiterLength /= rtl::math::sin(M_PI * (15.0 / 360.0)); - break; - } - case basegfx::B2DLINEJOIN_ROUND : - { - eJoin = SvtGraphicStroke::joinRound; - break; - } - } - } - - if(pStrokeAttribute) - { - // copy dash array - aDashArray = pStrokeAttribute->getDotDashArray(); - } - - // #i101734# apply current object transformation to created geometry. - // This is a partial fix. When a object transformation is used which - // e.g. contains a scaleX != scaleY, an unproportional scaling would - // have to be applied to the evtl. existing fat line. The current - // concept of PDF export and SvtGraphicStroke usage does simply not - // allow handling such definitions. The only clean way would be to - // add the transformation to SvtGraphicStroke and to handle it there - basegfx::B2DPolygon aB2DPolygon(rB2DPolygon); - - aB2DPolygon.transform(maCurrentTransformation); - aStartArrow.transform(maCurrentTransformation); - aEndArrow.transform(maCurrentTransformation); - - pRetval = new SvtGraphicStroke( - Polygon(aB2DPolygon), - PolyPolygon(aStartArrow), - PolyPolygon(aEndArrow), - mfCurrentUnifiedTransparence, - fLineWidth, - SvtGraphicStroke::capButt, - eJoin, - fMiterLength, - aDashArray); - } - - return pRetval; - } - - void VclMetafileProcessor2D::impStartSvtGraphicStroke(SvtGraphicStroke* pSvtGraphicStroke) - { - if(pSvtGraphicStroke && !mnSvtGraphicStrokeCount) - { - SvMemoryStream aMemStm; - - aMemStm << *pSvtGraphicStroke; - mpMetaFile->AddAction(new MetaCommentAction("XPATHSTROKE_SEQ_BEGIN", 0, static_cast< const sal_uInt8* >(aMemStm.GetData()), aMemStm.Seek(STREAM_SEEK_TO_END))); - mnSvtGraphicStrokeCount++; - } - } - - void VclMetafileProcessor2D::impEndSvtGraphicStroke(SvtGraphicStroke* pSvtGraphicStroke) - { - if(pSvtGraphicStroke && mnSvtGraphicStrokeCount) - { - mnSvtGraphicStrokeCount--; - mpMetaFile->AddAction(new MetaCommentAction("XPATHSTROKE_SEQ_END")); - delete pSvtGraphicStroke; - } - } - - // init static break iterator - uno::Reference< ::com::sun::star::i18n::XBreakIterator > VclMetafileProcessor2D::mxBreakIterator; - - VclMetafileProcessor2D::VclMetafileProcessor2D(const geometry::ViewInformation2D& rViewInformation, OutputDevice& rOutDev) - : VclProcessor2D(rViewInformation, rOutDev), - mpMetaFile(rOutDev.GetConnectMetaFile()), - mnSvtGraphicFillCount(0), - mnSvtGraphicStrokeCount(0), - mfCurrentUnifiedTransparence(0.0), - mpPDFExtOutDevData(dynamic_cast< vcl::PDFExtOutDevData* >(rOutDev.GetExtOutDevData())) - { - OSL_ENSURE(rOutDev.GetConnectMetaFile(), "VclMetafileProcessor2D: Used on OutDev which has no MetaFile Target (!)"); - // draw to logic coordinates, do not initialize maCurrentTransformation to viewTransformation - // but only to ObjectTransformation. Do not change MapMode of destination. - maCurrentTransformation = rViewInformation.getObjectTransformation(); - } - - VclMetafileProcessor2D::~VclMetafileProcessor2D() - { - // MapMode was not changed, no restore necessary - } - - /*********************************************************************************************** - - Support of MetaCommentActions in the VclMetafileProcessor2D - Found MetaCommentActions and how they are supported: - - XGRAD_SEQ_BEGIN, XGRAD_SEQ_END: - - Used inside OutputDevice::DrawGradient to mark the start and end of a MetaGradientEx action. - It is used in various exporters/importers to have direct access to the gradient before it - is rendered by VCL (and thus fragmented to polygon color actions and others). On that base, e.g. - the Metafile to SdrObject import creates it's gradient objects. - Best (and safest) way to support it here is to use PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D, - map it back to the corresponding tools PolyPolygon and the Gradient and just call - OutputDevice::DrawGradient which creates the necessary compatible actions. - - XPATHFILL_SEQ_BEGIN, XPATHFILL_SEQ_END: - - Two producers, one is vcl/source/gdi/gdimtf.cxx, line 1273. There, it is transformed - inside GDIMetaFile::Rotate, nothing to take care of here. - The second producer is in graphics/svx/source/svdraw/impgrfll.cxx, line 374. This is used - with each incarnation of Imp_GraphicFill when a metafile is recorded, fillstyle is not - XFILL_NONE and not completely transparent. It creates a SvtGraphicFill and streams it - to the comment action. A closing end token is created in the destructor. - Usages of Imp_GraphicFill are in Do_Paint_Object-methods of SdrCircObj, SdrPathObj and - SdrRectObj. - The token users pick various actions from SvtGraphicFill, so it may need to be added for all kind - of filled objects, even simple colored polygons. It is added as extra information; the - Metafile actions between the two tokens are interpreted as output generated from those - fills. Thus, users have the choice to use the SvtGraphicFill info or the created output - actions. - Even for XFillTransparenceItem it is used, thus it may need to be supported in - UnifiedTransparencePrimitive2D, too, when interpreted as normally filled PolyPolygon. - Implemented for: - PRIMITIVE2D_ID_POLYPOLYGONBITMAPPRIMITIVE2D, - PRIMITIVE2D_ID_POLYPOLYGONHATCHPRIMITIVE2D, - PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D, - PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D, - and for PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D when detected unified transparence - - XPATHSTROKE_SEQ_BEGIN, XPATHSTROKE_SEQ_END: - - Similar to pathfill, but using SvtGraphicStroke instead. It also has two producers where one - is also the GDIMetaFile::Rotate. Another user is MetaCommentAction::Move which modifies the - contained path accordingly. - The other one is SdrObject::Imp_DrawLineGeometry. It's done when MetaFile is set at OutDev and - only when geometry is a single polygon (!). I see no reason for that; in the PS exporter this - would hinder to make use of PolyPolygon strokes. I will need to add support at: - PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D - PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D - PRIMITIVE2D_ID_POLYGONSTROKEARROWPRIMITIVE2D - This can be done hierarchical, too. - Okay, base implementation done based on those three primitives. - - FIELD_SEQ_BEGIN, FIELD_SEQ_END - - Used from slideshow for URLs, created from diverse SvxField implementations inside - createBeginComment()/createEndComment(). createBeginComment() is used from editeng\impedit3.cxx - inside ImpEditEngine::Paint. - Created TextHierarchyFieldPrimitive2D and added needed infos there; it is an group primitive and wraps - text primitives (but is not limited to that). It contains the field type if special actions for the - support of FIELD_SEQ_BEGIN/END are needed; this is the case for Page and URL fields. If more is - needed, it may be supported there. - FIELD_SEQ_BEGIN;PageField - FIELD_SEQ_END - Okay, these are now completely supported by TextHierarchyFieldPrimitive2D. URL works, too. - - XTEXT - - XTEXT_EOC(i) end of character - XTEXT_EOW(i) end of word - XTEXT_EOS(i) end of sentence - - this three are with index and are created with the help of a i18n::XBreakIterator in - ImplDrawWithComments. Simplifying, moving out text painting, reworking to create some - data structure for holding those TEXT infos. - Supported directly by TextSimplePortionPrimitive2D with adding a Locale to the basic text - primitive. In the MetaFileRenderer, the creation is now done (see below). This has the advantage - that this creations do not need to be done for all paints all the time. This would be - expensive since the BreakIterator and it's usage is expensive and for each paint also the - whole character stops would need to be created. - Created only for TextDecoratedPortionPrimitive2D due to XTEXT_EOL and XTEXT_EOP (see below) - - XTEXT_EOL() end of line - XTEXT_EOP() end of paragraph - - First try with boolean marks at TextDecoratedPortionPrimitive2D did not work too well, - i decided to solve it with structure. I added the TextHierarchyPrimitives for this, - namely: - - TextHierarchyLinePrimitive2D: Encapsulates single line - - TextHierarchyParagraphPrimitive2D: Encapsulates single paragraph - - TextHierarchyBlockPrimitive2D: encapsulates object texts (only one ATM) - Those are now supported in hierarchy. This means the MetaFile renderer will support them - by using them, reculrively using their content and adding MetaFile comments as needed. - This also means that when another text layouter will be used it will be necessary to - create/support the same HierarchyPrimitives to support users. - To transport the information using this hierarchy is best suited to all future needs; - the slideshow will be able to profit from it directly when using primitives; all other - renderers not interested in the text structure will just ignore the encapsulations. - - XTEXT_PAINTSHAPE_BEGIN, XTEXT_PAINTSHAPE_END - Supported now by the TextHierarchyBlockPrimitive2D. - - EPSReplacementGraphic: - Only used in goodies\source\filter.vcl\ieps\ieps.cxx and svx\source\xml\xmlgrhlp.cxx to - hold the original EPS which was imported in the same MetaFile as first 2 entries. Only - used to export the original again (if exists). - Not necessary to support with MetaFuleRenderer. - - XTEXT_SCROLLRECT, XTEXT_PAINTRECT - Currently used to get extra MetaFile infos using GraphicExporter which again uses - SdrTextObj::GetTextScrollMetaFileAndRectangle(). ATM works with primitives since - the rectangle data is added directly by the GraphicsExporter as comment. Does not need - to be adapted at once. - When adapting later, the only user - the diashow - should directly use the provided - Anination infos in the appropriate primitives (e.g. AnimatedSwitchPrimitive2D) - - PRNSPOOL_TRANSPARENTBITMAP_BEGIN, PRNSPOOL_TRANSPARENTBITMAP_END - VCL usage when printing PL -> THB. Okay, THB confirms that it is only used as - a fix (hack) while VCL printing. It is needed to not downscale a bitmap which - was explicitely created for the printer already again to some default maximum - bitmap sizes. - Nothing to do here for the primitive renderer. - - Support for vcl::PDFExtOutDevData: - PL knows that SJ did that stuff, it's used to hold a pointer to PDFExtOutDevData at - the OutDev. When set, some extra data is written there. Trying simple PDF export and - watching if i get those infos. - Well, a PDF export does not use e.g. ImpEditEngine::Paint since the PdfFilter uses - the SdXImpressDocument::render and thus uses the VclMetafileProcessor2D. I will check - if i get a PDFExtOutDevData at the target output device. - Indeed, i get one. Checking what all may be done when that extra-device-info is there. - - All in all i have to talk to SJ. I will need to emulate some of those actions, but - i need to discuss which ones. - In the future, all those infos would be taken from the primitive sequence anyways, - thus these extensions would potentially be temporary, too. - Discussed with SJ, added the necessary support and tested it. Details follow. - - - In ImpEditEngine::Paint, paragraph infos and URL stuff is added. - Added in primitive MetaFile renderer. - Checking URL: Indeed, current version exports it, but it is missing in primitive - CWS version. Adding support. - Okay, URLs work. Checked, Done. - - - UnoControlPDFExportContact is only created when PDFExtOutDevData is used at the - target and uno control data is created in UnoControlPDFExportContact::do_PaintObject. - This may be added in primitive MetaFile renderer. - Adding support... - OOps, the necessary helper stuff is in svx/source/form/formpdxexport.cxx in namespace - svxform. Have to talk to FS if this has to be like that. Especially since - ::vcl::PDFWriter::AnyWidget is filled out, which is already part of vcl. - Wrote an eMail to FS, he is on vacation currently. I see no reason why not to move - that stuff to somewhere else, maybe tools or svtools ?!? We will see... - Moved to toolkit, so i have to link against it. I tried VCL first, but it did - not work since VCLUnoHelper::CreateFont is unresolved in VCL (!). Other then the name - may imply, it is defined in toolkit (!). Since toolkit is linked against VCL itself, - the lowest move,ment plave is toolkit. - Checked form control export, it works well. Done. - - - In goodies, in GraphicObject::Draw, when the used Graphic is linked, infos are - generated. I will need to check what happens here with primitives. - To support, use of GraphicPrimitive2D (PRIMITIVE2D_ID_GRAPHICPRIMITIVE2D) may be needed. - Added support, but feature is broken in main version, so i cannot test at all. - Writing a bug to CL (or SJ) and seeing what happens (#i80380#). - SJ took a look and we got it working. Tested VCL MetaFile Renderer based export, - as intended, the original file is exported. Works, Done. - - - - - To be done: - - - Maybe there are more places to take care of for vcl::PDFExtOutDevData! - - - - ****************************************************************************************************/ - - void VclMetafileProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) - { - switch(rCandidate.getPrimitive2DID()) - { - case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D : - { - // directdraw of wrong spell primitive - // Ignore for VclMetafileProcessor2D, this is for printing and MetaFile recording only - break; - } - case PRIMITIVE2D_ID_GRAPHICPRIMITIVE2D : - { - const primitive2d::GraphicPrimitive2D& rGraphicPrimitive = static_cast< const primitive2d::GraphicPrimitive2D& >(rCandidate); - bool bUsingPDFExtOutDevData(false); - basegfx::B2DVector aTranslate, aScale; - static bool bSuppressPDFExtOutDevDataSupport(false); - - if(mpPDFExtOutDevData && !bSuppressPDFExtOutDevDataSupport) - { - // emulate data handling from UnoControlPDFExportContact, original see - // svtools/source/graphic/grfmgr.cxx - const Graphic& rGraphic = rGraphicPrimitive.getGraphicObject().GetGraphic(); - - if(rGraphic.IsLink()) - { - const GraphicAttr& rAttr = rGraphicPrimitive.getGraphicAttr(); - - if(!rAttr.IsSpecialDrawMode() && !rAttr.IsAdjusted()) - { - const basegfx::B2DHomMatrix& rTransform = rGraphicPrimitive.getTransform(); - double fRotate, fShearX; - rTransform.decompose(aScale, aTranslate, fRotate, fShearX); - - if( basegfx::fTools::equalZero( fRotate ) && ( aScale.getX() > 0.0 ) && ( aScale.getY() > 0.0 ) ) - { - bUsingPDFExtOutDevData = true; - mpPDFExtOutDevData->BeginGroup(); - } - } - } - } - - // process recursively and add MetaFile comment - process(rGraphicPrimitive.get2DDecomposition(getViewInformation2D())); - - if(bUsingPDFExtOutDevData) - { - // emulate data handling from UnoControlPDFExportContact, original see - // svtools/source/graphic/grfmgr.cxx - const basegfx::B2DRange aCurrentRange( - aTranslate.getX(), aTranslate.getY(), - aTranslate.getX() + aScale.getX(), aTranslate.getY() + aScale.getY()); - const Rectangle aCurrentRect( - sal_Int32(floor(aCurrentRange.getMinX())), sal_Int32(floor(aCurrentRange.getMinY())), - sal_Int32(ceil(aCurrentRange.getMaxX())), sal_Int32(ceil(aCurrentRange.getMaxY()))); - const GraphicAttr& rAttr = rGraphicPrimitive.getGraphicAttr(); - Rectangle aCropRect; - - if(rAttr.IsCropped()) - { - // calculate scalings between real image size and logic object size. This - // is necessary since the crop values are relative to original bitmap size - double fFactorX(1.0); - double fFactorY(1.0); - - { - const MapMode aMapMode100thmm(MAP_100TH_MM); - const Size aBitmapSize(Application::GetDefaultDevice()->LogicToLogic( - rGraphicPrimitive.getGraphicObject().GetPrefSize(), - rGraphicPrimitive.getGraphicObject().GetPrefMapMode(), aMapMode100thmm)); - const double fDivX(aBitmapSize.Width() - rAttr.GetLeftCrop() - rAttr.GetRightCrop()); - const double fDivY(aBitmapSize.Height() - rAttr.GetTopCrop() - rAttr.GetBottomCrop()); - - if(!basegfx::fTools::equalZero(fDivX)) - { - fFactorX = aScale.getX() / fDivX; - } - - if(!basegfx::fTools::equalZero(fDivY)) - { - fFactorY = aScale.getY() / fDivY; - } - } - - // calculate crop range and rect - basegfx::B2DRange aCropRange; - aCropRange.expand(aCurrentRange.getMinimum() - basegfx::B2DPoint(rAttr.GetLeftCrop() * fFactorX, rAttr.GetTopCrop() * fFactorY)); - aCropRange.expand(aCurrentRange.getMaximum() + basegfx::B2DPoint(rAttr.GetRightCrop() * fFactorX, rAttr.GetBottomCrop() * fFactorY)); - - aCropRect = Rectangle( - sal_Int32(floor(aCropRange.getMinX())), sal_Int32(floor(aCropRange.getMinY())), - sal_Int32(ceil(aCropRange.getMaxX())), sal_Int32(ceil(aCropRange.getMaxY()))); - } - - mpPDFExtOutDevData->EndGroup(rGraphicPrimitive.getGraphicObject().GetGraphic(), - rAttr.GetTransparency(), - aCurrentRect, - aCropRect); - } - - break; - } - case PRIMITIVE2D_ID_CONTROLPRIMITIVE2D : - { - const primitive2d::ControlPrimitive2D& rControlPrimitive = static_cast< const primitive2d::ControlPrimitive2D& >(rCandidate); - const uno::Reference< awt::XControl >& rXControl(rControlPrimitive.getXControl()); - bool bIsPrintableControl(false); - - // find out if control is printable - if(rXControl.is()) - { - try - { - uno::Reference< beans::XPropertySet > xModelProperties(rXControl->getModel(), uno::UNO_QUERY); - uno::Reference< beans::XPropertySetInfo > xPropertyInfo(xModelProperties.is() - ? xModelProperties->getPropertySetInfo() - : uno::Reference< beans::XPropertySetInfo >()); - const ::rtl::OUString sPrintablePropertyName(RTL_CONSTASCII_USTRINGPARAM("Printable")); - - if(xPropertyInfo.is() && xPropertyInfo->hasPropertyByName(sPrintablePropertyName)) - { - OSL_VERIFY(xModelProperties->getPropertyValue(sPrintablePropertyName) >>= bIsPrintableControl); - } - } - catch(const uno::Exception&) - { - OSL_FAIL("VclMetafileProcessor2D: No access to printable flag of Control, caught an exception!"); - } - } - - // PDF export and printing only for printable controls - if(bIsPrintableControl) - { - const bool bPDFExport(mpPDFExtOutDevData && mpPDFExtOutDevData->GetIsExportFormFields()); - bool bDoProcessRecursively(true); - - if(bPDFExport) - { - // PDF export. Emulate data handling from UnoControlPDFExportContact - // I have now moved describePDFControl to toolkit, thus i can implement the PDF - // form control support now as follows - ::std::auto_ptr< ::vcl::PDFWriter::AnyWidget > pPDFControl; - ::toolkitform::describePDFControl( rXControl, pPDFControl, *mpPDFExtOutDevData ); - - if(pPDFControl.get()) - { - // still need to fill in the location (is a class Rectangle) - const basegfx::B2DRange aRangeLogic(rControlPrimitive.getB2DRange(getViewInformation2D())); - const Rectangle aRectLogic( - (sal_Int32)floor(aRangeLogic.getMinX()), (sal_Int32)floor(aRangeLogic.getMinY()), - (sal_Int32)ceil(aRangeLogic.getMaxX()), (sal_Int32)ceil(aRangeLogic.getMaxY())); - pPDFControl->Location = aRectLogic; - - Size aFontSize(pPDFControl->TextFont.GetSize()); - aFontSize = mpOutputDevice->LogicToLogic(aFontSize, MapMode(MAP_POINT), mpOutputDevice->GetMapMode()); - pPDFControl->TextFont.SetSize(aFontSize); - - mpPDFExtOutDevData->BeginStructureElement(vcl::PDFWriter::Form); - mpPDFExtOutDevData->CreateControl(*pPDFControl.get()); - mpPDFExtOutDevData->EndStructureElement(); - - // no normal paint needed (see original UnoControlPDFExportContact::do_PaintObject); - // do not process recursively - bDoProcessRecursively = false; - } - else - { - // PDF export did not work, try simple output. - // Fallback to printer output by not setting bDoProcessRecursively - // to false. - } - } - - // #i93169# used flag the wrong way; true means that nothing was done yet - if(bDoProcessRecursively) - { - // printer output - try - { - // remember old graphics and create new - uno::Reference< awt::XView > xControlView(rXControl, uno::UNO_QUERY_THROW); - const uno::Reference< awt::XGraphics > xOriginalGraphics(xControlView->getGraphics()); - const uno::Reference< awt::XGraphics > xNewGraphics(mpOutputDevice->CreateUnoGraphics()); - - if(xNewGraphics.is()) - { - // link graphics and view - xControlView->setGraphics(xNewGraphics); - - // get position - const basegfx::B2DHomMatrix aObjectToDiscrete(getViewInformation2D().getObjectToViewTransformation() * rControlPrimitive.getTransform()); - const basegfx::B2DPoint aTopLeftDiscrete(aObjectToDiscrete * basegfx::B2DPoint(0.0, 0.0)); - - // draw it - xControlView->draw(basegfx::fround(aTopLeftDiscrete.getX()), basegfx::fround(aTopLeftDiscrete.getY())); - bDoProcessRecursively = false; - - // restore original graphics - xControlView->setGraphics(xOriginalGraphics); - } - } - catch( const uno::Exception& ) - { - OSL_FAIL("VclMetafileProcessor2D: Printing of Control failed, caught an exception!"); - } - } - - // process recursively if not done yet to export as decomposition (bitmap) - if(bDoProcessRecursively) - { - process(rControlPrimitive.get2DDecomposition(getViewInformation2D())); - } - } - - break; - } - case PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D : - { - // support for FIELD_SEQ_BEGIN, FIELD_SEQ_END and URL. It wraps text primitives (but is not limited to) - // thus do the MetafileAction embedding stuff but just handle recursively. - const primitive2d::TextHierarchyFieldPrimitive2D& rFieldPrimitive = static_cast< const primitive2d::TextHierarchyFieldPrimitive2D& >(rCandidate); - static const ByteString aCommentStringCommon("FIELD_SEQ_BEGIN"); - static const ByteString aCommentStringPage("FIELD_SEQ_BEGIN;PageField"); - static const ByteString aCommentStringEnd("FIELD_SEQ_END"); - - switch(rFieldPrimitive.getType()) - { - default : // case drawinglayer::primitive2d::FIELD_TYPE_COMMON : - { - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringCommon)); - break; - } - case drawinglayer::primitive2d::FIELD_TYPE_PAGE : - { - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringPage)); - break; - } - case drawinglayer::primitive2d::FIELD_TYPE_URL : - { - const rtl::OUString& rURL = rFieldPrimitive.getString(); - const String aOldString(rURL); - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringCommon, 0, reinterpret_cast< const sal_uInt8* >(aOldString.GetBuffer()), 2 * aOldString.Len())); - break; - } - } - - // process recursively - const primitive2d::Primitive2DSequence rContent = rFieldPrimitive.get2DDecomposition(getViewInformation2D()); - process(rContent); - - // for the end comment the type is not relevant yet, they are all the same. Just add. - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringEnd)); - - if(mpPDFExtOutDevData && drawinglayer::primitive2d::FIELD_TYPE_URL == rFieldPrimitive.getType()) - { - // emulate data handling from ImpEditEngine::Paint - const basegfx::B2DRange aViewRange(primitive2d::getB2DRangeFromPrimitive2DSequence(rContent, getViewInformation2D())); - const Rectangle aRectLogic( - (sal_Int32)floor(aViewRange.getMinX()), (sal_Int32)floor(aViewRange.getMinY()), - (sal_Int32)ceil(aViewRange.getMaxX()), (sal_Int32)ceil(aViewRange.getMaxY())); - vcl::PDFExtOutDevBookmarkEntry aBookmark; - aBookmark.nLinkId = mpPDFExtOutDevData->CreateLink(aRectLogic); - aBookmark.aBookmark = rFieldPrimitive.getString(); - std::vector< vcl::PDFExtOutDevBookmarkEntry >& rBookmarks = mpPDFExtOutDevData->GetBookmarks(); - rBookmarks.push_back( aBookmark ); - } - - break; - } - case PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D : - { - const primitive2d::TextHierarchyLinePrimitive2D& rLinePrimitive = static_cast< const primitive2d::TextHierarchyLinePrimitive2D& >(rCandidate); - static const ByteString aCommentString("XTEXT_EOL"); - - // process recursively and add MetaFile comment - process(rLinePrimitive.get2DDecomposition(getViewInformation2D())); - mpMetaFile->AddAction(new MetaCommentAction(aCommentString)); - - break; - } - case PRIMITIVE2D_ID_TEXTHIERARCHYBULLETPRIMITIVE2D : - { - // in Outliner::PaintBullet(), a MetafileComment for bullets is added, too. The - // "XTEXT_EOC" is used, use here, too. - const primitive2d::TextHierarchyBulletPrimitive2D& rBulletPrimitive = static_cast< const primitive2d::TextHierarchyBulletPrimitive2D& >(rCandidate); - static const ByteString aCommentString("XTEXT_EOC"); - - // process recursively and add MetaFile comment - process(rBulletPrimitive.get2DDecomposition(getViewInformation2D())); - mpMetaFile->AddAction(new MetaCommentAction(aCommentString)); - - break; - } - case PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D : - { - const primitive2d::TextHierarchyParagraphPrimitive2D& rParagraphPrimitive = static_cast< const primitive2d::TextHierarchyParagraphPrimitive2D& >(rCandidate); - static const ByteString aCommentString("XTEXT_EOP"); - - if(mpPDFExtOutDevData) - { - // emulate data handling from ImpEditEngine::Paint - mpPDFExtOutDevData->BeginStructureElement( vcl::PDFWriter::Paragraph ); - } - - // process recursively and add MetaFile comment - process(rParagraphPrimitive.get2DDecomposition(getViewInformation2D())); - mpMetaFile->AddAction(new MetaCommentAction(aCommentString)); - - if(mpPDFExtOutDevData) - { - // emulate data handling from ImpEditEngine::Paint - mpPDFExtOutDevData->EndStructureElement(); - } - - break; - } - case PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D : - { - const primitive2d::TextHierarchyBlockPrimitive2D& rBlockPrimitive = static_cast< const primitive2d::TextHierarchyBlockPrimitive2D& >(rCandidate); - static const ByteString aCommentStringA("XTEXT_PAINTSHAPE_BEGIN"); - static const ByteString aCommentStringB("XTEXT_PAINTSHAPE_END"); - - // add MetaFile comment, process recursively and add MetaFile comment - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringA)); - process(rBlockPrimitive.get2DDecomposition(getViewInformation2D())); - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringB)); - - break; - } - case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D : - case PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D : - { - // for supporting TEXT_ MetaFile actions there is more to do here; get the candidate - const primitive2d::TextSimplePortionPrimitive2D& rTextCandidate = static_cast< const primitive2d::TextSimplePortionPrimitive2D& >(rCandidate); - // const primitive2d::TextDecoratedPortionPrimitive2D* pTextDecoratedCandidate = dynamic_cast< const primitive2d::TextDecoratedPortionPrimitive2D* >(&rCandidate); - - // Adapt evtl. used special DrawMode - const sal_uInt32 nOriginalDrawMode(mpOutputDevice->GetDrawMode()); - adaptTextToFillDrawMode(); - - // directdraw of text simple portion; use default processing - RenderTextSimpleOrDecoratedPortionPrimitive2D(rTextCandidate); - - // restore DrawMode - mpOutputDevice->SetDrawMode(nOriginalDrawMode); - - // #i101169# if(pTextDecoratedCandidate) - { - // support for TEXT_ MetaFile actions only for decorated texts - if(!mxBreakIterator.is()) - { - uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xMSF(::comphelper::getProcessServiceFactory()); - mxBreakIterator.set(xMSF->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.i18n.BreakIterator"))), uno::UNO_QUERY); - } - - if(mxBreakIterator.is()) - { - const rtl::OUString& rTxt = rTextCandidate.getText(); - const sal_Int32 nTextLength(rTextCandidate.getTextLength()); // rTxt.getLength()); - - if(nTextLength) - { - const ::com::sun::star::lang::Locale& rLocale = rTextCandidate.getLocale(); - const sal_Int32 nTextPosition(rTextCandidate.getTextPosition()); - - sal_Int32 nDone; - sal_Int32 nNextCellBreak(mxBreakIterator->nextCharacters(rTxt, nTextPosition, rLocale, ::com::sun::star::i18n::CharacterIteratorMode::SKIPCELL, 0, nDone)); - ::com::sun::star::i18n::Boundary nNextWordBoundary(mxBreakIterator->getWordBoundary(rTxt, nTextPosition, rLocale, ::com::sun::star::i18n::WordType::ANY_WORD, sal_True)); - sal_Int32 nNextSentenceBreak(mxBreakIterator->endOfSentence(rTxt, nTextPosition, rLocale)); - static const ByteString aCommentStringA("XTEXT_EOC"); - static const ByteString aCommentStringB("XTEXT_EOW"); - static const ByteString aCommentStringC("XTEXT_EOS"); - - for(sal_Int32 i(nTextPosition); i < nTextPosition + nTextLength; i++) - { - // create the entries for the respective break positions - if(i == nNextCellBreak) - { - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringA, i - nTextPosition)); - nNextCellBreak = mxBreakIterator->nextCharacters(rTxt, i, rLocale, ::com::sun::star::i18n::CharacterIteratorMode::SKIPCELL, 1, nDone); - } - if(i == nNextWordBoundary.endPos) - { - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringB, i - nTextPosition)); - nNextWordBoundary = mxBreakIterator->getWordBoundary(rTxt, i + 1, rLocale, ::com::sun::star::i18n::WordType::ANY_WORD, sal_True); - } - if(i == nNextSentenceBreak) - { - mpMetaFile->AddAction(new MetaCommentAction(aCommentStringC, i - nTextPosition)); - nNextSentenceBreak = mxBreakIterator->endOfSentence(rTxt, i + 1, rLocale); - } - } - } - } - } - - break; - } - case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D : - { - const primitive2d::PolygonHairlinePrimitive2D& rHairlinePrimitive = static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate); - const basegfx::B2DPolygon& rBasePolygon = rHairlinePrimitive.getB2DPolygon(); - - if(rBasePolygon.count() > (MAX_POLYGON_POINT_COUNT_METAFILE - 1)) - { - // #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points - // per polygon. If there are more, split the polygon in half and call recursively - basegfx::B2DPolygon aLeft, aRight; - splitLinePolygon(rBasePolygon, aLeft, aRight); - const primitive2d::PolygonHairlinePrimitive2D aPLeft(aLeft, rHairlinePrimitive.getBColor()); - const primitive2d::PolygonHairlinePrimitive2D aPRight(aRight, rHairlinePrimitive.getBColor()); - - processBasePrimitive2D(aPLeft); - processBasePrimitive2D(aPRight); - } - else - { - // direct draw of hairline; use default processing - // support SvtGraphicStroke MetaCommentAction - const basegfx::BColor aLineColor(maBColorModifierStack.getModifiedColor(rHairlinePrimitive.getBColor())); - SvtGraphicStroke* pSvtGraphicStroke = impTryToCreateSvtGraphicStroke( - rHairlinePrimitive.getB2DPolygon(), - &aLineColor, - 0, 0, 0, 0); - - impStartSvtGraphicStroke(pSvtGraphicStroke); - RenderPolygonHairlinePrimitive2D(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate), false); - impEndSvtGraphicStroke(pSvtGraphicStroke); - } - break; - } - case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D : - { - const primitive2d::PolygonStrokePrimitive2D& rStrokePrimitive = static_cast< const primitive2d::PolygonStrokePrimitive2D& >(rCandidate); - const basegfx::B2DPolygon& rBasePolygon = rStrokePrimitive.getB2DPolygon(); - - if(rBasePolygon.count() > (MAX_POLYGON_POINT_COUNT_METAFILE - 1)) - { - // #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points - // per polygon. If there are more, split the polygon in half and call recursively - basegfx::B2DPolygon aLeft, aRight; - splitLinePolygon(rBasePolygon, aLeft, aRight); - const primitive2d::PolygonStrokePrimitive2D aPLeft( - aLeft, rStrokePrimitive.getLineAttribute(), rStrokePrimitive.getStrokeAttribute()); - const primitive2d::PolygonStrokePrimitive2D aPRight( - aRight, rStrokePrimitive.getLineAttribute(), rStrokePrimitive.getStrokeAttribute()); - - processBasePrimitive2D(aPLeft); - processBasePrimitive2D(aPRight); - } - else - { - // support SvtGraphicStroke MetaCommentAction - SvtGraphicStroke* pSvtGraphicStroke = impTryToCreateSvtGraphicStroke( - rBasePolygon, 0, - &rStrokePrimitive.getLineAttribute(), - &rStrokePrimitive.getStrokeAttribute(), - 0, 0); - - impStartSvtGraphicStroke(pSvtGraphicStroke); - const attribute::LineAttribute& rLine = rStrokePrimitive.getLineAttribute(); - - // create MetaPolyLineActions, but without LINE_DASH - if(basegfx::fTools::more(rLine.getWidth(), 0.0)) - { - const attribute::StrokeAttribute& rStroke = rStrokePrimitive.getStrokeAttribute(); - basegfx::B2DPolyPolygon aHairLinePolyPolygon; - - if(0.0 == rStroke.getFullDotDashLen()) - { - aHairLinePolyPolygon.append(rBasePolygon); - } - else - { - basegfx::tools::applyLineDashing( - rBasePolygon, rStroke.getDotDashArray(), - &aHairLinePolyPolygon, 0, rStroke.getFullDotDashLen()); - } - - const basegfx::BColor aHairlineColor(maBColorModifierStack.getModifiedColor(rLine.getColor())); - mpOutputDevice->SetLineColor(Color(aHairlineColor)); - mpOutputDevice->SetFillColor(); - aHairLinePolyPolygon.transform(maCurrentTransformation); - - // #i113922# LineWidth needs to be transformed, too - const basegfx::B2DVector aDiscreteUnit(maCurrentTransformation * basegfx::B2DVector(rLine.getWidth(), 0.0)); - const double fDiscreteLineWidth(aDiscreteUnit.getLength()); - - LineInfo aLineInfo(LINE_SOLID, basegfx::fround(fDiscreteLineWidth)); - aLineInfo.SetLineJoin(rLine.getLineJoin()); - - for(sal_uInt32 a(0); a < aHairLinePolyPolygon.count(); a++) - { - const basegfx::B2DPolygon aCandidate(aHairLinePolyPolygon.getB2DPolygon(a)); - - if(aCandidate.count() > 1) - { - const Polygon aToolsPolygon(aCandidate); - - mpMetaFile->AddAction(new MetaPolyLineAction(aToolsPolygon, aLineInfo)); - } - } - } - else - { - process(rCandidate.get2DDecomposition(getViewInformation2D())); - } - - impEndSvtGraphicStroke(pSvtGraphicStroke); - } - - break; - } - case PRIMITIVE2D_ID_POLYGONSTROKEARROWPRIMITIVE2D : - { - const primitive2d::PolygonStrokeArrowPrimitive2D& rStrokeArrowPrimitive = static_cast< const primitive2d::PolygonStrokeArrowPrimitive2D& >(rCandidate); - const basegfx::B2DPolygon& rBasePolygon = rStrokeArrowPrimitive.getB2DPolygon(); - - if(rBasePolygon.count() > (MAX_POLYGON_POINT_COUNT_METAFILE - 1)) - { - // #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points - // per polygon. If there are more, split the polygon in half and call recursively - basegfx::B2DPolygon aLeft, aRight; - splitLinePolygon(rBasePolygon, aLeft, aRight); - const attribute::LineStartEndAttribute aEmpty; - const primitive2d::PolygonStrokeArrowPrimitive2D aPLeft( - aLeft, - rStrokeArrowPrimitive.getLineAttribute(), - rStrokeArrowPrimitive.getStrokeAttribute(), - rStrokeArrowPrimitive.getStart(), - aEmpty); - const primitive2d::PolygonStrokeArrowPrimitive2D aPRight( - aRight, - rStrokeArrowPrimitive.getLineAttribute(), - rStrokeArrowPrimitive.getStrokeAttribute(), - aEmpty, - rStrokeArrowPrimitive.getEnd()); - - processBasePrimitive2D(aPLeft); - processBasePrimitive2D(aPRight); - } - else - { - // support SvtGraphicStroke MetaCommentAction - SvtGraphicStroke* pSvtGraphicStroke = impTryToCreateSvtGraphicStroke( - rBasePolygon, 0, - &rStrokeArrowPrimitive.getLineAttribute(), - &rStrokeArrowPrimitive.getStrokeAttribute(), - &rStrokeArrowPrimitive.getStart(), - &rStrokeArrowPrimitive.getEnd()); - - impStartSvtGraphicStroke(pSvtGraphicStroke); - process(rCandidate.get2DDecomposition(getViewInformation2D())); - impEndSvtGraphicStroke(pSvtGraphicStroke); - } - - break; - } - case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : - { - // direct draw of transformed BitmapEx primitive; use default processing - RenderBitmapPrimitive2D(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_RENDERGRAPHICPRIMITIVE2D : - { - // direct draw of transformed RenderGraphic primitive; use default processing - RenderRenderGraphicPrimitive2D(static_cast< const primitive2d::RenderGraphicPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONBITMAPPRIMITIVE2D : - { - // need to handle PolyPolygonBitmapPrimitive2D here to support XPATHFILL_SEQ_BEGIN/XPATHFILL_SEQ_END - const primitive2d::PolyPolygonBitmapPrimitive2D& rBitmapCandidate = static_cast< const primitive2d::PolyPolygonBitmapPrimitive2D& >(rCandidate); - basegfx::B2DPolyPolygon aLocalPolyPolygon(rBitmapCandidate.getB2DPolyPolygon()); - - if(fillPolyPolygonNeededToBeSplit(aLocalPolyPolygon)) - { - // #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points - // per polygon. If there are more use the splitted polygon and call recursively - const primitive2d::PolyPolygonBitmapPrimitive2D aSplitted( - aLocalPolyPolygon, - rBitmapCandidate.getFillBitmap()); - - processBasePrimitive2D(aSplitted); - } - else - { - SvtGraphicFill* pSvtGraphicFill = 0; - - if(!mnSvtGraphicFillCount && aLocalPolyPolygon.count()) - { - aLocalPolyPolygon.transform(maCurrentTransformation); - // calculate transformation. Get real object size, all values in FillBitmapAttribute - // are relative to the unified object - const attribute::FillBitmapAttribute& rFillBitmapAttribute = rBitmapCandidate .getFillBitmap(); - const basegfx::B2DRange aOutlineRange(basegfx::tools::getRange(aLocalPolyPolygon)); - const basegfx::B2DVector aOutlineSize(aOutlineRange.getRange()); - - // get absolute values - const basegfx::B2DVector aFillBitmapSize(rFillBitmapAttribute.getSize() * aOutlineSize); - const basegfx::B2DPoint aFillBitmapTopLeft(rFillBitmapAttribute.getTopLeft() * aOutlineSize); - - // the scaling needs scale from pixel to logic coordinate system - const BitmapEx& rBitmapEx = rFillBitmapAttribute.getBitmapEx(); - Size aBmpSizePixel(rBitmapEx.GetSizePixel()); - - if(!aBmpSizePixel.Width()) - { - aBmpSizePixel.Width() = 1; - } - - if(!aBmpSizePixel.Height()) - { - aBmpSizePixel.Height() = 1; - } - - // setup transformation like in impgrfll - SvtGraphicFill::Transform aTransform; - - // scale values are divided by bitmap pixel sizes - aTransform.matrix[0] = aFillBitmapSize.getX() / aBmpSizePixel.Width(); - aTransform.matrix[4] = aFillBitmapSize.getY() / aBmpSizePixel.Height(); - - // translates are absolute - aTransform.matrix[2] = aFillBitmapTopLeft.getX(); - aTransform.matrix[5] = aFillBitmapTopLeft.getY(); - - // setup fill graphic like in impgrfll - Graphic aFillGraphic = Graphic(rBitmapEx); - aFillGraphic.SetPrefMapMode(MapMode(MAP_PIXEL)); - aFillGraphic.SetPrefSize(aBmpSizePixel); - - pSvtGraphicFill = new SvtGraphicFill( - PolyPolygon(aLocalPolyPolygon), - Color(), - 0.0, - SvtGraphicFill::fillEvenOdd, - SvtGraphicFill::fillTexture, - aTransform, - rFillBitmapAttribute.getTiling(), - SvtGraphicFill::hatchSingle, - Color(), - SvtGraphicFill::gradientLinear, - Color(), - Color(), - 0, - aFillGraphic); - } - - // Do use decomposition; encapsulate with SvtGraphicFill - impStartSvtGraphicFill(pSvtGraphicFill); - process(rCandidate.get2DDecomposition(getViewInformation2D())); - impEndSvtGraphicFill(pSvtGraphicFill); - } - - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONHATCHPRIMITIVE2D : - { - // need to handle PolyPolygonHatchPrimitive2D here to support XPATHFILL_SEQ_BEGIN/XPATHFILL_SEQ_END - const primitive2d::PolyPolygonHatchPrimitive2D& rHatchCandidate = static_cast< const primitive2d::PolyPolygonHatchPrimitive2D& >(rCandidate); - const attribute::FillHatchAttribute& rFillHatchAttribute = rHatchCandidate.getFillHatch(); - basegfx::B2DPolyPolygon aLocalPolyPolygon(rHatchCandidate.getB2DPolyPolygon()); - - // #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points - // per polygon. Split polygon until there are less than that - while(fillPolyPolygonNeededToBeSplit(aLocalPolyPolygon)) - ; - - if(rFillHatchAttribute.isFillBackground()) - { - // with fixing #i111954# (see below) the possible background - // fill of a hatched object was lost.Generate a background fill - // primitive and render it - const primitive2d::Primitive2DReference xBackground( - new primitive2d::PolyPolygonColorPrimitive2D( - aLocalPolyPolygon, - rHatchCandidate.getBackgroundColor())); - - process(primitive2d::Primitive2DSequence(&xBackground, 1)); - } - - SvtGraphicFill* pSvtGraphicFill = 0; - aLocalPolyPolygon.transform(maCurrentTransformation); - - if(!mnSvtGraphicFillCount && aLocalPolyPolygon.count()) - { - // re-create a VCL hatch as base data - SvtGraphicFill::HatchType eHatch(SvtGraphicFill::hatchSingle); - - switch(rFillHatchAttribute.getStyle()) - { - default: // attribute::HATCHSTYLE_SINGLE : - { - eHatch = SvtGraphicFill::hatchSingle; - break; - } - case attribute::HATCHSTYLE_DOUBLE : - { - eHatch = SvtGraphicFill::hatchDouble; - break; - } - case attribute::HATCHSTYLE_TRIPLE : - { - eHatch = SvtGraphicFill::hatchTriple; - break; - } - } - - SvtGraphicFill::Transform aTransform; - - // scale - aTransform.matrix[0] *= rFillHatchAttribute.getDistance(); - aTransform.matrix[4] *= rFillHatchAttribute.getDistance(); - - // rotate (was never correct in impgrfll anyways, use correct angle now) - aTransform.matrix[0] *= cos(rFillHatchAttribute.getAngle()); - aTransform.matrix[1] *= -sin(rFillHatchAttribute.getAngle()); - aTransform.matrix[3] *= sin(rFillHatchAttribute.getAngle()); - aTransform.matrix[4] *= cos(rFillHatchAttribute.getAngle()); - - pSvtGraphicFill = new SvtGraphicFill( - PolyPolygon(aLocalPolyPolygon), - Color(), - 0.0, - SvtGraphicFill::fillEvenOdd, - SvtGraphicFill::fillHatch, - aTransform, - false, - eHatch, - Color(rFillHatchAttribute.getColor()), - SvtGraphicFill::gradientLinear, - Color(), - Color(), - 0, - Graphic()); - } - - // Do use decomposition; encapsulate with SvtGraphicFill - impStartSvtGraphicFill(pSvtGraphicFill); - - // #i111954# do NOT use decomposition, but use direct VCL-command - // process(rCandidate.get2DDecomposition(getViewInformation2D())); - const PolyPolygon aToolsPolyPolygon(aLocalPolyPolygon); - const HatchStyle aHatchStyle( - attribute::HATCHSTYLE_SINGLE == rFillHatchAttribute.getStyle() ? HATCH_SINGLE : - attribute::HATCHSTYLE_DOUBLE == rFillHatchAttribute.getStyle() ? HATCH_DOUBLE : - HATCH_TRIPLE); - - mpOutputDevice->DrawHatch(aToolsPolyPolygon, - Hatch(aHatchStyle, - Color(rFillHatchAttribute.getColor()), - basegfx::fround(rFillHatchAttribute.getDistance()), - basegfx::fround(rFillHatchAttribute.getAngle() / F_PI1800))); - - impEndSvtGraphicFill(pSvtGraphicFill); - - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D : - { - const primitive2d::PolyPolygonGradientPrimitive2D& rGradientCandidate = static_cast< const primitive2d::PolyPolygonGradientPrimitive2D& >(rCandidate); - basegfx::B2DPolyPolygon aLocalPolyPolygon(rGradientCandidate.getB2DPolyPolygon()); - - // #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points - // per polygon. Split polygon until there are less than that - while(fillPolyPolygonNeededToBeSplit(aLocalPolyPolygon)) - ; - - // for support of MetaCommentActions of the form XGRAD_SEQ_BEGIN, XGRAD_SEQ_END - // it is safest to use the VCL OutputDevice::DrawGradient method which creates those. - // re-create a VCL-gradient from FillGradientPrimitive2D and the needed tools PolyPolygon - Gradient aVCLGradient; - impConvertFillGradientAttributeToVCLGradient(aVCLGradient, rGradientCandidate.getFillGradient(), false); - aLocalPolyPolygon.transform(maCurrentTransformation); - - // #i82145# ATM VCL printing of gradients using curved shapes does not work, - // i submitted the bug with the given ID to THB. When that task is fixed it is - // necessary to again remove this subdivision since it decreases possible - // printing quality (not even resolution-dependent for now). THB will tell - // me when that task is fixed in the master - const PolyPolygon aToolsPolyPolygon(basegfx::tools::adaptiveSubdivideByAngle(aLocalPolyPolygon)); - - // XPATHFILL_SEQ_BEGIN/XPATHFILL_SEQ_END support - SvtGraphicFill* pSvtGraphicFill = 0; - - if(!mnSvtGraphicFillCount && aLocalPolyPolygon.count()) - { - // setup gradient stuff like in like in impgrfll - SvtGraphicFill::GradientType eGrad(SvtGraphicFill::gradientLinear); - - switch(aVCLGradient.GetStyle()) - { - default : // GRADIENT_LINEAR: - case GRADIENT_AXIAL: - eGrad = SvtGraphicFill::gradientLinear; - break; - case GRADIENT_RADIAL: - case GRADIENT_ELLIPTICAL: - eGrad = SvtGraphicFill::gradientRadial; - break; - case GRADIENT_SQUARE: - case GRADIENT_RECT: - eGrad = SvtGraphicFill::gradientRectangular; - break; - } - - pSvtGraphicFill = new SvtGraphicFill( - aToolsPolyPolygon, - Color(), - 0.0, - SvtGraphicFill::fillEvenOdd, - SvtGraphicFill::fillGradient, - SvtGraphicFill::Transform(), - false, - SvtGraphicFill::hatchSingle, - Color(), - eGrad, - aVCLGradient.GetStartColor(), - aVCLGradient.GetEndColor(), - aVCLGradient.GetSteps(), - Graphic()); - } - - // call VCL directly; encapsulate with SvtGraphicFill - impStartSvtGraphicFill(pSvtGraphicFill); - mpOutputDevice->DrawGradient(aToolsPolyPolygon, aVCLGradient); - impEndSvtGraphicFill(pSvtGraphicFill); - - // NO usage of common own gradient randerer, not used ATM for VCL MetaFile, see text above - // RenderPolyPolygonGradientPrimitive2D(static_cast< const primitive2d::PolyPolygonGradientPrimitive2D& >(rCandidate)); - - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : - { - const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate)); - basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolygonCandidate.getB2DPolyPolygon()); - - // #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points - // per polygon. Split polygon until there are less than that - while(fillPolyPolygonNeededToBeSplit(aLocalPolyPolygon)) - ; - - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rPolygonCandidate.getBColor())); - aLocalPolyPolygon.transform(maCurrentTransformation); - - // XPATHFILL_SEQ_BEGIN/XPATHFILL_SEQ_END support - SvtGraphicFill* pSvtGraphicFill = 0; - - if(!mnSvtGraphicFillCount && aLocalPolyPolygon.count()) - { - // setup simple color fill stuff like in impgrfll - pSvtGraphicFill = new SvtGraphicFill( - PolyPolygon(aLocalPolyPolygon), - Color(aPolygonColor), - 0.0, - SvtGraphicFill::fillEvenOdd, - SvtGraphicFill::fillSolid, - SvtGraphicFill::Transform(), - false, - SvtGraphicFill::hatchSingle, - Color(), - SvtGraphicFill::gradientLinear, - Color(), - Color(), - 0, - Graphic()); - } - - // set line and fill color - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - - // call VCL directly; encapsulate with SvtGraphicFill - impStartSvtGraphicFill(pSvtGraphicFill); - mpOutputDevice->DrawPolyPolygon(aLocalPolyPolygon); - impEndSvtGraphicFill(pSvtGraphicFill); - - break; - } - case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : - { - // direct draw of MetaFile, use default pocessing - RenderMetafilePrimitive2D(static_cast< const primitive2d::MetafilePrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_MASKPRIMITIVE2D : - { - // mask group. Special handling for MetaFiles. - const primitive2d::MaskPrimitive2D& rMaskCandidate = static_cast< const primitive2d::MaskPrimitive2D& >(rCandidate); - - if(rMaskCandidate.getChildren().hasElements()) - { - basegfx::B2DPolyPolygon aMask(rMaskCandidate.getMask()); - - if(aMask.count()) - { - // prepare new mask polygon and rescue current one - aMask.transform(maCurrentTransformation); - const basegfx::B2DPolyPolygon aLastClipPolyPolygon(maClipPolyPolygon); - - if(maClipPolyPolygon.count()) - { - // there is already a clip polygon set; build clipped union of - // current mask polygon and new one - maClipPolyPolygon = basegfx::tools::clipPolyPolygonOnPolyPolygon( - aMask, - maClipPolyPolygon, - true, // #i106516# we want the inside of aMask, not the outside - false); - } - else - { - // use mask directly - maClipPolyPolygon = aMask; - } - - if(maClipPolyPolygon.count()) - { - // set VCL clip region; subdivide before conversion to tools polygon. Subdivision necessary (!) - // Removed subdivision and fixed in Region::ImplPolyPolyRegionToBandRegionFunc() in VCL where - // the ClipRegion is built from the Polygon. A AdaptiveSubdivide on the source polygon was missing there - mpOutputDevice->Push(PUSH_CLIPREGION); - //mpOutputDevice->SetClipRegion(Region(PolyPolygon(basegfx::tools::adaptiveSubdivideByAngle(maClipPolyPolygon)))); - mpOutputDevice->SetClipRegion(Region(PolyPolygon(maClipPolyPolygon))); - } - - // recursively paint content - process(rMaskCandidate.getChildren()); - - if(maClipPolyPolygon.count()) - { - // restore VCL clip region - mpOutputDevice->Pop(); - } - - // restore to rescued clip polygon - maClipPolyPolygon = aLastClipPolyPolygon; - } - else - { - // no mask, no clipping. recursively paint content - process(rMaskCandidate.getChildren()); - } - } - - break; - } - case PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D : - { - // modified color group. Force output to unified color. Use default pocessing. - RenderModifiedColorPrimitive2D(static_cast< const primitive2d::ModifiedColorPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D : - { - // HiddenGeometryPrimitive2D; to rebuilt the old MetaFile creation, it is necessary to - // not ignore them (as it was thought), but to add a MetaFile entry for them. - basegfx::B2DRange aInvisibleRange(rCandidate.getB2DRange(getViewInformation2D())); - - if(!aInvisibleRange.isEmpty()) - { - aInvisibleRange.transform(maCurrentTransformation); - const Rectangle aRectLogic( - (sal_Int32)floor(aInvisibleRange.getMinX()), (sal_Int32)floor(aInvisibleRange.getMinY()), - (sal_Int32)ceil(aInvisibleRange.getMaxX()), (sal_Int32)ceil(aInvisibleRange.getMaxY())); - - mpOutputDevice->SetFillColor(); - mpOutputDevice->SetLineColor(); - mpOutputDevice->DrawRect(aRectLogic); - } - - break; - } - case PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D : - { - // for metafile: Need to examine what the pure vcl version is doing here actually - // - uses DrawTransparent with metafile for content and a gradient - // - uses DrawTransparent for single PolyPoylgons directly. Can be detected by - // checking the content for single PolyPolygonColorPrimitive2D - const primitive2d::UnifiedTransparencePrimitive2D& rUniTransparenceCandidate = static_cast< const primitive2d::UnifiedTransparencePrimitive2D& >(rCandidate); - const primitive2d::Primitive2DSequence rContent = rUniTransparenceCandidate.getChildren(); - - if(rContent.hasElements()) - { - if(0.0 == rUniTransparenceCandidate.getTransparence()) - { - // not transparent at all, use content - process(rUniTransparenceCandidate.getChildren()); - } - else if(rUniTransparenceCandidate.getTransparence() > 0.0 && rUniTransparenceCandidate.getTransparence() < 1.0) - { - // try to identify a single PolyPolygonColorPrimitive2D in the - // content part of the transparence primitive - const primitive2d::PolyPolygonColorPrimitive2D* pPoPoColor = 0; - static bool bForceToMetafile(false); - - if(!bForceToMetafile && 1 == rContent.getLength()) - { - const primitive2d::Primitive2DReference xReference(rContent[0]); - pPoPoColor = dynamic_cast< const primitive2d::PolyPolygonColorPrimitive2D* >(xReference.get()); - } - - // PolyPolygonGradientPrimitive2D, PolyPolygonHatchPrimitive2D and - // PolyPolygonBitmapPrimitive2D are derived from PolyPolygonColorPrimitive2D. - // Check also for correct ID to exclude derived implementations - if(pPoPoColor && PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D == pPoPoColor->getPrimitive2DID()) - { - // single transparent PolyPolygon identified, use directly - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(pPoPoColor->getBColor())); - basegfx::B2DPolyPolygon aLocalPolyPolygon(pPoPoColor->getB2DPolyPolygon()); - - // #i112245# Metafiles use tools Polygon and are not able to have more than 65535 points - // per polygon. Split polygon until there are less than that - while(fillPolyPolygonNeededToBeSplit(aLocalPolyPolygon)) - ; - - // now transform - aLocalPolyPolygon.transform(maCurrentTransformation); - - // XPATHFILL_SEQ_BEGIN/XPATHFILL_SEQ_END support - SvtGraphicFill* pSvtGraphicFill = 0; - - if(!mnSvtGraphicFillCount && aLocalPolyPolygon.count()) - { - // setup simple color with transparence fill stuff like in impgrfll - pSvtGraphicFill = new SvtGraphicFill( - PolyPolygon(aLocalPolyPolygon), - Color(aPolygonColor), - rUniTransparenceCandidate.getTransparence(), - SvtGraphicFill::fillEvenOdd, - SvtGraphicFill::fillSolid, - SvtGraphicFill::Transform(), - false, - SvtGraphicFill::hatchSingle, - Color(), - SvtGraphicFill::gradientLinear, - Color(), - Color(), - 0, - Graphic()); - } - - // set line and fill color - const sal_uInt16 nTransPercentVcl((sal_uInt16)basegfx::fround(rUniTransparenceCandidate.getTransparence() * 100.0)); - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - - // call VCL directly; encapsulate with SvtGraphicFill - impStartSvtGraphicFill(pSvtGraphicFill); - mpOutputDevice->DrawTransparent( - PolyPolygon(aLocalPolyPolygon), - nTransPercentVcl); - impEndSvtGraphicFill(pSvtGraphicFill); - } - else - { - // svae old mfCurrentUnifiedTransparence and set new one - // so that contained SvtGraphicStroke may use the current one - const double fLastCurrentUnifiedTransparence(mfCurrentUnifiedTransparence); - // #i105377# paint the content metafile opaque as the transparency gets - // split of into the gradient below - // mfCurrentUnifiedTransparence = rUniTransparenceCandidate.getTransparence(); - mfCurrentUnifiedTransparence = 0; - - // various content, create content-metafile - GDIMetaFile aContentMetafile; - const Rectangle aPrimitiveRectangle(impDumpToMetaFile(rContent, aContentMetafile)); - - // restore mfCurrentUnifiedTransparence; it may have been used - // while processing the sub-content in impDumpToMetaFile - mfCurrentUnifiedTransparence = fLastCurrentUnifiedTransparence; - - // create uniform VCL gradient for uniform transparency - Gradient aVCLGradient; - const sal_uInt8 nTransPercentVcl((sal_uInt8)basegfx::fround(rUniTransparenceCandidate.getTransparence() * 255.0)); - const Color aTransColor(nTransPercentVcl, nTransPercentVcl, nTransPercentVcl); - - aVCLGradient.SetStyle(GRADIENT_LINEAR); - aVCLGradient.SetStartColor(aTransColor); - aVCLGradient.SetEndColor(aTransColor); - aVCLGradient.SetAngle(0); - aVCLGradient.SetBorder(0); - aVCLGradient.SetOfsX(0); - aVCLGradient.SetOfsY(0); - aVCLGradient.SetStartIntensity(100); - aVCLGradient.SetEndIntensity(100); - aVCLGradient.SetSteps(2); - - // render it to VCL - mpOutputDevice->DrawTransparent( - aContentMetafile, aPrimitiveRectangle.TopLeft(), - aPrimitiveRectangle.GetSize(), aVCLGradient); - } - } - } - - break; - } - case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D : - { - // for metafile: Need to examine what the pure vcl version is doing here actually - // - uses DrawTransparent with metafile for content and a gradient - // i can detect this here with checking the gradient part for a single - // FillGradientPrimitive2D and reconstruct the gradient. - // If that detection goes wrong, i have to create an transparence-blended bitmap. Eventually - // do that in stripes, else RenderTransparencePrimitive2D may just be used - const primitive2d::TransparencePrimitive2D& rTransparenceCandidate = static_cast< const primitive2d::TransparencePrimitive2D& >(rCandidate); - const primitive2d::Primitive2DSequence rContent = rTransparenceCandidate.getChildren(); - const primitive2d::Primitive2DSequence rTransparence = rTransparenceCandidate.getTransparence(); - - if(rContent.hasElements() && rTransparence.hasElements()) - { - // try to identify a single FillGradientPrimitive2D in the - // transparence part of the primitive - const primitive2d::FillGradientPrimitive2D* pFiGradient = 0; - static bool bForceToBigTransparentVDev(false); - - if(!bForceToBigTransparentVDev && 1 == rTransparence.getLength()) - { - const primitive2d::Primitive2DReference xReference(rTransparence[0]); - pFiGradient = dynamic_cast< const primitive2d::FillGradientPrimitive2D* >(xReference.get()); - } - - // Check also for correct ID to exclude derived implementations - if(pFiGradient && PRIMITIVE2D_ID_FILLGRADIENTPRIMITIVE2D == pFiGradient->getPrimitive2DID()) - { - // various content, create content-metafile - GDIMetaFile aContentMetafile; - const Rectangle aPrimitiveRectangle(impDumpToMetaFile(rContent, aContentMetafile)); - - // re-create a VCL-gradient from FillGradientPrimitive2D - Gradient aVCLGradient; - impConvertFillGradientAttributeToVCLGradient(aVCLGradient, pFiGradient->getFillGradient(), true); - - // render it to VCL - mpOutputDevice->DrawTransparent( - aContentMetafile, aPrimitiveRectangle.TopLeft(), - aPrimitiveRectangle.GetSize(), aVCLGradient); - } - else - { - // sub-transparence group. Draw to VDev first. - // this may get refined to tiling when resolution is too big here - - // need to avoid switching off MapMode stuff here; maybe need another - // tooling class, cannot just do the same as with the pixel renderer. - // Need to experiment... - - // Okay, basic implementation finished and tested. The DPI stuff was hard - // and not easy to find out that it's needed. - // Since this will not yet happen normally (as long as noone constructs - // transparence primitives with non-trivial transparence content) i will for now not - // refine to tiling here. - - basegfx::B2DRange aViewRange(primitive2d::getB2DRangeFromPrimitive2DSequence(rContent, getViewInformation2D())); - aViewRange.transform(maCurrentTransformation); - const Rectangle aRectLogic( - (sal_Int32)floor(aViewRange.getMinX()), (sal_Int32)floor(aViewRange.getMinY()), - (sal_Int32)ceil(aViewRange.getMaxX()), (sal_Int32)ceil(aViewRange.getMaxY())); - const Rectangle aRectPixel(mpOutputDevice->LogicToPixel(aRectLogic)); - const Size aSizePixel(aRectPixel.GetSize()); - const Point aEmptyPoint; - VirtualDevice aBufferDevice; - - if(aBufferDevice.SetOutputSizePixel(aSizePixel)) - { - // create and set MapModes for target devices - MapMode aNewMapMode(mpOutputDevice->GetMapMode()); - aNewMapMode.SetOrigin(Point(-aRectLogic.Left(), -aRectLogic.Top())); - aBufferDevice.SetMapMode(aNewMapMode); - - // prepare view transformation for target renderers - // ATTENTION! Need to apply another scaling because of the potential DPI differences - // between Printer and VDev (mpOutputDevice and aBufferDevice here). - // To get the DPI, LogicToPixel from (1,1) from MAP_INCH needs to be used. - basegfx::B2DHomMatrix aViewTransform(aBufferDevice.GetViewTransformation()); - const Size aDPIOld(mpOutputDevice->LogicToPixel(Size(1, 1), MAP_INCH)); - const Size aDPINew(aBufferDevice.LogicToPixel(Size(1, 1), MAP_INCH)); - const double fDPIXChange((double)aDPIOld.getWidth() / (double)aDPINew.getWidth()); - const double fDPIYChange((double)aDPIOld.getHeight() / (double)aDPINew.getHeight()); - - if(!basegfx::fTools::equal(fDPIXChange, 1.0) || !basegfx::fTools::equal(fDPIYChange, 1.0)) - { - aViewTransform.scale(fDPIXChange, fDPIYChange); - } - - // create view information and pixel renderer. Reuse known ViewInformation - // except new transformation and range - const geometry::ViewInformation2D aViewInfo( - getViewInformation2D().getObjectTransformation(), - aViewTransform, - aViewRange, - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - - VclPixelProcessor2D aBufferProcessor(aViewInfo, aBufferDevice); - - // draw content using pixel renderer - aBufferProcessor.process(rContent); - const Bitmap aBmContent(aBufferDevice.GetBitmap(aEmptyPoint, aSizePixel)); - - // draw transparence using pixel renderer - aBufferDevice.Erase(); - aBufferProcessor.process(rTransparence); - const AlphaMask aBmAlpha(aBufferDevice.GetBitmap(aEmptyPoint, aSizePixel)); - - // paint - mpOutputDevice->DrawBitmapEx( - aRectLogic.TopLeft(), - aRectLogic.GetSize(), - BitmapEx(aBmContent, aBmAlpha)); - } - } - } - - break; - } - case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D : - { - // use default transform group pocessing - RenderTransformPrimitive2D(static_cast< const primitive2d::TransformPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D : - { - // new XDrawPage for ViewInformation2D - RenderPagePreviewPrimitive2D(static_cast< const primitive2d::PagePreviewPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D : - { - // use default marker array pocessing - RenderMarkerArrayPrimitive2D(static_cast< const primitive2d::MarkerArrayPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D : - { - // use default point array pocessing - RenderPointArrayPrimitive2D(static_cast< const primitive2d::PointArrayPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_CHARTPRIMITIVE2D : - { - // ChartPrimitive2D - const primitive2d::ChartPrimitive2D& rChartPrimitive = static_cast< const primitive2d::ChartPrimitive2D& >(rCandidate); - - if(!renderChartPrimitive2D( - rChartPrimitive, - *mpOutputDevice, - getViewInformation2D())) - { - // fallback to decomposition (MetaFile) - process(rChartPrimitive.get2DDecomposition(getViewInformation2D())); - } - break; - } - case PRIMITIVE2D_ID_STRUCTURETAGPRIMITIVE2D : - { - // structured tag primitive - const primitive2d::StructureTagPrimitive2D& rStructureTagCandidate = static_cast< const primitive2d::StructureTagPrimitive2D& >(rCandidate); - const vcl::PDFWriter::StructElement& rTagElement(rStructureTagCandidate.getStructureElement()); - const bool bTagUsed(vcl::PDFWriter::NonStructElement != rTagElement); - - if(mpPDFExtOutDevData && bTagUsed) - { - // write start tag - mpPDFExtOutDevData->BeginStructureElement(rTagElement); - } - - // proccess childs normally - process(rStructureTagCandidate.getChildren()); - - if(mpPDFExtOutDevData && bTagUsed) - { - // write end tag - mpPDFExtOutDevData->EndStructureElement(); - } - - break; - } - case PRIMITIVE2D_ID_EPSPRIMITIVE2D : - { - RenderEpsPrimitive2D(static_cast< const primitive2d::EpsPrimitive2D& >(rCandidate)); - break; - } - default : - { - // process recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - break; - } - } - } - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx deleted file mode 100644 index 9db1485af3..0000000000 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ /dev/null @@ -1,625 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/vclpixelprocessor2d.hxx> -#include <vcl/outdev.hxx> -#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx> -#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/metafileprimitive2d.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/markerarrayprimitive2d.hxx> -#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx> -#include <drawinglayer/primitive2d/wrongspellprimitive2d.hxx> -#include <drawinglayer/primitive2d/controlprimitive2d.hxx> -#include <com/sun/star/awt/XWindow2.hpp> -#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/pagepreviewprimitive2d.hxx> -#include <drawinglayer/primitive2d/chartprimitive2d.hxx> -#include <helperchartrenderer.hxx> -#include <helperwrongspellrenderer.hxx> -#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <vcl/hatch.hxx> -#include <tools/diagnose_ex.h> -#include <com/sun/star/awt/PosSize.hpp> -#include <drawinglayer/primitive2d/invertprimitive2d.hxx> -#include <cstdio> -#include <drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> -#include <drawinglayer/primitive2d/epsprimitive2d.hxx> - -#include <toolkit/helper/vclunohelper.hxx> -#include <vcl/window.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - VclPixelProcessor2D::VclPixelProcessor2D(const geometry::ViewInformation2D& rViewInformation, OutputDevice& rOutDev) - : VclProcessor2D(rViewInformation, rOutDev), - maOriginalMapMode(rOutDev.GetMapMode()) - { - // prepare maCurrentTransformation matrix with viewTransformation to target directly to pixels - maCurrentTransformation = rViewInformation.getObjectToViewTransformation(); - - // prepare output directly to pixels - mpOutputDevice->Push(PUSH_MAPMODE); - mpOutputDevice->SetMapMode(); - - // react on AntiAliasing settings - if(getOptionsDrawinglayer().IsAntiAliasing()) - { - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() | ANTIALIASING_ENABLE_B2DDRAW); - } - else - { - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); - } - } - - VclPixelProcessor2D::~VclPixelProcessor2D() - { - // restore MapMode - mpOutputDevice->Pop(); - - // restore AntiAliasing - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); - } - - void VclPixelProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) - { - switch(rCandidate.getPrimitive2DID()) - { - case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D : - { - // directdraw of wrong spell primitive; added test possibility to check wrong spell decompose - static bool bHandleWrongSpellDirectly(true); - - if(bHandleWrongSpellDirectly) - { - const primitive2d::WrongSpellPrimitive2D& rWrongSpellPrimitive = static_cast< const primitive2d::WrongSpellPrimitive2D& >(rCandidate); - - if(!renderWrongSpellPrimitive2D( - rWrongSpellPrimitive, - *mpOutputDevice, - maCurrentTransformation, - maBColorModifierStack)) - { - // fallback to decomposition (MetaFile) - process(rWrongSpellPrimitive.get2DDecomposition(getViewInformation2D())); - } - } - else - { - process(rCandidate.get2DDecomposition(getViewInformation2D())); - } - break; - } - case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D : - { - // directdraw of text simple portion; added test possibility to check text decompose - static bool bForceSimpleTextDecomposition(false); - - // Adapt evtl. used special DrawMode - const sal_uInt32 nOriginalDrawMode(mpOutputDevice->GetDrawMode()); - adaptTextToFillDrawMode(); - - if(!bForceSimpleTextDecomposition && getOptionsDrawinglayer().IsRenderSimpleTextDirect()) - { - RenderTextSimpleOrDecoratedPortionPrimitive2D(static_cast< const primitive2d::TextSimplePortionPrimitive2D& >(rCandidate)); - } - else - { - process(rCandidate.get2DDecomposition(getViewInformation2D())); - } - - // restore DrawMode - mpOutputDevice->SetDrawMode(nOriginalDrawMode); - - break; - } - case PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D : - { - // directdraw of text simple portion; added test possibility to check text decompose - static bool bForceComplexTextDecomposition(false); - - // Adapt evtl. used special DrawMode - const sal_uInt32 nOriginalDrawMode(mpOutputDevice->GetDrawMode()); - adaptTextToFillDrawMode(); - - if(!bForceComplexTextDecomposition && getOptionsDrawinglayer().IsRenderDecoratedTextDirect()) - { - RenderTextSimpleOrDecoratedPortionPrimitive2D(static_cast< const primitive2d::TextSimplePortionPrimitive2D& >(rCandidate)); - } - else - { - process(rCandidate.get2DDecomposition(getViewInformation2D())); - } - - // restore DrawMode - mpOutputDevice->SetDrawMode(nOriginalDrawMode); - - break; - } - case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D : - { - // direct draw of hairline - RenderPolygonHairlinePrimitive2D(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate), true); - break; - } - case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D : - { - // direct draw of transformed BitmapEx primitive - RenderBitmapPrimitive2D(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_RENDERGRAPHICPRIMITIVE2D : - { - // direct draw of transformed BitmapEx primitive - RenderRenderGraphicPrimitive2D(static_cast< const primitive2d::RenderGraphicPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_FILLBITMAPPRIMITIVE2D : - { - // direct draw of fillBitmapPrimitive - RenderFillBitmapPrimitive2D(static_cast< const primitive2d::FillBitmapPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONGRADIENTPRIMITIVE2D : - { - // direct draw of gradient - RenderPolyPolygonGradientPrimitive2D(static_cast< const primitive2d::PolyPolygonGradientPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONBITMAPPRIMITIVE2D : - { - // direct draw of bitmap - RenderPolyPolygonBitmapPrimitive2D(static_cast< const primitive2d::PolyPolygonBitmapPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : - { - // direct draw of PolyPolygon with color - RenderPolyPolygonColorPrimitive2D(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : - { - // #i98289# - const bool bForceLineSnap(getOptionsDrawinglayer().IsAntiAliasing() && getOptionsDrawinglayer().IsSnapHorVerLinesToDiscrete()); - const sal_uInt16 nOldAntiAliase(mpOutputDevice->GetAntialiasing()); - - if(bForceLineSnap) - { - mpOutputDevice->SetAntialiasing(nOldAntiAliase | ANTIALIASING_PIXELSNAPHAIRLINE); - } - - const primitive2d::MetafilePrimitive2D& rMetafilePrimitive( static_cast< const primitive2d::MetafilePrimitive2D& >(rCandidate) ); - - static bool bTestMetaFilePrimitiveDecomposition( true ); - if( bTestMetaFilePrimitiveDecomposition && !rMetafilePrimitive.getMetaFile().GetUseCanvas() ) - { - // use new Metafile decomposition - process(rCandidate.get2DDecomposition(getViewInformation2D())); - } - else - { - // direct draw of MetaFile - RenderMetafilePrimitive2D( rMetafilePrimitive ); - } - - if(bForceLineSnap) - { - mpOutputDevice->SetAntialiasing(nOldAntiAliase); - } - - break; - } - case PRIMITIVE2D_ID_MASKPRIMITIVE2D : - { - // mask group. - RenderMaskPrimitive2DPixel(static_cast< const primitive2d::MaskPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_MODIFIEDCOLORPRIMITIVE2D : - { - // modified color group. Force output to unified color. - RenderModifiedColorPrimitive2D(static_cast< const primitive2d::ModifiedColorPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D : - { - // Detect if a single PolyPolygonColorPrimitive2D is contained; in that case, - // use the faster OutputDevice::DrawTransparent method - const primitive2d::UnifiedTransparencePrimitive2D& rUniTransparenceCandidate = static_cast< const primitive2d::UnifiedTransparencePrimitive2D& >(rCandidate); - const primitive2d::Primitive2DSequence rContent = rUniTransparenceCandidate.getChildren(); - - if(rContent.hasElements()) - { - if(0.0 == rUniTransparenceCandidate.getTransparence()) - { - // not transparent at all, use content - process(rUniTransparenceCandidate.getChildren()); - } - else if(rUniTransparenceCandidate.getTransparence() > 0.0 && rUniTransparenceCandidate.getTransparence() < 1.0) - { - bool bDrawTransparentUsed(false); - - // since DEV300 m33 DrawTransparent is supported in VCL (for some targets - // natively), so i am now enabling this shortcut - static bool bAllowUsingDrawTransparent(true); - - if(bAllowUsingDrawTransparent && 1 == rContent.getLength()) - { - const primitive2d::Primitive2DReference xReference(rContent[0]); - const primitive2d::BasePrimitive2D* pBasePrimitive = dynamic_cast< const primitive2d::BasePrimitive2D* >(xReference.get()); - - if(pBasePrimitive) - { - switch(pBasePrimitive->getPrimitive2DID()) - { - case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D: - { - // single transparent PolyPolygon identified, use directly - const primitive2d::PolyPolygonColorPrimitive2D* pPoPoColor = static_cast< const primitive2d::PolyPolygonColorPrimitive2D* >(pBasePrimitive); - OSL_ENSURE(pPoPoColor, "OOps, PrimitiveID and PrimitiveType do not match (!)"); - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(pPoPoColor->getBColor())); - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - - basegfx::B2DPolyPolygon aLocalPolyPolygon(pPoPoColor->getB2DPolyPolygon()); - aLocalPolyPolygon.transform(maCurrentTransformation); - - mpOutputDevice->DrawTransparent(aLocalPolyPolygon, rUniTransparenceCandidate.getTransparence()); - bDrawTransparentUsed = true; - break; - } - // #i# need to wait for #i101378# which is in CWS vcl112 to directly paint transparent hairlines - //case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D: - //{ - // // single transparent PolygonHairlinePrimitive2D identified, use directly - // const primitive2d::PolygonHairlinePrimitive2D* pPoHair = static_cast< const primitive2d::PolygonHairlinePrimitive2D* >(pBasePrimitive); - // OSL_ENSURE(pPoHair, "OOps, PrimitiveID and PrimitiveType do not match (!)"); - // break; - //} - } - } - } - - if(!bDrawTransparentUsed) - { - // unified sub-transparence. Draw to VDev first. - RenderUnifiedTransparencePrimitive2D(rUniTransparenceCandidate); - } - } - } - - break; - } - case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D : - { - // sub-transparence group. Draw to VDev first. - RenderTransparencePrimitive2D(static_cast< const primitive2d::TransparencePrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D : - { - // transform group. - RenderTransformPrimitive2D(static_cast< const primitive2d::TransformPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D : - { - // new XDrawPage for ViewInformation2D - RenderPagePreviewPrimitive2D(static_cast< const primitive2d::PagePreviewPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D : - { - // marker array - RenderMarkerArrayPrimitive2D(static_cast< const primitive2d::MarkerArrayPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D : - { - // point array - RenderPointArrayPrimitive2D(static_cast< const primitive2d::PointArrayPrimitive2D& >(rCandidate)); - break; - } - case PRIMITIVE2D_ID_CONTROLPRIMITIVE2D : - { - // control primitive - const primitive2d::ControlPrimitive2D& rControlPrimitive = static_cast< const primitive2d::ControlPrimitive2D& >(rCandidate); - const uno::Reference< awt::XControl >& rXControl(rControlPrimitive.getXControl()); - - try - { - // remember old graphics and create new - uno::Reference< awt::XView > xControlView(rXControl, uno::UNO_QUERY_THROW); - const uno::Reference< awt::XGraphics > xOriginalGraphics(xControlView->getGraphics()); - const uno::Reference< awt::XGraphics > xNewGraphics(mpOutputDevice->CreateUnoGraphics()); - - if(xNewGraphics.is()) - { - // link graphics and view - xControlView->setGraphics(xNewGraphics); - - // get position - const basegfx::B2DHomMatrix aObjectToPixel(maCurrentTransformation * rControlPrimitive.getTransform()); - const basegfx::B2DPoint aTopLeftPixel(aObjectToPixel * basegfx::B2DPoint(0.0, 0.0)); - - // find out if the control is already visualized as a VCL-ChildWindow. If yes, - // it does not need to be painted at all. - uno::Reference< awt::XWindow2 > xControlWindow(rXControl, uno::UNO_QUERY_THROW); - const bool bControlIsVisibleAsChildWindow(rXControl->getPeer().is() && xControlWindow->isVisible()); - - if(!bControlIsVisibleAsChildWindow) - { - // draw it. Do not forget to use the evtl. offsetted origin of the target device, - // e.g. when used with mask/transparence buffer device - const Point aOrigin(mpOutputDevice->GetMapMode().GetOrigin()); - xControlView->draw( - aOrigin.X() + basegfx::fround(aTopLeftPixel.getX()), - aOrigin.Y() + basegfx::fround(aTopLeftPixel.getY())); - } - - // restore original graphics - xControlView->setGraphics(xOriginalGraphics); - } - } - catch(const uno::Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - - // process recursively and use the decomposition as Bitmap - process(rCandidate.get2DDecomposition(getViewInformation2D())); - } - - break; - } - case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D: - { - // the stroke primitive may be decomposed to filled polygons. To keep - // evtl. set DrawModes aka DRAWMODE_BLACKLINE, DRAWMODE_GRAYLINE, - // DRAWMODE_GHOSTEDLINE, DRAWMODE_WHITELINE or DRAWMODE_SETTINGSLINE - // working, these need to be copied to the corresponding fill modes - const sal_uInt32 nOriginalDrawMode(mpOutputDevice->GetDrawMode()); - adaptLineToFillDrawMode(); - - // polygon stroke primitive - static bool bSuppressFatToHairlineCorrection(false); - - if(bSuppressFatToHairlineCorrection) - { - // remeber that we enter a PolygonStrokePrimitive2D decomposition, - // used for AA thick line drawing - mnPolygonStrokePrimitive2D++; - - // with AA there is no need to handle thin lines special - process(rCandidate.get2DDecomposition(getViewInformation2D())); - - // leave PolygonStrokePrimitive2D - mnPolygonStrokePrimitive2D--; - } - else - { - // Lines with 1 and 2 pixel width without AA need special treatment since their vsiualisation - // as filled polygons is geometrically corret but looks wrong since polygon filling avoids - // the right and bottom pixels. The used method evaluates that and takes the correct action, - // including calling recursively with decomposition if line is wide enough - const primitive2d::PolygonStrokePrimitive2D& rPolygonStrokePrimitive = static_cast< const primitive2d::PolygonStrokePrimitive2D& >(rCandidate); - - RenderPolygonStrokePrimitive2D(rPolygonStrokePrimitive); - } - - // restore DrawMode - mpOutputDevice->SetDrawMode(nOriginalDrawMode); - - break; - } - case PRIMITIVE2D_ID_CHARTPRIMITIVE2D : - { - // chart primitive in pixel renderer; restore original DrawMode during call - // since the evtl. used ChartPrettyPainter will use the MapMode - const primitive2d::ChartPrimitive2D& rChartPrimitive = static_cast< const primitive2d::ChartPrimitive2D& >(rCandidate); - mpOutputDevice->Push(PUSH_MAPMODE); - mpOutputDevice->SetMapMode(maOriginalMapMode); - - if(!renderChartPrimitive2D( - rChartPrimitive, - *mpOutputDevice, - getViewInformation2D())) - { - // fallback to decomposition (MetaFile) - process(rChartPrimitive.get2DDecomposition(getViewInformation2D())); - } - - mpOutputDevice->Pop(); - break; - } - case PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D : - { - static bool bForceIgnoreHatchSmoothing(false); - - if(bForceIgnoreHatchSmoothing || getOptionsDrawinglayer().IsAntiAliasing()) - { - // if AA is used (or ignore smoothing is on), there is no need to smooth - // hatch painting, use decomposition - process(rCandidate.get2DDecomposition(getViewInformation2D())); - } - else - { - // without AA, use VCL to draw the hatch. It snaps hatch distances to the next pixel - // and forces hatch distance to be >= 3 pixels to make the hatch display look smoother. - // This is wrong in principle, but looks nicer. This could also be done here directly - // without VCL usage if needed - const primitive2d::FillHatchPrimitive2D& rFillHatchPrimitive = static_cast< const primitive2d::FillHatchPrimitive2D& >(rCandidate); - const attribute::FillHatchAttribute& rFillHatchAttributes = rFillHatchPrimitive.getFillHatch(); - - // create hatch polygon in range size and discrete coordinates - basegfx::B2DRange aHatchRange(rFillHatchPrimitive.getObjectRange()); - aHatchRange.transform(maCurrentTransformation); - const basegfx::B2DPolygon aHatchPolygon(basegfx::tools::createPolygonFromRect(aHatchRange)); - - if(rFillHatchAttributes.isFillBackground()) - { - // #i111846# background fill is active; draw fill polygon - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rFillHatchPrimitive.getBColor())); - - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - mpOutputDevice->DrawPolygon(aHatchPolygon); - } - - // set hatch line color - const basegfx::BColor aHatchColor(maBColorModifierStack.getModifiedColor(rFillHatchPrimitive.getBColor())); - mpOutputDevice->SetFillColor(); - mpOutputDevice->SetLineColor(Color(aHatchColor)); - - // get hatch style - HatchStyle eHatchStyle(HATCH_SINGLE); - - switch(rFillHatchAttributes.getStyle()) - { - default : // HATCHSTYLE_SINGLE - { - break; - } - case attribute::HATCHSTYLE_DOUBLE : - { - eHatchStyle = HATCH_DOUBLE; - break; - } - case attribute::HATCHSTYLE_TRIPLE : - { - eHatchStyle = HATCH_TRIPLE; - break; - } - } - - // create hatch - const basegfx::B2DVector aDiscreteDistance(maCurrentTransformation * basegfx::B2DVector(rFillHatchAttributes.getDistance(), 0.0)); - const sal_uInt32 nDistance(basegfx::fround(aDiscreteDistance.getLength())); - const sal_uInt16 nAngle10((sal_uInt16)basegfx::fround(rFillHatchAttributes.getAngle() / F_PI1800)); - ::Hatch aVCLHatch(eHatchStyle, Color(rFillHatchAttributes.getColor()), nDistance, nAngle10); - - // draw hatch using VCL - mpOutputDevice->DrawHatch(PolyPolygon(Polygon(aHatchPolygon)), aVCLHatch); - } - break; - } - case PRIMITIVE2D_ID_BACKGROUNDCOLORPRIMITIVE2D : - { - // #i98404# Handle directly, especially when AA is active - const primitive2d::BackgroundColorPrimitive2D& rPrimitive = static_cast< const primitive2d::BackgroundColorPrimitive2D& >(rCandidate); - const sal_uInt16 nOriginalAA(mpOutputDevice->GetAntialiasing()); - - // switch AA off in all cases - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); - - // create color for fill - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rPrimitive.getBColor())); - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - - // create rectangle for fill - const basegfx::B2DRange& aViewport(getViewInformation2D().getDiscreteViewport()); - const Rectangle aRectangle( - (sal_Int32)floor(aViewport.getMinX()), (sal_Int32)floor(aViewport.getMinY()), - (sal_Int32)ceil(aViewport.getMaxX()), (sal_Int32)ceil(aViewport.getMaxY())); - mpOutputDevice->DrawRect(aRectangle); - - // restore AA setting - mpOutputDevice->SetAntialiasing(nOriginalAA); - break; - } - case PRIMITIVE2D_ID_TEXTHIERARCHYEDITPRIMITIVE2D : - { - // #i97628# - // This primitive means that the content is derived from an active text edit, - // not from model data itself. Some renderers need to suppress this content, e.g. - // the pixel renderer used for displaying the edit view (like this one). It's - // not to be suppressed by the MetaFile renderers, so that the edited text is - // part of the MetaFile, e.g. needed for presentation previews. - // Action: Ignore here, do nothing. - break; - } - case PRIMITIVE2D_ID_INVERTPRIMITIVE2D : - { - // invert primitive (currently only used for HighContrast fallback for selection in SW and SC). - // Set OutDev to XOR and switch AA off (XOR does not work with AA) - mpOutputDevice->Push(); - mpOutputDevice->SetRasterOp( ROP_XOR ); - const sal_uInt16 nAntiAliasing(mpOutputDevice->GetAntialiasing()); - mpOutputDevice->SetAntialiasing(nAntiAliasing & ~ANTIALIASING_ENABLE_B2DDRAW); - - // process content recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - - // restore OutDev - mpOutputDevice->Pop(); - mpOutputDevice->SetAntialiasing(nAntiAliasing); - break; - } - case PRIMITIVE2D_ID_EPSPRIMITIVE2D : - { - RenderEpsPrimitive2D(static_cast< const primitive2d::EpsPrimitive2D& >(rCandidate)); - break; - } - default : - { - // process recursively - process(rCandidate.get2DDecomposition(getViewInformation2D())); - break; - } - } - } - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx deleted file mode 100644 index 5b0897d7aa..0000000000 --- a/drawinglayer/source/processor2d/vclprocessor2d.cxx +++ /dev/null @@ -1,1593 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor2d/vclprocessor2d.hxx> -#include <drawinglayer/primitive2d/textprimitive2d.hxx> -#include <drawinglayer/primitive2d/textdecoratedprimitive2d.hxx> -#include <tools/debug.hxx> -#include <vcl/outdev.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/rendergraphicprimitive2d.hxx> -#include <vclhelperbitmaptransform.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <vclhelperbitmaprender.hxx> -#include <drawinglayer/attribute/sdrfillbitmapattribute.hxx> -#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <vclhelpergradient.hxx> -#include <drawinglayer/primitive2d/metafileprimitive2d.hxx> -#include <drawinglayer/primitive2d/maskprimitive2d.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <vclhelperbufferdevice.hxx> -#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> -#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx> -#include <drawinglayer/primitive2d/transformprimitive2d.hxx> -#include <drawinglayer/primitive2d/markerarrayprimitive2d.hxx> -#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx> -#include <drawinglayer/primitive2d/wrongspellprimitive2d.hxx> -#include <svl/ctloptions.hxx> -#include <vcl/svapp.hxx> -#include <drawinglayer/primitive2d/pagepreviewprimitive2d.hxx> -#include <tools/diagnose_ex.h> -#include <vcl/metric.hxx> -#include <drawinglayer/primitive2d/textenumsprimitive2d.hxx> -#include <drawinglayer/primitive2d/epsprimitive2d.hxx> -#include <vcl/rendergraphicrasterizer.hxx> - -////////////////////////////////////////////////////////////////////////////// -// control support - -#include <com/sun/star/awt/XWindow2.hpp> -#include <com/sun/star/awt/PosSize.hpp> -#include <com/sun/star/awt/XView.hpp> -#include <drawinglayer/primitive2d/controlprimitive2d.hxx> -#include <drawinglayer/primitive2d/textlayoutdevice.hxx> - -////////////////////////////////////////////////////////////////////////////// -// for test, can be removed again - -#include <basegfx/polygon/b2dpolygonclipper.hxx> -#include <basegfx/polygon/b2dtrapezoid.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor2d - { - ////////////////////////////////////////////////////////////////////////////// - // UNO class usages - using ::com::sun::star::uno::Reference; - using ::com::sun::star::uno::UNO_QUERY; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::awt::XView; - using ::com::sun::star::awt::XGraphics; - using ::com::sun::star::awt::XWindow; - using ::com::sun::star::awt::PosSize::POSSIZE; - - ////////////////////////////////////////////////////////////////////////////// - // rendering support - - // directdraw of text simple portion or decorated portion primitive. When decorated, all the extra - // information is translated to VCL parameters and set at the font. - // Acceptance is restricted to no shearing and positive scaling in X and Y (no font mirroring - // for VCL) - void VclProcessor2D::RenderTextSimpleOrDecoratedPortionPrimitive2D(const primitive2d::TextSimplePortionPrimitive2D& rTextCandidate) - { - // decompose matrix to have position and size of text - basegfx::B2DHomMatrix aLocalTransform(maCurrentTransformation * rTextCandidate.getTextTransform()); - basegfx::B2DVector aFontScaling, aTranslate; - double fRotate, fShearX; - aLocalTransform.decompose(aFontScaling, aTranslate, fRotate, fShearX); - bool bPrimitiveAccepted(false); - - if(basegfx::fTools::equalZero(fShearX)) - { - if(basegfx::fTools::less(aFontScaling.getX(), 0.0) && basegfx::fTools::less(aFontScaling.getY(), 0.0)) - { - // handle special case: If scale is negative in (x,y) (3rd quadrant), it can - // be expressed as rotation by PI. Use this since the Font rendering will not - // apply the negative scales in any form - aFontScaling = basegfx::absolute(aFontScaling); - fRotate += F_PI; - } - - if(basegfx::fTools::more(aFontScaling.getX(), 0.0) && basegfx::fTools::more(aFontScaling.getY(), 0.0)) - { - // Get the VCL font (use FontHeight as FontWidth) - Font aFont(primitive2d::getVclFontFromFontAttribute( - rTextCandidate.getFontAttribute(), - aFontScaling.getX(), - aFontScaling.getY(), - fRotate, - rTextCandidate.getLocale())); - - // handle additional font attributes - const primitive2d::TextDecoratedPortionPrimitive2D* pTCPP = - dynamic_cast<const primitive2d::TextDecoratedPortionPrimitive2D*>( &rTextCandidate ); - - if( pTCPP != NULL ) - { - - // set the color of text decorations - const basegfx::BColor aTextlineColor = maBColorModifierStack.getModifiedColor(pTCPP->getTextlineColor()); - mpOutputDevice->SetTextLineColor( Color(aTextlineColor) ); - - // set Overline attribute - const FontUnderline eFontOverline(primitive2d::mapTextLineToFontUnderline( pTCPP->getFontOverline() )); - if( eFontOverline != UNDERLINE_NONE ) - { - aFont.SetOverline( eFontOverline ); - const basegfx::BColor aOverlineColor = maBColorModifierStack.getModifiedColor(pTCPP->getOverlineColor()); - mpOutputDevice->SetOverlineColor( Color(aOverlineColor) ); - if( pTCPP->getWordLineMode() ) - aFont.SetWordLineMode( true ); - } - - // set Underline attribute - const FontUnderline eFontUnderline(primitive2d::mapTextLineToFontUnderline( pTCPP->getFontUnderline() )); - if( eFontUnderline != UNDERLINE_NONE ) - { - aFont.SetUnderline( eFontUnderline ); - if( pTCPP->getWordLineMode() ) - aFont.SetWordLineMode( true ); -//TODO: ??? if( pTCPP->getUnderlineAbove() ) -// aFont.SetUnderlineAbove( true ); - } - - // set Strikeout attribute - const FontStrikeout eFontStrikeout(primitive2d::mapTextStrikeoutToFontStrikeout(pTCPP->getTextStrikeout())); - - if( eFontStrikeout != STRIKEOUT_NONE ) - aFont.SetStrikeout( eFontStrikeout ); - - // set EmphasisMark attribute - FontEmphasisMark eFontEmphasisMark = EMPHASISMARK_NONE; - switch( pTCPP->getTextEmphasisMark() ) - { - default: - DBG_WARNING1( "DrawingLayer: Unknown EmphasisMark style (%d)!", pTCPP->getTextEmphasisMark() ); - // fall through - case primitive2d::TEXT_EMPHASISMARK_NONE: eFontEmphasisMark = EMPHASISMARK_NONE; break; - case primitive2d::TEXT_EMPHASISMARK_DOT: eFontEmphasisMark = EMPHASISMARK_DOT; break; - case primitive2d::TEXT_EMPHASISMARK_CIRCLE: eFontEmphasisMark = EMPHASISMARK_CIRCLE; break; - case primitive2d::TEXT_EMPHASISMARK_DISC: eFontEmphasisMark = EMPHASISMARK_DISC; break; - case primitive2d::TEXT_EMPHASISMARK_ACCENT: eFontEmphasisMark = EMPHASISMARK_ACCENT; break; - } - - if( eFontEmphasisMark != EMPHASISMARK_NONE ) - { - DBG_ASSERT( (pTCPP->getEmphasisMarkAbove() != pTCPP->getEmphasisMarkBelow()), - "DrawingLayer: Bad EmphasisMark position!" ); - if( pTCPP->getEmphasisMarkAbove() ) - eFontEmphasisMark |= EMPHASISMARK_POS_ABOVE; - else - eFontEmphasisMark |= EMPHASISMARK_POS_BELOW; - aFont.SetEmphasisMark( eFontEmphasisMark ); - } - - // set Relief attribute - FontRelief eFontRelief = RELIEF_NONE; - switch( pTCPP->getTextRelief() ) - { - default: - DBG_WARNING1( "DrawingLayer: Unknown Relief style (%d)!", pTCPP->getTextRelief() ); - // fall through - case primitive2d::TEXT_RELIEF_NONE: eFontRelief = RELIEF_NONE; break; - case primitive2d::TEXT_RELIEF_EMBOSSED: eFontRelief = RELIEF_EMBOSSED; break; - case primitive2d::TEXT_RELIEF_ENGRAVED: eFontRelief = RELIEF_ENGRAVED; break; - } - - if( eFontRelief != RELIEF_NONE ) - aFont.SetRelief( eFontRelief ); - - // set Shadow attribute - if( pTCPP->getShadow() ) - aFont.SetShadow( true ); - } - - // create transformed integer DXArray in view coordinate system - ::std::vector< sal_Int32 > aTransformedDXArray; - - if(rTextCandidate.getDXArray().size()) - { - aTransformedDXArray.reserve(rTextCandidate.getDXArray().size()); - const basegfx::B2DVector aPixelVector(maCurrentTransformation * basegfx::B2DVector(1.0, 0.0)); - const double fPixelVectorFactor(aPixelVector.getLength()); - - for(::std::vector< double >::const_iterator aStart(rTextCandidate.getDXArray().begin()); - aStart != rTextCandidate.getDXArray().end(); aStart++) - { - aTransformedDXArray.push_back(basegfx::fround((*aStart) * fPixelVectorFactor)); - } - } - - // set parameters and paint text snippet - const basegfx::BColor aRGBFontColor(maBColorModifierStack.getModifiedColor(rTextCandidate.getFontColor())); - const basegfx::B2DPoint aPoint(aLocalTransform * basegfx::B2DPoint(0.0, 0.0)); - const Point aStartPoint(basegfx::fround(aPoint.getX()), basegfx::fround(aPoint.getY())); - const sal_uInt32 nOldLayoutMode(mpOutputDevice->GetLayoutMode()); - - if(rTextCandidate.getFontAttribute().getRTL()) - { - sal_uInt32 nRTLLayoutMode(nOldLayoutMode & ~(TEXT_LAYOUT_COMPLEX_DISABLED|TEXT_LAYOUT_BIDI_STRONG)); - nRTLLayoutMode |= TEXT_LAYOUT_BIDI_RTL|TEXT_LAYOUT_TEXTORIGIN_LEFT; - mpOutputDevice->SetLayoutMode(nRTLLayoutMode); - } - - mpOutputDevice->SetFont(aFont); - mpOutputDevice->SetTextColor(Color(aRGBFontColor)); - - String aText( rTextCandidate.getText() ); - xub_StrLen nPos = rTextCandidate.getTextPosition(); - xub_StrLen nLen = rTextCandidate.getTextLength(); - - sal_Int32* pDXArray = aTransformedDXArray.size() ? &(aTransformedDXArray[0]) : NULL ; - - if ( rTextCandidate.isFilled() ) - { - basegfx::B2DVector aOldFontScaling, aOldTranslate; - double fOldRotate, fOldShearX; - rTextCandidate.getTextTransform().decompose(aOldFontScaling, aOldTranslate, fOldRotate, fOldShearX); - - long nWidthToFill = static_cast<long>(rTextCandidate.getWidthToFill( ) * aFontScaling.getX() / aOldFontScaling.getX()); - - long nWidth = mpOutputDevice->GetTextArray( - rTextCandidate.getText(), pDXArray, 0, 1 ); - long nChars = 2; - if ( nWidth ) - nChars = nWidthToFill / nWidth; - - String aFilled; - aFilled.Fill( (sal_uInt16)nChars, aText.GetChar( 0 ) ); - aText = aFilled; - nPos = 0; - nLen = nChars; - } - - if(aTransformedDXArray.size()) - { - mpOutputDevice->DrawTextArray( - aStartPoint, - aText, - pDXArray, - nPos, - nLen); - } - else - { - mpOutputDevice->DrawText( - aStartPoint, - aText, - nPos, - nLen); - } - - if(rTextCandidate.getFontAttribute().getRTL()) - { - mpOutputDevice->SetLayoutMode(nOldLayoutMode); - } - - bPrimitiveAccepted = true; - } - } - - if(!bPrimitiveAccepted) - { - // let break down - process(rTextCandidate.get2DDecomposition(getViewInformation2D())); - } - } - - // direct draw of hairline - void VclProcessor2D::RenderPolygonHairlinePrimitive2D(const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate, bool bPixelBased) - { - const basegfx::BColor aHairlineColor(maBColorModifierStack.getModifiedColor(rPolygonCandidate.getBColor())); - mpOutputDevice->SetLineColor(Color(aHairlineColor)); - mpOutputDevice->SetFillColor(); - - basegfx::B2DPolygon aLocalPolygon(rPolygonCandidate.getB2DPolygon()); - aLocalPolygon.transform(maCurrentTransformation); - - static bool bCheckTrapezoidDecomposition(false); - static bool bShowOutlinesThere(false); - if(bCheckTrapezoidDecomposition) - { - // clip against discrete ViewPort - const basegfx::B2DRange& rDiscreteViewport = getViewInformation2D().getDiscreteViewport(); - basegfx::B2DPolyPolygon aLocalPolyPolygon(basegfx::tools::clipPolygonOnRange( - aLocalPolygon, rDiscreteViewport, true, false)); - - if(aLocalPolyPolygon.count()) - { - // subdivide - aLocalPolyPolygon = basegfx::tools::adaptiveSubdivideByDistance( - aLocalPolyPolygon, 0.5); - - // trapezoidize - static double fLineWidth(2.0); - basegfx::B2DTrapezoidVector aB2DTrapezoidVector; - basegfx::tools::createLineTrapezoidFromB2DPolyPolygon(aB2DTrapezoidVector, aLocalPolyPolygon, fLineWidth); - - const sal_uInt32 nCount(aB2DTrapezoidVector.size()); - - if(nCount) - { - basegfx::BColor aInvPolygonColor(aHairlineColor); - aInvPolygonColor.invert(); - - for(sal_uInt32 a(0); a < nCount; a++) - { - const basegfx::B2DPolygon aTempPolygon(aB2DTrapezoidVector[a].getB2DPolygon()); - - if(bShowOutlinesThere) - { - mpOutputDevice->SetFillColor(Color(aHairlineColor)); - mpOutputDevice->SetLineColor(); - } - - mpOutputDevice->DrawPolygon(aTempPolygon); - - if(bShowOutlinesThere) - { - mpOutputDevice->SetFillColor(); - mpOutputDevice->SetLineColor(Color(aInvPolygonColor)); - mpOutputDevice->DrawPolyLine(aTempPolygon, 0.0); - } - } - } - } - } - else - { - if(bPixelBased && getOptionsDrawinglayer().IsAntiAliasing() && getOptionsDrawinglayer().IsSnapHorVerLinesToDiscrete()) - { - // #i98289# - // when a Hairline is painted and AntiAliasing is on the option SnapHorVerLinesToDiscrete - // allows to suppress AntiAliasing for pure horizontal or vertical lines. This is done since - // not-AntiAliased such lines look more pleasing to the eye (e.g. 2D chart content). This - // NEEDS to be done in discrete coordinates, so only useful for pixel based rendering. - aLocalPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aLocalPolygon); - } - - mpOutputDevice->DrawPolyLine(aLocalPolygon, 0.0); - } - } - - // direct draw of transformed BitmapEx primitive - void VclProcessor2D::RenderBitmapPrimitive2D(const primitive2d::BitmapPrimitive2D& rBitmapCandidate) - { - // create local transform - basegfx::B2DHomMatrix aLocalTransform(maCurrentTransformation * rBitmapCandidate.getTransform()); - BitmapEx aBitmapEx(rBitmapCandidate.getBitmapEx()); - bool bPainted(false); - - if(maBColorModifierStack.count()) - { - aBitmapEx = impModifyBitmapEx(maBColorModifierStack, aBitmapEx); - - if(aBitmapEx.IsEmpty()) - { - // color gets completely replaced, get it - const basegfx::BColor aModifiedColor(maBColorModifierStack.getModifiedColor(basegfx::BColor())); - basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon()); - aPolygon.transform(aLocalTransform); - - mpOutputDevice->SetFillColor(Color(aModifiedColor)); - mpOutputDevice->SetLineColor(); - mpOutputDevice->DrawPolygon(aPolygon); - - bPainted = true; - } - } - - if(!bPainted) - { - static bool bForceUseOfOwnTransformer(false); - static bool bUseGraphicManager(true); - - // decompose matrix to check for shear, rotate and mirroring - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - aLocalTransform.decompose(aScale, aTranslate, fRotate, fShearX); - - if(!bForceUseOfOwnTransformer && basegfx::fTools::equalZero(fShearX)) - { - if(!bUseGraphicManager && basegfx::fTools::equalZero(fRotate)) - { - RenderBitmapPrimitive2D_BitmapEx(*mpOutputDevice, aBitmapEx, aLocalTransform); - } - else - { - RenderBitmapPrimitive2D_GraphicManager(*mpOutputDevice, aBitmapEx, aLocalTransform); - } - } - else - { - if(!aBitmapEx.IsTransparent() && (!basegfx::fTools::equalZero(fShearX) || !basegfx::fTools::equalZero(fRotate))) - { - // parts will be uncovered, extend aBitmapEx with a mask bitmap - const Bitmap aContent(aBitmapEx.GetBitmap()); - aBitmapEx = BitmapEx(aContent, Bitmap(aContent.GetSizePixel(), 1)); - } - - RenderBitmapPrimitive2D_self(*mpOutputDevice, aBitmapEx, aLocalTransform); - } - } - } - - void VclProcessor2D::RenderRenderGraphicPrimitive2D(const primitive2d::RenderGraphicPrimitive2D& rRenderGraphicCandidate) - { - // create local transform - basegfx::B2DHomMatrix aLocalTransform(maCurrentTransformation * rRenderGraphicCandidate.getTransform()); - vcl::RenderGraphic aRenderGraphic(rRenderGraphicCandidate.getRenderGraphic()); - bool bPainted(false); - - if(maBColorModifierStack.count()) - { - // !!! TODO - // aRenderGraphic = impModifyRenderGraphic(maBColorModifierStack, aRenderGraphic); - - if(aRenderGraphic.IsEmpty()) - { - // color gets completely replaced, get it - const basegfx::BColor aModifiedColor(maBColorModifierStack.getModifiedColor(basegfx::BColor())); - basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon()); - aPolygon.transform(aLocalTransform); - - mpOutputDevice->SetFillColor(Color(aModifiedColor)); - mpOutputDevice->SetLineColor(); - mpOutputDevice->DrawPolygon(aPolygon); - - bPainted = true; - } - } - - if(!bPainted) - { - // decompose matrix to check for shear, rotate and mirroring - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - aLocalTransform.decompose(aScale, aTranslate, fRotate, fShearX); - - basegfx::B2DRange aOutlineRange(0.0, 0.0, 1.0, 1.0); - - if( basegfx::fTools::equalZero( fRotate ) ) - { - aOutlineRange.transform( aLocalTransform ); - } - else - { - // !!! TODO - // if rotated, create the unrotated output rectangle for the GraphicManager paint - /* - const basegfx::B2DHomMatrix aSimpleObjectMatrix(basegfx::tools::createScaleTranslateB2DHomMatrix( - fabs(aScale.getX()), fabs(aScale.getY()), - aTranslate.getX(), aTranslate.getY())); - - aOutlineRange.transform(aSimpleObjectMatrix); - */ - } - - // prepare dest coordinates - const Point aPoint( basegfx::fround(aOutlineRange.getMinX() ), - basegfx::fround(aOutlineRange.getMinY() ) ); - const Size aSize( basegfx::fround(aOutlineRange.getWidth() ), - basegfx::fround(aOutlineRange.getHeight() ) ); - const Size aSizePixel( mpOutputDevice->LogicToPixel( aSize ) ); - const vcl::RenderGraphicRasterizer aRasterizer( aRenderGraphic ); - const BitmapEx aBitmapEx( aRasterizer.Rasterize( aSizePixel, fRotate, fShearX ) ); - - if( !aBitmapEx.IsEmpty() ) - { - mpOutputDevice->DrawBitmapEx( aPoint, aSize, aBitmapEx ); - } - } - } - - void VclProcessor2D::RenderFillBitmapPrimitive2D(const primitive2d::FillBitmapPrimitive2D& rFillBitmapCandidate) - { - const attribute::FillBitmapAttribute& rFillBitmapAttribute(rFillBitmapCandidate.getFillBitmap()); - bool bPrimitiveAccepted(false); - - if(rFillBitmapAttribute.getTiling()) - { - // decompose matrix to check for shear, rotate and mirroring - basegfx::B2DHomMatrix aLocalTransform(maCurrentTransformation * rFillBitmapCandidate.getTransformation()); - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - aLocalTransform.decompose(aScale, aTranslate, fRotate, fShearX); - - if(basegfx::fTools::equalZero(fRotate) && basegfx::fTools::equalZero(fShearX)) - { - // no shear or rotate, draw direct in pixel coordinates - bPrimitiveAccepted = true; - BitmapEx aBitmapEx(rFillBitmapAttribute.getBitmapEx()); - bool bPainted(false); - - if(maBColorModifierStack.count()) - { - aBitmapEx = impModifyBitmapEx(maBColorModifierStack, aBitmapEx); - - if(aBitmapEx.IsEmpty()) - { - // color gets completely replaced, get it - const basegfx::BColor aModifiedColor(maBColorModifierStack.getModifiedColor(basegfx::BColor())); - basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon()); - aPolygon.transform(aLocalTransform); - - mpOutputDevice->SetFillColor(Color(aModifiedColor)); - mpOutputDevice->SetLineColor(); - mpOutputDevice->DrawPolygon(aPolygon); - - bPainted = true; - } - } - - if(!bPainted) - { - const basegfx::B2DPoint aObjTopLeft(aTranslate.getX(), aTranslate.getY()); - const basegfx::B2DPoint aObjBottomRight(aTranslate.getX() + aScale.getX(), aTranslate.getY() + aScale.getY()); - const Point aObjTL(mpOutputDevice->LogicToPixel(Point((sal_Int32)aObjTopLeft.getX(), (sal_Int32)aObjTopLeft.getY()))); - const Point aObjBR(mpOutputDevice->LogicToPixel(Point((sal_Int32)aObjBottomRight.getX(), (sal_Int32)aObjBottomRight.getY()))); - - const basegfx::B2DPoint aBmpTopLeft(aLocalTransform * rFillBitmapAttribute.getTopLeft()); - const basegfx::B2DPoint aBmpBottomRight(aLocalTransform * basegfx::B2DPoint(rFillBitmapAttribute.getTopLeft() + rFillBitmapAttribute.getSize())); - const Point aBmpTL(mpOutputDevice->LogicToPixel(Point((sal_Int32)aBmpTopLeft.getX(), (sal_Int32)aBmpTopLeft.getY()))); - const Point aBmpBR(mpOutputDevice->LogicToPixel(Point((sal_Int32)aBmpBottomRight.getX(), (sal_Int32)aBmpBottomRight.getY()))); - - sal_Int32 nOWidth(aObjBR.X() - aObjTL.X()); - sal_Int32 nOHeight(aObjBR.Y() - aObjTL.Y()); - - // only do something when object has a size in discrete units - if(nOWidth > 0 && nOHeight > 0) - { - sal_Int32 nBWidth(aBmpBR.X() - aBmpTL.X()); - sal_Int32 nBHeight(aBmpBR.Y() - aBmpTL.Y()); - - // only do something when bitmap fill has a size in discrete units - if(nBWidth > 0 && nBHeight > 0) - { - sal_Int32 nBLeft(aBmpTL.X()); - sal_Int32 nBTop(aBmpTL.Y()); - - if(nBLeft > aObjTL.X()) - { - nBLeft -= ((nBLeft / nBWidth) + 1L) * nBWidth; - } - - if(nBLeft + nBWidth <= aObjTL.X()) - { - nBLeft -= (nBLeft / nBWidth) * nBWidth; - } - - if(nBTop > aObjTL.Y()) - { - nBTop -= ((nBTop / nBHeight) + 1L) * nBHeight; - } - - if(nBTop + nBHeight <= aObjTL.Y()) - { - nBTop -= (nBTop / nBHeight) * nBHeight; - } - - // nBWidth, nBHeight is the pixel size of the neede bitmap. To not need to scale it - // in vcl many times, create a size-optimized version - const Size aNeededBitmapSizePixel(nBWidth, nBHeight); - - if(aNeededBitmapSizePixel != aBitmapEx.GetSizePixel()) - { - aBitmapEx.Scale(aNeededBitmapSizePixel); - } - - // prepare OutDev - const Point aEmptyPoint(0, 0); - const Rectangle aVisiblePixel(aEmptyPoint, mpOutputDevice->GetOutputSizePixel()); - const bool bWasEnabled(mpOutputDevice->IsMapModeEnabled()); - mpOutputDevice->EnableMapMode(false); - - for(sal_Int32 nXPos(nBLeft); nXPos < aObjTL.X() + nOWidth; nXPos += nBWidth) - { - for(sal_Int32 nYPos(nBTop); nYPos < aObjTL.Y() + nOHeight; nYPos += nBHeight) - { - const Rectangle aOutRectPixel(Point(nXPos, nYPos), aNeededBitmapSizePixel); - - if(aOutRectPixel.IsOver(aVisiblePixel)) - { - mpOutputDevice->DrawBitmapEx(aOutRectPixel.TopLeft(), aBitmapEx); - } - } - } - - // restore OutDev - mpOutputDevice->EnableMapMode(bWasEnabled); - } - } - } - } - } - - if(!bPrimitiveAccepted) - { - // do not accept, use decomposition - process(rFillBitmapCandidate.get2DDecomposition(getViewInformation2D())); - } - } - - // direct draw of gradient - void VclProcessor2D::RenderPolyPolygonGradientPrimitive2D(const primitive2d::PolyPolygonGradientPrimitive2D& rPolygonCandidate) - { - const attribute::FillGradientAttribute& rGradient(rPolygonCandidate.getFillGradient()); - basegfx::BColor aStartColor(maBColorModifierStack.getModifiedColor(rGradient.getStartColor())); - basegfx::BColor aEndColor(maBColorModifierStack.getModifiedColor(rGradient.getEndColor())); - basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolygonCandidate.getB2DPolyPolygon()); - - if(aLocalPolyPolygon.count()) - { - aLocalPolyPolygon.transform(maCurrentTransformation); - - if(aStartColor == aEndColor) - { - // no gradient at all, draw as polygon in AA and non-AA case - mpOutputDevice->SetLineColor(); - mpOutputDevice->SetFillColor(Color(aStartColor)); - mpOutputDevice->DrawPolyPolygon(aLocalPolyPolygon); - } - else if(getOptionsDrawinglayer().IsAntiAliasing()) - { - // For AA, direct render has to be avoided since it uses XOR maskings which will not - // work with AA. Instead, the decompose which uses MaskPrimitive2D with fillings is - // used - process(rPolygonCandidate.get2DDecomposition(getViewInformation2D())); - } - else - { - impDrawGradientToOutDev( - *mpOutputDevice, aLocalPolyPolygon, rGradient.getStyle(), rGradient.getSteps(), - aStartColor, aEndColor, rGradient.getBorder(), - rGradient.getAngle(), rGradient.getOffsetX(), rGradient.getOffsetY(), false); - } - } - } - - // direct draw of bitmap - void VclProcessor2D::RenderPolyPolygonBitmapPrimitive2D(const primitive2d::PolyPolygonBitmapPrimitive2D& rPolygonCandidate) - { - bool bDone(false); - const basegfx::B2DPolyPolygon& rPolyPolygon = rPolygonCandidate.getB2DPolyPolygon(); - - if(rPolyPolygon.count()) - { - const attribute::FillBitmapAttribute& rFillBitmapAttribute = rPolygonCandidate.getFillBitmap(); - const BitmapEx& rBitmapEx = rFillBitmapAttribute.getBitmapEx(); - - if(rBitmapEx.IsEmpty()) - { - // empty bitmap, done - bDone = true; - } - else - { - // try to catch cases where the bitmap will be color-modified to a single - // color (e.g. shadow). This would NOT be optimizable with an transparence channel - // at the Bitmap which we do not have here. When this should change, this - // optimization has to be reworked accordingly. - const sal_uInt32 nBColorModifierStackCount(maBColorModifierStack.count()); - - if(nBColorModifierStackCount) - { - const basegfx::BColorModifier& rTopmostModifier = maBColorModifierStack.getBColorModifier(nBColorModifierStackCount - 1); - - if(basegfx::BCOLORMODIFYMODE_REPLACE == rTopmostModifier.getMode()) - { - // the bitmap fill is in unified color, so we can replace it with - // a single polygon fill. The form of the fill depends on tiling - if(rFillBitmapAttribute.getTiling()) - { - // with tiling, fill the whole PolyPolygon with the modifier color - basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolyPolygon); - - aLocalPolyPolygon.transform(maCurrentTransformation); - mpOutputDevice->SetLineColor(); - mpOutputDevice->SetFillColor(Color(rTopmostModifier.getBColor())); - mpOutputDevice->DrawPolyPolygon(aLocalPolyPolygon); - } - else - { - // without tiling, only the area common to the bitmap tile and the - // PolyPolygon is filled. Create the bitmap tile area in object - // coordinates. For this, the object transformation needs to be created - // from the already scaled PolyPolygon. The tile area in object - // coordinates wil always be non-rotated, so it's not necessary to - // work with a polygon here - basegfx::B2DRange aTileRange(rFillBitmapAttribute.getTopLeft(), - rFillBitmapAttribute.getTopLeft() + rFillBitmapAttribute.getSize()); - const basegfx::B2DRange aPolyPolygonRange(rPolyPolygon.getB2DRange()); - basegfx::B2DHomMatrix aNewObjectTransform; - - aNewObjectTransform.set(0, 0, aPolyPolygonRange.getWidth()); - aNewObjectTransform.set(1, 1, aPolyPolygonRange.getHeight()); - aNewObjectTransform.set(0, 2, aPolyPolygonRange.getMinX()); - aNewObjectTransform.set(1, 2, aPolyPolygonRange.getMinY()); - aTileRange.transform(aNewObjectTransform); - - // now clip the object polyPolygon against the tile range - // to get the common area (OR) - basegfx::B2DPolyPolygon aTarget = basegfx::tools::clipPolyPolygonOnRange(rPolyPolygon, aTileRange, true, false); - - if(aTarget.count()) - { - aTarget.transform(maCurrentTransformation); - mpOutputDevice->SetLineColor(); - mpOutputDevice->SetFillColor(Color(rTopmostModifier.getBColor())); - mpOutputDevice->DrawPolyPolygon(aTarget); - } - } - - bDone = true; - } - } - } - } - else - { - // empty polyPolygon, done - bDone = true; - } - - if(!bDone) - { - // use default decomposition - process(rPolygonCandidate.get2DDecomposition(getViewInformation2D())); - } - } - - // direct draw of PolyPolygon with color - void VclProcessor2D::RenderPolyPolygonColorPrimitive2D(const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate) - { - const basegfx::BColor aPolygonColor(maBColorModifierStack.getModifiedColor(rPolygonCandidate.getBColor())); - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - - basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolygonCandidate.getB2DPolyPolygon()); - aLocalPolyPolygon.transform(maCurrentTransformation); - - static bool bCheckTrapezoidDecomposition(false); - static bool bShowOutlinesThere(false); - if(bCheckTrapezoidDecomposition) - { - // clip against discrete ViewPort - const basegfx::B2DRange& rDiscreteViewport = getViewInformation2D().getDiscreteViewport(); - aLocalPolyPolygon = basegfx::tools::clipPolyPolygonOnRange( - aLocalPolyPolygon, rDiscreteViewport, true, false); - - if(aLocalPolyPolygon.count()) - { - // subdivide - aLocalPolyPolygon = basegfx::tools::adaptiveSubdivideByDistance( - aLocalPolyPolygon, 0.5); - - // trapezoidize - basegfx::B2DTrapezoidVector aB2DTrapezoidVector; - basegfx::tools::trapezoidSubdivide(aB2DTrapezoidVector, aLocalPolyPolygon); - - const sal_uInt32 nCount(aB2DTrapezoidVector.size()); - - if(nCount) - { - basegfx::BColor aInvPolygonColor(aPolygonColor); - aInvPolygonColor.invert(); - - for(sal_uInt32 a(0); a < nCount; a++) - { - const basegfx::B2DPolygon aTempPolygon(aB2DTrapezoidVector[a].getB2DPolygon()); - - if(bShowOutlinesThere) - { - mpOutputDevice->SetFillColor(Color(aPolygonColor)); - mpOutputDevice->SetLineColor(); - } - - mpOutputDevice->DrawPolygon(aTempPolygon); - - if(bShowOutlinesThere) - { - mpOutputDevice->SetFillColor(); - mpOutputDevice->SetLineColor(Color(aInvPolygonColor)); - mpOutputDevice->DrawPolyLine(aTempPolygon, 0.0); - } - } - } - } - } - else - { - mpOutputDevice->DrawPolyPolygon(aLocalPolyPolygon); - - if(mnPolygonStrokePrimitive2D - && getOptionsDrawinglayer().IsAntiAliasing() - && (mpOutputDevice->GetAntialiasing() & ANTIALIASING_ENABLE_B2DDRAW)) - { - // when AA is on and this filled polygons are the result of stroked line geometry, - // draw the geometry once extra as lines to avoid AA 'gaps' between partial polygons - mpOutputDevice->SetFillColor(); - mpOutputDevice->SetLineColor(Color(aPolygonColor)); - const sal_uInt32 nCount(aLocalPolyPolygon.count()); - - for(sal_uInt32 a(0); a < nCount; a++) - { - mpOutputDevice->DrawPolyLine(aLocalPolyPolygon.getB2DPolygon(a), 0.0); - } - } - } - } - - // direct draw of MetaFile - void VclProcessor2D::RenderMetafilePrimitive2D(const primitive2d::MetafilePrimitive2D& rMetaCandidate) - { - // decompose matrix to check for shear, rotate and mirroring - basegfx::B2DHomMatrix aLocalTransform(maCurrentTransformation * rMetaCandidate.getTransform()); - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - aLocalTransform.decompose(aScale, aTranslate, fRotate, fShearX); - - if(basegfx::fTools::less(aScale.getX(), 0.0) && basegfx::fTools::less(aScale.getY(), 0.0)) - { - // #i102175# handle special case: If scale is negative in (x,y) (3rd quadrant), it can - // be expressed as rotation by PI. This needs to be done for Metafiles since - // these can be rotated, but not really mirrored - aScale = basegfx::absolute(aScale); - fRotate += F_PI; - } - - // get BoundRect - basegfx::B2DRange aOutlineRange(rMetaCandidate.getB2DRange(getViewInformation2D())); - aOutlineRange.transform(maCurrentTransformation); - - // Due to the integer MapModes used from VCL aind inside MetaFiles errors of up to three - // pixels in size may happen. As long as there is no better way (e.g. convert the MetaFile - // to primitives) it is necessary to reduce maximum pixel size by 1 in X and Y and to use - // the inner pixel bounds accordingly (ceil resp. floor). This will also be done for logic - // units e.g. when creating a new MetaFile, but since much huger value ranges are used - // there typically will be okay for this compromize. - Rectangle aDestRectView( - // !!CAUTION!! Here, ceil and floor are exchanged BY PURPOSE, do NOT copy when - // looking for a standard conversion to rectangle (!) - (sal_Int32)ceil(aOutlineRange.getMinX()), (sal_Int32)ceil(aOutlineRange.getMinY()), - (sal_Int32)floor(aOutlineRange.getMaxX()), (sal_Int32)floor(aOutlineRange.getMaxY())); - - // get metafile (copy it) - GDIMetaFile aMetaFile; - - if(maBColorModifierStack.count()) - { - const basegfx::BColor aRGBBaseColor(0, 0, 0); - const basegfx::BColor aRGBColor(maBColorModifierStack.getModifiedColor(aRGBBaseColor)); - aMetaFile = rMetaCandidate.getMetaFile().GetMonochromeMtf(Color(aRGBColor)); - } - else - { - aMetaFile = rMetaCandidate.getMetaFile(); - } - - // rotation - if(!basegfx::fTools::equalZero(fRotate)) - { - // #i103530# - // MetaFile::Rotate has no input parameter check, so the parameter needs to be - // well-aligned to the old range [0..3600] 10th degrees with inverse orientation - sal_Int16 nRotation((sal_Int16)((fRotate / F_PI180) * -10.0)); - - while(nRotation < 0) - nRotation += 3600; - - while(nRotation >= 3600) - nRotation -= 3600; - - aMetaFile.Rotate(nRotation); - } - - // Prepare target output size - Size aDestSize(aDestRectView.GetSize()); - - if(aDestSize.getWidth() && aDestSize.getHeight()) - { - // Get preferred Metafile output size. When it's very equal to the output size, it's probably - // a rounding error somewhere, so correct it to get a 1:1 output without single pixel scalings - // of the Metafile (esp. for contaned Bitmaps, e.g 3D charts) - const Size aPrefSize(mpOutputDevice->LogicToPixel(aMetaFile.GetPrefSize(), aMetaFile.GetPrefMapMode())); - - if(aPrefSize.getWidth() && (aPrefSize.getWidth() - 1 == aDestSize.getWidth() || aPrefSize.getWidth() + 1 == aDestSize.getWidth())) - { - aDestSize.setWidth(aPrefSize.getWidth()); - } - - if(aPrefSize.getHeight() && (aPrefSize.getHeight() - 1 == aDestSize.getHeight() || aPrefSize.getHeight() + 1 == aDestSize.getHeight())) - { - aDestSize.setHeight(aPrefSize.getHeight()); - } - - // paint it - aMetaFile.WindStart(); - aMetaFile.Play(mpOutputDevice, aDestRectView.TopLeft(), aDestSize); - } - } - - // mask group. Force output to VDev and create mask from given mask - void VclProcessor2D::RenderMaskPrimitive2DPixel(const primitive2d::MaskPrimitive2D& rMaskCandidate) - { - if(rMaskCandidate.getChildren().hasElements()) - { - basegfx::B2DPolyPolygon aMask(rMaskCandidate.getMask()); - - if(aMask.count()) - { - aMask.transform(maCurrentTransformation); - const basegfx::B2DRange aRange(basegfx::tools::getRange(aMask)); - impBufferDevice aBufferDevice(*mpOutputDevice, aRange, true); - - if(aBufferDevice.isVisible()) - { - // remember last OutDev and set to content - OutputDevice* pLastOutputDevice = mpOutputDevice; - mpOutputDevice = &aBufferDevice.getContent(); - - // paint to it - process(rMaskCandidate.getChildren()); - - // back to old OutDev - mpOutputDevice = pLastOutputDevice; - - // draw mask - if(getOptionsDrawinglayer().IsAntiAliasing()) - { - // with AA, use 8bit AlphaMask to get nice borders - VirtualDevice& rTransparence = aBufferDevice.getTransparence(); - rTransparence.SetLineColor(); - rTransparence.SetFillColor(COL_BLACK); - rTransparence.DrawPolyPolygon(aMask); - - // dump buffer to outdev - aBufferDevice.paint(); - } - else - { - // No AA, use 1bit mask - VirtualDevice& rMask = aBufferDevice.getMask(); - rMask.SetLineColor(); - rMask.SetFillColor(COL_BLACK); - rMask.DrawPolyPolygon(aMask); - - // dump buffer to outdev - aBufferDevice.paint(); - } - } - } - } - } - - // modified color group. Force output to unified color. - void VclProcessor2D::RenderModifiedColorPrimitive2D(const primitive2d::ModifiedColorPrimitive2D& rModifiedCandidate) - { - if(rModifiedCandidate.getChildren().hasElements()) - { - maBColorModifierStack.push(rModifiedCandidate.getColorModifier()); - process(rModifiedCandidate.getChildren()); - maBColorModifierStack.pop(); - } - } - - // unified sub-transparence. Draw to VDev first. - void VclProcessor2D::RenderUnifiedTransparencePrimitive2D(const primitive2d::UnifiedTransparencePrimitive2D& rTransCandidate) - { - static bool bForceToDecomposition(false); - - if(rTransCandidate.getChildren().hasElements()) - { - if(bForceToDecomposition) - { - // use decomposition - process(rTransCandidate.get2DDecomposition(getViewInformation2D())); - } - else - { - if(0.0 == rTransCandidate.getTransparence()) - { - // no transparence used, so just use the content - process(rTransCandidate.getChildren()); - } - else if(rTransCandidate.getTransparence() > 0.0 && rTransCandidate.getTransparence() < 1.0) - { - // transparence is in visible range - basegfx::B2DRange aRange(primitive2d::getB2DRangeFromPrimitive2DSequence(rTransCandidate.getChildren(), getViewInformation2D())); - aRange.transform(maCurrentTransformation); - impBufferDevice aBufferDevice(*mpOutputDevice, aRange, true); - - if(aBufferDevice.isVisible()) - { - // remember last OutDev and set to content - OutputDevice* pLastOutputDevice = mpOutputDevice; - mpOutputDevice = &aBufferDevice.getContent(); - - // paint content to it - process(rTransCandidate.getChildren()); - - // back to old OutDev - mpOutputDevice = pLastOutputDevice; - - // dump buffer to outdev using given transparence - aBufferDevice.paint(rTransCandidate.getTransparence()); - } - } - } - } - } - - // sub-transparence group. Draw to VDev first. - void VclProcessor2D::RenderTransparencePrimitive2D(const primitive2d::TransparencePrimitive2D& rTransCandidate) - { - if(rTransCandidate.getChildren().hasElements()) - { - basegfx::B2DRange aRange(primitive2d::getB2DRangeFromPrimitive2DSequence(rTransCandidate.getChildren(), getViewInformation2D())); - aRange.transform(maCurrentTransformation); - impBufferDevice aBufferDevice(*mpOutputDevice, aRange, true); - - if(aBufferDevice.isVisible()) - { - // remember last OutDev and set to content - OutputDevice* pLastOutputDevice = mpOutputDevice; - mpOutputDevice = &aBufferDevice.getContent(); - - // paint content to it - process(rTransCandidate.getChildren()); - - // set to mask - mpOutputDevice = &aBufferDevice.getTransparence(); - - // when painting transparence masks, reset the color stack - basegfx::BColorModifierStack aLastBColorModifierStack(maBColorModifierStack); - maBColorModifierStack = basegfx::BColorModifierStack(); - - // paint mask to it (always with transparence intensities, evtl. with AA) - process(rTransCandidate.getTransparence()); - - // back to old color stack - maBColorModifierStack = aLastBColorModifierStack; - - // back to old OutDev - mpOutputDevice = pLastOutputDevice; - - // dump buffer to outdev - aBufferDevice.paint(); - } - } - } - - // transform group. - void VclProcessor2D::RenderTransformPrimitive2D(const primitive2d::TransformPrimitive2D& rTransformCandidate) - { - // remember current transformation and ViewInformation - const basegfx::B2DHomMatrix aLastCurrentTransformation(maCurrentTransformation); - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // create new transformations for CurrentTransformation - // and for local ViewInformation2D - maCurrentTransformation = maCurrentTransformation * rTransformCandidate.getTransformation(); - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation() * rTransformCandidate.getTransformation(), - getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - getViewInformation2D().getVisualizedPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // proccess content - process(rTransformCandidate.getChildren()); - - // restore transformations - maCurrentTransformation = aLastCurrentTransformation; - updateViewInformation(aLastViewInformation2D); - } - - // new XDrawPage for ViewInformation2D - void VclProcessor2D::RenderPagePreviewPrimitive2D(const primitive2d::PagePreviewPrimitive2D& rPagePreviewCandidate) - { - // remember current transformation and ViewInformation - const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D()); - - // create new local ViewInformation2D - const geometry::ViewInformation2D aViewInformation2D( - getViewInformation2D().getObjectTransformation(), - getViewInformation2D().getViewTransformation(), - getViewInformation2D().getViewport(), - rPagePreviewCandidate.getXDrawPage(), - getViewInformation2D().getViewTime(), - getViewInformation2D().getExtendedInformationSequence()); - updateViewInformation(aViewInformation2D); - - // proccess decomposed content - process(rPagePreviewCandidate.get2DDecomposition(getViewInformation2D())); - - // restore transformations - updateViewInformation(aLastViewInformation2D); - } - - // marker - void VclProcessor2D::RenderMarkerArrayPrimitive2D(const primitive2d::MarkerArrayPrimitive2D& rMarkArrayCandidate) - { - static bool bCheckCompleteMarkerDecompose(false); - if(bCheckCompleteMarkerDecompose) - { - process(rMarkArrayCandidate.get2DDecomposition(getViewInformation2D())); - return; - } - - // get data - const std::vector< basegfx::B2DPoint >& rPositions = rMarkArrayCandidate.getPositions(); - const sal_uInt32 nCount(rPositions.size()); - - if(nCount && !rMarkArrayCandidate.getMarker().IsEmpty()) - { - // get pixel size - const BitmapEx& rMarker(rMarkArrayCandidate.getMarker()); - const Size aBitmapSize(rMarker.GetSizePixel()); - - if(aBitmapSize.Width() && aBitmapSize.Height()) - { - // get discrete half size - const basegfx::B2DVector aDiscreteHalfSize( - (aBitmapSize.getWidth() - 1.0) * 0.5, - (aBitmapSize.getHeight() - 1.0) * 0.5); - const bool bWasEnabled(mpOutputDevice->IsMapModeEnabled()); - - // do not forget evtl. moved origin in target device MapMode when - // switching it off; it would be missing and lead to wrong positions. - // All his could be done using logic sizes and coordinates, too, but - // we want a 1:1 bitmap rendering here, so it's more safe and faster - // to work with switching off MapMode usage completely. - const Point aOrigin(mpOutputDevice->GetMapMode().GetOrigin()); - - mpOutputDevice->EnableMapMode(false); - - for(std::vector< basegfx::B2DPoint >::const_iterator aIter(rPositions.begin()); aIter != rPositions.end(); ++aIter) - { - const basegfx::B2DPoint aDiscreteTopLeft((maCurrentTransformation * (*aIter)) - aDiscreteHalfSize); - const Point aDiscretePoint(basegfx::fround(aDiscreteTopLeft.getX()), basegfx::fround(aDiscreteTopLeft.getY())); - - mpOutputDevice->DrawBitmapEx(aDiscretePoint + aOrigin, rMarker); - } - - mpOutputDevice->EnableMapMode(bWasEnabled); - } - } - } - - // point - void VclProcessor2D::RenderPointArrayPrimitive2D(const primitive2d::PointArrayPrimitive2D& rPointArrayCandidate) - { - const std::vector< basegfx::B2DPoint >& rPositions = rPointArrayCandidate.getPositions(); - const basegfx::BColor aRGBColor(maBColorModifierStack.getModifiedColor(rPointArrayCandidate.getRGBColor())); - const Color aVCLColor(aRGBColor); - - for(std::vector< basegfx::B2DPoint >::const_iterator aIter(rPositions.begin()); aIter != rPositions.end(); ++aIter) - { - const basegfx::B2DPoint aViewPosition(maCurrentTransformation * (*aIter)); - const Point aPos(basegfx::fround(aViewPosition.getX()), basegfx::fround(aViewPosition.getY())); - - mpOutputDevice->DrawPixel(aPos, aVCLColor); - } - } - - void VclProcessor2D::RenderPolygonStrokePrimitive2D(const primitive2d::PolygonStrokePrimitive2D& rPolygonStrokeCandidate) - { - // #i101491# method restructured to clearly use the DrawPolyLine - // calls starting from a deined line width - const attribute::LineAttribute& rLineAttribute = rPolygonStrokeCandidate.getLineAttribute(); - const double fLineWidth(rLineAttribute.getWidth()); - bool bDone(false); - - if(basegfx::fTools::more(fLineWidth, 0.0)) - { - const basegfx::B2DVector aDiscreteUnit(maCurrentTransformation * basegfx::B2DVector(fLineWidth, 0.0)); - const double fDiscreteLineWidth(aDiscreteUnit.getLength()); - const attribute::StrokeAttribute& rStrokeAttribute = rPolygonStrokeCandidate.getStrokeAttribute(); - const basegfx::BColor aHairlineColor(maBColorModifierStack.getModifiedColor(rLineAttribute.getColor())); - basegfx::B2DPolyPolygon aHairlinePolyPolygon; - - mpOutputDevice->SetLineColor(Color(aHairlineColor)); - mpOutputDevice->SetFillColor(); - - if(0.0 == rStrokeAttribute.getFullDotDashLen()) - { - // no line dashing, just copy - aHairlinePolyPolygon.append(rPolygonStrokeCandidate.getB2DPolygon()); - } - else - { - // else apply LineStyle - basegfx::tools::applyLineDashing(rPolygonStrokeCandidate.getB2DPolygon(), - rStrokeAttribute.getDotDashArray(), - &aHairlinePolyPolygon, 0, rStrokeAttribute.getFullDotDashLen()); - } - - const sal_uInt32 nCount(aHairlinePolyPolygon.count()); - - if(nCount) - { - const bool bAntiAliased(getOptionsDrawinglayer().IsAntiAliasing()); - aHairlinePolyPolygon.transform(maCurrentTransformation); - - for(sal_uInt32 a(0); a < nCount; a++) - { - basegfx::B2DPolygon aCandidate(aHairlinePolyPolygon.getB2DPolygon(a)); - - if(bAntiAliased) - { - if(basegfx::fTools::lessOrEqual(fDiscreteLineWidth, 1.0)) - { - // line in range ]0.0 .. 1.0[ - // paint as simple hairline - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - bDone = true; - } - else if(basegfx::fTools::lessOrEqual(fDiscreteLineWidth, 2.0)) - { - // line in range [1.0 .. 2.0[ - // paint as 2x2 with dynamic line distance - basegfx::B2DHomMatrix aMat; - const double fDistance(fDiscreteLineWidth - 1.0); - const double fHalfDistance(fDistance * 0.5); - - aMat.set(0, 2, -fHalfDistance); - aMat.set(1, 2, -fHalfDistance); - aCandidate.transform(aMat); - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, fDistance); - aMat.set(1, 2, 0.0); - aCandidate.transform(aMat); - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, 0.0); - aMat.set(1, 2, fDistance); - aCandidate.transform(aMat); - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, -fDistance); - aMat.set(1, 2, 0.0); - aCandidate.transform(aMat); - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - bDone = true; - } - else if(basegfx::fTools::lessOrEqual(fDiscreteLineWidth, 3.0)) - { - // line in range [2.0 .. 3.0] - // paint as cross in a 3x3 with dynamic line distance - basegfx::B2DHomMatrix aMat; - const double fDistance((fDiscreteLineWidth - 1.0) * 0.5); - - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, -fDistance); - aMat.set(1, 2, 0.0); - aCandidate.transform(aMat); - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, fDistance); - aMat.set(1, 2, -fDistance); - aCandidate.transform(aMat); - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, fDistance); - aMat.set(1, 2, fDistance); - aCandidate.transform(aMat); - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, -fDistance); - aMat.set(1, 2, fDistance); - aCandidate.transform(aMat); - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - bDone = true; - } - else - { - // #i101491# line width above 3.0 - } - } - else - { - if(basegfx::fTools::lessOrEqual(fDiscreteLineWidth, 1.5)) - { - // line width below 1.5, draw the basic hairline polygon - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - bDone = true; - } - else if(basegfx::fTools::lessOrEqual(fDiscreteLineWidth, 2.5)) - { - // line width is in range ]1.5 .. 2.5], use four hairlines - // drawn in a square - basegfx::B2DHomMatrix aMat; - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, 1.0); - aMat.set(1, 2, 0.0); - aCandidate.transform(aMat); - - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, 0.0); - aMat.set(1, 2, 1.0); - aCandidate.transform(aMat); - - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - - aMat.set(0, 2, -1.0); - aMat.set(1, 2, 0.0); - aCandidate.transform(aMat); - - mpOutputDevice->DrawPolyLine(aCandidate, 0.0); - bDone = true; - } - else - { - // #i101491# line width is above 2.5 - } - } - - if(!bDone && rPolygonStrokeCandidate.getB2DPolygon().count() > 1000) - { - // #i101491# If the polygon complexity uses more than a given amount, do - // use OuputDevice::DrawPolyLine directly; this will avoid buffering all - // decompositions in primtives (memory) and fallback to old line painting - // for very complex polygons, too - mpOutputDevice->DrawPolyLine(aCandidate, fDiscreteLineWidth, rLineAttribute.getLineJoin()); - bDone = true; - } - } - } - } - - if(!bDone) - { - // remeber that we enter a PolygonStrokePrimitive2D decomposition, - // used for AA thick line drawing - mnPolygonStrokePrimitive2D++; - - // line width is big enough for standard filled polygon visualisation or zero - process(rPolygonStrokeCandidate.get2DDecomposition(getViewInformation2D())); - - // leave PolygonStrokePrimitive2D - mnPolygonStrokePrimitive2D--; - } - } - - void VclProcessor2D::RenderEpsPrimitive2D(const primitive2d::EpsPrimitive2D& rEpsPrimitive2D) - { - // The new decomposition of Metafiles made it necessary to add an Eps - // primitive to handle embedded Eps data. On some devices, this can be - // painted directly (mac, printer). - // To be able to handle the replacement correctly, i need to handle it myself - // since DrawEPS will not be able e.g. to rotate the replacement. To be able - // to do that, i added a boolean return to OutputDevice::DrawEPS(..) - // to know when EPS was handled directly already. - basegfx::B2DRange aRange(0.0, 0.0, 1.0, 1.0); - aRange.transform(maCurrentTransformation * rEpsPrimitive2D.getEpsTransform()); - - if(!aRange.isEmpty()) - { - const Rectangle aRectangle( - (sal_Int32)floor(aRange.getMinX()), (sal_Int32)floor(aRange.getMinY()), - (sal_Int32)ceil(aRange.getMaxX()), (sal_Int32)ceil(aRange.getMaxY())); - - if(!aRectangle.IsEmpty()) - { - // try to paint EPS directly without fallback visualisation - const bool bEPSPaintedDirectly(mpOutputDevice->DrawEPS( - aRectangle.TopLeft(), - aRectangle.GetSize(), - rEpsPrimitive2D.getGfxLink(), - 0)); - - if(!bEPSPaintedDirectly) - { - // use the decomposition which will correctly handle the - // fallback visualisation using full transformation (e.g. rotation) - process(rEpsPrimitive2D.get2DDecomposition(getViewInformation2D())); - } - } - } - } - - void VclProcessor2D::adaptLineToFillDrawMode() const - { - const sal_uInt32 nOriginalDrawMode(mpOutputDevice->GetDrawMode()); - - if(nOriginalDrawMode & (DRAWMODE_BLACKLINE|DRAWMODE_GRAYLINE|DRAWMODE_GHOSTEDLINE|DRAWMODE_WHITELINE|DRAWMODE_SETTINGSLINE)) - { - sal_uInt32 nAdaptedDrawMode(nOriginalDrawMode); - - if(nOriginalDrawMode & DRAWMODE_BLACKLINE) - { - nAdaptedDrawMode |= DRAWMODE_BLACKFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_BLACKFILL; - } - - if(nOriginalDrawMode & DRAWMODE_GRAYLINE) - { - nAdaptedDrawMode |= DRAWMODE_GRAYFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_GRAYFILL; - } - - if(nOriginalDrawMode & DRAWMODE_GHOSTEDLINE) - { - nAdaptedDrawMode |= DRAWMODE_GHOSTEDFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_GHOSTEDFILL; - } - - if(nOriginalDrawMode & DRAWMODE_WHITELINE) - { - nAdaptedDrawMode |= DRAWMODE_WHITEFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_WHITEFILL; - } - - if(nOriginalDrawMode & DRAWMODE_SETTINGSLINE) - { - nAdaptedDrawMode |= DRAWMODE_SETTINGSFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_SETTINGSFILL; - } - - mpOutputDevice->SetDrawMode(nAdaptedDrawMode); - } - } - - void VclProcessor2D::adaptTextToFillDrawMode() const - { - const sal_uInt32 nOriginalDrawMode(mpOutputDevice->GetDrawMode()); - if(nOriginalDrawMode & (DRAWMODE_BLACKTEXT|DRAWMODE_GRAYTEXT|DRAWMODE_GHOSTEDTEXT|DRAWMODE_WHITETEXT|DRAWMODE_SETTINGSTEXT)) - { - sal_uInt32 nAdaptedDrawMode(nOriginalDrawMode); - - if(nOriginalDrawMode & DRAWMODE_BLACKTEXT) - { - nAdaptedDrawMode |= DRAWMODE_BLACKFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_BLACKFILL; - } - - if(nOriginalDrawMode & DRAWMODE_GRAYTEXT) - { - nAdaptedDrawMode |= DRAWMODE_GRAYFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_GRAYFILL; - } - - if(nOriginalDrawMode & DRAWMODE_GHOSTEDTEXT) - { - nAdaptedDrawMode |= DRAWMODE_GHOSTEDFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_GHOSTEDFILL; - } - - if(nOriginalDrawMode & DRAWMODE_WHITETEXT) - { - nAdaptedDrawMode |= DRAWMODE_WHITEFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_WHITEFILL; - } - - if(nOriginalDrawMode & DRAWMODE_SETTINGSTEXT) - { - nAdaptedDrawMode |= DRAWMODE_SETTINGSFILL; - } - else - { - nAdaptedDrawMode &= ~DRAWMODE_SETTINGSFILL; - } - - mpOutputDevice->SetDrawMode(nAdaptedDrawMode); - } - } - - ////////////////////////////////////////////////////////////////////////////// - // process support - - VclProcessor2D::VclProcessor2D( - const geometry::ViewInformation2D& rViewInformation, - OutputDevice& rOutDev) - : BaseProcessor2D(rViewInformation), - mpOutputDevice(&rOutDev), - maBColorModifierStack(), - maCurrentTransformation(), - maDrawinglayerOpt(), - mnPolygonStrokePrimitive2D(0) - { - // set digit language, derived from SvtCTLOptions to have the correct - // number display for arabic/hindi numerals - const SvtCTLOptions aSvtCTLOptions; - LanguageType eLang(LANGUAGE_SYSTEM); - - if(SvtCTLOptions::NUMERALS_HINDI == aSvtCTLOptions.GetCTLTextNumerals()) - { - eLang = LANGUAGE_ARABIC_SAUDI_ARABIA; - } - else if(SvtCTLOptions::NUMERALS_ARABIC == aSvtCTLOptions.GetCTLTextNumerals()) - { - eLang = LANGUAGE_ENGLISH; - } - else - { - eLang = (LanguageType)Application::GetSettings().GetLanguage(); - } - - rOutDev.SetDigitLanguage(eLang); - } - - VclProcessor2D::~VclProcessor2D() - { - } - } // end of namespace processor2d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor3d/baseprocessor3d.cxx b/drawinglayer/source/processor3d/baseprocessor3d.cxx deleted file mode 100644 index 9636c6b295..0000000000 --- a/drawinglayer/source/processor3d/baseprocessor3d.cxx +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor3d/baseprocessor3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - void BaseProcessor3D::processBasePrimitive3D(const primitive3d::BasePrimitive3D& /*rCandidate*/) - { - } - - BaseProcessor3D::BaseProcessor3D(const geometry::ViewInformation3D& rViewInformation) - : maViewInformation3D(rViewInformation) - { - } - - BaseProcessor3D::~BaseProcessor3D() - { - } - - void BaseProcessor3D::process(const primitive3d::Primitive3DSequence& rSource) - { - if(rSource.hasElements()) - { - const sal_Int32 nCount(rSource.getLength()); - - for(sal_Int32 a(0L); a < nCount; a++) - { - // get reference - const primitive3d::Primitive3DReference xReference(rSource[a]); - - if(xReference.is()) - { - // try to cast to BasePrimitive3D implementation - const primitive3d::BasePrimitive3D* pBasePrimitive = dynamic_cast< const primitive3d::BasePrimitive3D* >(xReference.get()); - - if(pBasePrimitive) - { - processBasePrimitive3D(*pBasePrimitive); - } - else - { - // unknown implementation, use UNO API call instead and process recursively - const uno::Sequence< beans::PropertyValue >& rViewParameters(getViewInformation3D().getViewInformationSequence()); - process(xReference->getDecomposition(rViewParameters)); - } - } - } - } - } - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - CollectingProcessor3D::CollectingProcessor3D(const geometry::ViewInformation3D& rViewInformation) - : BaseProcessor3D(rViewInformation), - maPrimitive3DSequence() - { - } - - CollectingProcessor3D::~CollectingProcessor3D() - { - } - - void CollectingProcessor3D::process(const primitive3d::Primitive3DSequence& rSource) - { - // accept everything - primitive3d::appendPrimitive3DSequenceToPrimitive3DSequence(maPrimitive3DSequence, rSource); - } - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor3d/cutfindprocessor3d.cxx b/drawinglayer/source/processor3d/cutfindprocessor3d.cxx deleted file mode 100644 index 2b1f67e94a..0000000000 --- a/drawinglayer/source/processor3d/cutfindprocessor3d.cxx +++ /dev/null @@ -1,228 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor3d/cutfindprocessor3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <drawinglayer/primitive3d/transformprimitive3d.hxx> -#include <drawinglayer/primitive3d/hatchtextureprimitive3d.hxx> -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <basegfx/polygon/b3dpolygontools.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/primitive3d/hiddengeometryprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - CutFindProcessor::CutFindProcessor(const geometry::ViewInformation3D& rViewInformation, - const basegfx::B3DPoint& rFront, - const basegfx::B3DPoint& rBack, - bool bAnyHit) - : BaseProcessor3D(rViewInformation), - maFront(rFront), - maBack(rBack), - maResult(), - maCombinedTransform(), - mbAnyHit(bAnyHit), - mbUseInvisiblePrimitiveContent(true) - { - } - - void CutFindProcessor::processBasePrimitive3D(const primitive3d::BasePrimitive3D& rCandidate) - { - if(getAnyHit() && maResult.size()) - { - // stop processing as soon as a hit was recognized - return; - } - - // it is a BasePrimitive3D implementation, use getPrimitive3DID() call for switch - switch(rCandidate.getPrimitive3DID()) - { - case PRIMITIVE3D_ID_TRANSFORMPRIMITIVE3D : - { - // transform group. - const primitive3d::TransformPrimitive3D& rPrimitive = static_cast< const primitive3d::TransformPrimitive3D& >(rCandidate); - - // remember old and transform front, back to object coordinates - const basegfx::B3DPoint aLastFront(maFront); - const basegfx::B3DPoint aLastBack(maBack); - basegfx::B3DHomMatrix aInverseTrans(rPrimitive.getTransformation()); - aInverseTrans.invert(); - maFront *= aInverseTrans; - maBack *= aInverseTrans; - - // remember current and create new transformation; add new object transform from right side - const geometry::ViewInformation3D aLastViewInformation3D(getViewInformation3D()); - const geometry::ViewInformation3D aNewViewInformation3D( - aLastViewInformation3D.getObjectTransformation() * rPrimitive.getTransformation(), - aLastViewInformation3D.getOrientation(), - aLastViewInformation3D.getProjection(), - aLastViewInformation3D.getDeviceToView(), - aLastViewInformation3D.getViewTime(), - aLastViewInformation3D.getExtendedInformationSequence()); - updateViewInformation(aNewViewInformation3D); - - // #i102956# remember needed back-transform for found cuts (combine from right side) - const basegfx::B3DHomMatrix aLastCombinedTransform(maCombinedTransform); - maCombinedTransform = maCombinedTransform * rPrimitive.getTransformation(); - - // let break down - process(rPrimitive.getChildren()); - - // restore transformations and front, back - maCombinedTransform = aLastCombinedTransform; - updateViewInformation(aLastViewInformation3D); - maFront = aLastFront; - maBack = aLastBack; - break; - } - case PRIMITIVE3D_ID_POLYGONHAIRLINEPRIMITIVE3D : - { - // PolygonHairlinePrimitive3D, not used for hit test with planes, ignore. This - // means that also thick line expansion will not be hit-tested as - // PolyPolygonMaterialPrimitive3D - break; - } - case PRIMITIVE3D_ID_HATCHTEXTUREPRIMITIVE3D : - { - // #i97321# - // For HatchTexturePrimitive3D, do not use the decomposition since it will produce - // clipped hatch lines in 3D. It can be used when the hatch also has a filling, but for - // simplicity, just use the children which are the PolyPolygonMaterialPrimitive3D - // which define the hatched areas anyways; for HitTest this is more than adequate - const primitive3d::HatchTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::HatchTexturePrimitive3D& >(rCandidate); - process(rPrimitive.getChildren()); - break; - } - case PRIMITIVE3D_ID_HIDDENGEOMETRYPRIMITIVE3D : - { - // HiddenGeometryPrimitive3D; the default decomposition would return an empty seqence, - // so force this primitive to process it's children directly if the switch is set - // (which is the default). Else, ignore invisible content - const primitive3d::HiddenGeometryPrimitive3D& rHiddenGeometry(static_cast< const primitive3d::HiddenGeometryPrimitive3D& >(rCandidate)); - const primitive3d::Primitive3DSequence& rChildren = rHiddenGeometry.getChildren(); - - if(rChildren.hasElements()) - { - if(getUseInvisiblePrimitiveContent()) - { - process(rChildren); - } - } - - break; - } - case PRIMITIVE3D_ID_UNIFIEDTRANSPARENCETEXTUREPRIMITIVE3D : - { - const primitive3d::UnifiedTransparenceTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::UnifiedTransparenceTexturePrimitive3D& >(rCandidate); - const primitive3d::Primitive3DSequence rChildren = rPrimitive.getChildren(); - - if(rChildren.getLength()) - { - if(1.0 <= rPrimitive.getTransparence()) - { - // not visible, but use for HitTest - if(getUseInvisiblePrimitiveContent()) - { - process(rChildren); - } - } - else if(rPrimitive.getTransparence() >= 0.0 && rPrimitive.getTransparence() < 1.0) - { - // visible; use content - process(rChildren); - } - } - - break; - } - case PRIMITIVE3D_ID_POLYPOLYGONMATERIALPRIMITIVE3D : - { - // PolyPolygonMaterialPrimitive3D - const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive = static_cast< const primitive3d::PolyPolygonMaterialPrimitive3D& >(rCandidate); - - if(!maFront.equal(maBack)) - { - const basegfx::B3DPolyPolygon& rPolyPolygon = rPrimitive.getB3DPolyPolygon(); - const sal_uInt32 nPolyCount(rPolyPolygon.count()); - - if(nPolyCount) - { - const basegfx::B3DPolygon aPolygon(rPolyPolygon.getB3DPolygon(0)); - const sal_uInt32 nPointCount(aPolygon.count()); - - if(nPointCount > 2) - { - const basegfx::B3DVector aPlaneNormal(aPolygon.getNormal()); - - if(!aPlaneNormal.equalZero()) - { - const basegfx::B3DPoint aPointOnPlane(aPolygon.getB3DPoint(0)); - double fCut(0.0); - - if(basegfx::tools::getCutBetweenLineAndPlane(aPlaneNormal, aPointOnPlane, maFront, maBack, fCut)) - { - const basegfx::B3DPoint aCutPoint(basegfx::interpolate(maFront, maBack, fCut)); - - if(basegfx::tools::isInside(rPolyPolygon, aCutPoint, false)) - { - // #i102956# add result. Do not forget to do this in the coordinate - // system the processor get started with, so use the collected - // combined transformation from processed TransformPrimitive3D's - maResult.push_back(maCombinedTransform * aCutPoint); - } - } - } - } - } - } - - break; - } - default : - { - // process recursively - process(rCandidate.get3DDecomposition(getViewInformation3D())); - break; - } - } - } - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor3d/defaultprocessor3d.cxx b/drawinglayer/source/processor3d/defaultprocessor3d.cxx deleted file mode 100644 index 8768d25dc3..0000000000 --- a/drawinglayer/source/processor3d/defaultprocessor3d.cxx +++ /dev/null @@ -1,569 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor3d/defaultprocessor3d.hxx> -#include <drawinglayer/primitive3d/textureprimitive3d.hxx> -#include <drawinglayer/texture/texture.hxx> -#include <drawinglayer/texture/texture3d.hxx> -#include <drawinglayer/primitive3d/hatchtextureprimitive3d.hxx> -#include <drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx> -#include <drawinglayer/primitive3d/polygonprimitive3d.hxx> -#include <basegfx/polygon/b3dpolygontools.hxx> -#include <drawinglayer/attribute/materialattribute3d.hxx> -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <com/sun/star/drawing/ShadeMode.hpp> -#include <drawinglayer/primitive3d/transformprimitive3d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <vcl/bitmapex.hxx> -#include <drawinglayer/attribute/sdrsceneattribute3d.hxx> -#include <drawinglayer/attribute/sdrlightingattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - void DefaultProcessor3D::impRenderGradientTexturePrimitive3D(const primitive3d::GradientTexturePrimitive3D& rPrimitive, bool bTransparence) - { - const primitive3d::Primitive3DSequence& rSubSequence = rPrimitive.getChildren(); - - if(rSubSequence.hasElements()) - { - // rescue values - const bool bOldModulate(getModulate()); mbModulate = rPrimitive.getModulate(); - const bool bOldFilter(getFilter()); mbFilter = rPrimitive.getFilter(); - const bool bOldSimpleTextureActive(getSimpleTextureActive()); - boost::shared_ptr< texture::GeoTexSvx > pOldTex = (bTransparence) ? mpTransparenceGeoTexSvx : mpGeoTexSvx; - - // create texture - const attribute::FillGradientAttribute& rFillGradient = rPrimitive.getGradient(); - const basegfx::B2DRange aOutlineRange(0.0, 0.0, rPrimitive.getTextureSize().getX(), rPrimitive.getTextureSize().getY()); - const attribute::GradientStyle aGradientStyle(rFillGradient.getStyle()); - sal_uInt32 nSteps(rFillGradient.getSteps()); - const basegfx::BColor aStart(rFillGradient.getStartColor()); - const basegfx::BColor aEnd(rFillGradient.getEndColor()); - const sal_uInt32 nMaxSteps(sal_uInt32((aStart.getMaximumDistance(aEnd) * 127.5) + 0.5)); - boost::shared_ptr< texture::GeoTexSvx > pNewTex; - - if(nMaxSteps) - { - // there IS a color distance - if(nSteps == 0L) - { - nSteps = nMaxSteps; - } - - if(nSteps < 2L) - { - nSteps = 2L; - } - - if(nSteps > nMaxSteps) - { - nSteps = nMaxSteps; - } - - switch(aGradientStyle) - { - case attribute::GRADIENTSTYLE_LINEAR: - { - pNewTex.reset(new texture::GeoTexSvxGradientLinear(aOutlineRange, aStart, aEnd, nSteps, rFillGradient.getBorder(), rFillGradient.getAngle())); - break; - } - case attribute::GRADIENTSTYLE_AXIAL: - { - pNewTex.reset(new texture::GeoTexSvxGradientAxial(aOutlineRange, aStart, aEnd, nSteps, rFillGradient.getBorder(), rFillGradient.getAngle())); - break; - } - case attribute::GRADIENTSTYLE_RADIAL: - { - pNewTex.reset(new texture::GeoTexSvxGradientRadial(aOutlineRange, aStart, aEnd, nSteps, rFillGradient.getBorder(), rFillGradient.getOffsetX(), rFillGradient.getOffsetY())); - break; - } - case attribute::GRADIENTSTYLE_ELLIPTICAL: - { - pNewTex.reset(new texture::GeoTexSvxGradientElliptical(aOutlineRange, aStart, aEnd, nSteps, rFillGradient.getBorder(), rFillGradient.getOffsetX(), rFillGradient.getOffsetY(), rFillGradient.getAngle())); - break; - } - case attribute::GRADIENTSTYLE_SQUARE: - { - pNewTex.reset(new texture::GeoTexSvxGradientSquare(aOutlineRange, aStart, aEnd, nSteps, rFillGradient.getBorder(), rFillGradient.getOffsetX(), rFillGradient.getOffsetY(), rFillGradient.getAngle())); - break; - } - case attribute::GRADIENTSTYLE_RECT: - { - pNewTex.reset(new texture::GeoTexSvxGradientRect(aOutlineRange, aStart, aEnd, nSteps, rFillGradient.getBorder(), rFillGradient.getOffsetX(), rFillGradient.getOffsetY(), rFillGradient.getAngle())); - break; - } - } - - mbSimpleTextureActive = false; - } - else - { - // no color distance -> same color, use simple texture - pNewTex.reset(new texture::GeoTexSvxMono(aStart, 1.0 - aStart.luminance())); - mbSimpleTextureActive = true; - } - - // set created texture - if(bTransparence) - { - mpTransparenceGeoTexSvx = pNewTex; - } - else - { - mpGeoTexSvx = pNewTex; - } - - // process sub-list - process(rSubSequence); - - // restore values - mbModulate = bOldModulate; - mbFilter = bOldFilter; - mbSimpleTextureActive = bOldSimpleTextureActive; - - if(bTransparence) - { - mpTransparenceGeoTexSvx = pOldTex; - } - else - { - mpGeoTexSvx = pOldTex; - } - } - } - - void DefaultProcessor3D::impRenderHatchTexturePrimitive3D(const primitive3d::HatchTexturePrimitive3D& rPrimitive) - { - const primitive3d::Primitive3DSequence& rSubSequence = rPrimitive.getChildren(); - - if(rSubSequence.hasElements()) - { - // rescue values - const bool bOldModulate(getModulate()); mbModulate = rPrimitive.getModulate(); - const bool bOldFilter(getFilter()); mbFilter = rPrimitive.getFilter(); - boost::shared_ptr< texture::GeoTexSvx > pOldTex = mpGeoTexSvx; - - // calculate logic pixel size in object coordinates. Create transformation view - // to object by inverting ObjectToView - basegfx::B3DHomMatrix aInvObjectToView(getViewInformation3D().getObjectToView()); - aInvObjectToView.invert(); - - // back-project discrete coordinates to object coordinates and extract - // maximum distance - const basegfx::B3DPoint aZero(aInvObjectToView * basegfx::B3DPoint(0.0, 0.0, 0.0)); - const basegfx::B3DPoint aOne(aInvObjectToView * basegfx::B3DPoint(1.0, 1.0, 1.0)); - const basegfx::B3DVector aLogicPixel(aOne - aZero); - double fLogicPixelSizeWorld(::std::max(::std::max(fabs(aLogicPixel.getX()), fabs(aLogicPixel.getY())), fabs(aLogicPixel.getZ()))); - - // calculate logic pixel size in texture coordinates - const double fLogicTexSizeX(fLogicPixelSizeWorld / rPrimitive.getTextureSize().getX()); - const double fLogicTexSizeY(fLogicPixelSizeWorld / rPrimitive.getTextureSize().getY()); - const double fLogicTexSize(fLogicTexSizeX > fLogicTexSizeY ? fLogicTexSizeX : fLogicTexSizeY); - - // create texture and set - mpGeoTexSvx.reset(new texture::GeoTexSvxMultiHatch(rPrimitive, fLogicTexSize)); - - // process sub-list - process(rSubSequence); - - // restore values - mbModulate = bOldModulate; - mbFilter = bOldFilter; - mpGeoTexSvx = pOldTex; - } - } - - void DefaultProcessor3D::impRenderBitmapTexturePrimitive3D(const primitive3d::BitmapTexturePrimitive3D& rPrimitive) - { - const primitive3d::Primitive3DSequence& rSubSequence = rPrimitive.getChildren(); - - if(rSubSequence.hasElements()) - { - // rescue values - const bool bOldModulate(getModulate()); mbModulate = rPrimitive.getModulate(); - const bool bOldFilter(getFilter()); mbFilter = rPrimitive.getFilter(); - boost::shared_ptr< texture::GeoTexSvx > pOldTex = mpGeoTexSvx; - - // create texture - const attribute::FillBitmapAttribute& rFillBitmapAttribute = rPrimitive.getFillBitmapAttribute(); - - if(rFillBitmapAttribute.getTiling()) - { - mpGeoTexSvx.reset(new texture::GeoTexSvxBitmapTiled( - rFillBitmapAttribute.getBitmapEx().GetBitmap(), - rFillBitmapAttribute.getTopLeft() * rPrimitive.getTextureSize(), - rFillBitmapAttribute.getSize() * rPrimitive.getTextureSize())); - } - else - { - mpGeoTexSvx.reset(new texture::GeoTexSvxBitmap( - rFillBitmapAttribute.getBitmapEx().GetBitmap(), - rFillBitmapAttribute.getTopLeft() * rPrimitive.getTextureSize(), - rFillBitmapAttribute.getSize() * rPrimitive.getTextureSize())); - } - - // process sub-list - process(rSubSequence); - - // restore values - mbModulate = bOldModulate; - mbFilter = bOldFilter; - mpGeoTexSvx = pOldTex; - } - } - - void DefaultProcessor3D::impRenderModifiedColorPrimitive3D(const primitive3d::ModifiedColorPrimitive3D& rModifiedCandidate) - { - const primitive3d::Primitive3DSequence& rSubSequence = rModifiedCandidate.getChildren(); - - if(rSubSequence.hasElements()) - { - // put modifier on stack - maBColorModifierStack.push(rModifiedCandidate.getColorModifier()); - - // process sub-list - process(rModifiedCandidate.getChildren()); - - // remove modifier from stack - maBColorModifierStack.pop(); - } - } - - void DefaultProcessor3D::impRenderPolygonHairlinePrimitive3D(const primitive3d::PolygonHairlinePrimitive3D& rPrimitive) - { - basegfx::B3DPolygon aHairline(rPrimitive.getB3DPolygon()); - - if(aHairline.count()) - { - // hairlines need no extra data, clear it - aHairline.clearTextureCoordinates(); - aHairline.clearNormals(); - aHairline.clearBColors(); - - // transform to device coordinates (-1.0 .. 1.0) and check for visibility - aHairline.transform(getViewInformation3D().getObjectToView()); - const basegfx::B3DRange a3DRange(basegfx::tools::getRange(aHairline)); - const basegfx::B2DRange a2DRange(a3DRange.getMinX(), a3DRange.getMinY(), a3DRange.getMaxX(), a3DRange.getMaxY()); - - if(a2DRange.overlaps(maRasterRange)) - { - const attribute::MaterialAttribute3D aMaterial(maBColorModifierStack.getModifiedColor(rPrimitive.getBColor())); - - rasterconvertB3DPolygon(aMaterial, aHairline); - } - } - } - - void DefaultProcessor3D::impRenderPolyPolygonMaterialPrimitive3D(const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive) - { - basegfx::B3DPolyPolygon aFill(rPrimitive.getB3DPolyPolygon()); - basegfx::BColor aObjectColor(rPrimitive.getMaterial().getColor()); - bool bPaintIt(aFill.count()); - - // #i98295# get ShadeMode. Correct early when only flat is possible due to missing normals - const ::com::sun::star::drawing::ShadeMode aShadeMode( - aFill.areNormalsUsed() ? - getSdrSceneAttribute().getShadeMode() : ::com::sun::star::drawing::ShadeMode_FLAT); - - if(bPaintIt) - { - // get rid of texture coordinates if there is no texture - if(aFill.areTextureCoordinatesUsed() && !getGeoTexSvx().get() && !getTransparenceGeoTexSvx().get()) - { - aFill.clearTextureCoordinates(); - } - - // #i98295# get rid of normals and color early when not needed - if(::com::sun::star::drawing::ShadeMode_FLAT == aShadeMode) - { - aFill.clearNormals(); - aFill.clearBColors(); - } - - // transform to device coordinates (-1.0 .. 1.0) and check for visibility - aFill.transform(getViewInformation3D().getObjectToView()); - const basegfx::B3DRange a3DRange(basegfx::tools::getRange(aFill)); - const basegfx::B2DRange a2DRange(a3DRange.getMinX(), a3DRange.getMinY(), a3DRange.getMaxX(), a3DRange.getMaxY()); - - bPaintIt = a2DRange.overlaps(maRasterRange); - } - - // check if it shall be painted regarding hiding of normals (backface culling) - if(bPaintIt && !rPrimitive.getDoubleSided()) - { - // get plane normal of polygon in view coordinates (with ZBuffer values), - // left-handed coordinate system - const basegfx::B3DVector aPlaneNormal(aFill.getB3DPolygon(0L).getNormal()); - - if(aPlaneNormal.getZ() > 0.0) - { - bPaintIt = false; - } - } - - if(bPaintIt) - { - // prepare ObjectToEye in NormalTransform - basegfx::B3DHomMatrix aNormalTransform(getViewInformation3D().getOrientation() * getViewInformation3D().getObjectTransformation()); - - if(getSdrSceneAttribute().getTwoSidedLighting()) - { - // get plane normal of polygon in view coordinates (with ZBuffer values), - // left-handed coordinate system - const basegfx::B3DVector aPlaneNormal(aFill.getB3DPolygon(0L).getNormal()); - - if(aPlaneNormal.getZ() > 0.0) - { - // mirror normals - aNormalTransform.scale(-1.0, -1.0, -1.0); - } - } - - switch(aShadeMode) - { - case ::com::sun::star::drawing::ShadeMode_PHONG: - { - // phong shading. Transform normals to eye coor - aFill.transformNormals(aNormalTransform); - break; - } - case ::com::sun::star::drawing::ShadeMode_SMOOTH: - { - // gouraud shading. Transform normals to eye coor - aFill.transformNormals(aNormalTransform); - - // prepare color model parameters, evtl. use blend color - const basegfx::BColor aColor(getModulate() ? basegfx::BColor(1.0, 1.0, 1.0) : rPrimitive.getMaterial().getColor()); - const basegfx::BColor& rSpecular(rPrimitive.getMaterial().getSpecular()); - const basegfx::BColor& rEmission(rPrimitive.getMaterial().getEmission()); - const sal_uInt16 nSpecularIntensity(rPrimitive.getMaterial().getSpecularIntensity()); - - // solve color model for each normal vector, set colors at points. Clear normals. - for(sal_uInt32 a(0L); a < aFill.count(); a++) - { - basegfx::B3DPolygon aPartFill(aFill.getB3DPolygon(a)); - - for(sal_uInt32 b(0L); b < aPartFill.count(); b++) - { - // solve color model. Transform normal to eye coor - const basegfx::B3DVector aNormal(aPartFill.getNormal(b)); - const basegfx::BColor aSolvedColor(getSdrLightingAttribute().solveColorModel(aNormal, aColor, rSpecular, rEmission, nSpecularIntensity)); - aPartFill.setBColor(b, aSolvedColor); - } - - // clear normals on this part polygon and write it back - aPartFill.clearNormals(); - aFill.setB3DPolygon(a, aPartFill); - } - break; - } - case ::com::sun::star::drawing::ShadeMode_FLAT: - { - // flat shading. Get plane vector in eye coordinates - const basegfx::B3DVector aPlaneEyeNormal(aNormalTransform * rPrimitive.getB3DPolyPolygon().getB3DPolygon(0L).getNormal()); - - // prepare color model parameters, evtl. use blend color - const basegfx::BColor aColor(getModulate() ? basegfx::BColor(1.0, 1.0, 1.0) : rPrimitive.getMaterial().getColor()); - const basegfx::BColor& rSpecular(rPrimitive.getMaterial().getSpecular()); - const basegfx::BColor& rEmission(rPrimitive.getMaterial().getEmission()); - const sal_uInt16 nSpecularIntensity(rPrimitive.getMaterial().getSpecularIntensity()); - - // solve color model for plane vector and use that color for whole plane - aObjectColor = getSdrLightingAttribute().solveColorModel(aPlaneEyeNormal, aColor, rSpecular, rEmission, nSpecularIntensity); - break; - } - default: // case ::com::sun::star::drawing::ShadeMode_DRAFT: - { - // draft, just use object color which is already set. Delete all other infos - aFill.clearNormals(); - aFill.clearBColors(); - break; - } - } - - // draw it to ZBuffer - const attribute::MaterialAttribute3D aMaterial( - maBColorModifierStack.getModifiedColor(aObjectColor), - rPrimitive.getMaterial().getSpecular(), - rPrimitive.getMaterial().getEmission(), - rPrimitive.getMaterial().getSpecularIntensity()); - - rasterconvertB3DPolyPolygon(aMaterial, aFill); - } - } - - void DefaultProcessor3D::impRenderTransformPrimitive3D(const primitive3d::TransformPrimitive3D& rTransformCandidate) - { - // transform group. Remember current transformations - const geometry::ViewInformation3D aLastViewInformation3D(getViewInformation3D()); - - // create new transformation; add new object transform from right side - const geometry::ViewInformation3D aNewViewInformation3D( - aLastViewInformation3D.getObjectTransformation() * rTransformCandidate.getTransformation(), - aLastViewInformation3D.getOrientation(), - aLastViewInformation3D.getProjection(), - aLastViewInformation3D.getDeviceToView(), - aLastViewInformation3D.getViewTime(), - aLastViewInformation3D.getExtendedInformationSequence()); - updateViewInformation(aNewViewInformation3D); - - // let break down recursively - process(rTransformCandidate.getChildren()); - - // restore transformations - updateViewInformation(aLastViewInformation3D); - } - - void DefaultProcessor3D::processBasePrimitive3D(const primitive3d::BasePrimitive3D& rBasePrimitive) - { - // it is a BasePrimitive3D implementation, use getPrimitive3DID() call for switch - switch(rBasePrimitive.getPrimitive3DID()) - { - case PRIMITIVE3D_ID_GRADIENTTEXTUREPRIMITIVE3D : - { - // GradientTexturePrimitive3D - const primitive3d::GradientTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::GradientTexturePrimitive3D& >(rBasePrimitive); - impRenderGradientTexturePrimitive3D(rPrimitive, false); - break; - } - case PRIMITIVE3D_ID_HATCHTEXTUREPRIMITIVE3D : - { - // HatchTexturePrimitive3D - static bool bDoHatchDecomposition(false); - - if(bDoHatchDecomposition) - { - // let break down - process(rBasePrimitive.get3DDecomposition(getViewInformation3D())); - } - else - { - // hatchTexturePrimitive3D - const primitive3d::HatchTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::HatchTexturePrimitive3D& >(rBasePrimitive); - impRenderHatchTexturePrimitive3D(rPrimitive); - } - break; - } - case PRIMITIVE3D_ID_BITMAPTEXTUREPRIMITIVE3D : - { - // BitmapTexturePrimitive3D - const primitive3d::BitmapTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::BitmapTexturePrimitive3D& >(rBasePrimitive); - impRenderBitmapTexturePrimitive3D(rPrimitive); - break; - } - case PRIMITIVE3D_ID_TRANSPARENCETEXTUREPRIMITIVE3D : - { - // TransparenceTexturePrimitive3D - const primitive3d::TransparenceTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::TransparenceTexturePrimitive3D& >(rBasePrimitive); - mnTransparenceCounter++; - impRenderGradientTexturePrimitive3D(rPrimitive, true); - mnTransparenceCounter--; - break; - } - case PRIMITIVE3D_ID_MODIFIEDCOLORPRIMITIVE3D : - { - // ModifiedColorPrimitive3D - // Force output to unified color. - const primitive3d::ModifiedColorPrimitive3D& rPrimitive = static_cast< const primitive3d::ModifiedColorPrimitive3D& >(rBasePrimitive); - impRenderModifiedColorPrimitive3D(rPrimitive); - break; - } - case PRIMITIVE3D_ID_POLYGONHAIRLINEPRIMITIVE3D : - { - // directdraw of PolygonHairlinePrimitive3D - const primitive3d::PolygonHairlinePrimitive3D& rPrimitive = static_cast< const primitive3d::PolygonHairlinePrimitive3D& >(rBasePrimitive); - impRenderPolygonHairlinePrimitive3D(rPrimitive); - break; - } - case PRIMITIVE3D_ID_POLYPOLYGONMATERIALPRIMITIVE3D : - { - // directdraw of PolyPolygonMaterialPrimitive3D - const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive = static_cast< const primitive3d::PolyPolygonMaterialPrimitive3D& >(rBasePrimitive); - impRenderPolyPolygonMaterialPrimitive3D(rPrimitive); - break; - } - case PRIMITIVE3D_ID_TRANSFORMPRIMITIVE3D : - { - // transform group (TransformPrimitive3D) - impRenderTransformPrimitive3D(static_cast< const primitive3d::TransformPrimitive3D& >(rBasePrimitive)); - break; - } - default: - { - // process recursively - process(rBasePrimitive.get3DDecomposition(getViewInformation3D())); - break; - } - } - } - - DefaultProcessor3D::DefaultProcessor3D( - const geometry::ViewInformation3D& rViewInformation, - const attribute::SdrSceneAttribute& rSdrSceneAttribute, - const attribute::SdrLightingAttribute& rSdrLightingAttribute) - : BaseProcessor3D(rViewInformation), - mrSdrSceneAttribute(rSdrSceneAttribute), - mrSdrLightingAttribute(rSdrLightingAttribute), - maRasterRange(), - maBColorModifierStack(), - mpGeoTexSvx(), - mpTransparenceGeoTexSvx(), - maDrawinglayerOpt(), - mnTransparenceCounter(0), - mbModulate(false), - mbFilter(false), - mbSimpleTextureActive(false) - { - // a derivation has to set maRasterRange which is used in the basic render methods. - // Setting to default here ([0.0 .. 1.0] in X,Y) to avoid problems - maRasterRange.expand(basegfx::B2DTuple(0.0, 0.0)); - maRasterRange.expand(basegfx::B2DTuple(1.0, 1.0)); - } - - DefaultProcessor3D::~DefaultProcessor3D() - { - } - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor3d/geometry2dextractor.cxx b/drawinglayer/source/processor3d/geometry2dextractor.cxx deleted file mode 100644 index 7a422bc8d8..0000000000 --- a/drawinglayer/source/processor3d/geometry2dextractor.cxx +++ /dev/null @@ -1,173 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor3d/geometry2dextractor.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <drawinglayer/primitive3d/transformprimitive3d.hxx> -#include <drawinglayer/primitive3d/modifiedcolorprimitive3d.hxx> -#include <drawinglayer/primitive3d/polygonprimitive3d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive3d/textureprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - // as tooling, the process() implementation takes over API handling and calls this - // virtual render method when the primitive implementation is BasePrimitive3D-based. - void Geometry2DExtractingProcessor::processBasePrimitive3D(const primitive3d::BasePrimitive3D& rCandidate) - { - // it is a BasePrimitive3D implementation, use getPrimitive3DID() call for switch - switch(rCandidate.getPrimitive3DID()) - { - case PRIMITIVE3D_ID_TRANSFORMPRIMITIVE3D : - { - // transform group. Remember current transformations - const primitive3d::TransformPrimitive3D& rPrimitive = static_cast< const primitive3d::TransformPrimitive3D& >(rCandidate); - const geometry::ViewInformation3D aLastViewInformation3D(getViewInformation3D()); - - // create new transformation; add new object transform from right side - const geometry::ViewInformation3D aNewViewInformation3D( - aLastViewInformation3D.getObjectTransformation() * rPrimitive.getTransformation(), - aLastViewInformation3D.getOrientation(), - aLastViewInformation3D.getProjection(), - aLastViewInformation3D.getDeviceToView(), - aLastViewInformation3D.getViewTime(), - aLastViewInformation3D.getExtendedInformationSequence()); - updateViewInformation(aNewViewInformation3D); - - // let break down recursively - process(rPrimitive.getChildren()); - - // restore transformations - updateViewInformation(aLastViewInformation3D); - break; - } - case PRIMITIVE3D_ID_MODIFIEDCOLORPRIMITIVE3D : - { - // ModifiedColorPrimitive3D; push, process and pop - const primitive3d::ModifiedColorPrimitive3D& rModifiedCandidate = static_cast< const primitive3d::ModifiedColorPrimitive3D& >(rCandidate); - const primitive3d::Primitive3DSequence& rSubSequence = rModifiedCandidate.getChildren(); - - if(rSubSequence.hasElements()) - { - maBColorModifierStack.push(rModifiedCandidate.getColorModifier()); - process(rModifiedCandidate.getChildren()); - maBColorModifierStack.pop(); - } - break; - } - case PRIMITIVE3D_ID_POLYGONHAIRLINEPRIMITIVE3D : - { - // PolygonHairlinePrimitive3D - const primitive3d::PolygonHairlinePrimitive3D& rPrimitive = static_cast< const primitive3d::PolygonHairlinePrimitive3D& >(rCandidate); - basegfx::B2DPolygon a2DHairline(basegfx::tools::createB2DPolygonFromB3DPolygon(rPrimitive.getB3DPolygon(), getViewInformation3D().getObjectToView())); - - if(a2DHairline.count()) - { - a2DHairline.transform(getObjectTransformation()); - const basegfx::BColor aModifiedColor(maBColorModifierStack.getModifiedColor(rPrimitive.getBColor())); - const primitive2d::Primitive2DReference xRef(new primitive2d::PolygonHairlinePrimitive2D(a2DHairline, aModifiedColor)); - primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(maPrimitive2DSequence, xRef); - } - break; - } - case PRIMITIVE3D_ID_POLYPOLYGONMATERIALPRIMITIVE3D : - { - // PolyPolygonMaterialPrimitive3D - const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive = static_cast< const primitive3d::PolyPolygonMaterialPrimitive3D& >(rCandidate); - basegfx::B2DPolyPolygon a2DFill(basegfx::tools::createB2DPolyPolygonFromB3DPolyPolygon(rPrimitive.getB3DPolyPolygon(), getViewInformation3D().getObjectToView())); - - if(a2DFill.count()) - { - a2DFill.transform(getObjectTransformation()); - const basegfx::BColor aModifiedColor(maBColorModifierStack.getModifiedColor(rPrimitive.getMaterial().getColor())); - const primitive2d::Primitive2DReference xRef(new primitive2d::PolyPolygonColorPrimitive2D(a2DFill, aModifiedColor)); - primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(maPrimitive2DSequence, xRef); - } - break; - } - case PRIMITIVE3D_ID_GRADIENTTEXTUREPRIMITIVE3D : - case PRIMITIVE3D_ID_HATCHTEXTUREPRIMITIVE3D : - case PRIMITIVE3D_ID_BITMAPTEXTUREPRIMITIVE3D : - case PRIMITIVE3D_ID_TRANSPARENCETEXTUREPRIMITIVE3D : - case PRIMITIVE3D_ID_UNIFIEDTRANSPARENCETEXTUREPRIMITIVE3D : - { - // TexturePrimitive3D: Process children, do not try to decompose - const primitive3d::TexturePrimitive3D& rTexturePrimitive = static_cast< const primitive3d::TexturePrimitive3D& >(rCandidate); - const primitive3d::Primitive3DSequence aChildren(rTexturePrimitive.getChildren()); - - if(aChildren.hasElements()) - { - process(aChildren); - } - break; - } - case PRIMITIVE3D_ID_SHADOWPRIMITIVE3D : - { - // accept but ignore labels and shadow; these should be extracted seperately - break; - } - default : - { - // process recursively - process(rCandidate.get3DDecomposition(getViewInformation3D())); - break; - } - } - } - - Geometry2DExtractingProcessor::Geometry2DExtractingProcessor( - const geometry::ViewInformation3D& rViewInformation, - const basegfx::B2DHomMatrix& rObjectTransformation) - : BaseProcessor3D(rViewInformation), - maPrimitive2DSequence(), - maObjectTransformation(rObjectTransformation), - maBColorModifierStack() - { - } - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor3d/shadow3dextractor.cxx b/drawinglayer/source/processor3d/shadow3dextractor.cxx deleted file mode 100644 index 2a71d97a29..0000000000 --- a/drawinglayer/source/processor3d/shadow3dextractor.cxx +++ /dev/null @@ -1,345 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor3d/shadow3dextractor.hxx> -#include <drawinglayer/primitive3d/shadowprimitive3d.hxx> -#include <drawinglayer/primitive2d/shadowprimitive2d.hxx> -#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx> -#include <drawinglayer/primitive3d/transformprimitive3d.hxx> -#include <drawinglayer/primitive3d/polygonprimitive3d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> -#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - /// helper to convert from BasePrimitive2DVector to primitive2d::Primitive2DSequence - const primitive2d::Primitive2DSequence Shadow3DExtractingProcessor::getPrimitive2DSequenceFromBasePrimitive2DVector( - const BasePrimitive2DVector& rVector) const - { - const sal_uInt32 nCount(rVector.size()); - primitive2d::Primitive2DSequence aRetval(nCount); - - for(sal_uInt32 a(0); a < nCount; a++) - { - aRetval[a] = rVector[a]; - } - - // all entries taken over; no need to delete entries, just reset to - // mark as empty - const_cast< BasePrimitive2DVector& >(rVector).clear(); - - return aRetval; - } - - // as tooling, the process() implementation takes over API handling and calls this - // virtual render method when the primitive implementation is BasePrimitive3D-based. - void Shadow3DExtractingProcessor::processBasePrimitive3D(const primitive3d::BasePrimitive3D& rCandidate) - { - // it is a BasePrimitive3D implementation, use getPrimitive3DID() call for switch - switch(rCandidate.getPrimitive3DID()) - { - case PRIMITIVE3D_ID_SHADOWPRIMITIVE3D : - { - // shadow3d object. Call recursive with content and start conversion - const primitive3d::ShadowPrimitive3D& rPrimitive = static_cast< const primitive3d::ShadowPrimitive3D& >(rCandidate); - - // set new target - BasePrimitive2DVector aNewSubList; - BasePrimitive2DVector* pLastTargetSequence = mpPrimitive2DSequence; - mpPrimitive2DSequence = &aNewSubList; - - // activate convert - const bool bLastConvert(mbConvert); - mbConvert = true; - - // set projection flag - const bool bLastUseProjection(mbUseProjection); - mbUseProjection = rPrimitive.getShadow3D(); - - // process content - process(rPrimitive.getChildren()); - - // restore values - mbUseProjection = bLastUseProjection; - mbConvert = bLastConvert; - mpPrimitive2DSequence = pLastTargetSequence; - - // create 2d shadow primitive with result. This also fetches all entries - // from aNewSubList, so there is no need to delete them - primitive2d::BasePrimitive2D* pNew = new primitive2d::ShadowPrimitive2D( - rPrimitive.getShadowTransform(), - rPrimitive.getShadowColor(), - getPrimitive2DSequenceFromBasePrimitive2DVector(aNewSubList)); - - if(basegfx::fTools::more(rPrimitive.getShadowTransparence(), 0.0)) - { - // create simpleTransparencePrimitive, add created primitives - const primitive2d::Primitive2DReference xRef(pNew); - const primitive2d::Primitive2DSequence aNewTransPrimitiveVector(&xRef, 1); - - pNew = new primitive2d::UnifiedTransparencePrimitive2D( - aNewTransPrimitiveVector, - rPrimitive.getShadowTransparence()); - } - - mpPrimitive2DSequence->push_back(pNew); - - break; - } - case PRIMITIVE3D_ID_TRANSFORMPRIMITIVE3D : - { - // transform group. Remember current transformations - const primitive3d::TransformPrimitive3D& rPrimitive = static_cast< const primitive3d::TransformPrimitive3D& >(rCandidate); - const geometry::ViewInformation3D aLastViewInformation3D(getViewInformation3D()); - - // create new transformation; add new object transform from right side - const geometry::ViewInformation3D aNewViewInformation3D( - aLastViewInformation3D.getObjectTransformation() * rPrimitive.getTransformation(), - aLastViewInformation3D.getOrientation(), - aLastViewInformation3D.getProjection(), - aLastViewInformation3D.getDeviceToView(), - aLastViewInformation3D.getViewTime(), - aLastViewInformation3D.getExtendedInformationSequence()); - updateViewInformation(aNewViewInformation3D); - - if(mbShadowProjectionIsValid) - { - // update buffered WorldToEye and EyeToView - maWorldToEye = getViewInformation3D().getOrientation() * getViewInformation3D().getObjectTransformation(); - maEyeToView = getViewInformation3D().getDeviceToView() * getViewInformation3D().getProjection(); - } - - // let break down - process(rPrimitive.getChildren()); - - // restore transformations - updateViewInformation(aLastViewInformation3D); - - if(mbShadowProjectionIsValid) - { - // update buffered WorldToEye and EyeToView - maWorldToEye = getViewInformation3D().getOrientation() * getViewInformation3D().getObjectTransformation(); - maEyeToView = getViewInformation3D().getDeviceToView() * getViewInformation3D().getProjection(); - } - break; - } - case PRIMITIVE3D_ID_POLYGONHAIRLINEPRIMITIVE3D : - { - // PolygonHairlinePrimitive3D - if(mbConvert) - { - const primitive3d::PolygonHairlinePrimitive3D& rPrimitive = static_cast< const primitive3d::PolygonHairlinePrimitive3D& >(rCandidate); - basegfx::B2DPolygon a2DHairline; - - if(mbUseProjection) - { - if(mbShadowProjectionIsValid) - { - a2DHairline = impDoShadowProjection(rPrimitive.getB3DPolygon()); - } - } - else - { - a2DHairline = basegfx::tools::createB2DPolygonFromB3DPolygon(rPrimitive.getB3DPolygon(), getViewInformation3D().getObjectToView()); - } - - if(a2DHairline.count()) - { - a2DHairline.transform(getObjectTransformation()); - mpPrimitive2DSequence->push_back( - new primitive2d::PolygonHairlinePrimitive2D( - a2DHairline, - maPrimitiveColor)); - } - } - break; - } - case PRIMITIVE3D_ID_POLYPOLYGONMATERIALPRIMITIVE3D : - { - // PolyPolygonMaterialPrimitive3D - if(mbConvert) - { - const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive = static_cast< const primitive3d::PolyPolygonMaterialPrimitive3D& >(rCandidate); - basegfx::B2DPolyPolygon a2DFill; - - if(mbUseProjection) - { - if(mbShadowProjectionIsValid) - { - a2DFill = impDoShadowProjection(rPrimitive.getB3DPolyPolygon()); - } - } - else - { - a2DFill = basegfx::tools::createB2DPolyPolygonFromB3DPolyPolygon(rPrimitive.getB3DPolyPolygon(), getViewInformation3D().getObjectToView()); - } - - if(a2DFill.count()) - { - a2DFill.transform(getObjectTransformation()); - mpPrimitive2DSequence->push_back( - new primitive2d::PolyPolygonColorPrimitive2D( - a2DFill, - maPrimitiveColor)); - } - } - break; - } - default : - { - // process recursively - process(rCandidate.get3DDecomposition(getViewInformation3D())); - break; - } - } - } - - Shadow3DExtractingProcessor::Shadow3DExtractingProcessor( - const geometry::ViewInformation3D& rViewInformation, - const basegfx::B2DHomMatrix& rObjectTransformation, - const basegfx::B3DVector& rLightNormal, - double fShadowSlant, - const basegfx::B3DRange& rContained3DRange) - : BaseProcessor3D(rViewInformation), - maPrimitive2DSequence(), - mpPrimitive2DSequence(&maPrimitive2DSequence), - maObjectTransformation(rObjectTransformation), - maWorldToEye(), - maEyeToView(), - maLightNormal(rLightNormal), - maShadowPlaneNormal(), - maPlanePoint(), - mfLightPlaneScalar(0.0), - maPrimitiveColor(), - mbShadowProjectionIsValid(false), - mbConvert(false), - mbUseProjection(false) - { - // normalize light normal, get and normalize shadow plane normal and calculate scalar from it - maLightNormal.normalize(); - maShadowPlaneNormal = basegfx::B3DVector(0.0, sin(fShadowSlant), cos(fShadowSlant)); - maShadowPlaneNormal.normalize(); - mfLightPlaneScalar = maLightNormal.scalar(maShadowPlaneNormal); - - // use only when scalar is > 0.0, so the light is in front of the object - if(basegfx::fTools::more(mfLightPlaneScalar, 0.0)) - { - // prepare buffered WorldToEye and EyeToView - maWorldToEye = getViewInformation3D().getOrientation() * getViewInformation3D().getObjectTransformation(); - maEyeToView = getViewInformation3D().getDeviceToView() * getViewInformation3D().getProjection(); - - // calculate range to get front edge around which to rotate the shadow's projection - basegfx::B3DRange aContained3DRange(rContained3DRange); - aContained3DRange.transform(getWorldToEye()); - maPlanePoint.setX(maShadowPlaneNormal.getX() < 0.0 ? aContained3DRange.getMinX() : aContained3DRange.getMaxX()); - maPlanePoint.setY(maShadowPlaneNormal.getY() > 0.0 ? aContained3DRange.getMinY() : aContained3DRange.getMaxY()); - maPlanePoint.setZ(aContained3DRange.getMinZ() - (aContained3DRange.getDepth() / 8.0)); - - // set flag that shadow projection is prepared and allowed - mbShadowProjectionIsValid = true; - } - } - - Shadow3DExtractingProcessor::~Shadow3DExtractingProcessor() - { - OSL_ENSURE(0 == maPrimitive2DSequence.size(), - "OOps, someone used Shadow3DExtractingProcessor, but did not fetch the results (!)"); - for(sal_uInt32 a(0); a < maPrimitive2DSequence.size(); a++) - { - delete maPrimitive2DSequence[a]; - } - } - - basegfx::B2DPolygon Shadow3DExtractingProcessor::impDoShadowProjection(const basegfx::B3DPolygon& rSource) - { - basegfx::B2DPolygon aRetval; - - for(sal_uInt32 a(0L); a < rSource.count(); a++) - { - // get point, transform to eye coordinate system - basegfx::B3DPoint aCandidate(rSource.getB3DPoint(a)); - aCandidate *= getWorldToEye(); - - // we are in eye coordinates - // ray is (aCandidate + fCut * maLightNormal) - // plane is (maPlanePoint, maShadowPlaneNormal) - // maLightNormal.scalar(maShadowPlaneNormal) is already in mfLightPlaneScalar and > 0.0 - // get cut point of ray with shadow plane - const double fCut(basegfx::B3DVector(maPlanePoint - aCandidate).scalar(maShadowPlaneNormal) / mfLightPlaneScalar); - aCandidate += maLightNormal * fCut; - - // transform to view, use 2d coordinates - aCandidate *= getEyeToView(); - aRetval.append(basegfx::B2DPoint(aCandidate.getX(), aCandidate.getY())); - } - - // copy closed flag - aRetval.setClosed(rSource.isClosed()); - - return aRetval; - } - - basegfx::B2DPolyPolygon Shadow3DExtractingProcessor::impDoShadowProjection(const basegfx::B3DPolyPolygon& rSource) - { - basegfx::B2DPolyPolygon aRetval; - - for(sal_uInt32 a(0L); a < rSource.count(); a++) - { - aRetval.append(impDoShadowProjection(rSource.getB3DPolygon(a))); - } - - return aRetval; - } - - const primitive2d::Primitive2DSequence Shadow3DExtractingProcessor::getPrimitive2DSequence() const - { - return getPrimitive2DSequenceFromBasePrimitive2DVector(maPrimitive2DSequence); - } - - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/processor3d/zbufferprocessor3d.cxx b/drawinglayer/source/processor3d/zbufferprocessor3d.cxx deleted file mode 100644 index 3e822a4f36..0000000000 --- a/drawinglayer/source/processor3d/zbufferprocessor3d.cxx +++ /dev/null @@ -1,834 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/processor3d/zbufferprocessor3d.hxx> -#include <basegfx/raster/bpixelraster.hxx> -#include <vcl/bmpacc.hxx> -#include <basegfx/raster/rasterconvert3d.hxx> -#include <basegfx/raster/bzpixelraster.hxx> -#include <drawinglayer/attribute/materialattribute3d.hxx> -#include <drawinglayer/texture/texture.hxx> -#include <drawinglayer/primitive3d/drawinglayer_primitivetypes3d.hxx> -#include <drawinglayer/primitive3d/textureprimitive3d.hxx> -#include <drawinglayer/primitive3d/polygonprimitive3d.hxx> -#include <drawinglayer/primitive3d/polypolygonprimitive3d.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> -#include <basegfx/polygon/b3dpolygontools.hxx> -#include <basegfx/polygon/b3dpolypolygontools.hxx> -#include <drawinglayer/attribute/sdrlightingattribute3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -using namespace com::sun::star; - -////////////////////////////////////////////////////////////////////////////// - -namespace -{ - BitmapEx BPixelRasterToBitmapEx(const basegfx::BPixelRaster& rRaster, sal_uInt16 mnAntiAlialize) - { - BitmapEx aRetval; - const sal_uInt32 nWidth(mnAntiAlialize ? rRaster.getWidth()/mnAntiAlialize : rRaster.getWidth()); - const sal_uInt32 nHeight(mnAntiAlialize ? rRaster.getHeight()/mnAntiAlialize : rRaster.getHeight()); - - if(nWidth && nHeight) - { - const Size aDestSize(nWidth, nHeight); - sal_uInt8 nInitAlpha(255); - Bitmap aContent(aDestSize, 24); - AlphaMask aAlpha(aDestSize, &nInitAlpha); - BitmapWriteAccess* pContent = aContent.AcquireWriteAccess(); - BitmapWriteAccess* pAlpha = aAlpha.AcquireWriteAccess(); - - if(pContent && pAlpha) - { - if(mnAntiAlialize) - { - const sal_uInt16 nDivisor(mnAntiAlialize * mnAntiAlialize); - - for(sal_uInt32 y(0L); y < nHeight; y++) - { - for(sal_uInt32 x(0L); x < nWidth; x++) - { - sal_uInt16 nRed(0); - sal_uInt16 nGreen(0); - sal_uInt16 nBlue(0); - sal_uInt16 nOpacity(0); - sal_uInt32 nIndex(rRaster.getIndexFromXY(x * mnAntiAlialize, y * mnAntiAlialize)); - - for(sal_uInt32 c(0); c < mnAntiAlialize; c++) - { - for(sal_uInt32 d(0); d < mnAntiAlialize; d++) - { - const basegfx::BPixel& rPixel(rRaster.getBPixel(nIndex++)); - nRed = nRed + rPixel.getRed(); - nGreen = nGreen + rPixel.getGreen(); - nBlue = nBlue + rPixel.getBlue(); - nOpacity = nOpacity + rPixel.getOpacity(); - } - - nIndex += rRaster.getWidth() - mnAntiAlialize; - } - - nOpacity = nOpacity / nDivisor; - - if(nOpacity) - { - pContent->SetPixel(y, x, BitmapColor( - (sal_uInt8)(nRed / nDivisor), - (sal_uInt8)(nGreen / nDivisor), - (sal_uInt8)(nBlue / nDivisor))); - pAlpha->SetPixel(y, x, BitmapColor(255 - (sal_uInt8)nOpacity)); - } - } - } - } - else - { - sal_uInt32 nIndex(0L); - - for(sal_uInt32 y(0L); y < nHeight; y++) - { - for(sal_uInt32 x(0L); x < nWidth; x++) - { - const basegfx::BPixel& rPixel(rRaster.getBPixel(nIndex++)); - - if(rPixel.getOpacity()) - { - pContent->SetPixel(y, x, BitmapColor(rPixel.getRed(), rPixel.getGreen(), rPixel.getBlue())); - pAlpha->SetPixel(y, x, BitmapColor(255 - rPixel.getOpacity())); - } - } - } - } - - aContent.ReleaseAccess(pContent); - aAlpha.ReleaseAccess(pAlpha); - } - - aRetval = BitmapEx(aContent, aAlpha); - - // #i101811# set PrefMapMode and PrefSize at newly created Bitmap - aRetval.SetPrefMapMode(MAP_100TH_MM); - aRetval.SetPrefSize(Size(nWidth, nHeight)); - } - - return aRetval; - } -} // end of anonymous namespace - -////////////////////////////////////////////////////////////////////////////// - -class ZBufferRasterConverter3D : public basegfx::RasterConverter3D -{ -private: - const drawinglayer::processor3d::DefaultProcessor3D& mrProcessor; - basegfx::BZPixelRaster& mrBuffer; - - // interpolators for a single line span - basegfx::ip_single maIntZ; - basegfx::ip_triple maIntColor; - basegfx::ip_triple maIntNormal; - basegfx::ip_double maIntTexture; - basegfx::ip_triple maIntInvTexture; - - // current material to use for ratsreconversion - const drawinglayer::attribute::MaterialAttribute3D* mpCurrentMaterial; - - // bitfield - // some boolean flags for line span interpolator usages - unsigned mbModifyColor : 1; - unsigned mbUseTex : 1; - unsigned mbHasTexCoor : 1; - unsigned mbHasInvTexCoor : 1; - unsigned mbUseNrm : 1; - unsigned mbUseCol : 1; - - void getTextureCoor(basegfx::B2DPoint& rTarget) const - { - if(mbHasTexCoor) - { - rTarget.setX(maIntTexture.getX().getVal()); - rTarget.setY(maIntTexture.getY().getVal()); - } - else if(mbHasInvTexCoor) - { - const double fZFactor(maIntInvTexture.getZ().getVal()); - const double fInvZFactor(basegfx::fTools::equalZero(fZFactor) ? 1.0 : 1.0 / fZFactor); - rTarget.setX(maIntInvTexture.getX().getVal() * fInvZFactor); - rTarget.setY(maIntInvTexture.getY().getVal() * fInvZFactor); - } - } - - void incrementLineSpanInterpolators(double fStep) - { - maIntZ.increment(fStep); - - if(mbUseTex) - { - if(mbHasTexCoor) - { - maIntTexture.increment(fStep); - } - else if(mbHasInvTexCoor) - { - maIntInvTexture.increment(fStep); - } - } - - if(mbUseNrm) - { - maIntNormal.increment(fStep); - } - - if(mbUseCol) - { - maIntColor.increment(fStep); - } - } - - double decideColorAndOpacity(basegfx::BColor& rColor) - { - // init values with full opacity and material color - OSL_ENSURE(0 != mpCurrentMaterial, "CurrentMaterial not set (!)"); - double fOpacity(1.0); - rColor = mpCurrentMaterial->getColor(); - - if(mbUseTex) - { - basegfx::B2DPoint aTexCoor(0.0, 0.0); - getTextureCoor(aTexCoor); - - if(mrProcessor.getGeoTexSvx().get()) - { - // calc color in spot. This may also set to invisible already when - // e.g. bitmap textures have transparent parts - mrProcessor.getGeoTexSvx()->modifyBColor(aTexCoor, rColor, fOpacity); - } - - if(basegfx::fTools::more(fOpacity, 0.0) && mrProcessor.getTransparenceGeoTexSvx().get()) - { - // calc opacity. Object has a 2nd texture, a transparence texture - mrProcessor.getTransparenceGeoTexSvx()->modifyOpacity(aTexCoor, fOpacity); - } - } - - if(basegfx::fTools::more(fOpacity, 0.0)) - { - if(mrProcessor.getGeoTexSvx().get()) - { - if(mbUseNrm) - { - // blend texture with phong - rColor = mrProcessor.getSdrLightingAttribute().solveColorModel( - basegfx::B3DVector(maIntNormal.getX().getVal(), maIntNormal.getY().getVal(), maIntNormal.getZ().getVal()), - rColor, - mpCurrentMaterial->getSpecular(), - mpCurrentMaterial->getEmission(), - mpCurrentMaterial->getSpecularIntensity()); - } - else if(mbUseCol) - { - // blend texture with gouraud - basegfx::BColor aBlendColor(maIntColor.getX().getVal(), maIntColor.getY().getVal(), maIntColor.getZ().getVal()); - rColor *= aBlendColor; - } - else if(mrProcessor.getModulate()) - { - // blend texture with single material color - rColor *= mpCurrentMaterial->getColor(); - } - } - else - { - if(mbUseNrm) - { - // modify color with phong - rColor = mrProcessor.getSdrLightingAttribute().solveColorModel( - basegfx::B3DVector(maIntNormal.getX().getVal(), maIntNormal.getY().getVal(), maIntNormal.getZ().getVal()), - rColor, - mpCurrentMaterial->getSpecular(), - mpCurrentMaterial->getEmission(), - mpCurrentMaterial->getSpecularIntensity()); - } - else if(mbUseCol) - { - // modify color with gouraud - rColor.setRed(maIntColor.getX().getVal()); - rColor.setGreen(maIntColor.getY().getVal()); - rColor.setBlue(maIntColor.getZ().getVal()); - } - } - - if(mbModifyColor) - { - rColor = mrProcessor.getBColorModifierStack().getModifiedColor(rColor); - } - } - - return fOpacity; - } - - void setupLineSpanInterpolators(const basegfx::RasterConversionLineEntry3D& rA, const basegfx::RasterConversionLineEntry3D& rB) - { - // get inverse XDelta - const double xInvDelta(1.0 / (rB.getX().getVal() - rA.getX().getVal())); - - // prepare Z-interpolator - const double fZA(rA.getZ().getVal()); - const double fZB(rB.getZ().getVal()); - maIntZ = basegfx::ip_single(fZA, (fZB - fZA) * xInvDelta); - - // get bools and init other interpolators on demand accordingly - mbModifyColor = mrProcessor.getBColorModifierStack().count(); - mbHasTexCoor = SCANLINE_EMPTY_INDEX != rA.getTextureIndex() && SCANLINE_EMPTY_INDEX != rB.getTextureIndex(); - mbHasInvTexCoor = SCANLINE_EMPTY_INDEX != rA.getInverseTextureIndex() && SCANLINE_EMPTY_INDEX != rB.getInverseTextureIndex(); - const bool bTextureActive(mrProcessor.getGeoTexSvx().get() || mrProcessor.getTransparenceGeoTexSvx().get()); - mbUseTex = bTextureActive && (mbHasTexCoor || mbHasInvTexCoor || mrProcessor.getSimpleTextureActive()); - const bool bUseColorTex(mbUseTex && mrProcessor.getGeoTexSvx().get()); - const bool bNeedNrmOrCol(!bUseColorTex || (bUseColorTex && mrProcessor.getModulate())); - mbUseNrm = bNeedNrmOrCol && SCANLINE_EMPTY_INDEX != rA.getNormalIndex() && SCANLINE_EMPTY_INDEX != rB.getNormalIndex(); - mbUseCol = !mbUseNrm && bNeedNrmOrCol && SCANLINE_EMPTY_INDEX != rA.getColorIndex() && SCANLINE_EMPTY_INDEX != rB.getColorIndex(); - - if(mbUseTex) - { - if(mbHasTexCoor) - { - const basegfx::ip_double& rTA(getTextureInterpolators()[rA.getTextureIndex()]); - const basegfx::ip_double& rTB(getTextureInterpolators()[rB.getTextureIndex()]); - maIntTexture = basegfx::ip_double( - rTA.getX().getVal(), (rTB.getX().getVal() - rTA.getX().getVal()) * xInvDelta, - rTA.getY().getVal(), (rTB.getY().getVal() - rTA.getY().getVal()) * xInvDelta); - } - else if(mbHasInvTexCoor) - { - const basegfx::ip_triple& rITA(getInverseTextureInterpolators()[rA.getInverseTextureIndex()]); - const basegfx::ip_triple& rITB(getInverseTextureInterpolators()[rB.getInverseTextureIndex()]); - maIntInvTexture = basegfx::ip_triple( - rITA.getX().getVal(), (rITB.getX().getVal() - rITA.getX().getVal()) * xInvDelta, - rITA.getY().getVal(), (rITB.getY().getVal() - rITA.getY().getVal()) * xInvDelta, - rITA.getZ().getVal(), (rITB.getZ().getVal() - rITA.getZ().getVal()) * xInvDelta); - } - } - - if(mbUseNrm) - { - const basegfx::ip_triple& rNA(getNormalInterpolators()[rA.getNormalIndex()]); - const basegfx::ip_triple& rNB(getNormalInterpolators()[rB.getNormalIndex()]); - maIntNormal = basegfx::ip_triple( - rNA.getX().getVal(), (rNB.getX().getVal() - rNA.getX().getVal()) * xInvDelta, - rNA.getY().getVal(), (rNB.getY().getVal() - rNA.getY().getVal()) * xInvDelta, - rNA.getZ().getVal(), (rNB.getZ().getVal() - rNA.getZ().getVal()) * xInvDelta); - } - - if(mbUseCol) - { - const basegfx::ip_triple& rCA(getColorInterpolators()[rA.getColorIndex()]); - const basegfx::ip_triple& rCB(getColorInterpolators()[rB.getColorIndex()]); - maIntColor = basegfx::ip_triple( - rCA.getX().getVal(), (rCB.getX().getVal() - rCA.getX().getVal()) * xInvDelta, - rCA.getY().getVal(), (rCB.getY().getVal() - rCA.getY().getVal()) * xInvDelta, - rCA.getZ().getVal(), (rCB.getZ().getVal() - rCA.getZ().getVal()) * xInvDelta); - } - } - - virtual void processLineSpan(const basegfx::RasterConversionLineEntry3D& rA, const basegfx::RasterConversionLineEntry3D& rB, sal_Int32 nLine, sal_uInt32 nSpanCount); - -public: - ZBufferRasterConverter3D(basegfx::BZPixelRaster& rBuffer, const drawinglayer::processor3d::ZBufferProcessor3D& rProcessor) - : basegfx::RasterConverter3D(), - mrProcessor(rProcessor), - mrBuffer(rBuffer), - maIntZ(), - maIntColor(), - maIntNormal(), - maIntTexture(), - maIntInvTexture(), - mpCurrentMaterial(0), - mbModifyColor(false), - mbUseTex(false), - mbHasTexCoor(false), - mbUseNrm(false), - mbUseCol(false) - {} - - void setCurrentMaterial(const drawinglayer::attribute::MaterialAttribute3D& rMaterial) - { - mpCurrentMaterial = &rMaterial; - } -}; - -void ZBufferRasterConverter3D::processLineSpan(const basegfx::RasterConversionLineEntry3D& rA, const basegfx::RasterConversionLineEntry3D& rB, sal_Int32 nLine, sal_uInt32 nSpanCount) -{ - if(!(nSpanCount & 0x0001)) - { - if(nLine >= 0 && nLine < (sal_Int32)mrBuffer.getHeight()) - { - sal_uInt32 nXA(::std::min(mrBuffer.getWidth(), (sal_uInt32)::std::max((sal_Int32)0, basegfx::fround(rA.getX().getVal())))); - const sal_uInt32 nXB(::std::min(mrBuffer.getWidth(), (sal_uInt32)::std::max((sal_Int32)0, basegfx::fround(rB.getX().getVal())))); - - if(nXA < nXB) - { - // prepare the span interpolators - setupLineSpanInterpolators(rA, rB); - - // bring span interpolators to start condition by incrementing with the possible difference of - // clamped and non-clamped XStart. Interpolators are setup relying on double precision - // X-values, so that difference is the correct value to compensate for possible clampings - incrementLineSpanInterpolators(static_cast<double>(nXA) - rA.getX().getVal()); - - // prepare scanline index - sal_uInt32 nScanlineIndex(mrBuffer.getIndexFromXY(nXA, static_cast<sal_uInt32>(nLine))); - basegfx::BColor aNewColor; - - while(nXA < nXB) - { - // early-test Z values if we need to do anything at all - const double fNewZ(::std::max(0.0, ::std::min((double)0xffff, maIntZ.getVal()))); - const sal_uInt16 nNewZ(static_cast< sal_uInt16 >(fNewZ)); - sal_uInt16& rOldZ(mrBuffer.getZ(nScanlineIndex)); - - if(nNewZ > rOldZ) - { - // detect color and opacity for this pixel - const sal_uInt16 nOpacity(::std::max((sal_Int16)0, static_cast< sal_Int16 >(decideColorAndOpacity(aNewColor) * 255.0))); - - if(nOpacity > 0) - { - // avoid color overrun - aNewColor.clamp(); - - if(nOpacity >= 0x00ff) - { - // full opacity (not transparent), set z and color - rOldZ = nNewZ; - mrBuffer.getBPixel(nScanlineIndex) = basegfx::BPixel(aNewColor, 0xff); - } - else - { - basegfx::BPixel& rDest = mrBuffer.getBPixel(nScanlineIndex); - - if(rDest.getOpacity()) - { - // mix new color by using - // color' = color * (1 - opacity) + newcolor * opacity - const sal_uInt16 nTransparence(0x0100 - nOpacity); - rDest.setRed((sal_uInt8)(((rDest.getRed() * nTransparence) + ((sal_uInt16)(255.0 * aNewColor.getRed()) * nOpacity)) >> 8)); - rDest.setGreen((sal_uInt8)(((rDest.getGreen() * nTransparence) + ((sal_uInt16)(255.0 * aNewColor.getGreen()) * nOpacity)) >> 8)); - rDest.setBlue((sal_uInt8)(((rDest.getBlue() * nTransparence) + ((sal_uInt16)(255.0 * aNewColor.getBlue()) * nOpacity)) >> 8)); - - if(0xff != rDest.getOpacity()) - { - // both are transparent, mix new opacity by using - // opacity = newopacity * (1 - oldopacity) + oldopacity - rDest.setOpacity(((sal_uInt8)((nOpacity * (0x0100 - rDest.getOpacity())) >> 8)) + rDest.getOpacity()); - } - } - else - { - // dest is unused, set color - rDest = basegfx::BPixel(aNewColor, (sal_uInt8)nOpacity); - } - } - } - } - - // increments - nScanlineIndex++; - nXA++; - incrementLineSpanInterpolators(1.0); - } - } - } - } -} - -////////////////////////////////////////////////////////////////////////////// -// helper class to buffer output for transparent rasterprimitives (filled areas -// and lines) until the end of processing. To ensure correct transparent -// visualisation, ZBuffers require to not set Z and to mix with the transparent -// color. If transparent rasterprimitives overlap, it gets necessary to -// paint transparent rasterprimitives from back to front to ensure that the -// mixing happens from back to front. For that purpose, transparent -// rasterprimitives are held in this class during the processing run, remember -// all data and will be rendered - -class RasterPrimitive3D -{ -private: - boost::shared_ptr< drawinglayer::texture::GeoTexSvx > mpGeoTexSvx; - boost::shared_ptr< drawinglayer::texture::GeoTexSvx > mpTransparenceGeoTexSvx; - drawinglayer::attribute::MaterialAttribute3D maMaterial; - basegfx::B3DPolyPolygon maPolyPolygon; - double mfCenterZ; - - // bitfield - bool mbModulate : 1; - bool mbFilter : 1; - bool mbSimpleTextureActive : 1; - bool mbIsLine : 1; - -public: - RasterPrimitive3D( - const boost::shared_ptr< drawinglayer::texture::GeoTexSvx >& pGeoTexSvx, - const boost::shared_ptr< drawinglayer::texture::GeoTexSvx >& pTransparenceGeoTexSvx, - const drawinglayer::attribute::MaterialAttribute3D& rMaterial, - const basegfx::B3DPolyPolygon& rPolyPolygon, - bool bModulate, - bool bFilter, - bool bSimpleTextureActive, - bool bIsLine) - : mpGeoTexSvx(pGeoTexSvx), - mpTransparenceGeoTexSvx(pTransparenceGeoTexSvx), - maMaterial(rMaterial), - maPolyPolygon(rPolyPolygon), - mfCenterZ(basegfx::tools::getRange(rPolyPolygon).getCenter().getZ()), - mbModulate(bModulate), - mbFilter(bFilter), - mbSimpleTextureActive(bSimpleTextureActive), - mbIsLine(bIsLine) - { - } - - RasterPrimitive3D& operator=(const RasterPrimitive3D& rComp) - { - mpGeoTexSvx = rComp.mpGeoTexSvx; - mpTransparenceGeoTexSvx = rComp.mpTransparenceGeoTexSvx; - maMaterial = rComp.maMaterial; - maPolyPolygon = rComp.maPolyPolygon; - mfCenterZ = rComp.mfCenterZ; - mbModulate = rComp.mbModulate; - mbFilter = rComp.mbFilter; - mbSimpleTextureActive = rComp.mbSimpleTextureActive; - mbIsLine = rComp.mbIsLine; - - return *this; - } - - bool operator<(const RasterPrimitive3D& rComp) const - { - return mfCenterZ < rComp.mfCenterZ; - } - - const boost::shared_ptr< drawinglayer::texture::GeoTexSvx >& getGeoTexSvx() const { return mpGeoTexSvx; } - const boost::shared_ptr< drawinglayer::texture::GeoTexSvx >& getTransparenceGeoTexSvx() const { return mpTransparenceGeoTexSvx; } - const drawinglayer::attribute::MaterialAttribute3D& getMaterial() const { return maMaterial; } - const basegfx::B3DPolyPolygon& getPolyPolygon() const { return maPolyPolygon; } - bool getModulate() const { return mbModulate; } - bool getFilter() const { return mbFilter; } - bool getSimpleTextureActive() const { return mbSimpleTextureActive; } - bool getIsLine() const { return mbIsLine; } -}; - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace processor3d - { - void ZBufferProcessor3D::rasterconvertB3DPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolygon& rHairline) const - { - if(mpBZPixelRaster) - { - if(getTransparenceCounter()) - { - // transparent output; record for later sorting and painting from - // back to front - if(!mpRasterPrimitive3Ds) - { - const_cast< ZBufferProcessor3D* >(this)->mpRasterPrimitive3Ds = new std::vector< RasterPrimitive3D >; - } - - mpRasterPrimitive3Ds->push_back(RasterPrimitive3D( - getGeoTexSvx(), - getTransparenceGeoTexSvx(), - rMaterial, - basegfx::B3DPolyPolygon(rHairline), - getModulate(), - getFilter(), - getSimpleTextureActive(), - true)); - } - else - { - // do rasterconversion - mpZBufferRasterConverter3D->setCurrentMaterial(rMaterial); - - if(mnAntiAlialize > 1) - { - const bool bForceLineSnap(getOptionsDrawinglayer().IsAntiAliasing() && getOptionsDrawinglayer().IsSnapHorVerLinesToDiscrete()); - - if(bForceLineSnap) - { - basegfx::B3DHomMatrix aTransform; - basegfx::B3DPolygon aSnappedHairline(rHairline); - const double fScaleDown(1.0 / mnAntiAlialize); - const double fScaleUp(mnAntiAlialize); - - // take oversampling out - aTransform.scale(fScaleDown, fScaleDown, 1.0); - aSnappedHairline.transform(aTransform); - - // snap to integer - aSnappedHairline = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aSnappedHairline); - - // add oversampling again - aTransform.identity(); - aTransform.scale(fScaleUp, fScaleUp, 1.0); - - aSnappedHairline.transform(aTransform); - - mpZBufferRasterConverter3D->rasterconvertB3DPolygon(aSnappedHairline, 0, mpBZPixelRaster->getHeight(), mnAntiAlialize); - } - else - { - mpZBufferRasterConverter3D->rasterconvertB3DPolygon(rHairline, 0, mpBZPixelRaster->getHeight(), mnAntiAlialize); - } - } - else - { - mpZBufferRasterConverter3D->rasterconvertB3DPolygon(rHairline, 0, mpBZPixelRaster->getHeight(), 1); - } - } - } - } - - void ZBufferProcessor3D::rasterconvertB3DPolyPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolyPolygon& rFill) const - { - if(mpBZPixelRaster) - { - if(getTransparenceCounter()) - { - // transparent output; record for later sorting and painting from - // back to front - if(!mpRasterPrimitive3Ds) - { - const_cast< ZBufferProcessor3D* >(this)->mpRasterPrimitive3Ds = new std::vector< RasterPrimitive3D >; - } - - mpRasterPrimitive3Ds->push_back(RasterPrimitive3D( - getGeoTexSvx(), - getTransparenceGeoTexSvx(), - rMaterial, - rFill, - getModulate(), - getFilter(), - getSimpleTextureActive(), - false)); - } - else - { - mpZBufferRasterConverter3D->setCurrentMaterial(rMaterial); - mpZBufferRasterConverter3D->rasterconvertB3DPolyPolygon(rFill, &maInvEyeToView, 0, mpBZPixelRaster->getHeight()); - } - } - } - - ZBufferProcessor3D::ZBufferProcessor3D( - const geometry::ViewInformation3D& rViewInformation3D, - const geometry::ViewInformation2D& rViewInformation2D, - const attribute::SdrSceneAttribute& rSdrSceneAttribute, - const attribute::SdrLightingAttribute& rSdrLightingAttribute, - double fSizeX, - double fSizeY, - const basegfx::B2DRange& rVisiblePart, - sal_uInt16 nAntiAlialize) - : DefaultProcessor3D(rViewInformation3D, rSdrSceneAttribute, rSdrLightingAttribute), - mpBZPixelRaster(0), - maInvEyeToView(), - mpZBufferRasterConverter3D(0), - mnAntiAlialize(nAntiAlialize), - mpRasterPrimitive3Ds(0) - { - // generate ViewSizes - const double fFullViewSizeX((rViewInformation2D.getObjectToViewTransformation() * basegfx::B2DVector(fSizeX, 0.0)).getLength()); - const double fFullViewSizeY((rViewInformation2D.getObjectToViewTransformation() * basegfx::B2DVector(0.0, fSizeY)).getLength()); - const double fViewSizeX(fFullViewSizeX * rVisiblePart.getWidth()); - const double fViewSizeY(fFullViewSizeY * rVisiblePart.getHeight()); - - // generate RasterWidth and RasterHeight - const sal_uInt32 nRasterWidth((sal_uInt32)basegfx::fround(fViewSizeX) + 1); - const sal_uInt32 nRasterHeight((sal_uInt32)basegfx::fround(fViewSizeY) + 1); - - if(nRasterWidth && nRasterHeight) - { - // create view unit buffer - mpBZPixelRaster = new basegfx::BZPixelRaster( - mnAntiAlialize ? nRasterWidth * mnAntiAlialize : nRasterWidth, - mnAntiAlialize ? nRasterHeight * mnAntiAlialize : nRasterHeight); - OSL_ENSURE(mpBZPixelRaster, "ZBufferProcessor3D: Could not allocate basegfx::BZPixelRaster (!)"); - - // create DeviceToView for Z-Buffer renderer since Z is handled - // different from standard 3D transformations (Z is mirrored). Also - // the transformation includes the step from unit device coordinates - // to discrete units ([-1.0 .. 1.0] -> [minDiscrete .. maxDiscrete] - - basegfx::B3DHomMatrix aDeviceToView; - - { - // step one: - // - // bring from [-1.0 .. 1.0] in X,Y and Z to [0.0 .. 1.0]. Also - // necessary to - // - flip Y due to screen orientation - // - flip Z due to Z-Buffer orientation from back to front - - aDeviceToView.scale(0.5, -0.5, -0.5); - aDeviceToView.translate(0.5, 0.5, 0.5); - } - - { - // step two: - // - // bring from [0.0 .. 1.0] in X,Y and Z to view cordinates - // - // #i102611# - // also: scale Z to [1.5 .. 65534.5]. Normally, a range of [0.0 .. 65535.0] - // could be used, but a 'unused' value is needed, so '0' is used what reduces - // the range to [1.0 .. 65535.0]. It has also shown that small numerical errors - // (smaller as basegfx::fTools::mfSmallValue, which is 0.000000001) happen. - // Instead of checking those by basegfx::fTools methods which would cost - // runtime, just add another 0.5 tolerance to the start and end of the Z-Buffer - // range, thus resulting in [1.5 .. 65534.5] - const double fMaxZDepth(65533.0); - aDeviceToView.translate(-rVisiblePart.getMinX(), -rVisiblePart.getMinY(), 0.0); - - if(mnAntiAlialize) - aDeviceToView.scale(fFullViewSizeX * mnAntiAlialize, fFullViewSizeY * mnAntiAlialize, fMaxZDepth); - else - aDeviceToView.scale(fFullViewSizeX, fFullViewSizeY, fMaxZDepth); - - aDeviceToView.translate(0.0, 0.0, 1.5); - } - - // update local ViewInformation3D with own DeviceToView - const geometry::ViewInformation3D aNewViewInformation3D( - getViewInformation3D().getObjectTransformation(), - getViewInformation3D().getOrientation(), - getViewInformation3D().getProjection(), - aDeviceToView, - getViewInformation3D().getViewTime(), - getViewInformation3D().getExtendedInformationSequence()); - updateViewInformation(aNewViewInformation3D); - - // prepare inverse EyeToView transformation. This can be done in constructor - // since changes in object transformations when processing TransformPrimitive3Ds - // do not influence this prepared partial transformation - maInvEyeToView = getViewInformation3D().getDeviceToView() * getViewInformation3D().getProjection(); - maInvEyeToView.invert(); - - // prepare maRasterRange - maRasterRange.reset(); - maRasterRange.expand(basegfx::B2DPoint(0.0, 0.0)); - maRasterRange.expand(basegfx::B2DPoint(mpBZPixelRaster->getWidth(), mpBZPixelRaster->getHeight())); - - // create the raster converter - mpZBufferRasterConverter3D = new ZBufferRasterConverter3D(*mpBZPixelRaster, *this); - } - } - - ZBufferProcessor3D::~ZBufferProcessor3D() - { - if(mpBZPixelRaster) - { - delete mpZBufferRasterConverter3D; - delete mpBZPixelRaster; - } - - if(mpRasterPrimitive3Ds) - { - OSL_FAIL("ZBufferProcessor3D: destructed, but there are unrendered transparent geometries. Use ZBufferProcessor3D::finish() to render these (!)"); - delete mpRasterPrimitive3Ds; - } - } - - void ZBufferProcessor3D::finish() - { - if(mpRasterPrimitive3Ds) - { - // there are transparent rasterprimitives - const sal_uInt32 nSize(mpRasterPrimitive3Ds->size()); - - if(nSize > 1) - { - // sort them from back to front - std::sort(mpRasterPrimitive3Ds->begin(), mpRasterPrimitive3Ds->end()); - } - - for(sal_uInt32 a(0); a < nSize; a++) - { - // paint each one by setting the remembered data and calling - // the render method - const RasterPrimitive3D& rCandidate = (*mpRasterPrimitive3Ds)[a]; - - mpGeoTexSvx = rCandidate.getGeoTexSvx(); - mpTransparenceGeoTexSvx = rCandidate.getTransparenceGeoTexSvx(); - mbModulate = rCandidate.getModulate(); - mbFilter = rCandidate.getFilter(); - mbSimpleTextureActive = rCandidate.getSimpleTextureActive(); - - if(rCandidate.getIsLine()) - { - rasterconvertB3DPolygon( - rCandidate.getMaterial(), - rCandidate.getPolyPolygon().getB3DPolygon(0)); - } - else - { - rasterconvertB3DPolyPolygon( - rCandidate.getMaterial(), - rCandidate.getPolyPolygon()); - } - } - - // delete them to signal the destructor that all is done and - // to allow asserting there - delete mpRasterPrimitive3Ds; - mpRasterPrimitive3Ds = 0; - } - } - - BitmapEx ZBufferProcessor3D::getBitmapEx() const - { - if(mpBZPixelRaster) - { - return BPixelRasterToBitmapEx(*mpBZPixelRaster, mnAntiAlialize); - } - - return BitmapEx(); - } - } // end of namespace processor3d -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/texture/texture.cxx b/drawinglayer/source/texture/texture.cxx deleted file mode 100644 index f3b2db62ad..0000000000 --- a/drawinglayer/source/texture/texture.cxx +++ /dev/null @@ -1,647 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/texture/texture.hxx> -#include <basegfx/numeric/ftools.hxx> -#include <basegfx/tools/gradienttools.hxx> -#include <basegfx/matrix/b2dhommatrixtools.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvx::GeoTexSvx() - { - } - - GeoTexSvx::~GeoTexSvx() - { - } - - bool GeoTexSvx::operator==(const GeoTexSvx& /*rGeoTexSvx*/) const - { - // default implementation says yes (no data -> no difference) - return true; - } - - void GeoTexSvx::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& /*rMatrices*/) - { - // default implementation does nothing - } - - void GeoTexSvx::modifyBColor(const basegfx::B2DPoint& /*rUV*/, basegfx::BColor& rBColor, double& /*rfOpacity*/) const - { - // base implementation creates random color (for testing only, may also be pure virtual) - rBColor.setRed((rand() & 0x7fff) / 32767.0); - rBColor.setGreen((rand() & 0x7fff) / 32767.0); - rBColor.setBlue((rand() & 0x7fff) / 32767.0); - } - - void GeoTexSvx::modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const - { - // base implementation uses inverse of luminance of solved color (for testing only, may also be pure virtual) - basegfx::BColor aBaseColor; - modifyBColor(rUV, aBaseColor, rfOpacity); - rfOpacity = 1.0 - aBaseColor.luminance(); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - void GeoTexSvxGradient::impAppendMatrix(::std::vector< basegfx::B2DHomMatrix >& rMatrices, const basegfx::B2DRange& rRange) - { - basegfx::B2DHomMatrix aNew; - aNew.set(0, 0, rRange.getWidth()); - aNew.set(1, 1, rRange.getHeight()); - aNew.set(0, 2, rRange.getMinX()); - aNew.set(1, 2, rRange.getMinY()); - rMatrices.push_back(maGradientInfo.maTextureTransform * aNew); - } - - void GeoTexSvxGradient::impAppendColorsRadial(::std::vector< basegfx::BColor >& rColors) - { - if(maGradientInfo.mnSteps) - { - rColors.push_back(maStart); - - for(sal_uInt32 a(1L); a < maGradientInfo.mnSteps - 1L; a++) - { - rColors.push_back(interpolate(maStart, maEnd, (double)a / (double)maGradientInfo.mnSteps)); - } - - rColors.push_back(maEnd); - } - } - - GeoTexSvxGradient::GeoTexSvxGradient(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder) - : maTargetRange(rTargetRange), - maStart(rStart), - maEnd(rEnd), - mfBorder(fBorder) - { - maGradientInfo.mnSteps = nSteps; - maGradientInfo.mfAspectRatio = 1.0; - } - - GeoTexSvxGradient::~GeoTexSvxGradient() - { - } - - bool GeoTexSvxGradient::operator==(const GeoTexSvx& rGeoTexSvx) const - { - const GeoTexSvxGradient* pCompare = dynamic_cast< const GeoTexSvxGradient* >(&rGeoTexSvx); - return (pCompare - && maGradientInfo.maTextureTransform == pCompare->maGradientInfo.maTextureTransform - && maTargetRange == pCompare->maTargetRange - && maGradientInfo.mnSteps == pCompare->maGradientInfo.mnSteps - && maGradientInfo.mfAspectRatio == pCompare->maGradientInfo.mfAspectRatio - && mfBorder == pCompare->mfBorder); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxGradientLinear::GeoTexSvxGradientLinear(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fAngle) - : GeoTexSvxGradient(rTargetRange, rStart, rEnd, nSteps, fBorder) - { - basegfx::tools::createLinearODFGradientInfo(maGradientInfo, - rTargetRange, - nSteps, - fBorder, - fAngle); - } - - GeoTexSvxGradientLinear::~GeoTexSvxGradientLinear() - { - } - - void GeoTexSvxGradientLinear::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) - { - if(maGradientInfo.mnSteps) - { - const double fStripeWidth(1.0 / maGradientInfo.mnSteps); - for(sal_uInt32 a(1L); a < maGradientInfo.mnSteps; a++) - { - const basegfx::B2DRange aRect(0.0, fStripeWidth * a, 1.0, 1.0); - impAppendMatrix(rMatrices, aRect); - } - } - } - - void GeoTexSvxGradientLinear::appendColors(::std::vector< basegfx::BColor >& rColors) - { - if(maGradientInfo.mnSteps) - { - rColors.push_back(maStart); - - for(sal_uInt32 a(1L); a < maGradientInfo.mnSteps; a++) - { - rColors.push_back(interpolate(maStart, maEnd, (double)a / (double)(maGradientInfo.mnSteps + 1L))); - } - } - } - - void GeoTexSvxGradientLinear::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& /*rfOpacity*/) const - { - const double fScaler(basegfx::tools::getLinearGradientAlpha(rUV, maGradientInfo)); - - rBColor = (maStart * (1.0 - fScaler)) + (maEnd * fScaler); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxGradientAxial::GeoTexSvxGradientAxial(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fAngle) - : GeoTexSvxGradient(rTargetRange, rStart, rEnd, nSteps, fBorder) - { - basegfx::tools::createAxialODFGradientInfo(maGradientInfo, - rTargetRange, - nSteps, - fBorder, - fAngle); - } - - GeoTexSvxGradientAxial::~GeoTexSvxGradientAxial() - { - } - - void GeoTexSvxGradientAxial::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) - { - if(maGradientInfo.mnSteps) - { - const double fStripeWidth=1.0 / (maGradientInfo.mnSteps - 1L); - for(sal_uInt32 a(maGradientInfo.mnSteps-1L); a != 0; a--) - { - const basegfx::B2DRange aRect(0, 0, 1.0, fStripeWidth * a); - impAppendMatrix(rMatrices, aRect); - } - } - } - - void GeoTexSvxGradientAxial::appendColors(::std::vector< basegfx::BColor >& rColors) - { - if(maGradientInfo.mnSteps) - { - rColors.push_back(maEnd); - - for(sal_uInt32 a(1L); a < maGradientInfo.mnSteps; a++) - { - rColors.push_back(interpolate(maEnd, maStart, (double)a / (double)maGradientInfo.mnSteps)); - } - } - } - - void GeoTexSvxGradientAxial::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& /*rfOpacity*/) const - { - const double fScaler(basegfx::tools::getAxialGradientAlpha(rUV, maGradientInfo)); - - rBColor = (maStart * (1.0 - fScaler)) + (maEnd * fScaler); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxGradientRadial::GeoTexSvxGradientRadial(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fOffsetX, double fOffsetY) - : GeoTexSvxGradient(rTargetRange, rStart, rEnd, nSteps, fBorder) - { - basegfx::tools::createRadialODFGradientInfo(maGradientInfo, - rTargetRange, - basegfx::B2DVector(fOffsetX,fOffsetY), - nSteps, - fBorder); - } - - GeoTexSvxGradientRadial::~GeoTexSvxGradientRadial() - { - } - - void GeoTexSvxGradientRadial::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) - { - if(maGradientInfo.mnSteps) - { - const double fStepSize=1.0 / maGradientInfo.mnSteps; - for(sal_uInt32 a(maGradientInfo.mnSteps-1L); a > 0; a--) - { - const basegfx::B2DRange aRect(0, 0, fStepSize*a, fStepSize*a); - impAppendMatrix(rMatrices, aRect); - } - } - } - - void GeoTexSvxGradientRadial::appendColors(::std::vector< basegfx::BColor >& rColors) - { - impAppendColorsRadial(rColors); - } - - void GeoTexSvxGradientRadial::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& /*rfOpacity*/) const - { - const double fScaler(basegfx::tools::getRadialGradientAlpha(rUV, maGradientInfo)); - - rBColor = (maStart * (1.0 - fScaler)) + (maEnd * fScaler); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxGradientElliptical::GeoTexSvxGradientElliptical(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fOffsetX, double fOffsetY, double fAngle) - : GeoTexSvxGradient(rTargetRange, rStart, rEnd, nSteps, fBorder) - { - basegfx::tools::createEllipticalODFGradientInfo(maGradientInfo, - rTargetRange, - basegfx::B2DVector(fOffsetX,fOffsetY), - nSteps, - fBorder, - fAngle); - } - - GeoTexSvxGradientElliptical::~GeoTexSvxGradientElliptical() - { - } - - void GeoTexSvxGradientElliptical::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) - { - if(maGradientInfo.mnSteps) - { - double fWidth(1); - double fHeight(1); - double fIncrementX, fIncrementY; - - if(maGradientInfo.mfAspectRatio > 1.0) - { - fIncrementY = fHeight / maGradientInfo.mnSteps; - fIncrementX = fIncrementY / maGradientInfo.mfAspectRatio; - } - else - { - fIncrementX = fWidth / maGradientInfo.mnSteps; - fIncrementY = fIncrementX * maGradientInfo.mfAspectRatio; - } - - for(sal_uInt32 a(1L); a < maGradientInfo.mnSteps; a++) - { - // next step - fWidth -= fIncrementX; - fHeight -= fIncrementY; - - // create matrix - const basegfx::B2DRange aRect(0, 0, fWidth, fHeight); - impAppendMatrix(rMatrices, aRect); - } - } - } - - void GeoTexSvxGradientElliptical::appendColors(::std::vector< basegfx::BColor >& rColors) - { - impAppendColorsRadial(rColors); - } - - void GeoTexSvxGradientElliptical::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& /*rfOpacity*/) const - { - const double fScaler(basegfx::tools::getEllipticalGradientAlpha(rUV, maGradientInfo)); - - rBColor = (maStart * (1.0 - fScaler)) + (maEnd * fScaler); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxGradientSquare::GeoTexSvxGradientSquare(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fOffsetX, double fOffsetY, double fAngle) - : GeoTexSvxGradient(rTargetRange, rStart, rEnd, nSteps, fBorder) - { - basegfx::tools::createSquareODFGradientInfo(maGradientInfo, - rTargetRange, - basegfx::B2DVector(fOffsetX,fOffsetY), - nSteps, - fBorder, - fAngle); - } - - GeoTexSvxGradientSquare::~GeoTexSvxGradientSquare() - { - } - - void GeoTexSvxGradientSquare::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) - { - if(maGradientInfo.mnSteps) - { - const double fStepSize=1.0 / maGradientInfo.mnSteps; - for(sal_uInt32 a(maGradientInfo.mnSteps-1L); a > 0; a--) - { - const basegfx::B2DRange aRect(0, 0, fStepSize*a, fStepSize*a); - impAppendMatrix(rMatrices, aRect); - } - } - } - - void GeoTexSvxGradientSquare::appendColors(::std::vector< basegfx::BColor >& rColors) - { - impAppendColorsRadial(rColors); - } - - void GeoTexSvxGradientSquare::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& /*rfOpacity*/) const - { - const double fScaler(basegfx::tools::getSquareGradientAlpha(rUV, maGradientInfo)); - - rBColor = (maStart * (1.0 - fScaler)) + (maEnd * fScaler); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxGradientRect::GeoTexSvxGradientRect(const basegfx::B2DRange& rTargetRange, const basegfx::BColor& rStart, const basegfx::BColor& rEnd, sal_uInt32 nSteps, double fBorder, double fOffsetX, double fOffsetY, double fAngle) - : GeoTexSvxGradient(rTargetRange, rStart, rEnd, nSteps, fBorder) - { - basegfx::tools::createRectangularODFGradientInfo(maGradientInfo, - rTargetRange, - basegfx::B2DVector(fOffsetX,fOffsetY), - nSteps, - fBorder, - fAngle); - } - - GeoTexSvxGradientRect::~GeoTexSvxGradientRect() - { - } - - void GeoTexSvxGradientRect::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) - { - if(maGradientInfo.mnSteps) - { - double fWidth(1); - double fHeight(1); - double fIncrementX, fIncrementY; - - if(maGradientInfo.mfAspectRatio > 1.0) - { - fIncrementY = fHeight / maGradientInfo.mnSteps; - fIncrementX = fIncrementY / maGradientInfo.mfAspectRatio; - } - else - { - fIncrementX = fWidth / maGradientInfo.mnSteps; - fIncrementY = fIncrementX * maGradientInfo.mfAspectRatio; - } - - for(sal_uInt32 a(1L); a < maGradientInfo.mnSteps; a++) - { - // next step - fWidth -= fIncrementX; - fHeight -= fIncrementY; - - // create matrix - const basegfx::B2DRange aRect(0, 0, fWidth, fHeight); - impAppendMatrix(rMatrices, aRect); - } - } - } - - void GeoTexSvxGradientRect::appendColors(::std::vector< basegfx::BColor >& rColors) - { - impAppendColorsRadial(rColors); - } - - void GeoTexSvxGradientRect::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& /*rfOpacity*/) const - { - const double fScaler(basegfx::tools::getRectangularGradientAlpha(rUV, maGradientInfo)); - - rBColor = (maStart * (1.0 - fScaler)) + (maEnd * fScaler); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxHatch::GeoTexSvxHatch(const basegfx::B2DRange& rTargetRange, double fDistance, double fAngle) - : mfDistance(0.1), - mfAngle(fAngle), - mnSteps(10L) - { - double fTargetSizeX(rTargetRange.getWidth()); - double fTargetSizeY(rTargetRange.getHeight()); - double fTargetOffsetX(rTargetRange.getMinX()); - double fTargetOffsetY(rTargetRange.getMinY()); - - fAngle = -fAngle; - - // add object expansion - if(0.0 != fAngle) - { - const double fAbsCos(fabs(cos(fAngle))); - const double fAbsSin(fabs(sin(fAngle))); - const double fNewX(fTargetSizeX * fAbsCos + fTargetSizeY * fAbsSin); - const double fNewY(fTargetSizeY * fAbsCos + fTargetSizeX * fAbsSin); - fTargetOffsetX -= (fNewX - fTargetSizeX) / 2.0; - fTargetOffsetY -= (fNewY - fTargetSizeY) / 2.0; - fTargetSizeX = fNewX; - fTargetSizeY = fNewY; - } - - // add object scale before rotate - maTextureTransform.scale(fTargetSizeX, fTargetSizeY); - - // add texture rotate after scale to keep perpendicular angles - if(0.0 != fAngle) - { - basegfx::B2DPoint aCenter(0.5, 0.5); - aCenter *= maTextureTransform; - - maTextureTransform = basegfx::tools::createRotateAroundPoint(aCenter, fAngle) - * maTextureTransform; - } - - // add object translate - maTextureTransform.translate(fTargetOffsetX, fTargetOffsetY); - - // prepare height for texture - const double fSteps((0.0 != fDistance) ? fTargetSizeY / fDistance : 10.0); - mnSteps = basegfx::fround(fSteps + 0.5); - mfDistance = 1.0 / fSteps; - - // build transform from u,v to [0.0 .. 1.0]. As base, use inverse texture transform - maBackTextureTransform = maTextureTransform; - maBackTextureTransform.invert(); - } - - GeoTexSvxHatch::~GeoTexSvxHatch() - { - } - - bool GeoTexSvxHatch::operator==(const GeoTexSvx& rGeoTexSvx) const - { - const GeoTexSvxHatch* pCompare = dynamic_cast< const GeoTexSvxHatch* >(&rGeoTexSvx); - return (pCompare - && maTextureTransform == pCompare->maTextureTransform - && mfDistance == pCompare->mfDistance - && mfAngle == pCompare->mfAngle - && mnSteps == pCompare->mnSteps); - } - - void GeoTexSvxHatch::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) - { - for(sal_uInt32 a(1L); a < mnSteps; a++) - { - // create matrix - const double fOffset(mfDistance * (double)a); - basegfx::B2DHomMatrix aNew; - aNew.set(1, 2, fOffset); - rMatrices.push_back(maTextureTransform * aNew); - } - } - - double GeoTexSvxHatch::getDistanceToHatch(const basegfx::B2DPoint& rUV) const - { - const basegfx::B2DPoint aCoor(maBackTextureTransform * rUV); - return fmod(aCoor.getY(), mfDistance); - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxTiled::GeoTexSvxTiled(const basegfx::B2DPoint& rTopLeft, const basegfx::B2DVector& rSize) - : maTopLeft(rTopLeft), - maSize(rSize) - { - if(basegfx::fTools::lessOrEqual(maSize.getX(), 0.0)) - { - maSize.setX(1.0); - } - - if(basegfx::fTools::lessOrEqual(maSize.getY(), 0.0)) - { - maSize.setY(1.0); - } - } - - GeoTexSvxTiled::~GeoTexSvxTiled() - { - } - - bool GeoTexSvxTiled::operator==(const GeoTexSvx& rGeoTexSvx) const - { - const GeoTexSvxTiled* pCompare = dynamic_cast< const GeoTexSvxTiled* >(&rGeoTexSvx); - return (pCompare - && maTopLeft == pCompare->maTopLeft - && maSize == pCompare->maSize); - } - - void GeoTexSvxTiled::appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) - { - double fStartX(maTopLeft.getX()); - double fStartY(maTopLeft.getY()); - - if(basegfx::fTools::more(fStartX, 0.0)) - { - fStartX -= (floor(fStartX / maSize.getX()) + 1.0) * maSize.getX(); - } - - if(basegfx::fTools::less(fStartX + maSize.getX(), 0.0)) - { - fStartX += floor(-fStartX / maSize.getX()) * maSize.getX(); - } - - if(basegfx::fTools::more(fStartY, 0.0)) - { - fStartY -= (floor(fStartY / maSize.getY()) + 1.0) * maSize.getY(); - } - - if(basegfx::fTools::less(fStartY + maSize.getY(), 0.0)) - { - fStartY += floor(-fStartY / maSize.getY()) * maSize.getY(); - } - - for(double fPosY(fStartY); basegfx::fTools::less(fPosY, 1.0); fPosY += maSize.getY()) - { - for(double fPosX(fStartX); basegfx::fTools::less(fPosX, 1.0); fPosX += maSize.getX()) - { - basegfx::B2DHomMatrix aNew; - - aNew.set(0, 0, maSize.getX()); - aNew.set(1, 1, maSize.getY()); - aNew.set(0, 2, fPosX); - aNew.set(1, 2, fPosY); - - rMatrices.push_back(aNew); - } - } - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/texture/texture3d.cxx b/drawinglayer/source/texture/texture3d.cxx deleted file mode 100644 index f93e85fd91..0000000000 --- a/drawinglayer/source/texture/texture3d.cxx +++ /dev/null @@ -1,265 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_drawinglayer.hxx" - -#include <drawinglayer/texture/texture3d.hxx> -#include <vcl/bmpacc.hxx> -#include <drawinglayer/primitive3d/hatchtextureprimitive3d.hxx> - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxMono::GeoTexSvxMono(const basegfx::BColor& rSingleColor, double fOpacity) - : maSingleColor(rSingleColor), - mfOpacity(fOpacity) - { - } - - bool GeoTexSvxMono::operator==(const GeoTexSvx& rGeoTexSvx) const - { - const GeoTexSvxMono* pCompare = dynamic_cast< const GeoTexSvxMono* >(&rGeoTexSvx); - return (pCompare - && maSingleColor == pCompare->maSingleColor - && mfOpacity == pCompare->mfOpacity); - } - - void GeoTexSvxMono::modifyBColor(const basegfx::B2DPoint& /*rUV*/, basegfx::BColor& rBColor, double& /*rfOpacity*/) const - { - rBColor = maSingleColor; - } - - void GeoTexSvxMono::modifyOpacity(const basegfx::B2DPoint& /*rUV*/, double& rfOpacity) const - { - rfOpacity = mfOpacity; - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxBitmap::GeoTexSvxBitmap(const Bitmap& rBitmap, const basegfx::B2DPoint& rTopLeft, const basegfx::B2DVector& rSize) - : maBitmap(rBitmap), - mpRead(0L), - maTopLeft(rTopLeft), - maSize(rSize), - mfMulX(0.0), - mfMulY(0.0) - { - mpRead = maBitmap.AcquireReadAccess(); - OSL_ENSURE(mpRead, "GeoTexSvxBitmap: Got no read access to Bitmap (!)"); - mfMulX = (double)mpRead->Width() / maSize.getX(); - mfMulY = (double)mpRead->Height() / maSize.getY(); - } - - GeoTexSvxBitmap::~GeoTexSvxBitmap() - { - delete mpRead; - } - - bool GeoTexSvxBitmap::impIsValid(const basegfx::B2DPoint& rUV, sal_Int32& rX, sal_Int32& rY) const - { - if(mpRead) - { - rX = (sal_Int32)((rUV.getX() - maTopLeft.getX()) * mfMulX); - - if(rX >= 0L && rX < mpRead->Width()) - { - rY = (sal_Int32)((rUV.getY() - maTopLeft.getY()) * mfMulY); - - return (rY >= 0L && rY < mpRead->Height()); - } - } - - return false; - } - - void GeoTexSvxBitmap::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const - { - sal_Int32 nX, nY; - - if(impIsValid(rUV, nX, nY)) - { - const double fConvertColor(1.0 / 255.0); - const BitmapColor aBMCol(mpRead->GetColor(nY, nX)); - const basegfx::BColor aBSource( - (double)aBMCol.GetRed() * fConvertColor, - (double)aBMCol.GetGreen() * fConvertColor, - (double)aBMCol.GetBlue() * fConvertColor); - - rBColor = aBSource; - } - else - { - rfOpacity = 0.0; - } - } - - void GeoTexSvxBitmap::modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const - { - sal_Int32 nX, nY; - - if(impIsValid(rUV, nX, nY)) - { - const BitmapColor aBMCol(mpRead->GetColor(nY, nX)); - const Color aColor(aBMCol.GetRed(), aBMCol.GetGreen(), aBMCol.GetBlue()); - - rfOpacity = ((double)(0xff - aColor.GetLuminance()) * (1.0 / 255.0)); - } - else - { - rfOpacity = 0.0; - } - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxBitmapTiled::GeoTexSvxBitmapTiled(const Bitmap& rBitmap, const basegfx::B2DPoint& rTopLeft, const basegfx::B2DVector& rSize) - : GeoTexSvxBitmap(rBitmap, rTopLeft, rSize) - { - } - - void GeoTexSvxBitmapTiled::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const - { - if(mpRead) - { - GeoTexSvxBitmap::modifyBColor(impGetCorrected(rUV), rBColor, rfOpacity); - } - } - - void GeoTexSvxBitmapTiled::modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const - { - if(mpRead) - { - GeoTexSvxBitmap::modifyOpacity(impGetCorrected(rUV), rfOpacity); - } - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// - -namespace drawinglayer -{ - namespace texture - { - GeoTexSvxMultiHatch::GeoTexSvxMultiHatch(const primitive3d::HatchTexturePrimitive3D& rPrimitive, double fLogicPixelSize) - : mfLogicPixelSize(fLogicPixelSize), - mp0(0L), - mp1(0L), - mp2(0L) - { - const attribute::FillHatchAttribute& rHatch(rPrimitive.getHatch()); - const basegfx::B2DRange aOutlineRange(0.0, 0.0, rPrimitive.getTextureSize().getX(), rPrimitive.getTextureSize().getY()); - const double fAngleA(rHatch.getAngle()); - maColor = rHatch.getColor(); - mbFillBackground = rHatch.isFillBackground(); - mp0 = new GeoTexSvxHatch(aOutlineRange, rHatch.getDistance(), fAngleA); - - if(attribute::HATCHSTYLE_DOUBLE == rHatch.getStyle() || attribute::HATCHSTYLE_TRIPLE == rHatch.getStyle()) - { - mp1 = new GeoTexSvxHatch(aOutlineRange, rHatch.getDistance(), fAngleA + F_PI2); - } - - if(attribute::HATCHSTYLE_TRIPLE == rHatch.getStyle()) - { - mp2 = new GeoTexSvxHatch(aOutlineRange, rHatch.getDistance(), fAngleA + F_PI4); - } - } - - GeoTexSvxMultiHatch::~GeoTexSvxMultiHatch() - { - delete mp0; - delete mp1; - delete mp2; - } - - bool GeoTexSvxMultiHatch::impIsOnHatch(const basegfx::B2DPoint& rUV) const - { - if(mp0->getDistanceToHatch(rUV) < mfLogicPixelSize) - { - return true; - } - - if(mp1 && mp1->getDistanceToHatch(rUV) < mfLogicPixelSize) - { - return true; - } - - if(mp2 && mp2->getDistanceToHatch(rUV) < mfLogicPixelSize) - { - return true; - } - - return false; - } - - void GeoTexSvxMultiHatch::modifyBColor(const basegfx::B2DPoint& rUV, basegfx::BColor& rBColor, double& rfOpacity) const - { - if(impIsOnHatch(rUV)) - { - rBColor = maColor; - } - else if(!mbFillBackground) - { - rfOpacity = 0.0; - } - } - - void GeoTexSvxMultiHatch::modifyOpacity(const basegfx::B2DPoint& rUV, double& rfOpacity) const - { - if(mbFillBackground || impIsOnHatch(rUV)) - { - rfOpacity = 1.0; - } - else - { - rfOpacity = 0.0; - } - } - } // end of namespace texture -} // end of namespace drawinglayer - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/util/drawinglayer.flt b/drawinglayer/util/drawinglayer.flt deleted file mode 100755 index 28a1dd1b65..0000000000 --- a/drawinglayer/util/drawinglayer.flt +++ /dev/null @@ -1,4 +0,0 @@ -__CT -Impl -IMP -internal
\ No newline at end of file |