1 #include "BitmapDrawingEngine.h"
2 #include "BitmapHWInterface.h"
3 #include "ServerBitmap.h"
7 BitmapDrawingEngine::BitmapDrawingEngine(color_space colorSpace
)
9 fColorSpace(colorSpace
),
16 BitmapDrawingEngine::~BitmapDrawingEngine()
24 BitmapDrawingEngine::IsParallelAccessLocked() const
26 // We don't share the HWInterface instance that the Painter is
27 // attached to, so we never need to be locked.
34 BitmapDrawingEngine::IsExclusiveAccessLocked() const
36 // See IsParallelAccessLocked().
42 BitmapDrawingEngine::SetSize(int32 newWidth
, int32 newHeight
)
44 if (fBitmap
!= NULL
&& newWidth
> 0 && newHeight
> 0
45 && fBitmap
->Bounds().IntegerWidth() >= newWidth
46 && fBitmap
->Bounds().IntegerHeight() >= newHeight
) {
51 if (fHWInterface
!= NULL
) {
52 fHWInterface
->LockExclusiveAccess();
53 fHWInterface
->Shutdown();
54 fHWInterface
->UnlockExclusiveAccess();
59 if (fBitmap
!= NULL
) {
60 fBitmap
->ReleaseReference();
64 if (newWidth
<= 0 || newHeight
<= 0)
67 fBitmap
= new(std::nothrow
) UtilityBitmap(BRect(0, 0, newWidth
- 1,
68 newHeight
- 1), fColorSpace
, 0);
72 fHWInterface
= new(std::nothrow
) BitmapHWInterface(fBitmap
);
73 if (fHWInterface
== NULL
)
76 status_t result
= fHWInterface
->Initialize();
80 // we have to set a valid clipping first
81 fClipping
.Set(fBitmap
->Bounds());
82 ConstrainClippingRegion(&fClipping
);
83 SetHWInterface(fHWInterface
);
89 BitmapDrawingEngine::ExportToBitmap(int32 width
, int32 height
,
92 if (width
<= 0 || height
<= 0)
95 UtilityBitmap
*result
= new(std::nothrow
) UtilityBitmap(BRect(0, 0,
96 width
- 1, height
- 1), space
, 0);
100 if (result
->ImportBits(fBitmap
->Bits(), fBitmap
->BitsLength(),
101 fBitmap
->BytesPerRow(), fBitmap
->ColorSpace()) != B_OK
) {