/src/libreoffice/vcl/headless/SvpGraphicsBackend.cxx
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | | /* |
3 | | * This file is part of the LibreOffice project. |
4 | | * |
5 | | * This Source Code Form is subject to the terms of the Mozilla Public |
6 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
7 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
8 | | * |
9 | | * This file incorporates work covered by the following license notice: |
10 | | * |
11 | | * Licensed to the Apache Software Foundation (ASF) under one or more |
12 | | * contributor license agreements. See the NOTICE file distributed |
13 | | * with this work for additional information regarding copyright |
14 | | * ownership. The ASF licenses this file to you under the Apache |
15 | | * License, Version 2.0 (the "License"); you may not use this file |
16 | | * except in compliance with the License. You may obtain a copy of |
17 | | * the License at http://www.apache.org/licenses/LICENSE-2.0 . |
18 | | */ |
19 | | |
20 | | #include <headless/SvpGraphicsBackend.hxx> |
21 | | |
22 | | SvpGraphicsBackend::SvpGraphicsBackend(CairoCommon& rCairoCommon) |
23 | 760k | : m_rCairoCommon(rCairoCommon) |
24 | 760k | { |
25 | 760k | } |
26 | | |
27 | | void SvpGraphicsBackend::setClipRegion(const vcl::Region& i_rClip) |
28 | 24.1k | { |
29 | 24.1k | m_rCairoCommon.m_aClipRegion = i_rClip; |
30 | 24.1k | } |
31 | | |
32 | 772k | void SvpGraphicsBackend::ResetClipRegion() { m_rCairoCommon.m_aClipRegion.SetNull(); } |
33 | | |
34 | 1.75M | sal_uInt16 SvpGraphicsBackend::GetBitCount() const { return m_rCairoCommon.GetBitCount(); } |
35 | | |
36 | | tools::Long SvpGraphicsBackend::GetGraphicsWidth() const |
37 | 0 | { |
38 | 0 | return m_rCairoCommon.m_pSurface ? m_rCairoCommon.m_aFrameSize.getX() : 0; |
39 | 0 | } |
40 | | |
41 | 323k | void SvpGraphicsBackend::SetLineColor() { m_rCairoCommon.m_oLineColor = std::nullopt; } |
42 | | |
43 | 9.27k | void SvpGraphicsBackend::SetLineColor(Color nColor) { m_rCairoCommon.m_oLineColor = nColor; } |
44 | | |
45 | 2.74k | void SvpGraphicsBackend::SetFillColor() { m_rCairoCommon.m_oFillColor = std::nullopt; } |
46 | | |
47 | 8.85M | void SvpGraphicsBackend::SetFillColor(Color nColor) { m_rCairoCommon.m_oFillColor = nColor; } |
48 | | |
49 | | void SvpGraphicsBackend::SetXORMode(bool bSet, bool bInvertOnly) |
50 | 775k | { |
51 | 775k | m_rCairoCommon.SetXORMode(bSet, bInvertOnly); |
52 | 775k | } |
53 | | |
54 | | void SvpGraphicsBackend::SetROPLineColor(SalROPColor nROPColor) |
55 | 1.50k | { |
56 | 1.50k | m_rCairoCommon.SetROPLineColor(nROPColor); |
57 | 1.50k | } |
58 | | |
59 | | void SvpGraphicsBackend::SetROPFillColor(SalROPColor nROPColor) |
60 | 1.63k | { |
61 | 1.63k | m_rCairoCommon.SetROPFillColor(nROPColor); |
62 | 1.63k | } |
63 | | |
64 | | void SvpGraphicsBackend::drawPixel(tools::Long nX, tools::Long nY) |
65 | 1.16M | { |
66 | 1.16M | m_rCairoCommon.drawPixel(m_rCairoCommon.m_oLineColor, nX, nY, getAntiAlias()); |
67 | 1.16M | } |
68 | | |
69 | | void SvpGraphicsBackend::drawPixel(tools::Long nX, tools::Long nY, Color aColor) |
70 | 433k | { |
71 | 433k | m_rCairoCommon.drawPixel(aColor, nX, nY, getAntiAlias()); |
72 | 433k | } |
73 | | |
74 | | void SvpGraphicsBackend::drawLine(tools::Long nX1, tools::Long nY1, tools::Long nX2, |
75 | | tools::Long nY2) |
76 | 1.41M | { |
77 | 1.41M | m_rCairoCommon.drawLine(nX1, nY1, nX2, nY2, getAntiAlias()); |
78 | 1.41M | } |
79 | | |
80 | | void SvpGraphicsBackend::drawRect(tools::Long nX, tools::Long nY, tools::Long nWidth, |
81 | | tools::Long nHeight) |
82 | 2.91M | { |
83 | 2.91M | m_rCairoCommon.drawRect(nX, nY, nWidth, nHeight, getAntiAlias()); |
84 | 2.91M | } |
85 | | |
86 | | void SvpGraphicsBackend::drawPolyLine(sal_uInt32 nPoints, const Point* pPtAry) |
87 | 8.43k | { |
88 | 8.43k | m_rCairoCommon.drawPolyLine(nPoints, pPtAry, getAntiAlias()); |
89 | 8.43k | } |
90 | | |
91 | | void SvpGraphicsBackend::drawPolygon(sal_uInt32 nPoints, const Point* pPtAry) |
92 | 7.51M | { |
93 | 7.51M | m_rCairoCommon.drawPolygon(nPoints, pPtAry, getAntiAlias()); |
94 | 7.51M | } |
95 | | |
96 | | void SvpGraphicsBackend::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPointCounts, |
97 | | const Point** pPtAry) |
98 | 2.83M | { |
99 | 2.83M | m_rCairoCommon.drawPolyPolygon(nPoly, pPointCounts, pPtAry, getAntiAlias()); |
100 | 2.83M | } |
101 | | |
102 | | void SvpGraphicsBackend::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDevice, |
103 | | const basegfx::B2DPolyPolygon& rPolyPolygon, |
104 | | double fTransparency) |
105 | 542k | { |
106 | 542k | m_rCairoCommon.drawPolyPolygon(rObjectToDevice, rPolyPolygon, fTransparency, getAntiAlias()); |
107 | 542k | } |
108 | | |
109 | | bool SvpGraphicsBackend::drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDevice, |
110 | | const basegfx::B2DPolygon& rPolyLine, double fTransparency, |
111 | | double fLineWidth, const std::vector<double>* pStroke, |
112 | | basegfx::B2DLineJoin eLineJoin, |
113 | | css::drawing::LineCap eLineCap, double fMiterMinimumAngle, |
114 | | bool bPixelSnapHairline) |
115 | 2.16M | { |
116 | 2.16M | return m_rCairoCommon.drawPolyLine(rObjectToDevice, rPolyLine, fTransparency, fLineWidth, |
117 | 2.16M | pStroke, eLineJoin, eLineCap, fMiterMinimumAngle, |
118 | 2.16M | bPixelSnapHairline, getAntiAlias()); |
119 | 2.16M | } |
120 | | |
121 | | bool SvpGraphicsBackend::drawPolyLineBezier(sal_uInt32, const Point*, const PolyFlags*) |
122 | 0 | { |
123 | 0 | SAL_INFO("vcl.gdi", "unsupported SvpSalGraphics::drawPolyLineBezier case"); |
124 | 0 | return false; |
125 | 0 | } |
126 | | |
127 | | bool SvpGraphicsBackend::drawPolygonBezier(sal_uInt32, const Point*, const PolyFlags*) |
128 | 93.9k | { |
129 | 93.9k | SAL_INFO("vcl.gdi", "unsupported SvpSalGraphics::drawPolygonBezier case"); |
130 | 93.9k | return false; |
131 | 93.9k | } |
132 | | |
133 | | bool SvpGraphicsBackend::drawPolyPolygonBezier(sal_uInt32, const sal_uInt32*, const Point* const*, |
134 | | const PolyFlags* const*) |
135 | 100k | { |
136 | 100k | SAL_INFO("vcl.gdi", "unsupported SvpSalGraphics::drawPolyPolygonBezier case"); |
137 | 100k | return false; |
138 | 100k | } |
139 | | |
140 | | void SvpGraphicsBackend::copyArea(tools::Long nDestX, tools::Long nDestY, tools::Long nSrcX, |
141 | | tools::Long nSrcY, tools::Long nSrcWidth, tools::Long nSrcHeight, |
142 | | bool /*bWindowInvalidate*/) |
143 | 0 | { |
144 | 0 | SalTwoRect aTR(nSrcX, nSrcY, nSrcWidth, nSrcHeight, nDestX, nDestY, nSrcWidth, nSrcHeight); |
145 | |
|
146 | 0 | cairo_surface_t* source = m_rCairoCommon.m_pSurface; |
147 | 0 | m_rCairoCommon.copyBitsCairo(aTR, source, getAntiAlias()); |
148 | 0 | } |
149 | | |
150 | | void SvpGraphicsBackend::copyBits(const SalTwoRect& rTR, SalGraphics* pSrcGraphics) |
151 | 0 | { |
152 | 0 | cairo_surface_t* source = nullptr; |
153 | |
|
154 | 0 | if (pSrcGraphics) |
155 | 0 | { |
156 | 0 | SvpGraphicsBackend* pSrc = static_cast<SvpGraphicsBackend*>(pSrcGraphics->GetImpl()); |
157 | 0 | source = pSrc->m_rCairoCommon.m_pSurface; |
158 | 0 | } |
159 | 0 | else |
160 | 0 | { |
161 | 0 | source = m_rCairoCommon.m_pSurface; |
162 | 0 | } |
163 | |
|
164 | 0 | m_rCairoCommon.copyBitsCairo(rTR, source, getAntiAlias()); |
165 | 0 | } |
166 | | |
167 | | void SvpGraphicsBackend::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap) |
168 | 9.57k | { |
169 | 9.57k | m_rCairoCommon.drawBitmap(rPosAry, rSalBitmap, getAntiAlias()); |
170 | 9.57k | } |
171 | | |
172 | | void SvpGraphicsBackend::drawMask(const SalTwoRect& rTR, const SalBitmap& rSalBitmap, |
173 | | Color nMaskColor) |
174 | 1.14k | { |
175 | 1.14k | m_rCairoCommon.drawMask(rTR, rSalBitmap, nMaskColor, getAntiAlias()); |
176 | 1.14k | } |
177 | | |
178 | | std::shared_ptr<SalBitmap> SvpGraphicsBackend::getBitmap(tools::Long nX, tools::Long nY, |
179 | | tools::Long nWidth, tools::Long nHeight, |
180 | | bool bWithoutAlpha) |
181 | 6.79k | { |
182 | 6.79k | return m_rCairoCommon.getBitmap(nX, nY, nWidth, nHeight, bWithoutAlpha); |
183 | 6.79k | } |
184 | | |
185 | | void SvpGraphicsBackend::drawBitmapBuffer(const SalTwoRect& rTR, const BitmapBuffer* pBuffer, |
186 | | cairo_operator_t eOp) |
187 | 0 | { |
188 | 0 | cairo_surface_t* source = CairoCommon::createCairoSurface(pBuffer); |
189 | 0 | m_rCairoCommon.copyWithOperator(rTR, source, eOp, getAntiAlias()); |
190 | 0 | cairo_surface_destroy(source); |
191 | 0 | } |
192 | | |
193 | | Color SvpGraphicsBackend::getPixel(tools::Long nX, tools::Long nY) |
194 | 446k | { |
195 | 446k | return CairoCommon::getPixel(m_rCairoCommon.m_pSurface, nX, nY); |
196 | 446k | } |
197 | | |
198 | | void SvpGraphicsBackend::invert(tools::Long nX, tools::Long nY, tools::Long nWidth, |
199 | | tools::Long nHeight, SalInvert nFlags) |
200 | 0 | { |
201 | 0 | m_rCairoCommon.invert(nX, nY, nWidth, nHeight, nFlags, getAntiAlias()); |
202 | 0 | } |
203 | | |
204 | | void SvpGraphicsBackend::invert(sal_uInt32 nPoints, const Point* pPtAry, SalInvert nFlags) |
205 | 0 | { |
206 | 0 | m_rCairoCommon.invert(nPoints, pPtAry, nFlags, getAntiAlias()); |
207 | 0 | } |
208 | | |
209 | | void SvpGraphicsBackend::drawAlphaBitmap(const SalTwoRect& rTR, const SalBitmap& rSourceBitmap) |
210 | 15 | { |
211 | 15 | m_rCairoCommon.drawAlphaBitmap(rTR, rSourceBitmap, getAntiAlias()); |
212 | 15 | } |
213 | | |
214 | | bool SvpGraphicsBackend::drawTransformedBitmap(const basegfx::B2DPoint& rNull, |
215 | | const basegfx::B2DPoint& rX, |
216 | | const basegfx::B2DPoint& rY, |
217 | | const SalBitmap& rSourceBitmap, double fAlpha) |
218 | 0 | { |
219 | 0 | return m_rCairoCommon.drawTransformedBitmap(rNull, rX, rY, rSourceBitmap, fAlpha, |
220 | 0 | getAntiAlias()); |
221 | 0 | } |
222 | | |
223 | | bool SvpGraphicsBackend::drawAlphaRect(tools::Long nX, tools::Long nY, tools::Long nWidth, |
224 | | tools::Long nHeight, sal_uInt8 nTransparency) |
225 | 0 | { |
226 | 0 | return m_rCairoCommon.drawAlphaRect(nX, nY, nWidth, nHeight, nTransparency, getAntiAlias()); |
227 | 0 | } |
228 | | |
229 | | bool SvpGraphicsBackend::drawGradient(const tools::PolyPolygon& rPolyPolygon, |
230 | | const Gradient& rGradient) |
231 | 13.6k | { |
232 | 13.6k | return m_rCairoCommon.drawGradient(rPolyPolygon, rGradient, getAntiAlias()); |
233 | 13.6k | } |
234 | | |
235 | | bool SvpGraphicsBackend::implDrawGradient(basegfx::B2DPolyPolygon const& rPolyPolygon, |
236 | | SalGradient const& rGradient) |
237 | 0 | { |
238 | 0 | return m_rCairoCommon.implDrawGradient(rPolyPolygon, rGradient, getAntiAlias()); |
239 | 0 | } |
240 | | |
241 | | bool SvpGraphicsBackend::supportsOperation(OutDevSupportType eType) const |
242 | 0 | { |
243 | 0 | return CairoCommon::supportsOperation(eType); |
244 | 0 | } |
245 | | |
246 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |