Repository.mk | 3 bin/find-can-be-private-symbols.functions.results | 2 bin/find-mergedlib-can-be-private-symbols.functions.results | 6 canvas/Library_cairocanvas.mk | 75 canvas/Library_directx9canvas.mk | 69 canvas/Library_gdipluscanvas.mk | 60 canvas/Module_canvas.mk | 14 canvas/StaticLibrary_directxcanvas.mk | 41 canvas/inc/pch/precompiled_cairocanvas.hxx | 89 canvas/source/cairo/cairo_cachedbitmap.cxx | 77 canvas/source/cairo/cairo_cachedbitmap.hxx | 58 canvas/source/cairo/cairo_canvas.cxx | 189 - canvas/source/cairo/cairo_canvas.hxx | 142 canvas/source/cairo/cairo_canvasbitmap.cxx | 163 canvas/source/cairo/cairo_canvasbitmap.hxx | 125 canvas/source/cairo/cairo_canvascustomsprite.cxx | 151 canvas/source/cairo/cairo_canvascustomsprite.hxx | 145 canvas/source/cairo/cairo_canvasfont.cxx | 161 canvas/source/cairo/cairo_canvasfont.hxx | 84 canvas/source/cairo/cairo_canvashelper.cxx | 2045 ------------ canvas/source/cairo/cairo_canvashelper.hxx | 271 - canvas/source/cairo/cairo_canvashelper_text.cxx | 303 - canvas/source/cairo/cairo_devicehelper.cxx | 257 - canvas/source/cairo/cairo_devicehelper.hxx | 122 canvas/source/cairo/cairo_repainttarget.hxx | 48 canvas/source/cairo/cairo_sprite.hxx | 65 canvas/source/cairo/cairo_spritecanvas.cxx | 232 - canvas/source/cairo/cairo_spritecanvas.hxx | 159 canvas/source/cairo/cairo_spritecanvashelper.cxx | 518 --- canvas/source/cairo/cairo_spritecanvashelper.hxx | 140 canvas/source/cairo/cairo_spritedevicehelper.cxx | 153 canvas/source/cairo/cairo_spritedevicehelper.hxx | 77 canvas/source/cairo/cairo_spritehelper.cxx | 195 - canvas/source/cairo/cairo_spritehelper.hxx | 102 canvas/source/cairo/cairo_surfaceprovider.hxx | 70 canvas/source/cairo/cairo_textlayout.cxx | 363 -- canvas/source/cairo/cairo_textlayout.hxx | 107 canvas/source/cairo/cairocanvas.component | 30 canvas/source/directx/directx9canvas.component | 26 canvas/source/directx/dx_9rm.cxx | 1201 ------- canvas/source/directx/dx_bitmap.cxx | 204 - canvas/source/directx/dx_bitmap.hxx | 82 canvas/source/directx/dx_bitmapcanvashelper.cxx | 221 - canvas/source/directx/dx_bitmapcanvashelper.hxx | 126 canvas/source/directx/dx_bitmapprovider.hxx | 34 canvas/source/directx/dx_canvas.cxx | 256 - canvas/source/directx/dx_canvas.hxx | 173 - canvas/source/directx/dx_canvasbitmap.cxx | 257 - canvas/source/directx/dx_canvasbitmap.hxx | 91 canvas/source/directx/dx_canvascustomsprite.cxx | 106 canvas/source/directx/dx_canvascustomsprite.hxx | 130 canvas/source/directx/dx_canvasfont.cxx | 162 canvas/source/directx/dx_canvasfont.hxx | 92 canvas/source/directx/dx_canvashelper.cxx | 813 ---- canvas/source/directx/dx_canvashelper.hxx | 252 - canvas/source/directx/dx_canvashelper_texturefill.cxx | 608 --- canvas/source/directx/dx_config.cxx | 152 canvas/source/directx/dx_config.hxx | 80 canvas/source/directx/dx_devicehelper.cxx | 198 - canvas/source/directx/dx_devicehelper.hxx | 114 canvas/source/directx/dx_gdiplususer.cxx | 74 canvas/source/directx/dx_gdiplususer.hxx | 45 canvas/source/directx/dx_graphicsprovider.hxx | 46 canvas/source/directx/dx_ibitmap.hxx | 62 canvas/source/directx/dx_impltools.cxx | 629 --- canvas/source/directx/dx_impltools.hxx | 124 canvas/source/directx/dx_linepolypolygon.cxx | 59 canvas/source/directx/dx_linepolypolygon.hxx | 47 canvas/source/directx/dx_rendermodule.hxx | 80 canvas/source/directx/dx_sprite.hxx | 45 canvas/source/directx/dx_spritecanvas.cxx | 192 - canvas/source/directx/dx_spritecanvas.hxx | 155 canvas/source/directx/dx_spritecanvashelper.cxx | 352 -- canvas/source/directx/dx_spritecanvashelper.hxx | 152 canvas/source/directx/dx_spritedevicehelper.cxx | 221 - canvas/source/directx/dx_spritedevicehelper.hxx | 98 canvas/source/directx/dx_spritehelper.cxx | 199 - canvas/source/directx/dx_spritehelper.hxx | 102 canvas/source/directx/dx_surfacebitmap.cxx | 654 --- canvas/source/directx/dx_surfacebitmap.hxx | 135 canvas/source/directx/dx_surfacegraphics.cxx | 77 canvas/source/directx/dx_surfacegraphics.hxx | 36 canvas/source/directx/dx_textlayout.cxx | 253 - canvas/source/directx/dx_textlayout.hxx | 107 canvas/source/directx/dx_textlayout_drawhelper.cxx | 312 - canvas/source/directx/dx_textlayout_drawhelper.hxx | 78 canvas/source/directx/dx_vcltools.cxx | 309 - canvas/source/directx/dx_vcltools.hxx | 47 canvas/source/directx/dx_winstuff.hxx | 71 canvas/source/directx/gdipluscanvas.component | 30 compilerplugins/clang/unusedfields.readonly.results | 4 compilerplugins/clang/virtualdead.unusedparams.results | 3 cppcanvas/CppunitTest_cppcanvas_emfplus.mk | 1 cppcanvas/CppunitTest_cppcanvas_test.mk | 1 include/vcl/BitmapTools.hxx | 6 include/vcl/bitmap.hxx | 21 include/vcl/cairo.hxx | 35 include/vcl/outdev.hxx | 10 include/vcl/sysdata.hxx | 10 include/vcl/virdev.hxx | 9 officecfg/registry/data/org/openoffice/Office/Canvas.xcu | 21 solenv/gbuild/extensions/pre_MergedLibsList.mk | 3 vcl/Library_vclplug_gen.mk | 1 vcl/Library_vclplug_gtk3.mk | 1 vcl/Library_vclplug_qt5.mk | 1 vcl/headless/svpbmp.cxx | 5 vcl/headless/svpgdi.cxx | 28 vcl/headless/svpinst.cxx | 23 vcl/inc/headless/svpbmp.hxx | 1 vcl/inc/headless/svpgdi.hxx | 8 vcl/inc/headless/svpinst.hxx | 9 vcl/inc/osx/salinst.h | 5 vcl/inc/qt5/QtBitmap.hxx | 1 vcl/inc/qt5/QtGraphics.hxx | 13 vcl/inc/qt5/QtInstance.hxx | 4 vcl/inc/qt5/QtSvpGraphics.hxx | 10 vcl/inc/qt5/QtSvpSurface.hxx | 44 vcl/inc/quartz/salbmp.h | 2 vcl/inc/quartz/salvd.h | 1 vcl/inc/salbmp.hxx | 2 vcl/inc/salgdi.hxx | 14 vcl/inc/salinst.hxx | 9 vcl/inc/skia/salbmp.hxx | 2 vcl/inc/skia/x11/salvd.hxx | 3 vcl/inc/unx/genpspgraphics.h | 8 vcl/inc/unx/gtk/gtkgdi.hxx | 8 vcl/inc/unx/gtk/gtkinst.hxx | 5 vcl/inc/unx/salgdi.h | 8 vcl/inc/unx/salinst.h | 6 vcl/inc/unx/salvd.h | 2 vcl/inc/win/salbmp.h | 1 vcl/inc/win/salinst.h | 4 vcl/qt5/QtBitmap.cxx | 2 vcl/qt5/QtGraphics.cxx | 31 vcl/qt5/QtInstance.cxx | 23 vcl/qt5/QtSvpGraphics.cxx | 28 vcl/qt5/QtSvpSurface.cxx | 91 vcl/quartz/salbmp.cxx | 60 vcl/quartz/salvd.cxx | 59 vcl/skia/salbmp.cxx | 8 vcl/skia/x11/salvd.cxx | 18 vcl/source/bitmap/BitmapTools.cxx | 336 - vcl/source/bitmap/bitmap.cxx | 6 vcl/source/gdi/virdev.cxx | 22 vcl/source/outdev/outdev.cxx | 45 vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx | 1 vcl/unx/generic/gdi/cairo_xlib_cairo.cxx | 277 - vcl/unx/generic/gdi/cairo_xlib_cairo.hxx | 93 vcl/unx/generic/gdi/salgdi.cxx | 77 vcl/unx/generic/gdi/salvd.cxx | 82 vcl/unx/generic/print/genpspgraphics.cxx | 29 vcl/unx/gtk3/gtkcairo.cxx | 129 vcl/unx/gtk3/gtkcairo.hxx | 46 vcl/unx/gtk3/gtkinst.cxx | 16 vcl/unx/gtk3/salnativewidgets-gtk.cxx | 26 vcl/win/gdi/salbmp.cxx | 14 vcl/win/gdi/salvd.cxx | 31 157 files changed, 11 insertions(+), 18972 deletions(-)
New commits: commit 704f61b1bd2c54831c383e34e74315bd6da356e2 Author: Noel Grandin <noelgran...@collabora.co.uk> AuthorDate: Wed Jan 29 15:35:21 2025 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Feb 19 17:04:28 2025 +0100 remove canvas/cairo and canvas/gdi and canvas/directx backends These were originally created to better support alpha/transparency in slideshows, but vcl can do that these days. Mostly, removing these makes the path to better backends (e.g. GDI+) in vcl considerably easier. If regressions are detected, it would be better to improve vcl to perform better, or render better, since that will both fix the regression and improve other output from LibreOffice. Also remove various bits of vcl backend that were only being used by the canvas stuff. Change-Id: Ic5276d57e696f3dcbeaed2cc149b8fc09c5816f6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181843 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/Repository.mk b/Repository.mk index 277a1fb99b8b..fb074d489aae 100644 --- a/Repository.mk +++ b/Repository.mk @@ -355,12 +355,9 @@ endif ifneq ($(ENABLE_WASM_STRIP_CANVAS),TRUE) $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,ooo, \ canvastools \ - $(if $(ENABLE_CAIRO_CANVAS),cairocanvas) \ canvasfactory \ cppcanvas \ - $(if $(filter WNT,$(OS)),directx9canvas) \ $(if $(ENABLE_OPENGL_CANVAS),oglcanvas) \ - $(if $(filter WNT,$(OS)),gdipluscanvas) \ simplecanvas \ vclcanvas \ )) diff --git a/bin/find-can-be-private-symbols.functions.results b/bin/find-can-be-private-symbols.functions.results index ed4b5100cec2..5dbaf427cb17 100644 --- a/bin/find-can-be-private-symbols.functions.results +++ b/bin/find-can-be-private-symbols.functions.results @@ -1670,7 +1670,6 @@ QtSvpGraphics::CreateSurface(OutputDevice const&, int, int, int, int) const QtSvpGraphics::CreateSurface(std::shared_ptr<_cairo_surface> const&) const QtSvpGraphics::GetResolution(int&, int&) QtSvpGraphics::QtSvpGraphics(QtFrame*) -QtSvpGraphics::SupportsCairo() const QtSvpGraphics::handleDamage(tools::Rectangle const&) QtSvpGraphics::updateQWidget() const QtSvpGraphics::~QtSvpGraphics() @@ -5771,7 +5770,6 @@ SkiaSalBitmap::GetAsSkBitmap() const SkiaSalBitmap::GetBitCount() const SkiaSalBitmap::GetImageKey(SkiaHelper::DirectImage) const SkiaSalBitmap::GetSkShader(SkSamplingOptions const&, SkiaHelper::DirectImage) const -SkiaSalBitmap::GetSystemData(BitmapSystemData&) SkiaSalBitmap::Invert() SkiaSalBitmap::IsAllBlack() const SkiaSalBitmap::IsFullyOpaqueAsAlpha() const diff --git a/bin/find-mergedlib-can-be-private-symbols.functions.results b/bin/find-mergedlib-can-be-private-symbols.functions.results index 51f40068f0f0..cbdb7c75b544 100644 --- a/bin/find-mergedlib-can-be-private-symbols.functions.results +++ b/bin/find-mergedlib-can-be-private-symbols.functions.results @@ -82,7 +82,6 @@ BigInt::operator%=(BigInt const&) BigInt::operator=(BigInt const&) Bitmap::CreateAlphaMask(Color const&) const Bitmap::CreateMask(Color const&) const -Bitmap::GetSystemData(BitmapSystemData&) const Bitmap::RemoveBlendedStartColor(Color const&, AlphaMask const&) BitmapBasicMorphologyFilter::BitmapBasicMorphologyFilter(BasicMorphologyOp, int, unsigned char) BitmapBasicMorphologyFilter::filter(Bitmap const&) const @@ -1787,7 +1786,6 @@ OutlinerView::Indent(short) OutputDevice::AddFontSubstitute(rtl::OUString const&, rtl::OUString const&, AddFontSubstituteFlags) OutputDevice::AddHatchActions(tools::PolyPolygon const&, Hatch const&, GDIMetaFile&) OutputDevice::BeginFontSubstitution() -OutputDevice::CreateBitmapSurface(BitmapSystemData const&, Size const&) const OutputDevice::CreateSurface(int, int, int, int) const OutputDevice::CreateSurface(std::shared_ptr<_cairo_surface> const&) const OutputDevice::CreateUnoGraphicsList() @@ -1801,7 +1799,6 @@ OutputDevice::GetGlyphBoundRects(Point const&, rtl::OUString const&, int, int, s OutputDevice::GetGraphics() const OutputDevice::GetInverseViewTransformation(MapMode const&) const OutputDevice::GetNativeControlRegion(ControlType, ControlPart, tools::Rectangle const&, ControlState, ImplControlValue const&, tools::Rectangle&, tools::Rectangle&) const -OutputDevice::GetNativeSurfaceHandle(std::shared_ptr<cairo::Surface>&, basegfx::B2ISize const&) const OutputDevice::GetRenderBackendName() const OutputDevice::GetSpriteCanvas() const OutputDevice::GetTextBoundRect(basegfx::B2DRange&, rtl::OUString const&, int, int, int, unsigned long, KernArraySpan, std::span<unsigned char const, 18446744073709551615ul>, SalLayoutGlyphs const*) const @@ -1820,7 +1817,6 @@ OutputDevice::PixelToLogic(vcl::Region const&) const OutputDevice::RefreshFontData(bool) OutputDevice::RemoveFontsSubstitute() OutputDevice::RemoveTransparenciesFromMetaFile(GDIMetaFile const&, GDIMetaFile&, long, long, bool, bool, bool, Color const&) -OutputDevice::SupportsCairo() const PDFSignatureHelper::GetNewSecurityId() const PDFSignatureHelper::ReadAndVerifySignature(com::sun::star::uno::Reference<com::sun::star::io::XInputStream> const&) PDFSignatureHelper::SetDescription(rtl::OUString const&) @@ -2012,7 +2008,6 @@ QtSvpGraphics::CreateSurface(OutputDevice const&, int, int, int, int) const QtSvpGraphics::CreateSurface(std::shared_ptr<_cairo_surface> const&) const QtSvpGraphics::GetResolution(int&, int&) QtSvpGraphics::QtSvpGraphics(QtFrame*) -QtSvpGraphics::SupportsCairo() const QtSvpGraphics::handleDamage(tools::Rectangle const&) QtSvpGraphics::updateQWidget() const QtSvpGraphics::~QtSvpGraphics() @@ -6027,7 +6022,6 @@ SkiaSalBitmap::GetAsSkBitmap() const SkiaSalBitmap::GetBitCount() const SkiaSalBitmap::GetImageKey(SkiaHelper::DirectImage) const SkiaSalBitmap::GetSkShader(SkSamplingOptions const&, SkiaHelper::DirectImage) const -SkiaSalBitmap::GetSystemData(BitmapSystemData&) SkiaSalBitmap::Invert() SkiaSalBitmap::IsAllBlack() const SkiaSalBitmap::IsFullyOpaqueAsAlpha() const diff --git a/canvas/Library_cairocanvas.mk b/canvas/Library_cairocanvas.mk deleted file mode 100644 index b7cd8d86b5f0..000000000000 --- a/canvas/Library_cairocanvas.mk +++ /dev/null @@ -1,75 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# - -$(eval $(call gb_Library_Library,cairocanvas)) - -$(eval $(call gb_Library_set_include,cairocanvas,\ - $$(INCLUDE) \ - -I$(SRCDIR)/canvas/inc \ -)) - -$(eval $(call gb_Library_set_precompiled_header,cairocanvas,canvas/inc/pch/precompiled_cairocanvas)) - -$(eval $(call gb_Library_set_componentfile,cairocanvas,canvas/source/cairo/cairocanvas,services)) - -$(eval $(call gb_Library_use_sdk_api,cairocanvas)) - -ifeq ($(OS),MACOSX) - -$(eval $(call gb_Library_use_system_darwin_frameworks,cairocanvas,\ - Cocoa \ -)) - -endif - -$(eval $(call gb_Library_use_libraries,cairocanvas,\ - sal \ - cppu \ - basegfx \ - cppuhelper \ - comphelper \ - vcl \ - tk \ - tl \ - i18nlangtag \ - canvastools \ -)) - -$(eval $(call gb_Library_add_exception_objects,cairocanvas,\ - canvas/source/cairo/cairo_cachedbitmap \ - canvas/source/cairo/cairo_canvas \ - canvas/source/cairo/cairo_canvasbitmap \ - canvas/source/cairo/cairo_canvascustomsprite \ - canvas/source/cairo/cairo_canvasfont \ - canvas/source/cairo/cairo_canvashelper \ - canvas/source/cairo/cairo_canvashelper_text \ - canvas/source/cairo/cairo_devicehelper \ - canvas/source/cairo/cairo_spritecanvas \ - canvas/source/cairo/cairo_spritecanvashelper \ - canvas/source/cairo/cairo_spritedevicehelper \ - canvas/source/cairo/cairo_spritehelper \ - canvas/source/cairo/cairo_textlayout \ -)) - -$(eval $(call gb_Library_use_externals,cairocanvas,\ - boost_headers \ - cairo \ -)) - -# vim: set noet sw=4 ts=4: diff --git a/canvas/Library_directx9canvas.mk b/canvas/Library_directx9canvas.mk deleted file mode 100644 index 4369de32d636..000000000000 --- a/canvas/Library_directx9canvas.mk +++ /dev/null @@ -1,69 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# - -$(eval $(call gb_Library_Library,directx9canvas)) - -$(eval $(call gb_Library_set_include,directx9canvas,\ - $$(INCLUDE) \ - -I$(SRCDIR)/canvas/inc \ -)) - -$(eval $(call gb_Library_set_componentfile,directx9canvas,canvas/source/directx/directx9canvas,services)) - -$(eval $(call gb_Library_use_sdk_api,directx9canvas)) - -$(eval $(call gb_Library_use_external,directx9canvas,boost_headers)) - -$(eval $(call gb_Library_use_libraries,directx9canvas,\ - cppu \ - tk \ - sal \ - comphelper \ - cppuhelper \ - basegfx \ - canvastools \ - vcl \ - tl \ - utl \ - i18nlangtag \ -)) - -$(eval $(call gb_Library_use_system_win32_libs,directx9canvas,\ - d3d9 \ - gdi32 \ - gdiplus \ -)) - -$(eval $(call gb_Library_use_static_libraries,directx9canvas,\ - directxcanvas \ -)) - -$(eval $(call gb_Library_add_exception_objects,directx9canvas,\ - canvas/source/directx/dx_9rm \ - canvas/source/directx/dx_canvascustomsprite \ - canvas/source/directx/dx_config \ - canvas/source/directx/dx_spritecanvas \ - canvas/source/directx/dx_spritecanvashelper \ - canvas/source/directx/dx_spritedevicehelper \ - canvas/source/directx/dx_spritehelper \ - canvas/source/directx/dx_surfacebitmap \ - canvas/source/directx/dx_surfacegraphics \ -)) - -# vim: set noet sw=4 ts=4: diff --git a/canvas/Library_gdipluscanvas.mk b/canvas/Library_gdipluscanvas.mk deleted file mode 100644 index a67a19df4120..000000000000 --- a/canvas/Library_gdipluscanvas.mk +++ /dev/null @@ -1,60 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# - -$(eval $(call gb_Library_Library,gdipluscanvas)) - -$(eval $(call gb_Library_set_include,gdipluscanvas,\ - $$(INCLUDE) \ - -I$(SRCDIR)/canvas/inc \ -)) - -$(eval $(call gb_Library_set_componentfile,gdipluscanvas,canvas/source/directx/gdipluscanvas,services)) - -$(eval $(call gb_Library_use_external,gdipluscanvas,boost_headers)) - -$(eval $(call gb_Library_use_sdk_api,gdipluscanvas)) - -$(eval $(call gb_Library_use_libraries,gdipluscanvas,\ - cppu \ - tk \ - sal \ - comphelper \ - cppuhelper \ - basegfx \ - canvastools \ - vcl \ - tl \ - utl \ - i18nlangtag \ -)) - -$(eval $(call gb_Library_use_system_win32_libs,gdipluscanvas,\ - gdi32 \ - gdiplus \ -)) - -$(eval $(call gb_Library_use_static_libraries,gdipluscanvas,\ - directxcanvas \ -)) - -$(eval $(call gb_Library_add_exception_objects,gdipluscanvas,\ - canvas/source/directx/dx_canvas \ -)) - -# vim: set noet sw=4 ts=4: diff --git a/canvas/Module_canvas.mk b/canvas/Module_canvas.mk index 79165c4976e7..9fc588ad6c76 100644 --- a/canvas/Module_canvas.mk +++ b/canvas/Module_canvas.mk @@ -28,12 +28,6 @@ $(eval $(call gb_Module_add_targets,canvas,\ $(if $(or $(DISABLE_GUI),$(DISABLE_DYNLOADING)),,Executable_canvasdemo)) \ )) -ifeq ($(ENABLE_CAIRO_CANVAS),TRUE) -$(eval $(call gb_Module_add_targets,canvas,\ - Library_cairocanvas \ -)) -endif - ifeq ($(ENABLE_OPENGL_CANVAS),TRUE) $(eval $(call gb_Module_add_targets,canvas,\ Library_oglcanvas \ @@ -41,14 +35,6 @@ $(eval $(call gb_Module_add_targets,canvas,\ )) endif -ifeq ($(OS),WNT) -$(eval $(call gb_Module_add_targets,canvas,\ - Library_directx9canvas \ - Library_gdipluscanvas \ - StaticLibrary_directxcanvas \ -)) -endif - $(eval $(call gb_Module_add_check_targets,canvas,\ CppunitTest_canvas_test \ )) diff --git a/canvas/StaticLibrary_directxcanvas.mk b/canvas/StaticLibrary_directxcanvas.mk deleted file mode 100644 index 1e0d34409806..000000000000 --- a/canvas/StaticLibrary_directxcanvas.mk +++ /dev/null @@ -1,41 +0,0 @@ -# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -# -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# - -$(eval $(call gb_StaticLibrary_StaticLibrary,directxcanvas)) - -$(eval $(call gb_StaticLibrary_set_include,directxcanvas,\ - $$(INCLUDE) \ - -I$(SRCDIR)/canvas/inc \ -)) - -$(eval $(call gb_StaticLibrary_use_external,directxcanvas,boost_headers)) - -$(eval $(call gb_StaticLibrary_use_api,directxcanvas,\ - offapi \ - udkapi \ -)) - -$(eval $(call gb_StaticLibrary_add_exception_objects,directxcanvas,\ - canvas/source/directx/dx_bitmap \ - canvas/source/directx/dx_bitmapcanvashelper \ - canvas/source/directx/dx_canvasbitmap \ - canvas/source/directx/dx_canvasfont \ - canvas/source/directx/dx_canvashelper \ - canvas/source/directx/dx_canvashelper_texturefill \ - canvas/source/directx/dx_devicehelper \ - canvas/source/directx/dx_gdiplususer \ - canvas/source/directx/dx_impltools \ - canvas/source/directx/dx_linepolypolygon \ - canvas/source/directx/dx_textlayout \ - canvas/source/directx/dx_textlayout_drawhelper \ - canvas/source/directx/dx_vcltools \ -)) - -# vim:set noet sw=4 ts=4: diff --git a/canvas/inc/pch/precompiled_cairocanvas.hxx b/canvas/inc/pch/precompiled_cairocanvas.hxx deleted file mode 100644 index 3657267d7383..000000000000 --- a/canvas/inc/pch/precompiled_cairocanvas.hxx +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -/* - This file has been autogenerated by update_pch.sh. It is possible to edit it - manually (such as when an include file has been moved/renamed/removed). All such - manual changes will be rewritten by the next run of update_pch.sh (which presumably - also fixes all possible problems, so it's usually better to use it). - - Generated on 2021-03-08 13:11:37 using: - ./bin/update_pch canvas cairocanvas --cutoff=1 --exclude:system --include:module --include:local - - If after updating build fails, use the following command to locate conflicting headers: - ./bin/update_pch_bisect ./canvas/inc/pch/precompiled_cairocanvas.hxx "make canvas.build" --find-conflicts -*/ - -#include <sal/config.h> -#if PCH_LEVEL >= 1 -#include <algorithm> -#include <cairo.h> -#include <math.h> -#include <memory> -#include <tuple> -#include <boost/cast.hpp> -#endif // PCH_LEVEL >= 1 -#if PCH_LEVEL >= 2 -#include <osl/mutex.hxx> -#include <rtl/instance.hxx> -#include <rtl/math.hxx> -#include <sal/log.hxx> -#include <vcl/BitmapTools.hxx> -#include <vcl/bitmapex.hxx> -#include <vcl/cairo.hxx> -#include <vcl/canvastools.hxx> -#include <vcl/dibtools.hxx> -#include <vcl/metric.hxx> -#include <vcl/skia/SkiaHelper.hxx> -#include <vcl/sysdata.hxx> -#include <vcl/virdev.hxx> -#endif // PCH_LEVEL >= 2 -#if PCH_LEVEL >= 3 -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/numeric/ftools.hxx> -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/range/b2irange.hxx> -#include <basegfx/utils/canvastools.hxx> -#include <basegfx/utils/keystoplerp.hxx> -#include <basegfx/utils/lerp.hxx> -#include <basegfx/utils/unopolypolygon.hxx> -#include <com/sun/star/awt/Rectangle.hpp> -#include <com/sun/star/awt/XTopWindow.hpp> -#include <com/sun/star/lang/NoSupportException.hpp> -#include <com/sun/star/rendering/ColorComponentTag.hpp> -#include <com/sun/star/rendering/ColorSpaceType.hpp> -#include <com/sun/star/rendering/CompositeOperation.hpp> -#include <com/sun/star/rendering/IntegerBitmapLayout.hpp> -#include <com/sun/star/rendering/PanoseProportion.hpp> -#include <com/sun/star/rendering/PathCapType.hpp> -#include <com/sun/star/rendering/PathJoinType.hpp> -#include <com/sun/star/rendering/RenderingIntent.hpp> -#include <com/sun/star/rendering/RepaintResult.hpp> -#include <com/sun/star/rendering/TextDirection.hpp> -#include <com/sun/star/rendering/TexturingMode.hpp> -#include <com/sun/star/rendering/XCanvas.hpp> -#include <com/sun/star/rendering/XIntegerBitmapColorSpace.hpp> -#include <com/sun/star/util/Endianness.hpp> -#include <comphelper/sequence.hxx> -#include <cppuhelper/implbase.hxx> -#include <cppuhelper/supportsservice.hxx> -#include <i18nlangtag/languagetag.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <comphelper/diagnose_ex.hxx> -#include <tools/stream.hxx> -#endif // PCH_LEVEL >= 3 -#if PCH_LEVEL >= 4 -#include <canvas/canvastools.hxx> -#include <parametricpolypolygon.hxx> -#include <verifyinput.hxx> -#endif // PCH_LEVEL >= 4 - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_cachedbitmap.cxx b/canvas/source/cairo/cairo_cachedbitmap.cxx deleted file mode 100644 index e548778b2fe4..000000000000 --- a/canvas/source/cairo/cairo_cachedbitmap.cxx +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <sal/config.h> - -#include <com/sun/star/rendering/XCanvas.hpp> -#include <com/sun/star/rendering/RepaintResult.hpp> -#include <utility> -#include <comphelper/diagnose_ex.hxx> - -#include "cairo_cachedbitmap.hxx" -#include "cairo_repainttarget.hxx" - - -using namespace ::cairo; -using namespace ::com::sun::star; - -namespace cairocanvas -{ - CachedBitmap::CachedBitmap( SurfaceSharedPtr pSurface, - const rendering::ViewState& rUsedViewState, - rendering::RenderState aUsedRenderState, - const uno::Reference< rendering::XCanvas >& rTarget ) : - CachedPrimitiveBase( rUsedViewState, rTarget ), - mpSurface(std::move( pSurface )), - maRenderState(std::move( aUsedRenderState )) - {} - - void CachedBitmap::disposing(std::unique_lock<std::mutex>& rGuard) - { - mpSurface.reset(); - CachedPrimitiveBase::disposing(rGuard); - } - - ::sal_Int8 CachedBitmap::doRedraw( const rendering::ViewState& rNewState, - const rendering::ViewState& /*rOldState*/, - const uno::Reference< rendering::XCanvas >& rTargetCanvas, - bool bSameViewTransform ) - { - ENSURE_OR_THROW( bSameViewTransform, - "CachedBitmap::doRedraw(): base called with changed view transform " - "(told otherwise during construction)" ); - - RepaintTarget* pTarget = dynamic_cast< RepaintTarget* >(rTargetCanvas.get()); - - ENSURE_OR_THROW( pTarget, - "CachedBitmap::redraw(): cannot cast target to RepaintTarget" ); - - if( !pTarget->repaint( mpSurface, - rNewState, - maRenderState ) ) - { - // target failed to repaint - return rendering::RepaintResult::FAILED; - } - - return rendering::RepaintResult::REDRAWN; - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_cachedbitmap.hxx b/canvas/source/cairo/cairo_cachedbitmap.hxx deleted file mode 100644 index d7f4c58ef681..000000000000 --- a/canvas/source/cairo/cairo_cachedbitmap.hxx +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#pragma once - -#include <base/cachedprimitivebase.hxx> -#include <com/sun/star/rendering/RenderState.hpp> - -#include <vcl/cairo.hxx> - -/* Definition of CachedBitmap class */ - -namespace cairocanvas -{ - class CachedBitmap : public ::canvas::CachedPrimitiveBase - { - public: - - /** Create an XCachedPrimitive for given GraphicObject - */ - CachedBitmap( ::cairo::SurfaceSharedPtr pSurface, - const css::rendering::ViewState& rUsedViewState, - css::rendering::RenderState aUsedRenderState, - const css::uno::Reference< css::rendering::XCanvas >& rTarget ); - - /// Dispose all internal references - virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; - - private: - virtual ::sal_Int8 doRedraw( const css::rendering::ViewState& rNewState, - const css::rendering::ViewState& rOldState, - const css::uno::Reference< - css::rendering::XCanvas >& rTargetCanvas, - bool bSameViewTransform ) override; - - - ::cairo::SurfaceSharedPtr mpSurface; - const css::rendering::RenderState maRenderState; - }; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvas.cxx b/canvas/source/cairo/cairo_canvas.cxx deleted file mode 100644 index 4078e95deb63..000000000000 --- a/canvas/source/cairo/cairo_canvas.cxx +++ /dev/null @@ -1,189 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <sal/config.h> -#include <sal/log.hxx> - -#include <com/sun/star/awt/Rectangle.hpp> -#include <com/sun/star/lang/NoSupportException.hpp> -#include <osl/mutex.hxx> -#include <comphelper/diagnose_ex.hxx> -#include <vcl/sysdata.hxx> -#include <vcl/skia/SkiaHelper.hxx> -#include <cppuhelper/supportsservice.hxx> - -#include "cairo_canvas.hxx" - -using namespace ::cairo; -using namespace ::com::sun::star; - -namespace cairocanvas -{ - Canvas::Canvas( const uno::Sequence< uno::Any >& aArguments, - const uno::Reference< uno::XComponentContext >& /*rxContext*/ ) : - maArguments(aArguments) - { - } - - void Canvas::initialize() - { - // #i64742# Only perform initialization when not in probe mode - if( !maArguments.hasElements() ) - return; - - assert( !SkiaHelper::isVCLSkiaEnabled() ); - - /* maArguments: - 0: ptr to creating instance (Window or VirtualDevice) - 1: current bounds of creating instance - 2: bool, denoting always on top state for Window (always false for VirtualDevice) - 3: XWindow for creating Window (or empty for VirtualDevice) - 4: SystemGraphicsData as a streamed Any - */ - SAL_INFO("canvas.cairo","Canvas created " << this); - - ENSURE_ARG_OR_THROW( maArguments.getLength() >= 5 && - maArguments[0].getValueTypeClass() == uno::TypeClass_HYPER && - maArguments[4].getValueTypeClass() == uno::TypeClass_SEQUENCE, - "Canvas::initialize: wrong number of arguments, or wrong types" ); - - // We expect a single Any here, containing a pointer to a valid - // VCL output device, on which to output (mostly needed for text) - sal_Int64 nPtr = 0; - maArguments[0] >>= nPtr; - OutputDevice* pOutDev = reinterpret_cast<OutputDevice*>(nPtr); - ENSURE_ARG_OR_THROW( pOutDev != nullptr, - "Canvas::initialize: invalid OutDev pointer" ); - - awt::Rectangle aBounds; - maArguments[1] >>= aBounds; - - uno::Sequence<sal_Int8> aSeq; - maArguments[4] >>= aSeq; - - const SystemGraphicsData* pSysData=reinterpret_cast<const SystemGraphicsData*>(aSeq.getConstArray()); - if( !pSysData || !pSysData->nSize ) - throw lang::NoSupportException( u"Passed SystemGraphicsData invalid!"_ustr ); - - bool bHasCairo = pOutDev->SupportsCairo(); - ENSURE_ARG_OR_THROW(bHasCairo, "SpriteCanvas::SpriteCanvas: No Cairo capability"); - - // setup helper - maDeviceHelper.init( *this, *pOutDev ); - - maCanvasHelper.init( basegfx::B2ISize(aBounds.Width, aBounds.Height), *this, this ); - - // forward surface to render on to canvashelper - maCanvasHelper.setSurface( maDeviceHelper.getSurface(), false ); - - maArguments.realloc(0); - } - - Canvas::~Canvas() - { - SAL_INFO("canvas.cairo", "CairoCanvas destroyed" ); - } - - void Canvas::disposeThis() - { - ::osl::MutexGuard aGuard( m_aMutex ); - - // forward to parent - CanvasBaseT::disposeThis(); - } - - OUString SAL_CALL Canvas::getServiceName( ) - { - return u"com.sun.star.rendering.Canvas.Cairo"_ustr; - } - - // XServiceInfo - sal_Bool Canvas::supportsService(const OUString& sServiceName) - { - return cppu::supportsService(this, sServiceName); - - } - OUString Canvas::getImplementationName() - { - return u"com.sun.star.comp.rendering.Canvas.Cairo"_ustr; - } - css::uno::Sequence< OUString > Canvas::getSupportedServiceNames() - { - return { getServiceName() }; - } - - bool Canvas::repaint( const SurfaceSharedPtr& pSurface, - const rendering::ViewState& viewState, - const rendering::RenderState& renderState ) - { - return maCanvasHelper.repaint( pSurface, viewState, renderState ); - } - - SurfaceSharedPtr Canvas::getSurface() - { - return maDeviceHelper.getSurface(); - } - - SurfaceSharedPtr Canvas::createSurface( const ::basegfx::B2ISize& rSize, int aContent ) - { - return maDeviceHelper.createSurface( rSize, aContent ); - } - - SurfaceSharedPtr Canvas::createSurface( ::Bitmap& rBitmap ) - { - SurfaceSharedPtr pSurface; - - BitmapSystemData aData; - if( rBitmap.GetSystemData( aData ) ) { - const Size aSize = rBitmap.GetSizePixel(); - - pSurface = maDeviceHelper.createSurface( aData, aSize ); - } - - return pSurface; - } - - SurfaceSharedPtr Canvas::changeSurface() - { - // non-modifiable surface here - return SurfaceSharedPtr(); - } - - OutputDevice* Canvas::getOutputDevice() - { - return maDeviceHelper.getOutputDevice(); - } -} - -extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* -com_sun_star_comp_rendering_Canvas_Cairo_get_implementation( - css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const& args) -{ - rtl::Reference<cairocanvas::Canvas> p = new cairocanvas::Canvas(args, context); - try { - p->initialize(); - } catch (css::uno::Exception&) { - p->dispose(); - throw; - } - return cppu::acquire(p.get()); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvas.hxx b/canvas/source/cairo/cairo_canvas.hxx deleted file mode 100644 index 0c41a8a5c0d3..000000000000 --- a/canvas/source/cairo/cairo_canvas.hxx +++ /dev/null @@ -1,142 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#pragma once - -#include <com/sun/star/uno/XComponentContext.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/lang/XServiceName.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/util/XUpdatable.hpp> -#include <com/sun/star/rendering/XIntegerBitmap.hpp> -#include <com/sun/star/rendering/XGraphicDevice.hpp> -#include <com/sun/star/rendering/XBitmapCanvas.hpp> - -#include <cppuhelper/compbase.hxx> -#include <comphelper/uno3.hxx> - -#include <base/basemutexhelper.hxx> -#include <base/bitmapcanvasbase.hxx> -#include <base/graphicdevicebase.hxx> -#include <base/integerbitmapbase.hxx> - -#include "cairo_canvashelper.hxx" -#include "cairo_devicehelper.hxx" -#include "cairo_repainttarget.hxx" -#include "cairo_surfaceprovider.hxx" - -namespace cairocanvas -{ - typedef ::cppu::WeakComponentImplHelper< css::rendering::XBitmapCanvas, - css::rendering::XIntegerBitmap, - css::rendering::XGraphicDevice, - css::lang::XMultiServiceFactory, - css::util::XUpdatable, - css::beans::XPropertySet, - css::lang::XServiceName, - css::lang::XServiceInfo > GraphicDeviceBase_Base; - typedef ::canvas::GraphicDeviceBase< ::canvas::BaseMutexHelper< GraphicDeviceBase_Base >, - DeviceHelper, - ::osl::MutexGuard, - ::cppu::OWeakObject > CanvasBase_Base; - - /** Mixin SurfaceProvider - - Have to mixin the SurfaceProvider before deriving from - ::canvas::CanvasBase, as this template should already - implement some of those interface methods. - - The reason why this appears kinda convoluted is the fact that - we cannot specify non-IDL types as WeakComponentImplHelper - template args, and furthermore, don't want to derive - ::canvas::CanvasBase directly from - SurfaceProvider (because derivees of - ::canvas::CanvasBase have to explicitly forward the - XInterface methods (e.g. via DECLARE_UNO3_AGG_DEFAULTS) - anyway). - */ - class CanvasBaseSurfaceProvider_Base : public CanvasBase_Base, - public SurfaceProvider - { - }; - - typedef ::canvas::IntegerBitmapBase< - canvas::BitmapCanvasBase2< - CanvasBaseSurfaceProvider_Base, - CanvasHelper, - ::osl::MutexGuard, - ::cppu::OWeakObject> > CanvasBaseT; - - /** Product of this component's factory. - - The Canvas object combines the actual Window canvas with - the XGraphicDevice interface. This is because there's a - one-to-one relation between them, anyway, since each window - can have exactly one canvas and one associated - XGraphicDevice. And to avoid messing around with circular - references, this is implemented as one single object. - */ - class Canvas : public CanvasBaseT, - public RepaintTarget - { - public: - Canvas( const css::uno::Sequence< css::uno::Any >& aArguments, - const css::uno::Reference< css::uno::XComponentContext >& rxContext ); - - void initialize(); - - /// For resource tracking - virtual ~Canvas() override; - - /// Dispose all internal references - virtual void disposeThis() override; - - // Forwarding the XComponent implementation to the - // cppu::ImplHelper templated base - // Classname Base doing refcounting Base implementing the XComponent interface - // | | | - // V V V - DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( Canvas, GraphicDeviceBase_Base, ::cppu::WeakComponentImplHelperBase ) - - // XServiceName - virtual OUString SAL_CALL getServiceName( ) override; - - // XServiceInfo - virtual sal_Bool SAL_CALL supportsService(const OUString& sServiceName) override; - virtual OUString SAL_CALL getImplementationName() override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; - - // RepaintTarget - virtual bool repaint( const ::cairo::SurfaceSharedPtr& pSurface, - const css::rendering::ViewState& viewState, - const css::rendering::RenderState& renderState ) override; - - // SurfaceProvider - virtual ::cairo::SurfaceSharedPtr getSurface() override; - virtual ::cairo::SurfaceSharedPtr createSurface( const ::basegfx::B2ISize& rSize, int aContent ) override; - virtual ::cairo::SurfaceSharedPtr createSurface( ::Bitmap& rBitmap ) override; - virtual ::cairo::SurfaceSharedPtr changeSurface() override; - virtual OutputDevice* getOutputDevice() override; - - private: - css::uno::Sequence< css::uno::Any > maArguments; - }; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvasbitmap.cxx b/canvas/source/cairo/cairo_canvasbitmap.cxx deleted file mode 100644 index c4de75ee2fce..000000000000 --- a/canvas/source/cairo/cairo_canvasbitmap.cxx +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <sal/config.h> -#include <sal/log.hxx> - -#include <cppuhelper/supportsservice.hxx> -#include <comphelper/diagnose_ex.hxx> -#include <utility> -#include <vcl/bitmapex.hxx> -#include <vcl/BitmapTools.hxx> - -#include <cairo.h> - -#include "cairo_canvasbitmap.hxx" - -using namespace ::cairo; -using namespace ::com::sun::star; - -namespace cairocanvas -{ - CanvasBitmap::CanvasBitmap( const ::basegfx::B2ISize& rSize, - SurfaceProviderRef rSurfaceProvider, - rendering::XGraphicDevice* pDevice, - bool bHasAlpha ) : - mpSurfaceProvider(std::move( rSurfaceProvider )), - maSize(rSize), - mbHasAlpha(bHasAlpha) - { - ENSURE_OR_THROW( mpSurfaceProvider.is(), - "CanvasBitmap::CanvasBitmap(): Invalid surface or device" ); - - SAL_INFO( - "canvas.cairo", - "bitmap size: " << rSize.getWidth() << "x" << rSize.getHeight()); - - mpBufferSurface = mpSurfaceProvider->createSurface( rSize, bHasAlpha ? CAIRO_CONTENT_COLOR_ALPHA : CAIRO_CONTENT_COLOR ); - mpBufferCairo = mpBufferSurface->getCairo(); - - maCanvasHelper.init( rSize, *mpSurfaceProvider, pDevice ); - maCanvasHelper.setSurface( mpBufferSurface, bHasAlpha ); - - // clear bitmap to 100% transparent - maCanvasHelper.clear(); - } - - void CanvasBitmap::disposeThis() - { - mpSurfaceProvider.clear(); - - mpBufferCairo.reset(); - mpBufferSurface.reset(); - - // forward to parent - CanvasBitmap_Base::disposeThis(); - } - - SurfaceSharedPtr CanvasBitmap::getSurface() - { - return mpBufferSurface; - } - - SurfaceSharedPtr CanvasBitmap::createSurface( const ::basegfx::B2ISize& rSize, int aContent ) - { - return mpSurfaceProvider->createSurface(rSize,aContent); - } - - SurfaceSharedPtr CanvasBitmap::createSurface( ::Bitmap& rBitmap ) - { - return mpSurfaceProvider->createSurface(rBitmap); - } - - SurfaceSharedPtr CanvasBitmap::changeSurface() - { - // non-modifiable surface here - return SurfaceSharedPtr(); - } - - OutputDevice* CanvasBitmap::getOutputDevice() - { - return mpSurfaceProvider->getOutputDevice(); - } - - bool CanvasBitmap::repaint( const SurfaceSharedPtr& pSurface, - const rendering::ViewState& viewState, - const rendering::RenderState& renderState ) - { - return maCanvasHelper.repaint( pSurface, viewState, renderState ); - } - - uno::Any SAL_CALL CanvasBitmap::getFastPropertyValue( sal_Int32 nHandle ) - { - uno::Any aRV( sal_Int32(0) ); - // 0 ... get BitmapEx - // 1 ... get Pixbuf with bitmap RGB content - // 2 ... return nothing (empty Any) - switch( nHandle ) - { - case 0: - { - aRV <<= reinterpret_cast<sal_Int64>( nullptr ); - if ( !mbHasAlpha ) - break; - - BitmapEx* pBitmapEx = vcl::bitmap::CreateFromCairoSurface( - ::Size( maSize.getWidth(), maSize.getHeight() ), - getSurface()->getCairoSurface().get()); - if (pBitmapEx) - aRV <<= reinterpret_cast<sal_Int64>( pBitmapEx ); - - break; - } - case 1: - { - aRV = getOutputDevice()->GetNativeSurfaceHandle(mpBufferSurface, maSize); - break; - } - case 2: - { - // Always return nothing - for the RGB surface support. - // Alpha code paths go via the above case 0. - aRV = uno::Any(); - break; - } - } - - return aRV; - } - - OUString SAL_CALL CanvasBitmap::getImplementationName( ) - { - return u"CairoCanvas.CanvasBitmap"_ustr; - } - - sal_Bool SAL_CALL CanvasBitmap::supportsService( const OUString& ServiceName ) - { - return cppu::supportsService( this, ServiceName ); - } - - uno::Sequence< OUString > SAL_CALL CanvasBitmap::getSupportedServiceNames( ) - { - return { u"com.sun.star.rendering.CanvasBitmap"_ustr }; - } - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvasbitmap.hxx b/canvas/source/cairo/cairo_canvasbitmap.hxx deleted file mode 100644 index f2371821023f..000000000000 --- a/canvas/source/cairo/cairo_canvasbitmap.hxx +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#pragma once - -#include <cppuhelper/compbase.hxx> - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/rendering/XBitmapCanvas.hpp> -#include <com/sun/star/rendering/XIntegerBitmap.hpp> -#include <com/sun/star/beans/XFastPropertySet.hpp> -#include <comphelper/uno3.hxx> - -#include <base/bitmapcanvasbase.hxx> -#include <base/basemutexhelper.hxx> -#include <base/integerbitmapbase.hxx> - -#include "cairo_canvashelper.hxx" -#include "cairo_repainttarget.hxx" - - -/* Definition of CanvasBitmap class */ - -namespace cairocanvas -{ - typedef ::cppu::WeakComponentImplHelper< css::rendering::XBitmapCanvas, - css::rendering::XIntegerBitmap, - css::lang::XServiceInfo, - css::beans::XFastPropertySet > CanvasBitmapBase_Base; - class CanvasBitmapSpriteSurface_Base : - public ::canvas::BaseMutexHelper<CanvasBitmapBase_Base>, - public SurfaceProvider - { - }; - - typedef ::canvas::IntegerBitmapBase< - canvas::BitmapCanvasBase2< - CanvasBitmapSpriteSurface_Base, - CanvasHelper, - ::osl::MutexGuard, - ::cppu::OWeakObject> > CanvasBitmap_Base; - - class CanvasBitmap : public CanvasBitmap_Base, - public RepaintTarget - { - public: - /** Create a canvas bitmap for the given surface - - @param rSize - Size of the bitmap - - @param rDevice - Reference device, with which bitmap should be compatible - */ - CanvasBitmap( const ::basegfx::B2ISize& rSize, - SurfaceProviderRef rDevice, - css::rendering::XGraphicDevice* pDevice, - bool bHasAlpha ); - - /// Dispose all internal references - virtual void disposeThis() override; - - // Forwarding the XComponent implementation to the - // cppu::ImplHelper templated base - // Classname Base doing refcounting Base implementing the XComponent interface - // | | | - // V V V - DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( CanvasBitmap, CanvasBitmapBase_Base, ::cppu::WeakComponentImplHelperBase ) - - // XServiceInfo - virtual OUString SAL_CALL getImplementationName( ) override; - virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; - - // SurfaceProvider - virtual ::cairo::SurfaceSharedPtr getSurface() override; - virtual ::cairo::SurfaceSharedPtr createSurface( const ::basegfx::B2ISize& rSize, int aContent ) override; - virtual ::cairo::SurfaceSharedPtr createSurface( ::Bitmap& rBitmap ) override; - virtual ::cairo::SurfaceSharedPtr changeSurface() override; - virtual OutputDevice* getOutputDevice() override; - - // RepaintTarget - virtual bool repaint( const ::cairo::SurfaceSharedPtr& pSurface, - const css::rendering::ViewState& viewState, - const css::rendering::RenderState& renderState ) override; - - // XFastPropertySet - // used to retrieve BitmapEx pointer or X Pixmap handles for this bitmap - // handle values have these meanings: - // 0 ... get pointer to BitmapEx - // 1 ... get X pixmap handle to rgb content - // 2 ... FIXME: leftover? ever called with this? always returns nothing (empty Any) - // returned any contains either BitmapEx pointer or array of two Any value - // 1st a bool value: true - free the pixmap after used by XFreePixmap, false do nothing, the pixmap is used internally in the canvas - // 2nd the pixmap handle (sal_Int64) - virtual css::uno::Any SAL_CALL getFastPropertyValue(sal_Int32 nHandle) override; - virtual void SAL_CALL setFastPropertyValue(sal_Int32, const css::uno::Any&) override {} - - private: - SurfaceProviderRef mpSurfaceProvider; - ::cairo::SurfaceSharedPtr mpBufferSurface; - ::cairo::CairoSharedPtr mpBufferCairo; - - const ::basegfx::B2ISize maSize; - const bool mbHasAlpha; - }; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvascustomsprite.cxx b/canvas/source/cairo/cairo_canvascustomsprite.cxx deleted file mode 100644 index 72fb291ebf35..000000000000 --- a/canvas/source/cairo/cairo_canvascustomsprite.cxx +++ /dev/null @@ -1,151 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <sal/config.h> -#include <sal/log.hxx> - -#include <basegfx/point/b2dpoint.hxx> -#include <cppuhelper/supportsservice.hxx> -#include <comphelper/diagnose_ex.hxx> - -#include <canvas/canvastools.hxx> -#include <cairo.h> - -#include "cairo_canvascustomsprite.hxx" -#include "cairo_spritecanvas.hxx" - - -using namespace ::cairo; -using namespace ::com::sun::star; - -namespace cairocanvas -{ - CanvasCustomSprite::CanvasCustomSprite( const css::geometry::RealSize2D& rSpriteSize, - const SpriteCanvasRef& rRefDevice ) : - mpSpriteCanvas( rRefDevice ), - maSize( ::canvas::tools::roundUp( rSpriteSize.Width ), - ::canvas::tools::roundUp( rSpriteSize.Height ) ) - { - ENSURE_OR_THROW( rRefDevice, - "CanvasCustomSprite::CanvasCustomSprite(): Invalid sprite canvas" ); - - SAL_INFO( "canvas.cairo", "sprite size: " << ::canvas::tools::roundUp( rSpriteSize.Width ) << ", " << ::canvas::tools::roundUp( rSpriteSize.Height )); - - mpBufferSurface = mpSpriteCanvas->createSurface( maSize, CAIRO_CONTENT_COLOR_ALPHA ); - - maCanvasHelper.init( maSize, - *rRefDevice, - rRefDevice.get() ); - maCanvasHelper.setSurface( mpBufferSurface, true ); - - maSpriteHelper.init( rSpriteSize, - rRefDevice ); - maSpriteHelper.setSurface( mpBufferSurface ); - - // clear sprite to 100% transparent - maCanvasHelper.clear(); - } - - void CanvasCustomSprite::disposeThis() - { - ::osl::MutexGuard aGuard( m_aMutex ); - - mpSpriteCanvas.clear(); - mpBufferSurface.reset(); - - // forward to parent - CanvasCustomSpriteBaseT::disposeThis(); - } - - void CanvasCustomSprite::redraw( const CairoSharedPtr& pCairo, - bool bBufferedUpdate ) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - redraw( pCairo, maSpriteHelper.getPosPixel(), bBufferedUpdate ); - } - - void CanvasCustomSprite::redraw( const CairoSharedPtr& pCairo, - const ::basegfx::B2DPoint& rOrigOutputPos, - bool bBufferedUpdate ) const - { - ::osl::MutexGuard aGuard( m_aMutex ); - - maSpriteHelper.redraw( pCairo, - rOrigOutputPos, - mbSurfaceDirty, - bBufferedUpdate ); - - mbSurfaceDirty = false; - } - - bool CanvasCustomSprite::repaint( const SurfaceSharedPtr& pSurface, - const rendering::ViewState& viewState, - const rendering::RenderState& renderState ) - { - return maCanvasHelper.repaint( pSurface, viewState, renderState ); - } - - SurfaceSharedPtr CanvasCustomSprite::getSurface() - { - return mpBufferSurface; - } - - SurfaceSharedPtr CanvasCustomSprite::createSurface( const ::basegfx::B2ISize& rSize, int aContent ) - { - return mpSpriteCanvas->createSurface(rSize,aContent); - } - - SurfaceSharedPtr CanvasCustomSprite::createSurface( ::Bitmap& rBitmap ) - { - return mpSpriteCanvas->createSurface(rBitmap); - } - - SurfaceSharedPtr CanvasCustomSprite::changeSurface() - { - SAL_INFO( "canvas.cairo", "replacing sprite background surface"); - - mpBufferSurface = mpSpriteCanvas->createSurface( maSize, CAIRO_CONTENT_COLOR ); - maSpriteHelper.setSurface( mpBufferSurface ); - - return mpBufferSurface; - } - - OutputDevice* CanvasCustomSprite::getOutputDevice() - { - return mpSpriteCanvas->getOutputDevice(); - } - - OUString SAL_CALL CanvasCustomSprite::getImplementationName() - { - return u"CairoCanvas.CanvasCustomSprite"_ustr; - } - - sal_Bool SAL_CALL CanvasCustomSprite::supportsService( const OUString& ServiceName ) - { - return cppu::supportsService( this, ServiceName ); - } - - uno::Sequence< OUString > SAL_CALL CanvasCustomSprite::getSupportedServiceNames() - { - return { u"com.sun.star.rendering.CanvasCustomSprite"_ustr }; - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvascustomsprite.hxx b/canvas/source/cairo/cairo_canvascustomsprite.hxx deleted file mode 100644 index ffe766ab0966..000000000000 --- a/canvas/source/cairo/cairo_canvascustomsprite.hxx +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#pragma once - -#include <cppuhelper/compbase.hxx> -#include <comphelper/uno3.hxx> - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/rendering/XBitmapCanvas.hpp> -#include <com/sun/star/rendering/XCustomSprite.hpp> -#include <com/sun/star/rendering/XIntegerBitmap.hpp> - -#include <basegfx/point/b2dpoint.hxx> - -#include <base/basemutexhelper.hxx> -#include <base/canvascustomspritebase.hxx> - -#include <vcl/cairo.hxx> - -#include "cairo_sprite.hxx" -#include "cairo_canvashelper.hxx" -#include "cairo_repainttarget.hxx" -#include "cairo_spritehelper.hxx" -#include "cairo_spritecanvas.hxx" - - -namespace cairocanvas -{ - typedef ::cppu::WeakComponentImplHelper< css::rendering::XCustomSprite, - css::rendering::XBitmapCanvas, - css::rendering::XIntegerBitmap, - css::lang::XServiceInfo > CanvasCustomSpriteBase_Base; - /** Mixin Sprite - - Have to mixin the Sprite interface before deriving from - ::canvas::CanvasCustomSpriteBase, as this template should - already implement some of those interface methods. - - The reason why this appears kinda convoluted is the fact that - we cannot specify non-IDL types as WeakComponentImplHelper - template args, and furthermore, don't want to derive - ::canvas::CanvasCustomSpriteBase directly from - ::canvas::Sprite (because derivees of - ::canvas::CanvasCustomSpriteBase have to explicitly forward - the XInterface methods (e.g. via DECLARE_UNO3_AGG_DEFAULTS) - anyway). Basically, ::canvas::CanvasCustomSpriteBase should - remain a base class that provides implementation, not to - enforce any specific interface on its derivees. - */ - class CanvasCustomSpriteSpriteBase_Base : public ::canvas::BaseMutexHelper< CanvasCustomSpriteBase_Base >, - public Sprite, - public SurfaceProvider - { - }; - - typedef ::canvas::CanvasCustomSpriteBase< CanvasCustomSpriteSpriteBase_Base, - SpriteHelper, - CanvasHelper, - ::osl::MutexGuard, - ::cppu::OWeakObject > CanvasCustomSpriteBaseT; - - /* Definition of CanvasCustomSprite class */ - - class CanvasCustomSprite : public CanvasCustomSpriteBaseT, - public RepaintTarget - { - public: - /** Create a custom sprite - - @param rSpriteSize - Size of the sprite in pixel - - @param rRefDevice - Associated output device - - @param rSpriteCanvas - Target canvas - - @param rDevice - Target DX device - */ - CanvasCustomSprite( const css::geometry::RealSize2D& rSpriteSize, - const SpriteCanvasRef& rRefDevice ); - - virtual void disposeThis() override; - - // Forwarding the XComponent implementation to the - // cppu::ImplHelper templated base - // Classname Base doing refcount Base implementing the XComponent interface - // | | | - // V V V - DECLARE_UNO3_XCOMPONENT_AGG_DEFAULTS( CanvasCustomSprite, CanvasCustomSpriteBase_Base, ::cppu::WeakComponentImplHelperBase ) - - // XServiceInfo - virtual OUString SAL_CALL getImplementationName() override; - virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; - - // Sprite - virtual void redraw( const ::cairo::CairoSharedPtr& pCairo, - bool bBufferedUpdate ) const override; - virtual void redraw( const ::cairo::CairoSharedPtr& pCairo, - const ::basegfx::B2DPoint& rOrigOutputPos, - bool bBufferedUpdate ) const override; - - // RepaintTarget - virtual bool repaint( const ::cairo::SurfaceSharedPtr& pSurface, - const css::rendering::ViewState& viewState, - const css::rendering::RenderState& renderState ) override; - - // SurfaceProvider - virtual ::cairo::SurfaceSharedPtr getSurface() override; - virtual ::cairo::SurfaceSharedPtr createSurface( const ::basegfx::B2ISize& rSize, int aContent ) override; - virtual ::cairo::SurfaceSharedPtr createSurface( ::Bitmap& rBitmap ) override; - virtual ::cairo::SurfaceSharedPtr changeSurface() override; - virtual OutputDevice* getOutputDevice() override; - - private: - /** MUST hold here, too, since CanvasHelper only contains a - raw pointer (without refcounting) - */ - SpriteCanvasRef mpSpriteCanvas; - ::cairo::SurfaceSharedPtr mpBufferSurface; - ::basegfx::B2ISize maSize; - }; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvasfont.cxx b/canvas/source/cairo/cairo_canvasfont.cxx deleted file mode 100644 index a2650811b721..000000000000 --- a/canvas/source/cairo/cairo_canvasfont.cxx +++ /dev/null @@ -1,161 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <sal/config.h> - -#include <basegfx/numeric/ftools.hxx> -#include <com/sun/star/rendering/PanoseProportion.hpp> -#include <cppuhelper/supportsservice.hxx> -#include <i18nlangtag/languagetag.hxx> -#include <rtl/math.hxx> -#include <utility> -#include <vcl/metric.hxx> - -#include <canvas/canvastools.hxx> - -#include "cairo_canvasfont.hxx" -#include "cairo_textlayout.hxx" - -using namespace ::com::sun::star; - -namespace cairocanvas -{ - - CanvasFont::CanvasFont( const rendering::FontRequest& rFontRequest, - const uno::Sequence< beans::PropertyValue >& rExtraFontProperties, - const geometry::Matrix2D& rFontMatrix, - SurfaceProviderRef rDevice ) : - maFont( vcl::Font( rFontRequest.FontDescription.FamilyName, - rFontRequest.FontDescription.StyleName, - Size( 0, ::basegfx::fround(rFontRequest.CellSize) ) ) ), - maFontRequest( rFontRequest ), - mpRefDevice(std::move( rDevice )), - mnEmphasisMark(0) - { - ::canvas::tools::extractExtraFontProperties(rExtraFontProperties, mnEmphasisMark); - - maFont->SetAlignment( ALIGN_BASELINE ); - maFont->SetCharSet( (rFontRequest.FontDescription.IsSymbolFont==css::util::TriState_YES) ? RTL_TEXTENCODING_SYMBOL : RTL_TEXTENCODING_UNICODE ); - maFont->SetVertical( rFontRequest.FontDescription.IsVertical==css::util::TriState_YES ); - - // TODO(F2): improve panose->vclenum conversion - maFont->SetWeight( static_cast<FontWeight>(rFontRequest.FontDescription.FontDescription.Weight) ); - maFont->SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL ); - maFont->SetPitch( - rFontRequest.FontDescription.FontDescription.Proportion == rendering::PanoseProportion::MONO_SPACED - ? PITCH_FIXED : PITCH_VARIABLE); - - maFont->SetLanguage( LanguageTag::convertToLanguageType( rFontRequest.Locale, false)); - - // adjust to stretched/shrunk font - if( ::rtl::math::approxEqual( rFontMatrix.m00, rFontMatrix.m11) ) - return; - - VclPtr<OutputDevice> pOutDev( mpRefDevice->getOutputDevice() ); - - if( !pOutDev ) - return; - - const bool bOldMapState( pOutDev->IsMapModeEnabled() ); - pOutDev->EnableMapMode(false); - - const Size aSize = pOutDev->GetFontMetric( *maFont ).GetFontSize(); - - const double fDividend( rFontMatrix.m10 + rFontMatrix.m11 ); - double fStretch = rFontMatrix.m00 + rFontMatrix.m01; - - if( !::basegfx::fTools::equalZero( fDividend) ) - fStretch /= fDividend; - - const tools::Long nNewWidth = ::basegfx::fround( aSize.Width() * fStretch ); - - maFont->SetAverageFontWidth( nNewWidth ); - - pOutDev->EnableMapMode(bOldMapState); - } - - void CanvasFont::disposing(std::unique_lock<std::mutex>& rGuard) - { - rGuard.unlock(); - { - SolarMutexGuard aGuard; - mpRefDevice.clear(); - } - rGuard.lock(); - } - - uno::Reference< rendering::XTextLayout > SAL_CALL CanvasFont::createTextLayout( const rendering::StringContext& aText, sal_Int8 nDirection, sal_Int64 nRandomSeed ) - { - SolarMutexGuard aGuard; - - if( !mpRefDevice.is() ) - return uno::Reference< rendering::XTextLayout >(); // we're disposed - - return new TextLayout( aText, - nDirection, - nRandomSeed, - Reference( this ), - mpRefDevice ); - } - - rendering::FontRequest SAL_CALL CanvasFont::getFontRequest( ) - { - return maFontRequest; - } - - rendering::FontMetrics SAL_CALL CanvasFont::getFontMetrics( ) - { - // TODO(F1) - return rendering::FontMetrics(); - } - - uno::Sequence< double > SAL_CALL CanvasFont::getAvailableSizes( ) - { - // TODO(F1) - return uno::Sequence< double >(); - } - - uno::Sequence< beans::PropertyValue > SAL_CALL CanvasFont::getExtraFontProperties( ) - { - // TODO(F1) - return uno::Sequence< beans::PropertyValue >(); - } - - OUString SAL_CALL CanvasFont::getImplementationName() - { - return u"CairoCanvas::CanvasFont"_ustr; - } - - sal_Bool SAL_CALL CanvasFont::supportsService( const OUString& ServiceName ) - { - return cppu::supportsService( this, ServiceName ); - } - - uno::Sequence< OUString > SAL_CALL CanvasFont::getSupportedServiceNames() - { - return { u"com.sun.star.rendering.CanvasFont"_ustr }; - } - - vcl::Font const & CanvasFont::getVCLFont() const - { - return *maFont; - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvasfont.hxx b/canvas/source/cairo/cairo_canvasfont.hxx deleted file mode 100644 index d5e015006c98..000000000000 --- a/canvas/source/cairo/cairo_canvasfont.hxx +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#pragma once - -#include <comphelper/compbase.hxx> - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/geometry/Matrix2D.hpp> -#include <com/sun/star/rendering/FontRequest.hpp> -#include <com/sun/star/rendering/XCanvasFont.hpp> - -#include <vcl/font.hxx> - -#include <vclwrapper.hxx> - -#include "cairo_surfaceprovider.hxx" - - -/* Definition of CanvasFont class */ - -namespace cairocanvas -{ - typedef ::comphelper::WeakComponentImplHelper< css::rendering::XCanvasFont, - css::lang::XServiceInfo > CanvasFont_Base; - - class CanvasFont : public CanvasFont_Base - { - public: - typedef rtl::Reference<CanvasFont> Reference; - /// make noncopyable - CanvasFont(const CanvasFont&) = delete; - const CanvasFont& operator=(const CanvasFont&) = delete; - - CanvasFont( const css::rendering::FontRequest& fontRequest, - const css::uno::Sequence< css::beans::PropertyValue >& extraFontProperties, - const css::geometry::Matrix2D& rFontMatrix, - SurfaceProviderRef rDevice ); - - /// Dispose all internal references - virtual void disposing(std::unique_lock<std::mutex>& rGuard) override; - - // XCanvasFont - virtual css::uno::Reference< css::rendering::XTextLayout > SAL_CALL createTextLayout( const css::rendering::StringContext& aText, sal_Int8 nDirection, sal_Int64 nRandomSeed ) override; - virtual css::rendering::FontRequest SAL_CALL getFontRequest( ) override; - virtual css::rendering::FontMetrics SAL_CALL getFontMetrics( ) override; - virtual css::uno::Sequence< double > SAL_CALL getAvailableSizes( ) override; - virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getExtraFontProperties( ) override; - - // XServiceInfo - virtual OUString SAL_CALL getImplementationName() override; - virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; - - vcl::Font const & getVCLFont() const; - - sal_uInt32 getEmphasisMark() const { return mnEmphasisMark; } - - private: - ::canvas::vcltools::VCLObject<vcl::Font> maFont; - css::rendering::FontRequest maFontRequest; - SurfaceProviderRef mpRefDevice; - sal_uInt32 mnEmphasisMark; - }; - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvashelper.cxx b/canvas/source/cairo/cairo_canvashelper.cxx deleted file mode 100644 index 701ad1e47859..000000000000 --- a/canvas/source/cairo/cairo_canvashelper.cxx +++ /dev/null @@ -1,2045 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <sal/config.h> -#include <sal/log.hxx> - -#include <algorithm> -#include <tuple> - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/utils/canvastools.hxx> -#include <basegfx/utils/keystoplerp.hxx> -#include <basegfx/utils/lerp.hxx> -#include <com/sun/star/rendering/ColorComponentTag.hpp> -#include <com/sun/star/rendering/ColorSpaceType.hpp> -#include <com/sun/star/rendering/CompositeOperation.hpp> -#include <com/sun/star/rendering/IntegerBitmapLayout.hpp> -#include <com/sun/star/rendering/PathCapType.hpp> -#include <com/sun/star/rendering/PathJoinType.hpp> -#include <com/sun/star/rendering/RenderingIntent.hpp> -#include <com/sun/star/rendering/TexturingMode.hpp> -#include <com/sun/star/rendering/XIntegerBitmapColorSpace.hpp> -#include <com/sun/star/util/Endianness.hpp> -#include <comphelper/sequence.hxx> -#include <cppuhelper/implbase.hxx> -#include <rtl/math.hxx> -#include <comphelper/diagnose_ex.hxx> -#include <vcl/bitmapex.hxx> -#include <vcl/BitmapTools.hxx> -#include <vcl/canvastools.hxx> -#include <vcl/virdev.hxx> - -#include <canvas/canvastools.hxx> -#include <parametricpolypolygon.hxx> -#include <cairo.h> - -#include "cairo_cachedbitmap.hxx" -#include "cairo_canvasbitmap.hxx" -#include "cairo_canvashelper.hxx" - -using namespace ::cairo; -using namespace ::com::sun::star; - -namespace cairocanvas -{ - CanvasHelper::CanvasHelper() : - mpSurfaceProvider(nullptr), - mpDevice(nullptr), - mbHaveAlpha() - { - } - - void CanvasHelper::disposing() - { - mpSurface.reset(); - mpCairo.reset(); - mpVirtualDevice.disposeAndClear(); - mpDevice = nullptr; - mpSurfaceProvider = nullptr; - } - - void CanvasHelper::init( const ::basegfx::B2ISize& rSizePixel, - SurfaceProvider& rSurfaceProvider, - rendering::XGraphicDevice* pDevice ) - { - maSize = rSizePixel; - mpSurfaceProvider = &rSurfaceProvider; - mpDevice = pDevice; - } - - void CanvasHelper::setSize( const ::basegfx::B2ISize& rSize ) - { - maSize = rSize; - } - - void CanvasHelper::setSurface( const SurfaceSharedPtr& pSurface, bool bHasAlpha ) - { - mbHaveAlpha = bHasAlpha; - mpVirtualDevice.disposeAndClear(); - mpSurface = pSurface; - mpCairo = pSurface->getCairo(); - } - - static void setColor( cairo_t* pCairo, - const uno::Sequence<double>& rColor ) - { - if( rColor.getLength() > 3 ) - { - cairo_set_source_rgba( pCairo, - rColor[0], - rColor[1], - rColor[2], - rColor[3] ); - } - else if( rColor.getLength() == 3 ) - cairo_set_source_rgb( pCairo, - rColor[0], - rColor[1], - rColor[2] ); - } - - void CanvasHelper::useStates( const rendering::ViewState& viewState, - const rendering::RenderState& renderState, - bool bSetColor ) - { - cairo_matrix_t aViewMatrix; - cairo_matrix_t aRenderMatrix; - cairo_matrix_t aCombinedMatrix; - - cairo_matrix_init( &aViewMatrix, - viewState.AffineTransform.m00, viewState.AffineTransform.m10, viewState.AffineTransform.m01, - viewState.AffineTransform.m11, viewState.AffineTransform.m02, viewState.AffineTransform.m12); - cairo_matrix_init( &aRenderMatrix, - renderState.AffineTransform.m00, renderState.AffineTransform.m10, renderState.AffineTransform.m01, - renderState.AffineTransform.m11, renderState.AffineTransform.m02, renderState.AffineTransform.m12); - cairo_matrix_multiply( &aCombinedMatrix, &aRenderMatrix, &aViewMatrix); - - if( viewState.Clip.is() ) - { - SAL_INFO( "canvas.cairo", "view clip"); - - aViewMatrix.x0 = basegfx::fround( aViewMatrix.x0 ); - aViewMatrix.y0 = basegfx::fround( aViewMatrix.y0 ); - cairo_set_matrix( mpCairo.get(), &aViewMatrix ); - doPolyPolygonPath( viewState.Clip, Clip ); - } - - aCombinedMatrix.x0 = basegfx::fround( aCombinedMatrix.x0 ); - aCombinedMatrix.y0 = basegfx::fround( aCombinedMatrix.y0 ); - cairo_set_matrix( mpCairo.get(), &aCombinedMatrix ); - - if( renderState.Clip.is() ) - { - SAL_INFO( "canvas.cairo", "render clip BEGIN"); - - doPolyPolygonPath( renderState.Clip, Clip ); - SAL_INFO( "canvas.cairo", "render clip END"); - } - - if( bSetColor ) - setColor(mpCairo.get(),renderState.DeviceColor); - - cairo_operator_t compositingMode( CAIRO_OPERATOR_OVER ); - switch( renderState.CompositeOperation ) - { - case rendering::CompositeOperation::CLEAR: - compositingMode = CAIRO_OPERATOR_CLEAR; - break; - case rendering::CompositeOperation::SOURCE: - compositingMode = CAIRO_OPERATOR_SOURCE; - break; - case rendering::CompositeOperation::DESTINATION: - case rendering::CompositeOperation::UNDER: - compositingMode = CAIRO_OPERATOR_DEST; - break; - case rendering::CompositeOperation::OVER: - compositingMode = CAIRO_OPERATOR_OVER; - break; - case rendering::CompositeOperation::INSIDE: - compositingMode = CAIRO_OPERATOR_IN; - break; - case rendering::CompositeOperation::INSIDE_REVERSE: - compositingMode = CAIRO_OPERATOR_OUT; - break; - case rendering::CompositeOperation::OUTSIDE: - compositingMode = CAIRO_OPERATOR_DEST_OVER; - break; - case rendering::CompositeOperation::OUTSIDE_REVERSE: - compositingMode = CAIRO_OPERATOR_DEST_OUT; - break; - case rendering::CompositeOperation::ATOP: - compositingMode = CAIRO_OPERATOR_ATOP; - break; - case rendering::CompositeOperation::ATOP_REVERSE: - compositingMode = CAIRO_OPERATOR_DEST_ATOP; - break; - case rendering::CompositeOperation::XOR: - compositingMode = CAIRO_OPERATOR_XOR; - break; - case rendering::CompositeOperation::ADD: - compositingMode = CAIRO_OPERATOR_ADD; - break; - case rendering::CompositeOperation::SATURATE: - compositingMode = CAIRO_OPERATOR_SATURATE; - break; - } - cairo_set_operator( mpCairo.get(), compositingMode ); - } - - void CanvasHelper::clear() - { - SAL_INFO( "canvas.cairo", "clear whole area: " << maSize.getWidth() << " x " << maSize.getHeight() ); - - if( !mpCairo ) - return; - - cairo_save( mpCairo.get() ); - - cairo_identity_matrix( mpCairo.get() ); - // this does not really differ from all-zero, as cairo - // internally converts to premultiplied alpha. but anyway, - // this keeps it consistent with the other canvas impls - if( mbHaveAlpha ) - cairo_set_source_rgba( mpCairo.get(), 1.0, 1.0, 1.0, 0.0 ); - else - cairo_set_source_rgb( mpCairo.get(), 1.0, 1.0, 1.0 ); - cairo_set_operator( mpCairo.get(), CAIRO_OPERATOR_SOURCE ); - - cairo_rectangle( mpCairo.get(), 0, 0, maSize.getWidth(), maSize.getHeight() ); - cairo_fill( mpCairo.get() ); - - cairo_restore( mpCairo.get() ); - } - - void CanvasHelper::drawLine( const rendering::XCanvas* /*pCanvas*/, - const geometry::RealPoint2D& aStartPoint, - const geometry::RealPoint2D& aEndPoint, - const rendering::ViewState& viewState, - const rendering::RenderState& renderState ) - { - if( !mpCairo ) - return; - - cairo_save( mpCairo.get() ); - - cairo_set_line_width( mpCairo.get(), 1 ); - - useStates( viewState, renderState, true ); - - cairo_move_to( mpCairo.get(), aStartPoint.X + 0.5, aStartPoint.Y + 0.5 ); - cairo_line_to( mpCairo.get(), aEndPoint.X + 0.5, aEndPoint.Y + 0.5 ); - cairo_stroke( mpCairo.get() ); - - cairo_restore( mpCairo.get() ); - } - - void CanvasHelper::drawBezier( const rendering::XCanvas* , - const geometry::RealBezierSegment2D& aBezierSegment, - const geometry::RealPoint2D& aEndPoint, - const rendering::ViewState& viewState, - const rendering::RenderState& renderState ) - { - if( !mpCairo ) - return; - - cairo_save( mpCairo.get() ); - - cairo_set_line_width( mpCairo.get(), 1 ); - - useStates( viewState, renderState, true ); - - cairo_move_to( mpCairo.get(), aBezierSegment.Px + 0.5, aBezierSegment.Py + 0.5 ); - // tdf#99165 correction of control points not needed here, only hairlines drawn - // (see cairo_set_line_width above) - cairo_curve_to( mpCairo.get(), - aBezierSegment.C1x + 0.5, aBezierSegment.C1y + 0.5, - aBezierSegment.C2x + 0.5, aBezierSegment.C2y + 0.5, - aEndPoint.X + 0.5, aEndPoint.Y + 0.5 ); - cairo_stroke( mpCairo.get() ); - - cairo_restore( mpCairo.get() ); - } - -constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas::ParametricPolyPolygon"; - - /** surfaceFromXBitmap Create a surface from XBitmap - * @param xBitmap bitmap image that will be used for the surface - * @param bHasAlpha will be set to true if resulting surface has alpha - * - * This is a helper function for the other surfaceFromXBitmap(). - * This function tries to create surface from xBitmap by checking if xBitmap is CanvasBitmap or SpriteCanvas. - * - * @return created surface or NULL - **/ - static SurfaceSharedPtr surfaceFromXBitmap( const uno::Reference< rendering::XBitmap >& xBitmap ) - { - CanvasBitmap* pBitmapImpl = dynamic_cast< CanvasBitmap* >( xBitmap.get() ); - if( pBitmapImpl ) - return pBitmapImpl->getSurface(); - - SurfaceProvider* pSurfaceProvider = dynamic_cast<SurfaceProvider*>( xBitmap.get() ); - if( pSurfaceProvider ) - return pSurfaceProvider->getSurface(); - - return SurfaceSharedPtr(); - } - - static ::BitmapEx bitmapExFromXBitmap( const uno::Reference< rendering::XBitmap >& xBitmap ) - { - // TODO(F1): Add support for floating point bitmap formats - uno::Reference<rendering::XIntegerReadOnlyBitmap> xIntBmp(xBitmap, - uno::UNO_QUERY_THROW); - ::BitmapEx aBmpEx = vcl::unotools::bitmapExFromXBitmap(xIntBmp); - if( !aBmpEx.IsEmpty() ) - return aBmpEx; - - // TODO(F1): extract pixel from XBitmap interface - ENSURE_OR_THROW( false, - "bitmapExFromXBitmap(): could not extract BitmapEx" ); - - return ::BitmapEx(); - } - - /** surfaceFromXBitmap Create a surface from XBitmap - * @param xBitmap bitmap image that will be used for the surface - * @param rDevice reference to the device into which we want to draw - * @param data will be filled with alpha data, if xBitmap is alpha/transparent image - * @param bHasAlpha will be set to true if resulting surface has alpha - * - * This function tries various methods for creating a surface from xBitmap. It also uses - * the helper function surfaceFromXBitmap( xBitmap, bHasAlpha ) - * - * @return created surface or NULL - **/ - static SurfaceSharedPtr surfaceFromXBitmap( const uno::Reference< rendering::XBitmap >& xBitmap, const SurfaceProviderRef& rSurfaceProvider, unsigned char*& data, bool& bHasAlpha ) - { - bHasAlpha = xBitmap->hasAlpha(); - SurfaceSharedPtr pSurface = surfaceFromXBitmap( xBitmap ); - if( pSurface ) - data = nullptr; - else - { - ::BitmapEx aBmpEx = bitmapExFromXBitmap(xBitmap); - ::Bitmap aBitmap = aBmpEx.GetBitmap(); - - // there's no pixmap for alpha bitmap. we might still - // use rgb pixmap and only access alpha pixels the - // slow way. now we just speedup rgb bitmaps - if( !aBmpEx.IsAlpha() ) - { - pSurface = rSurfaceProvider->createSurface( aBitmap ); - data = nullptr; - bHasAlpha = false; - } - - if( !pSurface ) - { - tools::Long nWidth; - tools::Long nHeight; - vcl::bitmap::CanvasCairoExtractBitmapData(aBmpEx, aBitmap, data, bHasAlpha, nWidth, nHeight); - - pSurface = rSurfaceProvider->getOutputDevice()->CreateSurface( - CairoSurfaceSharedPtr( - cairo_image_surface_create_for_data( - data, - bHasAlpha ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24, - nWidth, nHeight, nWidth*4 ), - &cairo_surface_destroy) ); - - SAL_INFO( "canvas.cairo","image: " << nWidth << " x " << nHeight << " alpha: " << bHasAlpha); - } - } - - return pSurface; - } - - static void addColorStops( cairo_pattern_t* pPattern, const uno::Sequence< uno::Sequence< double > >& rColors, const uno::Sequence< double >& rStops, bool bReverseStops ) - { - int i; - - OSL_ASSERT( rColors.getLength() == rStops.getLength() ); - - for( i = 0; i < rColors.getLength(); i++ ) - { - const uno::Sequence< double >& rColor( rColors[i] ); - float stop = bReverseStops ? 1 - rStops[i] : rStops[i]; - if( rColor.getLength() == 3 ) - cairo_pattern_add_color_stop_rgb( pPattern, stop, rColor[0], rColor[1], rColor[2] ); - else if( rColor.getLength() == 4 ) - { - double alpha = rColor[3]; - // cairo expects premultiplied alpha - cairo_pattern_add_color_stop_rgba( pPattern, stop, rColor[0]*alpha, rColor[1]*alpha, rColor[2]*alpha, alpha ); - } - } - } - - static uno::Sequence<double> lerp(const uno::Sequence<double>& rLeft, const uno::Sequence<double>& rRight, double fAlpha) - { - if( rLeft.getLength() == 3 ) - { - return - { - basegfx::utils::lerp(rLeft[0],rRight[0],fAlpha), - basegfx::utils::lerp(rLeft[1],rRight[1],fAlpha), - basegfx::utils::lerp(rLeft[2],rRight[2],fAlpha) - }; - } - else if( rLeft.getLength() == 4 ) - { - return - { - basegfx::utils::lerp(rLeft[0],rRight[0],fAlpha), - basegfx::utils::lerp(rLeft[1],rRight[1],fAlpha), - basegfx::utils::lerp(rLeft[2],rRight[2],fAlpha), - basegfx::utils::lerp(rLeft[3],rRight[3],fAlpha) - }; - } - - return {}; - } - - static cairo_pattern_t* patternFromParametricPolyPolygon( ::canvas::ParametricPolyPolygon const & rPolygon ) - { - cairo_pattern_t* pPattern = nullptr; - const ::canvas::ParametricPolyPolygon::Values& aValues = rPolygon.getValues(); - double x0, x1, y0, y1, cx, cy, r0, r1; - - switch( aValues.meType ) - { - case ::canvas::ParametricPolyPolygon::GradientType::Linear: - x0 = 0; - y0 = 0; - x1 = 1; - y1 = 0; - pPattern = cairo_pattern_create_linear( x0, y0, x1, y1 ); - addColorStops( pPattern, aValues.maColors, aValues.maStops, false ); - break; - - case ::canvas::ParametricPolyPolygon::GradientType::Elliptical: - cx = 0; - cy = 0; - r0 = 0; - r1 = 1; - - pPattern = cairo_pattern_create_radial( cx, cy, r0, cy, cy, r1 ); - addColorStops( pPattern, aValues.maColors, aValues.maStops, true ); - break; - default: - break; - } - - return pPattern; - } - - static void doOperation( Operation aOperation, - cairo_t* pCairo, - const uno::Sequence< rendering::Texture >* pTextures, - const SurfaceProviderRef& pDevice, - const basegfx::B2DRange& rBounds ) - { - switch( aOperation ) - { - case Fill: - /* TODO: multitexturing */ - if( pTextures ) - { - const css::rendering::Texture& aTexture ( (*pTextures)[0] ); - if( aTexture.Bitmap.is() ) - { - unsigned char* data = nullptr; - bool bHasAlpha = false; - SurfaceSharedPtr pSurface = surfaceFromXBitmap( (*pTextures)[0].Bitmap, pDevice, data, bHasAlpha ); - - if( pSurface ) - { - cairo_pattern_t* pPattern; - - cairo_save( pCairo ); - - css::geometry::AffineMatrix2D aTransform( aTexture.AffineTransform ); - cairo_matrix_t aScaleMatrix, aTextureMatrix, aScaledTextureMatrix; - - cairo_matrix_init( &aTextureMatrix, - aTransform.m00, aTransform.m10, aTransform.m01, - aTransform.m11, aTransform.m02, aTransform.m12); - - geometry::IntegerSize2D aSize = aTexture.Bitmap->getSize(); - - cairo_matrix_init_scale( &aScaleMatrix, 1.0/aSize.Width, 1.0/aSize.Height ); - cairo_matrix_multiply( &aScaledTextureMatrix, &aScaleMatrix, &aTextureMatrix ); - cairo_matrix_invert( &aScaledTextureMatrix ); - - // we don't care about repeat mode yet, so the workaround is disabled for now - pPattern = cairo_pattern_create_for_surface( pSurface->getCairoSurface().get() ); - - if( aTexture.RepeatModeX == rendering::TexturingMode::REPEAT && - aTexture.RepeatModeY == rendering::TexturingMode::REPEAT ) - { - cairo_pattern_set_extend( pPattern, CAIRO_EXTEND_REPEAT ); - } - else if ( aTexture.RepeatModeX == rendering::TexturingMode::NONE && - aTexture.RepeatModeY == rendering::TexturingMode::NONE ) - { - cairo_pattern_set_extend( pPattern, CAIRO_EXTEND_NONE ); - } - else if ( aTexture.RepeatModeX == rendering::TexturingMode::CLAMP && - aTexture.RepeatModeY == rendering::TexturingMode::CLAMP ) - { - cairo_pattern_set_extend( pPattern, CAIRO_EXTEND_PAD ); - } - - aScaledTextureMatrix.x0 = basegfx::fround( aScaledTextureMatrix.x0 ); - aScaledTextureMatrix.y0 = basegfx::fround( aScaledTextureMatrix.y0 ); - - double x1, y1, x2, y2; - cairo_path_extents(pCairo, &x1, &y1, &x2, &y2); - aScaledTextureMatrix.x0 -= (x1 * aScaledTextureMatrix.xx); - aScaledTextureMatrix.y0 -= (y1 * aScaledTextureMatrix.yy); - - cairo_pattern_set_matrix( pPattern, &aScaledTextureMatrix ); - - cairo_set_source( pCairo, pPattern ); - if( !bHasAlpha ) - cairo_set_operator( pCairo, CAIRO_OPERATOR_SOURCE ); - cairo_fill( pCairo ); - - cairo_restore( pCairo ); - - cairo_pattern_destroy( pPattern ); - } - - if( data ) - free( data ); - } - else if( aTexture.Gradient.is() ) - { - uno::Reference< lang::XServiceInfo > xRef( aTexture.Gradient, uno::UNO_QUERY ); - - SAL_INFO( "canvas.cairo", "gradient fill" ); - if( xRef.is() && xRef->getImplementationName() == PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME ) - { - // TODO(Q1): Maybe use dynamic_cast here - - // TODO(E1): Return value - // TODO(F1): FillRule - SAL_INFO( "canvas.cairo", "known implementation" ); - - ::canvas::ParametricPolyPolygon* pPolyImpl = static_cast< ::canvas::ParametricPolyPolygon* >( aTexture.Gradient.get() ); - css::geometry::AffineMatrix2D aTransform( aTexture.AffineTransform ); - cairo_matrix_t aTextureMatrix; - - cairo_matrix_init( &aTextureMatrix, - aTransform.m00, aTransform.m10, aTransform.m01, - aTransform.m11, aTransform.m02, aTransform.m12); - if( pPolyImpl->getValues().meType == canvas::ParametricPolyPolygon::GradientType::Rectangular ) - { - // no general path gradient yet in cairo; emulate then - cairo_save( pCairo ); - cairo_clip( pCairo ); - - // fill bound rect with start color - cairo_rectangle( pCairo, rBounds.getMinX(), rBounds.getMinY(), - rBounds.getWidth(), rBounds.getHeight() ); - setColor(pCairo,pPolyImpl->getValues().maColors[0]); - cairo_fill(pCairo); - - cairo_transform( pCairo, &aTextureMatrix ); - - // longest line in gradient bound rect - const unsigned int nGradientSize( - static_cast<unsigned int>( - ::basegfx::B2DVector(rBounds.getMinimum() - rBounds.getMaximum()).getLength() + 1.0 ) ); - - // typical number for pixel of the same color (strip size) - const unsigned int nStripSize( nGradientSize < 50 ? 2 : 4 ); - - // use at least three steps, and at utmost the number of color - // steps - const unsigned int nStepCount( - std::max( - 3U, - std::min( - nGradientSize / nStripSize, - 128U )) + 1 ); - - const uno::Sequence<double>* pColors=&pPolyImpl->getValues().maColors[0]; - basegfx::utils::KeyStopLerp aLerper(pPolyImpl->getValues().maStops); - for( unsigned int i=1; i<nStepCount; ++i ) - { - const double fT( i/double(nStepCount) ); - - std::ptrdiff_t nIndex; - double fAlpha; - std::tie(nIndex,fAlpha)=aLerper.lerp(fT); - - setColor(pCairo, lerp(pColors[nIndex], pColors[nIndex+1], fAlpha)); - cairo_rectangle( pCairo, -1+fT, -1+fT, 2-2*fT, 2-2*fT ); - cairo_fill(pCairo); - } - - cairo_restore( pCairo ); - } - else - { - cairo_pattern_t* pPattern = patternFromParametricPolyPolygon( *pPolyImpl ); - - if( pPattern ) - { - SAL_INFO( "canvas.cairo", "filling with pattern" ); - - cairo_save( pCairo ); - - cairo_transform( pCairo, &aTextureMatrix ); - cairo_set_source( pCairo, pPattern ); - cairo_fill( pCairo ); - cairo_restore( pCairo ); - - cairo_pattern_destroy( pPattern ); - } - } - } - } - } - else - cairo_fill( pCairo ); - SAL_INFO( "canvas.cairo", "fill"); - break; - case Stroke: - cairo_stroke( pCairo ); - SAL_INFO( "canvas.cairo", "stroke"); - break; - case Clip: - cairo_clip( pCairo ); -e ... etc. - the rest is truncated