bump product version to 7.2.5.1
[LibreOffice.git] / vcl / inc / unx / salbmp.h
blob8b9e7c1cfc9f1b7c46240e1a28ba5c3eb3b4194c
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_VCL_INC_UNX_SALBMP_H
21 #define INCLUDED_VCL_INC_UNX_SALBMP_H
23 #include <X11/Xlib.h>
25 #include <vcl/salgtype.hxx>
26 #include <unx/saldisp.hxx>
27 #include <salbmp.hxx>
28 #include <vclpluginapi.h>
30 struct BitmapBuffer;
31 class BitmapPalette;
32 class SalGraphics;
33 class ImplSalDDB;
34 class ImplSalBitmapCache;
37 class X11SalBitmap final : public SalBitmap
39 private:
41 static std::unique_ptr<BitmapBuffer>
42 ImplCreateDIB(
43 const Size& rSize,
44 vcl::PixelFormat ePixelFormat,
45 const BitmapPalette& rPal
48 static std::unique_ptr<BitmapBuffer>
49 ImplCreateDIB(
50 Drawable aDrawable,
51 SalX11Screen nXScreen,
52 tools::Long nDrawableDepth,
53 tools::Long nX,
54 tools::Long nY,
55 tools::Long nWidth,
56 tools::Long nHeight,
57 bool bGrey
60 public:
62 static ImplSalBitmapCache* mpCache;
63 static unsigned int mnCacheInstCount;
65 static void ImplCreateCache();
66 static void ImplDestroyCache();
67 void ImplRemovedFromCache();
69 private:
71 std::unique_ptr<BitmapBuffer> mpDIB;
72 mutable std::unique_ptr<ImplSalDDB> mpDDB;
73 bool mbGrey;
75 public:
77 bool ImplCreateFromDrawable(
78 Drawable aDrawable,
79 SalX11Screen nXScreen,
80 tools::Long nDrawableDepth,
81 tools::Long nX,
82 tools::Long nY,
83 tools::Long nWidth,
84 tools::Long nHeight
87 XImage* ImplCreateXImage(
88 SalDisplay const * pSalDisp,
89 SalX11Screen nXScreen,
90 tools::Long nDepth,
91 const SalTwoRect& rTwoRect
92 ) const;
94 ImplSalDDB* ImplGetDDB(
95 Drawable,
96 SalX11Screen nXScreen,
97 tools::Long nDrawableDepth,
98 const SalTwoRect&
99 ) const;
101 void ImplDraw(
102 Drawable aDrawable,
103 SalX11Screen nXScreen,
104 tools::Long nDrawableDepth,
105 const SalTwoRect& rTwoRect,
106 const GC& rGC
107 ) const;
109 public:
111 X11SalBitmap();
112 virtual ~X11SalBitmap() override;
114 // override pure virtual methods
115 virtual bool Create(
116 const Size& rSize,
117 vcl::PixelFormat ePixelFormat,
118 const BitmapPalette& rPal
119 ) override;
121 virtual bool Create( const SalBitmap& rSalBmp ) override;
122 virtual bool Create(
123 const SalBitmap& rSalBmp,
124 SalGraphics* pGraphics
125 ) override;
127 virtual bool Create(
128 const SalBitmap& rSalBmp,
129 vcl::PixelFormat ePixelFormat
130 ) override;
132 virtual bool Create(
133 const css::uno::Reference< css::rendering::XBitmapCanvas >& rBitmapCanvas,
134 Size& rSize,
135 bool bMask = false
136 ) override;
138 virtual void Destroy() override;
140 virtual Size GetSize() const override;
141 virtual sal_uInt16 GetBitCount() const override;
143 virtual BitmapBuffer* AcquireBuffer( BitmapAccessMode nMode ) override;
144 virtual void ReleaseBuffer( BitmapBuffer* pBuffer, BitmapAccessMode nMode ) override;
145 virtual bool GetSystemData( BitmapSystemData& rData ) override;
147 virtual bool ScalingSupported() const override;
148 virtual bool Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) override;
149 virtual bool Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uInt8 nTol ) override;
153 class ImplSalDDB
155 private:
157 Pixmap maPixmap;
158 SalTwoRect maTwoRect;
159 tools::Long mnDepth;
160 SalX11Screen mnXScreen;
162 static void ImplDraw(
163 Drawable aSrcDrawable,
164 tools::Long nSrcDrawableDepth,
165 Drawable aDstDrawable,
166 tools::Long nSrcX,
167 tools::Long nSrcY,
168 tools::Long nDestWidth,
169 tools::Long nDestHeight,
170 tools::Long nDestX,
171 tools::Long nDestY,
172 const GC& rGC
175 public:
177 ImplSalDDB(
178 XImage* pImage,
179 Drawable aDrawable,
180 SalX11Screen nXScreen,
181 const SalTwoRect& rTwoRect
184 ImplSalDDB(
185 Drawable aDrawable,
186 SalX11Screen nXScreen,
187 tools::Long nDrawableDepth,
188 tools::Long nX,
189 tools::Long nY,
190 tools::Long nWidth,
191 tools::Long nHeight
194 ~ImplSalDDB();
196 Pixmap ImplGetPixmap() const { return maPixmap; }
197 tools::Long ImplGetWidth() const { return maTwoRect.mnDestWidth; }
198 tools::Long ImplGetHeight() const { return maTwoRect.mnDestHeight; }
199 tools::Long ImplGetDepth() const { return mnDepth; }
200 const SalX11Screen& ImplGetScreen() const { return mnXScreen; }
202 bool ImplMatches( SalX11Screen nXScreen, tools::Long nDepth, const SalTwoRect& rTwoRect ) const;
204 void ImplDraw(
205 Drawable aDrawable,
206 const SalTwoRect& rTwoRect,
207 const GC& rGC
208 ) const;
212 class X11SalBitmap;
214 class ImplSalBitmapCache
216 private:
217 std::vector<X11SalBitmap*> maBmpList;
219 public:
221 ImplSalBitmapCache();
222 ~ImplSalBitmapCache();
224 void ImplAdd( X11SalBitmap* pBmp );
225 void ImplRemove( X11SalBitmap const * pBmp );
226 void ImplClear();
229 #endif // INCLUDED_VCL_INC_UNX_SALBMP_H
231 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */