diff --git a/headers/os/interface/Bitmap.h b/headers/os/interface/Bitmap.h index 91788877ba..d56e6dde67 100644 --- a/headers/os/interface/Bitmap.h +++ b/headers/os/interface/Bitmap.h @@ -38,6 +38,8 @@ class BBitmap : public BArchivable { screen_id screenID = B_MAIN_SCREEN_ID); BBitmap(BRect bounds, color_space colorSpace, bool acceptsViews = false, bool needsContiguous = false); + BBitmap(const BBitmap& source, uint32 flags); + BBitmap(const BBitmap& source); BBitmap(const BBitmap *source, bool acceptsViews = false, bool needsContiguous = false); virtual ~BBitmap(); @@ -87,6 +89,8 @@ class BBitmap : public BArchivable { void Unlock(); bool IsLocked() const; + BBitmap& operator=(const BBitmap& source); + //----- Private or reserved -----------------------------------------// virtual status_t Perform(perform_code d, void *arg); @@ -100,9 +104,6 @@ class BBitmap : public BArchivable { virtual void _ReservedBitmap2(); virtual void _ReservedBitmap3(); - BBitmap(const BBitmap &); - BBitmap &operator=(const BBitmap &); - int32 _ServerToken() const; void _InitObject(BRect bounds, color_space colorSpace, uint32 flags, int32 bytesPerRow, screen_id screenID); diff --git a/src/kits/interface/Bitmap.cpp b/src/kits/interface/Bitmap.cpp index d5e8b14424..633f98b1df 100644 --- a/src/kits/interface/Bitmap.cpp +++ b/src/kits/interface/Bitmap.cpp @@ -212,7 +212,27 @@ BBitmap::BBitmap(const BBitmap *source, bool acceptsViews, } } -// destructor + +BBitmap::BBitmap(const BBitmap& source, uint32 flags) +{ + if (!source.IsValid()) + return; + + _InitObject(source.Bounds(), source.ColorSpace(), flags, + source.BytesPerRow(), B_MAIN_SCREEN_ID); + + if (InitCheck() == B_OK) + memcpy(Bits(), source.Bits(), min_c(BitsLength(), source.BitsLength())); +} + + +BBitmap::BBitmap(const BBitmap& source) +{ + fBasePointer = NULL; + *this = source; +} + + /*! \brief Frees all resources associated with this object. */ BBitmap::~BBitmap() @@ -373,7 +393,7 @@ BBitmap::InitCheck() const bool BBitmap::IsValid() const { - return (InitCheck() == B_OK); + return InitCheck() == B_OK; } @@ -840,9 +860,25 @@ BBitmap::IsLocked() const return fWindow != NULL ? fWindow->IsLocked() : false; } -// Perform -/*! \brief ??? -*/ + +BBitmap & +BBitmap::operator=(const BBitmap& source) +{ + _CleanUp(); + fInitError = B_NO_INIT; + + if (!source.IsValid()) + return *this; + + _InitObject(source.Bounds(), source.ColorSpace(), source.Flags(), + source.BytesPerRow(), B_MAIN_SCREEN_ID); + if (InitCheck() == B_OK) + memcpy(Bits(), source.Bits(), min_c(BitsLength(), source.BitsLength())); + + return *this; +} + + status_t BBitmap::Perform(perform_code d, void *arg) { @@ -854,21 +890,6 @@ void BBitmap::_ReservedBitmap1() {} void BBitmap::_ReservedBitmap2() {} void BBitmap::_ReservedBitmap3() {} -// copy constructor -/*! \brief Privatized copy constructor to prevent usage. -*/ -BBitmap::BBitmap(const BBitmap &) -{ -} - -// = -/*! \brief Privatized assignment operator to prevent usage. -*/ -BBitmap & -BBitmap::operator=(const BBitmap &) -{ - return *this; -} #if 0 // get_shared_pointer