1 /* 2 * Copyright 2001-2010, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * DarkWyrm <bpmagic@columbus.rr.com> 7 * Axel Dörfler, axeld@pinc-software.de 8 */ 9 #ifndef SERVER_BITMAP_H 10 #define SERVER_BITMAP_H 11 12 13 #include <AutoDeleter.h> 14 #include <GraphicsDefs.h> 15 #include <Rect.h> 16 #include <OS.h> 17 18 #include <Referenceable.h> 19 20 #include "ClientMemoryAllocator.h" 21 22 23 class BitmapManager; 24 class HWInterface; 25 class Overlay; 26 class ServerApp; 27 28 29 /*! \class ServerBitmap ServerBitmap.h 30 \brief Bitmap class used inside the server. 31 32 This class is not directly allocated or freed. Instead, it is 33 managed by the BitmapManager class. It is also the base class for 34 all cursors. Every BBitmap has a shadow ServerBitmap object. 35 */ 36 class ServerBitmap : public BReferenceable { 37 public: 38 inline bool IsValid() const 39 { return fBuffer != NULL; } 40 41 inline uint8* Bits() const 42 { return fBuffer; } 43 inline uint32 BitsLength() const 44 { return (uint32)(fBytesPerRow * fHeight); } 45 46 inline BRect Bounds() const 47 { return BRect(0, 0, fWidth - 1, fHeight - 1); } 48 inline int32 Width() const 49 { return fWidth; } 50 inline int32 Height() const 51 { return fHeight; } 52 53 inline int32 BytesPerRow() const 54 { return fBytesPerRow; } 55 56 inline color_space ColorSpace() const 57 { return fSpace; } 58 inline uint32 Flags() const 59 { return fFlags; } 60 61 //! Returns the identifier token for the bitmap 62 inline int32 Token() const 63 { return fToken; } 64 65 area_id Area() const; 66 uint32 AreaOffset() const; 67 68 void SetOverlay(::Overlay* overlay); 69 ::Overlay* Overlay() const; 70 71 void SetOwner(ServerApp* owner); 72 ServerApp* Owner() const; 73 74 //! Does a shallow copy of the bitmap passed to it 75 inline void ShallowCopy(const ServerBitmap *from); 76 77 status_t ImportBits(const void *bits, int32 bitsLength, 78 int32 bytesPerRow, color_space colorSpace); 79 status_t ImportBits(const void *bits, int32 bitsLength, 80 int32 bytesPerRow, color_space colorSpace, 81 BPoint from, BPoint to, int32 width, 82 int32 height); 83 84 void PrintToStream(); 85 86 protected: 87 friend class BitmapManager; 88 89 ServerBitmap(BRect rect, color_space space, 90 uint32 flags, int32 bytesPerRow = -1, 91 screen_id screen = B_MAIN_SCREEN_ID); 92 ServerBitmap(const ServerBitmap* bmp); 93 virtual ~ServerBitmap(); 94 95 void AllocateBuffer(); 96 97 protected: 98 ClientMemory fClientMemory; 99 AreaMemory* fMemory; 100 ObjectDeleter< ::Overlay> 101 fOverlay; 102 uint8* fBuffer; 103 104 int32 fWidth; 105 int32 fHeight; 106 int32 fBytesPerRow; 107 color_space fSpace; 108 uint32 fFlags; 109 110 ServerApp* fOwner; 111 int32 fToken; 112 }; 113 114 class UtilityBitmap : public ServerBitmap { 115 public: 116 UtilityBitmap(BRect rect, color_space space, 117 uint32 flags, int32 bytesperline = -1, 118 screen_id screen = B_MAIN_SCREEN_ID); 119 UtilityBitmap(const ServerBitmap* bmp); 120 121 UtilityBitmap(const uint8* alreadyPaddedData, 122 uint32 width, uint32 height, 123 color_space format); 124 125 virtual ~UtilityBitmap(); 126 }; 127 128 129 //! (only for server bitmaps) 130 void 131 ServerBitmap::ShallowCopy(const ServerBitmap* from) 132 { 133 if (!from) 134 return; 135 136 fBuffer = from->fBuffer; 137 fWidth = from->fWidth; 138 fHeight = from->fHeight; 139 fBytesPerRow = from->fBytesPerRow; 140 fSpace = from->fSpace; 141 fFlags = from->fFlags; 142 fToken = from->fToken; 143 } 144 145 #endif // SERVER_BITMAP_H 146