ImplWallpaper to use std::unique_ptr

Also remove ImplWallpaper::operator==, that does not
make sense since members are unique

Change-Id: I69d32d91ba33691eb1f86e70ce3c53fa2761e34b
Reviewed-on: https://gerrit.libreoffice.org/31666
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Mark Page
2016-12-06 07:55:14 +00:00
committed by Noel Grandin
parent bcdaa1ffb5
commit c54eb45230
4 changed files with 49 additions and 92 deletions

View File

@@ -93,6 +93,7 @@ public:
Wallpaper& operator=( const Wallpaper& rWallpaper ); Wallpaper& operator=( const Wallpaper& rWallpaper );
Wallpaper& operator=( Wallpaper&& rWallpaper ); Wallpaper& operator=( Wallpaper&& rWallpaper );
bool operator==( const Wallpaper& rWallpaper ) const; bool operator==( const Wallpaper& rWallpaper ) const;
bool operator!=( const Wallpaper& rWallpaper ) const bool operator!=( const Wallpaper& rWallpaper ) const
{ return !(Wallpaper::operator==( rWallpaper )); } { return !(Wallpaper::operator==( rWallpaper )); }

View File

@@ -338,9 +338,12 @@ void SvtIconChoiceCtrl::SetBackground( const Wallpaper& rPaper )
if( rPaper != GetBackground() ) if( rPaper != GetBackground() )
{ {
const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
Wallpaper aEmpty; // if it is the default (empty) wallpaper
if( rPaper == aEmpty ) if( rPaper.GetStyle() == WallpaperStyle::NONE && rPaper.GetColor() == COL_TRANSPARENT &&
!rPaper.IsBitmap() && !rPaper.IsGradient() && !rPaper.IsRect())
{
Control::SetBackground( rStyleSettings.GetFieldColor() ); Control::SetBackground( rStyleSettings.GetFieldColor() );
}
else else
{ {
Wallpaper aBackground( rPaper ); Wallpaper aBackground( rPaper );

View File

@@ -25,19 +25,19 @@ class ImplWallpaper
friend class Wallpaper; friend class Wallpaper;
private: private:
Color maColor; Color maColor;
BitmapEx* mpBitmap; std::unique_ptr<BitmapEx> mpBitmap;
Gradient* mpGradient; std::unique_ptr<Gradient> mpGradient;
Rectangle* mpRect; std::unique_ptr<Rectangle> mpRect;
WallpaperStyle meStyle; WallpaperStyle meStyle;
BitmapEx* mpCache; std::unique_ptr<BitmapEx> mpCache;
public: public:
ImplWallpaper(); ImplWallpaper();
ImplWallpaper( const ImplWallpaper& rImplWallpaper ); ImplWallpaper( const ImplWallpaper& rImplWallpaper );
~ImplWallpaper(); ~ImplWallpaper();
bool operator==( const ImplWallpaper& rImplWallpaper ) const; bool operator==( const ImplWallpaper& rImplWallpaper ) const = delete;
friend SvStream& ReadImplWallpaper( SvStream& rIStm, ImplWallpaper& rImplWallpaper ); friend SvStream& ReadImplWallpaper( SvStream& rIStm, ImplWallpaper& rImplWallpaper );
friend SvStream& WriteImplWallpaper( SvStream& rOStm, const ImplWallpaper& rImplWallpaper ); friend SvStream& WriteImplWallpaper( SvStream& rOStm, const ImplWallpaper& rImplWallpaper );

View File

@@ -27,57 +27,32 @@
#include <wall2.hxx> #include <wall2.hxx>
#include <vcl/dibtools.hxx> #include <vcl/dibtools.hxx>
#include <vcl/settings.hxx> #include <vcl/settings.hxx>
#include <o3tl/make_unique.hxx>
ImplWallpaper::ImplWallpaper() : ImplWallpaper::ImplWallpaper() :
maColor( COL_TRANSPARENT ) maColor( COL_TRANSPARENT ), meStyle( WallpaperStyle::NONE )
{ {
mpBitmap = nullptr;
mpCache = nullptr;
mpGradient = nullptr;
mpRect = nullptr;
meStyle = WallpaperStyle::NONE;
} }
ImplWallpaper::ImplWallpaper( const ImplWallpaper& rImplWallpaper ) : ImplWallpaper::ImplWallpaper( const ImplWallpaper& rImplWallpaper ) :
maColor( rImplWallpaper.maColor ) maColor( rImplWallpaper.maColor ), meStyle(rImplWallpaper.meStyle)
{ {
meStyle = rImplWallpaper.meStyle;
if ( rImplWallpaper.mpBitmap ) if ( rImplWallpaper.mpBitmap )
mpBitmap = new BitmapEx( *rImplWallpaper.mpBitmap ); mpBitmap = o3tl::make_unique<BitmapEx>( *rImplWallpaper.mpBitmap );
else
mpBitmap = nullptr;
if( rImplWallpaper.mpCache ) if( rImplWallpaper.mpCache )
mpCache = new BitmapEx( *rImplWallpaper.mpCache ); mpCache = o3tl::make_unique<BitmapEx>( *rImplWallpaper.mpCache );
else
mpCache = nullptr;
if ( rImplWallpaper.mpGradient ) if ( rImplWallpaper.mpGradient )
mpGradient = new Gradient( *rImplWallpaper.mpGradient ); mpGradient = o3tl::make_unique<Gradient>( *rImplWallpaper.mpGradient );
else
mpGradient = nullptr;
if ( rImplWallpaper.mpRect ) if ( rImplWallpaper.mpRect )
mpRect = new Rectangle( *rImplWallpaper.mpRect ); mpRect = o3tl::make_unique<Rectangle>( *rImplWallpaper.mpRect );
else
mpRect = nullptr;
} }
ImplWallpaper::~ImplWallpaper() ImplWallpaper::~ImplWallpaper()
{ {
delete mpBitmap;
delete mpCache;
delete mpGradient;
delete mpRect;
}
bool ImplWallpaper::operator==( const ImplWallpaper& rImplWallpaper ) const
{
if ( meStyle == rImplWallpaper.meStyle &&
maColor == rImplWallpaper.maColor &&
mpRect == rImplWallpaper.mpRect &&
mpBitmap == rImplWallpaper.mpBitmap &&
mpGradient == rImplWallpaper.mpGradient )
return true;
return false;
} }
SvStream& ReadImplWallpaper( SvStream& rIStm, ImplWallpaper& rImplWallpaper ) SvStream& ReadImplWallpaper( SvStream& rIStm, ImplWallpaper& rImplWallpaper )
@@ -85,14 +60,9 @@ SvStream& ReadImplWallpaper( SvStream& rIStm, ImplWallpaper& rImplWallpaper )
VersionCompat aCompat( rIStm, StreamMode::READ ); VersionCompat aCompat( rIStm, StreamMode::READ );
sal_uInt16 nTmp16; sal_uInt16 nTmp16;
delete rImplWallpaper.mpRect; rImplWallpaper.mpRect.reset();
rImplWallpaper.mpRect = nullptr; rImplWallpaper.mpGradient.reset();
rImplWallpaper.mpBitmap.reset();
delete rImplWallpaper.mpGradient;
rImplWallpaper.mpGradient = nullptr;
delete rImplWallpaper.mpBitmap;
rImplWallpaper.mpBitmap = nullptr;
// version 1 // version 1
ReadColor( rIStm, rImplWallpaper.maColor ); ReadColor( rIStm, rImplWallpaper.maColor );
@@ -107,19 +77,19 @@ SvStream& ReadImplWallpaper( SvStream& rIStm, ImplWallpaper& rImplWallpaper )
if( bRect ) if( bRect )
{ {
rImplWallpaper.mpRect = new Rectangle; rImplWallpaper.mpRect = o3tl::make_unique<Rectangle>();
ReadRectangle( rIStm, *rImplWallpaper.mpRect ); ReadRectangle( rIStm, *rImplWallpaper.mpRect );
} }
if( bGrad ) if( bGrad )
{ {
rImplWallpaper.mpGradient = new Gradient; rImplWallpaper.mpGradient = o3tl::make_unique<Gradient>();
ReadGradient( rIStm, *rImplWallpaper.mpGradient ); ReadGradient( rIStm, *rImplWallpaper.mpGradient );
} }
if( bBmp ) if( bBmp )
{ {
rImplWallpaper.mpBitmap = new BitmapEx; rImplWallpaper.mpBitmap = o3tl::make_unique<BitmapEx>();
ReadDIBBitmapEx(*rImplWallpaper.mpBitmap, rIStm); ReadDIBBitmapEx(*rImplWallpaper.mpBitmap, rIStm);
} }
@@ -136,9 +106,9 @@ SvStream& ReadImplWallpaper( SvStream& rIStm, ImplWallpaper& rImplWallpaper )
SvStream& WriteImplWallpaper( SvStream& rOStm, const ImplWallpaper& rImplWallpaper ) SvStream& WriteImplWallpaper( SvStream& rOStm, const ImplWallpaper& rImplWallpaper )
{ {
VersionCompat aCompat( rOStm, StreamMode::WRITE, 3 ); VersionCompat aCompat( rOStm, StreamMode::WRITE, 3 );
bool bRect = ( rImplWallpaper.mpRect != nullptr ); bool bRect = bool(rImplWallpaper.mpRect);
bool bGrad = ( rImplWallpaper.mpGradient != nullptr ); bool bGrad = bool(rImplWallpaper.mpGradient);
bool bBmp = ( rImplWallpaper.mpBitmap != nullptr ); bool bBmp = bool(rImplWallpaper.mpBitmap);
bool bDummy = false; bool bDummy = false;
// version 1 // version 1
@@ -191,13 +161,13 @@ Wallpaper::Wallpaper( const Color& rColor ) : mpImplWallpaper()
Wallpaper::Wallpaper( const BitmapEx& rBmpEx ) : mpImplWallpaper() Wallpaper::Wallpaper( const BitmapEx& rBmpEx ) : mpImplWallpaper()
{ {
mpImplWallpaper->mpBitmap = new BitmapEx( rBmpEx ); mpImplWallpaper->mpBitmap = o3tl::make_unique<BitmapEx>( rBmpEx );
mpImplWallpaper->meStyle = WallpaperStyle::Tile; mpImplWallpaper->meStyle = WallpaperStyle::Tile;
} }
Wallpaper::Wallpaper( const Gradient& rGradient ) : mpImplWallpaper() Wallpaper::Wallpaper( const Gradient& rGradient ) : mpImplWallpaper()
{ {
mpImplWallpaper->mpGradient = new Gradient( rGradient ); mpImplWallpaper->mpGradient = o3tl::make_unique<Gradient>( rGradient );
mpImplWallpaper->meStyle = WallpaperStyle::Tile; mpImplWallpaper->meStyle = WallpaperStyle::Tile;
} }
@@ -208,23 +178,21 @@ Wallpaper::~Wallpaper()
void Wallpaper::ImplSetCachedBitmap( BitmapEx& rBmp ) const void Wallpaper::ImplSetCachedBitmap( BitmapEx& rBmp ) const
{ {
if( !mpImplWallpaper->mpCache ) if( !mpImplWallpaper->mpCache )
const_cast< ImplWallpaper* >(mpImplWallpaper.get())->mpCache = new BitmapEx( rBmp ); const_cast< ImplWallpaper* >(mpImplWallpaper.get())->mpCache = o3tl::make_unique<BitmapEx>( rBmp );
else else
*const_cast< ImplWallpaper* >(mpImplWallpaper.get())->mpCache = rBmp; *const_cast< ImplWallpaper* >(mpImplWallpaper.get())->mpCache = rBmp;
} }
const BitmapEx* Wallpaper::ImplGetCachedBitmap() const const BitmapEx* Wallpaper::ImplGetCachedBitmap() const
{ {
return mpImplWallpaper->mpCache; return mpImplWallpaper->mpCache.get();
} }
void Wallpaper::ImplReleaseCachedBitmap() const void Wallpaper::ImplReleaseCachedBitmap() const
{ {
delete mpImplWallpaper->mpCache; const_cast< ImplWallpaper* >(mpImplWallpaper.get())->mpCache.reset();
const_cast< ImplWallpaper* >(mpImplWallpaper.get())->mpCache = nullptr;
} }
void Wallpaper::SetColor( const Color& rColor ) void Wallpaper::SetColor( const Color& rColor )
{ {
ImplReleaseCachedBitmap(); ImplReleaseCachedBitmap();
@@ -261,8 +229,7 @@ void Wallpaper::SetBitmap( const BitmapEx& rBitmap )
if ( mpImplWallpaper->mpBitmap ) if ( mpImplWallpaper->mpBitmap )
{ {
ImplReleaseCachedBitmap(); ImplReleaseCachedBitmap();
delete mpImplWallpaper->mpBitmap; mpImplWallpaper->mpBitmap.reset();
mpImplWallpaper->mpBitmap = nullptr;
} }
} }
else else
@@ -271,7 +238,7 @@ void Wallpaper::SetBitmap( const BitmapEx& rBitmap )
if ( mpImplWallpaper->mpBitmap ) if ( mpImplWallpaper->mpBitmap )
*(mpImplWallpaper->mpBitmap) = rBitmap; *(mpImplWallpaper->mpBitmap) = rBitmap;
else else
mpImplWallpaper->mpBitmap = new BitmapEx( rBitmap ); mpImplWallpaper->mpBitmap = o3tl::make_unique<BitmapEx>( rBitmap );
} }
if( WallpaperStyle::NONE == mpImplWallpaper->meStyle || WallpaperStyle::ApplicationGradient == mpImplWallpaper->meStyle) if( WallpaperStyle::NONE == mpImplWallpaper->meStyle || WallpaperStyle::ApplicationGradient == mpImplWallpaper->meStyle)
@@ -283,15 +250,12 @@ BitmapEx Wallpaper::GetBitmap() const
if ( mpImplWallpaper->mpBitmap ) if ( mpImplWallpaper->mpBitmap )
return *(mpImplWallpaper->mpBitmap); return *(mpImplWallpaper->mpBitmap);
else else
{ return BitmapEx();
BitmapEx aBmp;
return aBmp;
}
} }
bool Wallpaper::IsBitmap() const bool Wallpaper::IsBitmap() const
{ {
return (mpImplWallpaper->mpBitmap != nullptr); return bool(mpImplWallpaper->mpBitmap);
} }
void Wallpaper::SetGradient( const Gradient& rGradient ) void Wallpaper::SetGradient( const Gradient& rGradient )
@@ -301,7 +265,7 @@ void Wallpaper::SetGradient( const Gradient& rGradient )
if ( mpImplWallpaper->mpGradient ) if ( mpImplWallpaper->mpGradient )
*(mpImplWallpaper->mpGradient) = rGradient; *(mpImplWallpaper->mpGradient) = rGradient;
else else
mpImplWallpaper->mpGradient = new Gradient( rGradient ); mpImplWallpaper->mpGradient = o3tl::make_unique<Gradient>( rGradient );
if( WallpaperStyle::NONE == mpImplWallpaper->meStyle || WallpaperStyle::ApplicationGradient == mpImplWallpaper->meStyle ) if( WallpaperStyle::NONE == mpImplWallpaper->meStyle || WallpaperStyle::ApplicationGradient == mpImplWallpaper->meStyle )
mpImplWallpaper->meStyle = WallpaperStyle::Tile; mpImplWallpaper->meStyle = WallpaperStyle::Tile;
@@ -314,15 +278,12 @@ Gradient Wallpaper::GetGradient() const
else if ( mpImplWallpaper->mpGradient ) else if ( mpImplWallpaper->mpGradient )
return *(mpImplWallpaper->mpGradient); return *(mpImplWallpaper->mpGradient);
else else
{ return Gradient();
Gradient aGradient;
return aGradient;
}
} }
bool Wallpaper::IsGradient() const bool Wallpaper::IsGradient() const
{ {
return (mpImplWallpaper->mpGradient != nullptr); return bool(mpImplWallpaper->mpGradient);
} }
Gradient Wallpaper::ImplGetApplicationGradient() Gradient Wallpaper::ImplGetApplicationGradient()
@@ -343,18 +304,14 @@ void Wallpaper::SetRect( const Rectangle& rRect )
{ {
if ( rRect.IsEmpty() ) if ( rRect.IsEmpty() )
{ {
if ( mpImplWallpaper->mpRect ) mpImplWallpaper->mpRect.reset();
{
delete mpImplWallpaper->mpRect;
mpImplWallpaper->mpRect = nullptr;
}
} }
else else
{ {
if ( mpImplWallpaper->mpRect ) if ( mpImplWallpaper->mpRect )
*(mpImplWallpaper->mpRect) = rRect; *(mpImplWallpaper->mpRect) = rRect;
else else
mpImplWallpaper->mpRect = new Rectangle( rRect ); mpImplWallpaper->mpRect = o3tl::make_unique<Rectangle>( rRect );
} }
} }
@@ -363,16 +320,12 @@ Rectangle Wallpaper::GetRect() const
if ( mpImplWallpaper->mpRect ) if ( mpImplWallpaper->mpRect )
return *(mpImplWallpaper->mpRect); return *(mpImplWallpaper->mpRect);
else else
{ return Rectangle();
Rectangle aRect;
return aRect;
}
} }
bool Wallpaper::IsRect() const bool Wallpaper::IsRect() const
{ {
return bool(mpImplWallpaper->mpRect);
return (mpImplWallpaper->mpRect != nullptr);
} }
bool Wallpaper::IsFixed() const bool Wallpaper::IsFixed() const
@@ -409,7 +362,7 @@ Wallpaper& Wallpaper::operator=( Wallpaper&& rWallpaper )
bool Wallpaper::operator==( const Wallpaper& rWallpaper ) const bool Wallpaper::operator==( const Wallpaper& rWallpaper ) const
{ {
return mpImplWallpaper == rWallpaper.mpImplWallpaper; return mpImplWallpaper.same_object(rWallpaper.mpImplWallpaper);
} }
SvStream& ReadWallpaper( SvStream& rIStm, Wallpaper& rWallpaper ) SvStream& ReadWallpaper( SvStream& rIStm, Wallpaper& rWallpaper )