Add wxBitmap::CreateWithLogicalSize()
The new function has a more clear name than CreateScaled() it replaces and uses a more useful parameter order, with the scale factor, which must always be specified when using it, coming before, and not after, the depth, which almost never needs to be specified and so can be left at its default value in 99% of cases.
This commit is contained in:
@@ -177,7 +177,15 @@ public:
|
|||||||
|
|
||||||
virtual bool Create(int width, int height, int depth = wxBITMAP_SCREEN_DEPTH) = 0;
|
virtual bool Create(int width, int height, int depth = wxBITMAP_SCREEN_DEPTH) = 0;
|
||||||
virtual bool Create(const wxSize& sz, int depth = wxBITMAP_SCREEN_DEPTH) = 0;
|
virtual bool Create(const wxSize& sz, int depth = wxBITMAP_SCREEN_DEPTH) = 0;
|
||||||
virtual bool CreateScaled(int w, int h, int d, double logicalScale);
|
|
||||||
|
bool CreateWithLogicalSize(const wxSize& sz,
|
||||||
|
double scale,
|
||||||
|
int depth = wxBITMAP_SCREEN_DEPTH)
|
||||||
|
{ return DoCreate(sz, scale, depth); }
|
||||||
|
bool CreateWithLogicalSize(int width, int height,
|
||||||
|
double scale,
|
||||||
|
int depth = wxBITMAP_SCREEN_DEPTH)
|
||||||
|
{ return DoCreate(wxSize(width, height), scale, depth); }
|
||||||
|
|
||||||
virtual int GetHeight() const = 0;
|
virtual int GetHeight() const = 0;
|
||||||
virtual int GetWidth() const = 0;
|
virtual int GetWidth() const = 0;
|
||||||
@@ -203,8 +211,10 @@ public:
|
|||||||
double GetLogicalHeight() const;
|
double GetLogicalHeight() const;
|
||||||
wxSize GetLogicalSize() const;
|
wxSize GetLogicalSize() const;
|
||||||
|
|
||||||
// Old synonyms for GetLogicalXXX() functions, prefer the new names in the
|
// Old synonyms for CreateWithLogicalSize() and GetLogicalXXX() functions,
|
||||||
// new code.
|
// prefer the new names in the new code.
|
||||||
|
bool CreateScaled(int w, int h, int d, double logicalScale)
|
||||||
|
{ return CreateWithLogicalSize(w, h, logicalScale, d); }
|
||||||
double GetScaledWidth() const { return GetLogicalWidth(); }
|
double GetScaledWidth() const { return GetLogicalWidth(); }
|
||||||
double GetScaledHeight() const { return GetLogicalHeight(); }
|
double GetScaledHeight() const { return GetLogicalHeight(); }
|
||||||
wxSize GetScaledSize() const { return GetLogicalSize(); }
|
wxSize GetScaledSize() const { return GetLogicalSize(); }
|
||||||
@@ -273,6 +283,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual bool DoCreate(const wxSize& sz, double scale, int depth);
|
||||||
|
|
||||||
static wxList sm_handlers;
|
static wxList sm_handlers;
|
||||||
|
|
||||||
wxDECLARE_ABSTRACT_CLASS(wxBitmapBase);
|
wxDECLARE_ABSTRACT_CLASS(wxBitmapBase);
|
||||||
|
|||||||
@@ -86,7 +86,6 @@ public:
|
|||||||
bool Create(int width, int height, const wxDC& WXUNUSED(dc))
|
bool Create(int width, int height, const wxDC& WXUNUSED(dc))
|
||||||
{ return Create(width,height); }
|
{ return Create(width,height); }
|
||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
virtual bool CreateScaled(int w, int h, int depth, double scale) wxOVERRIDE;
|
|
||||||
virtual void SetScaleFactor(double scale) wxOVERRIDE;
|
virtual void SetScaleFactor(double scale) wxOVERRIDE;
|
||||||
virtual double GetScaleFactor() const wxOVERRIDE;
|
virtual double GetScaleFactor() const wxOVERRIDE;
|
||||||
#endif
|
#endif
|
||||||
@@ -155,6 +154,10 @@ protected:
|
|||||||
virtual wxGDIRefData* CreateGDIRefData() const wxOVERRIDE;
|
virtual wxGDIRefData* CreateGDIRefData() const wxOVERRIDE;
|
||||||
virtual wxGDIRefData* CloneGDIRefData(const wxGDIRefData* data) const wxOVERRIDE;
|
virtual wxGDIRefData* CloneGDIRefData(const wxGDIRefData* data) const wxOVERRIDE;
|
||||||
|
|
||||||
|
#ifdef __WXGTK3__
|
||||||
|
virtual bool DoCreate(const wxSize& sz, double scale, int depth) wxOVERRIDE;
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifndef __WXGTK3__
|
#ifndef __WXGTK3__
|
||||||
void SetPixmap(GdkPixmap* pixmap);
|
void SetPixmap(GdkPixmap* pixmap);
|
||||||
|
|||||||
@@ -158,7 +158,14 @@ public:
|
|||||||
|
|
||||||
virtual bool Create(int width, int height, const wxDC& dc);
|
virtual bool Create(int width, int height, const wxDC& dc);
|
||||||
virtual bool Create(const void* data, wxBitmapType type, int width, int height, int depth = 1);
|
virtual bool Create(const void* data, wxBitmapType type, int width, int height, int depth = 1);
|
||||||
virtual bool CreateScaled(int w, int h, int d, double logicalScale);
|
|
||||||
|
bool CreateWithLogicalSize(const wxSize& sz,
|
||||||
|
double scale,
|
||||||
|
int depth = wxBITMAP_SCREEN_DEPTH);
|
||||||
|
bool CreateWithLogicalSize(int width, int height,
|
||||||
|
double scale,
|
||||||
|
int depth = wxBITMAP_SCREEN_DEPTH)
|
||||||
|
{ return CreateWithLogicalSize(wxSize(width, height), scale, depth); }
|
||||||
|
|
||||||
virtual bool LoadFile(const wxString& name, wxBitmapType type = wxBITMAP_DEFAULT_TYPE);
|
virtual bool LoadFile(const wxString& name, wxBitmapType type = wxBITMAP_DEFAULT_TYPE);
|
||||||
virtual bool SaveFile(const wxString& name, wxBitmapType type, const wxPalette *cmap = NULL) const;
|
virtual bool SaveFile(const wxString& name, wxBitmapType type, const wxPalette *cmap = NULL) const;
|
||||||
@@ -197,7 +204,9 @@ public:
|
|||||||
double GetLogicalHeight() const;
|
double GetLogicalHeight() const;
|
||||||
wxSize GetLogicalSize() const;
|
wxSize GetLogicalSize() const;
|
||||||
|
|
||||||
// old synonyms for GetLogicalXXX() functions
|
// old synonyms for CreateWithLogicalSize() and GetLogicalXXX() functions
|
||||||
|
bool CreateScaled(int w, int h, int d, double logicalScale)
|
||||||
|
{ return CreateWithLogicalSize(wxSize(w, h), logicalScale, d); }
|
||||||
double GetScaledWidth() const { return GetLogicalWidth(); }
|
double GetScaledWidth() const { return GetLogicalWidth(); }
|
||||||
double GetScaledHeight() const { return GetLogicalHeight(); }
|
double GetScaledHeight() const { return GetLogicalHeight(); }
|
||||||
wxSize GetScaledSize() const { return GetLogicalSize(); }
|
wxSize GetScaledSize() const { return GetLogicalSize(); }
|
||||||
|
|||||||
@@ -150,9 +150,6 @@ public:
|
|||||||
// Create a bitmap compatible with the given DC, inheriting its magnification factor
|
// Create a bitmap compatible with the given DC, inheriting its magnification factor
|
||||||
bool Create(int width, int height, const wxDC& dc);
|
bool Create(int width, int height, const wxDC& dc);
|
||||||
|
|
||||||
// Create a bitmap with a scale factor, width and height are multiplied with that factor
|
|
||||||
bool CreateScaled(int logwidth, int logheight, int depth, double logicalScale) wxOVERRIDE;
|
|
||||||
|
|
||||||
// virtual bool Create( WXHICON icon) ;
|
// virtual bool Create( WXHICON icon) ;
|
||||||
virtual bool LoadFile(const wxString& name, wxBitmapType type = wxBITMAP_DEFAULT_TYPE) wxOVERRIDE;
|
virtual bool LoadFile(const wxString& name, wxBitmapType type = wxBITMAP_DEFAULT_TYPE) wxOVERRIDE;
|
||||||
virtual bool SaveFile(const wxString& name, wxBitmapType type, const wxPalette *cmap = NULL) const wxOVERRIDE;
|
virtual bool SaveFile(const wxString& name, wxBitmapType type, const wxPalette *cmap = NULL) const wxOVERRIDE;
|
||||||
@@ -245,6 +242,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual wxGDIRefData *CreateGDIRefData() const wxOVERRIDE;
|
virtual wxGDIRefData *CreateGDIRefData() const wxOVERRIDE;
|
||||||
virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const wxOVERRIDE;
|
virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual bool DoCreate(const wxSize& sz, double scale, int depth) wxOVERRIDE;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _WX_BITMAP_H_
|
#endif // _WX_BITMAP_H_
|
||||||
|
|||||||
@@ -460,7 +460,39 @@ public:
|
|||||||
bool Create(int width, int height, const wxDC& dc);
|
bool Create(int width, int height, const wxDC& dc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Create a bitmap with a scale factor, width and height are multiplied with that factor
|
Create a bitmap specifying its size in logical pixels and the scale
|
||||||
|
factor to use.
|
||||||
|
|
||||||
|
The physical size of the bitmap is obtained by multiplying the given
|
||||||
|
size in logical pixels by @a scale and rounding it to the closest
|
||||||
|
integer.
|
||||||
|
|
||||||
|
@param size
|
||||||
|
The size of the bitmap in logical pixels. Both width and height
|
||||||
|
must be strictly positive.
|
||||||
|
@param scale
|
||||||
|
Scale factor used by the bitmap, see SetScaleFactor().
|
||||||
|
@param depth
|
||||||
|
The number of bits used to represent each bitmap pixel.
|
||||||
|
|
||||||
|
@return @true if the creation was successful.
|
||||||
|
|
||||||
|
@since 3.1.6
|
||||||
|
*/
|
||||||
|
bool CreateWithLogicalSize(const wxSize& size,
|
||||||
|
double scale,
|
||||||
|
int depth = wxBITMAP_SCREEN_DEPTH);
|
||||||
|
|
||||||
|
/// @overload
|
||||||
|
bool CreateWithLogicalSize(int width, int height,
|
||||||
|
double scale,
|
||||||
|
int depth = wxBITMAP_SCREEN_DEPTH);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create a bitmap with a scale factor.
|
||||||
|
|
||||||
|
This is an older synonym for CreateWithLogicalSize(), use the new
|
||||||
|
function in the new code.
|
||||||
|
|
||||||
@param width
|
@param width
|
||||||
The width of the bitmap in pixels, must be strictly positive.
|
The width of the bitmap in pixels, must be strictly positive.
|
||||||
@@ -545,9 +577,9 @@ public:
|
|||||||
Returns the size of bitmap in DPI-independent units.
|
Returns the size of bitmap in DPI-independent units.
|
||||||
|
|
||||||
This assumes that the bitmap was created using the value of scale
|
This assumes that the bitmap was created using the value of scale
|
||||||
factor corresponding to the current DPI (see CreateScaled() and
|
factor corresponding to the current DPI (see CreateWithLogicalSize()
|
||||||
SetScaleFactor()) and returns its physical size divided by this scale
|
and SetScaleFactor()) and returns its physical size divided by this
|
||||||
factor.
|
scale factor.
|
||||||
|
|
||||||
Unlike GetLogicalSize(), this function returns the same value under all
|
Unlike GetLogicalSize(), this function returns the same value under all
|
||||||
platforms and so its result should @e not be used as window or device
|
platforms and so its result should @e not be used as window or device
|
||||||
@@ -863,8 +895,8 @@ public:
|
|||||||
which logical and physical pixels differ (i.e. wxOSX and wxGTK3, but
|
which logical and physical pixels differ (i.e. wxOSX and wxGTK3, but
|
||||||
not wxMSW).
|
not wxMSW).
|
||||||
|
|
||||||
When creating a new bitmap, CreateScaled() can be used to specify the
|
When creating a new bitmap, CreateWithLogicalSize() can be used to
|
||||||
correct scale factor from the beginning.
|
specify the correct scale factor from the beginning.
|
||||||
|
|
||||||
@since 3.1.6
|
@since 3.1.6
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -206,9 +206,9 @@ bool wxBitmapBase::CopyFromIcon(const wxIcon& icon)
|
|||||||
// Trivial implementations of scale-factor related functions
|
// Trivial implementations of scale-factor related functions
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
bool wxBitmapBase::CreateScaled(int w, int h, int d, double logicalScale)
|
bool wxBitmapBase::DoCreate(const wxSize& sz, double scale, int depth)
|
||||||
{
|
{
|
||||||
return Create(wxRound(w*logicalScale), wxRound(h*logicalScale), d);
|
return Create(sz*scale, depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxBitmapBase::SetScaleFactor(double WXUNUSED(scale))
|
void wxBitmapBase::SetScaleFactor(double WXUNUSED(scale))
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ private:
|
|||||||
|
|
||||||
// we must always return a valid bitmap but creating a bitmap of
|
// we must always return a valid bitmap but creating a bitmap of
|
||||||
// size 0 would fail, so create a 1*1 bitmap in this case
|
// size 0 would fail, so create a 1*1 bitmap in this case
|
||||||
buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale);
|
buffer->CreateWithLogicalSize(wxMax(w, 1), wxMax(h, 1), scale);
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -990,9 +990,9 @@ void wxBitmap::SetMask( wxMask *mask )
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
bool wxBitmap::CreateScaled(int w, int h, int depth, double scale)
|
bool wxBitmap::DoCreate(const wxSize& size, double scale, int depth)
|
||||||
{
|
{
|
||||||
Create(wxRound(w * scale), wxRound(h * scale), depth);
|
Create(size*scale, depth);
|
||||||
M_BMPDATA->m_scaleFactor = scale;
|
M_BMPDATA->m_scaleFactor = scale;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -747,9 +747,9 @@ bool wxBitmap::Create(int width, int height, const wxDC& dc)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxBitmap::CreateScaled(int w, int h, int d, double logicalScale)
|
bool wxBitmap::CreateWithLogicalSize(const wxSize& size, double scale, int depth)
|
||||||
{
|
{
|
||||||
return Create(wxRound(w*logicalScale), wxRound(h*logicalScale), d);
|
return Create(size*scale, depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxBitmap::DoCreate(int w, int h, int d, WXHDC hdc)
|
bool wxBitmap::DoCreate(int w, int h, int d, WXHDC hdc)
|
||||||
|
|||||||
@@ -599,7 +599,7 @@ void wxToolBarTool::UpdateImages()
|
|||||||
// TODO CS this should use the best current representation, or optionally iterate through all
|
// TODO CS this should use the best current representation, or optionally iterate through all
|
||||||
wxSize sz = m_bmpNormal.GetDefaultSize();
|
wxSize sz = m_bmpNormal.GetDefaultSize();
|
||||||
m_alternateBitmap = wxBitmap();
|
m_alternateBitmap = wxBitmap();
|
||||||
m_alternateBitmap.Create(sz.x, sz.y, -1); // TODO CS m_alternateBitmap.CreateScaled(sz.x, sz.y, -1, m_bmpNormal.GetScaleFactor());
|
m_alternateBitmap.Create(sz.x, sz.y, -1); // TODO CS m_alternateBitmap.CreateWithLogicalSize(sz, m_bmpNormal.GetScaleFactor());
|
||||||
m_alternateBitmap.UseAlpha();
|
m_alternateBitmap.UseAlpha();
|
||||||
wxMemoryDC dc;
|
wxMemoryDC dc;
|
||||||
|
|
||||||
|
|||||||
@@ -559,7 +559,7 @@ wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const
|
|||||||
|
|
||||||
const wxSize bitmapSize(subrect ? subrect->GetSize() : m_window->GetSize());
|
const wxSize bitmapSize(subrect ? subrect->GetSize() : m_window->GetSize());
|
||||||
wxBitmap bitmap;
|
wxBitmap bitmap;
|
||||||
bitmap.CreateScaled(bitmapSize.x, bitmapSize.y, -1, m_contentScaleFactor);
|
bitmap.CreateWithLogicalSize(bitmapSize, m_contentScaleFactor);
|
||||||
|
|
||||||
NSView* view = (NSView*) m_window->GetHandle();
|
NSView* view = (NSView*) m_window->GetHandle();
|
||||||
if ( [view isHiddenOrHasHiddenAncestor] == NO )
|
if ( [view isHiddenOrHasHiddenAncestor] == NO )
|
||||||
@@ -591,7 +591,7 @@ wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const
|
|||||||
|
|
||||||
CGRect r = CGRectMake( 0 , 0 , CGImageGetWidth(cgImageRef) , CGImageGetHeight(cgImageRef) );
|
CGRect r = CGRectMake( 0 , 0 , CGImageGetWidth(cgImageRef) , CGImageGetHeight(cgImageRef) );
|
||||||
|
|
||||||
// The bitmap created by wxBitmap::CreateScaled() above is scaled,
|
// The bitmap created by wxBitmap::CreateWithLogicalSize() above is scaled,
|
||||||
// so we need to adjust the coordinates for it.
|
// so we need to adjust the coordinates for it.
|
||||||
r.size.width /= m_contentScaleFactor;
|
r.size.width /= m_contentScaleFactor;
|
||||||
r.size.height /= m_contentScaleFactor;
|
r.size.height /= m_contentScaleFactor;
|
||||||
|
|||||||
@@ -961,7 +961,7 @@ wxBitmap wxBitmap::GetSubBitmap(const wxRect &rect) const
|
|||||||
|
|
||||||
wxBitmap ret;
|
wxBitmap ret;
|
||||||
double scale = GetScaleFactor();
|
double scale = GetScaleFactor();
|
||||||
ret.CreateScaled( rect.width, rect.height, GetDepth(), scale );
|
ret.CreateWithLogicalSize( rect.GetSize(), scale, GetDepth() );
|
||||||
wxASSERT_MSG( ret.IsOk(), wxT("GetSubBitmap error") );
|
wxASSERT_MSG( ret.IsOk(), wxT("GetSubBitmap error") );
|
||||||
if ( HasAlpha() )
|
if ( HasAlpha() )
|
||||||
ret.UseAlpha() ;
|
ret.UseAlpha() ;
|
||||||
@@ -1039,17 +1039,18 @@ bool wxBitmap::Create(int w, int h, int d)
|
|||||||
bool wxBitmap::Create(int w, int h, const wxDC& dc)
|
bool wxBitmap::Create(int w, int h, const wxDC& dc)
|
||||||
{
|
{
|
||||||
double factor = dc.GetContentScaleFactor();
|
double factor = dc.GetContentScaleFactor();
|
||||||
return CreateScaled(w,h,wxBITMAP_SCREEN_DEPTH, factor);
|
return CreateWithLogicalSize(w, h, factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxBitmap::CreateScaled(int w, int h, int d, double logicalScale)
|
bool wxBitmap::DoCreate(const wxSize& size, double scale, int d)
|
||||||
{
|
{
|
||||||
UnRef();
|
UnRef();
|
||||||
|
|
||||||
if ( d < 0 )
|
if ( d < 0 )
|
||||||
d = wxDisplayDepth() ;
|
d = wxDisplayDepth() ;
|
||||||
|
|
||||||
m_refData = new wxBitmapRefData( w*logicalScale , h*logicalScale , d, logicalScale );
|
const wxSize sizePhys = size*scale;
|
||||||
|
m_refData = new wxBitmapRefData( sizePhys.x, sizePhys.y, d );
|
||||||
|
|
||||||
return GetBitmapData()->IsOk() ;
|
return GetBitmapData()->IsOk() ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4621,7 +4621,7 @@ void wxPropertyGrid::OnResize( wxSizeEvent& event )
|
|||||||
int w = wxMax(width, 250);
|
int w = wxMax(width, 250);
|
||||||
int h = wxMax(height + dblh, 400);
|
int h = wxMax(height + dblh, 400);
|
||||||
m_doubleBuffer = new wxBitmap;
|
m_doubleBuffer = new wxBitmap;
|
||||||
m_doubleBuffer->CreateScaled( w, h, wxBITMAP_SCREEN_DEPTH, scaleFactor );
|
m_doubleBuffer->CreateWithLogicalSize( w, h, scaleFactor );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -4635,7 +4635,7 @@ void wxPropertyGrid::OnResize( wxSizeEvent& event )
|
|||||||
if ( h < (height+dblh) ) h = height + dblh;
|
if ( h < (height+dblh) ) h = height + dblh;
|
||||||
delete m_doubleBuffer;
|
delete m_doubleBuffer;
|
||||||
m_doubleBuffer = new wxBitmap;
|
m_doubleBuffer = new wxBitmap;
|
||||||
m_doubleBuffer->CreateScaled( w, h, wxBITMAP_SCREEN_DEPTH, scaleFactor );
|
m_doubleBuffer->CreateWithLogicalSize( w, h, scaleFactor );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ void SurfaceImpl::InitPixMap(int width, int height, Surface *surface, WindowID w
|
|||||||
if (width < 1) width = 1;
|
if (width < 1) width = 1;
|
||||||
if (height < 1) height = 1;
|
if (height < 1) height = 1;
|
||||||
bitmap = new wxBitmap();
|
bitmap = new wxBitmap();
|
||||||
bitmap->CreateScaled(width, height,wxBITMAP_SCREEN_DEPTH,(GETWIN(winid))->GetContentScaleFactor());
|
bitmap->CreateWithLogicalSize(width, height,(GETWIN(winid))->GetContentScaleFactor());
|
||||||
mdc->SelectObject(*bitmap);
|
mdc->SelectObject(*bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user