LibreOffice Module vcl (master)  1
unx/salbmp.h
Go to the documentation of this file.
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 #ifndef INCLUDED_VCL_INC_UNX_SALBMP_H
21 #define INCLUDED_VCL_INC_UNX_SALBMP_H
22 
23 #include <X11/Xlib.h>
24 
25 #include <vcl/salgtype.hxx>
26 #include <unx/saldisp.hxx>
27 #include <salbmp.hxx>
28 #include <vclpluginapi.h>
29 
30 struct BitmapBuffer;
31 class BitmapPalette;
32 class SalGraphics;
33 class ImplSalDDB;
34 class ImplSalBitmapCache;
35 
36 
37 class X11SalBitmap final : public SalBitmap
38 {
39 private:
40 
41  static std::unique_ptr<BitmapBuffer>
43  const Size& rSize,
44  sal_uInt16 nBitCount,
45  const BitmapPalette& rPal
46  );
47 
48  static std::unique_ptr<BitmapBuffer>
50  Drawable aDrawable,
51  SalX11Screen nXScreen,
52  long nDrawableDepth,
53  long nX,
54  long nY,
55  long nWidth,
56  long nHeight,
57  bool bGrey
58  );
59 
60 public:
61 
63  static unsigned int mnCacheInstCount;
64 
65  static void ImplCreateCache();
66  static void ImplDestroyCache();
67  void ImplRemovedFromCache();
68 
69 private:
70 
71  std::unique_ptr<BitmapBuffer> mpDIB;
72  mutable std::unique_ptr<ImplSalDDB> mpDDB;
73  bool mbGrey;
74 
75 public:
76 
78  Drawable aDrawable,
79  SalX11Screen nXScreen,
80  long nDrawableDepth,
81  long nX,
82  long nY,
83  long nWidth,
84  long nHeight
85  );
86 
87  XImage* ImplCreateXImage(
88  SalDisplay const * pSalDisp,
89  SalX11Screen nXScreen,
90  long nDepth,
91  const SalTwoRect& rTwoRect
92  ) const;
93 
95  Drawable,
96  SalX11Screen nXScreen,
97  long nDrawableDepth,
98  const SalTwoRect&
99  ) const;
100 
101  void ImplDraw(
102  Drawable aDrawable,
103  SalX11Screen nXScreen,
104  long nDrawableDepth,
105  const SalTwoRect& rTwoRect,
106  const GC& rGC
107  ) const;
108 
109 public:
110 
111  X11SalBitmap();
112  virtual ~X11SalBitmap() override;
113 
114  // override pure virtual methods
115  virtual bool Create(
116  const Size& rSize,
117  sal_uInt16 nBitCount,
118  const BitmapPalette& rPal
119  ) override;
120 
121  virtual bool Create( const SalBitmap& rSalBmp ) override;
122  virtual bool Create(
123  const SalBitmap& rSalBmp,
124  SalGraphics* pGraphics
125  ) override;
126 
127  virtual bool Create(
128  const SalBitmap& rSalBmp,
129  sal_uInt16 nNewBitCount
130  ) override;
131 
132  virtual bool Create(
133  const css::uno::Reference< css::rendering::XBitmapCanvas >& rBitmapCanvas,
134  Size& rSize,
135  bool bMask = false
136  ) override;
137 
138  virtual void Destroy() override;
139 
140  virtual Size GetSize() const override;
141  virtual sal_uInt16 GetBitCount() const override;
142 
143  virtual BitmapBuffer* AcquireBuffer( BitmapAccessMode nMode ) override;
144  virtual void ReleaseBuffer( BitmapBuffer* pBuffer, BitmapAccessMode nMode ) override;
145  virtual bool GetSystemData( BitmapSystemData& rData ) override;
146 
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;
150 };
151 
152 
154 {
155 private:
156 
157  Pixmap maPixmap;
159  long mnDepth;
161 
162  static void ImplDraw(
163  Drawable aSrcDrawable,
164  long nSrcDrawableDepth,
165  Drawable aDstDrawable,
166  long nSrcX,
167  long nSrcY,
168  long nDestWidth,
169  long nDestHeight,
170  long nDestX,
171  long nDestY,
172  const GC& rGC
173  );
174 
175 public:
176 
177  ImplSalDDB(
178  XImage* pImage,
179  Drawable aDrawable,
180  SalX11Screen nXScreen,
181  const SalTwoRect& rTwoRect
182  );
183 
184  ImplSalDDB(
185  Drawable aDrawable,
186  SalX11Screen nXScreen,
187  long nDrawableDepth,
188  long nX,
189  long nY,
190  long nWidth,
191  long nHeight
192  );
193 
194  ~ImplSalDDB();
195 
196  Pixmap ImplGetPixmap() const { return maPixmap; }
197  long ImplGetWidth() const { return maTwoRect.mnDestWidth; }
198  long ImplGetHeight() const { return maTwoRect.mnDestHeight; }
199  long ImplGetDepth() const { return mnDepth; }
200  const SalX11Screen& ImplGetScreen() const { return mnXScreen; }
201 
202  bool ImplMatches( SalX11Screen nXScreen, long nDepth, const SalTwoRect& rTwoRect ) const;
203 
204  void ImplDraw(
205  Drawable aDrawable,
206  const SalTwoRect& rTwoRect,
207  const GC& rGC
208  ) const;
209 };
210 
211 
212 class X11SalBitmap;
213 
215 {
216 private:
217  std::vector<X11SalBitmap*> maBmpList;
218 
219 public:
220 
223 
224  void ImplAdd( X11SalBitmap* pBmp );
225  void ImplRemove( X11SalBitmap const * pBmp );
226  void ImplClear();
227 };
228 
229 #endif // INCLUDED_VCL_INC_UNX_SALBMP_H
230 
231 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual ~X11SalBitmap() override
SalTwoRect maTwoRect
Definition: unx/salbmp.h:158
long ImplGetWidth() const
Definition: unx/salbmp.h:197
static std::unique_ptr< BitmapBuffer > ImplCreateDIB(const Size &rSize, sal_uInt16 nBitCount, const BitmapPalette &rPal)
SalX11Screen mnXScreen
Definition: unx/salbmp.h:160
long mnDepth
Definition: unx/salbmp.h:159
std::unique_ptr< BitmapBuffer > mpDIB
Definition: unx/salbmp.h:71
bool ImplMatches(SalX11Screen nXScreen, long nDepth, const SalTwoRect &rTwoRect) const
virtual BitmapBuffer * AcquireBuffer(BitmapAccessMode nMode) override
virtual sal_uInt16 GetBitCount() const override
virtual bool Scale(const double &rScaleX, const double &rScaleY, BmpScaleFlag nScaleFlag) override
Pixmap ImplGetPixmap() const
Definition: unx/salbmp.h:196
long mnDestWidth
Definition: salgtype.hxx:56
static void ImplDestroyCache()
const SalX11Screen & ImplGetScreen() const
Definition: unx/salbmp.h:200
long ImplGetDepth() const
Definition: unx/salbmp.h:199
virtual bool Create(const Size &rSize, sal_uInt16 nBitCount, const BitmapPalette &rPal) override
virtual bool ScalingSupported() const override
void ImplAdd(X11SalBitmap *pBmp)
static void ImplDraw(Drawable aSrcDrawable, long nSrcDrawableDepth, Drawable aDstDrawable, long nSrcX, long nSrcY, long nDestWidth, long nDestHeight, long nDestX, long nDestY, const GC &rGC)
virtual Size GetSize() const override
ImplSalDDB * ImplGetDDB(Drawable, SalX11Screen nXScreen, long nDrawableDepth, const SalTwoRect &) const
std::vector< X11SalBitmap * > maBmpList
Definition: unx/salbmp.h:217
BitmapAccessMode
virtual bool Replace(const Color &rSearchColor, const Color &rReplaceColor, sal_uInt8 nTol) override
BmpScaleFlag
Definition: bitmap.hxx:48
virtual bool GetSystemData(BitmapSystemData &rData) override
std::unique_ptr< ImplSalDDB > mpDDB
Definition: unx/salbmp.h:72
Pixmap maPixmap
Definition: unx/salbmp.h:157
short nBitCount
XImage * ImplCreateXImage(SalDisplay const *pSalDisp, SalX11Screen nXScreen, long nDepth, const SalTwoRect &rTwoRect) const
virtual void ReleaseBuffer(BitmapBuffer *pBuffer, BitmapAccessMode nMode) override
unsigned char sal_uInt8
static void ImplCreateCache()
virtual void Destroy() override
long mnDestHeight
Definition: salgtype.hxx:57
long ImplGetHeight() const
Definition: unx/salbmp.h:198
ImplSalDDB(XImage *pImage, Drawable aDrawable, SalX11Screen nXScreen, const SalTwoRect &rTwoRect)
bool ImplCreateFromDrawable(Drawable aDrawable, SalX11Screen nXScreen, long nDrawableDepth, long nX, long nY, long nWidth, long nHeight)
void ImplRemovedFromCache()
static unsigned int mnCacheInstCount
Definition: unx/salbmp.h:63
void ImplRemove(X11SalBitmap const *pBmp)
static ImplSalBitmapCache * mpCache
Definition: unx/salbmp.h:62
void ImplDraw(Drawable aDrawable, SalX11Screen nXScreen, long nDrawableDepth, const SalTwoRect &rTwoRect, const GC &rGC) const