Adjust the font size when DPI of window changes
This commit is contained in:
committed by
Maarten Bent
parent
e3d3a0b7e8
commit
e563d4858a
@@ -501,6 +501,13 @@ public:
|
|||||||
// account as well.
|
// account as well.
|
||||||
static int GetNumericWeightOf(wxFontWeight weight);
|
static int GetNumericWeightOf(wxFontWeight weight);
|
||||||
|
|
||||||
|
// Some ports need to modify the font object when the DPI of the window it
|
||||||
|
// is used with changes, this function can be used to do it.
|
||||||
|
//
|
||||||
|
// Currently it is only used in wxMSW and is not considered to be part of
|
||||||
|
// wxWidgets public API.
|
||||||
|
virtual void WXAdjustToPPI(const wxSize& WXUNUSED(ppi)) { }
|
||||||
|
|
||||||
// this doesn't do anything and is kept for compatibility only
|
// this doesn't do anything and is kept for compatibility only
|
||||||
#if WXWIN_COMPATIBILITY_2_8
|
#if WXWIN_COMPATIBILITY_2_8
|
||||||
wxDEPRECATED_INLINE(void SetNoAntiAliasing(bool no = true), wxUnusedVar(no);)
|
wxDEPRECATED_INLINE(void SetNoAntiAliasing(bool no = true), wxUnusedVar(no);)
|
||||||
|
@@ -120,6 +120,8 @@ public:
|
|||||||
|
|
||||||
virtual bool IsFixedWidth() const wxOVERRIDE;
|
virtual bool IsFixedWidth() const wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual void WXAdjustToPPI(const wxSize& ppi) wxOVERRIDE;
|
||||||
|
|
||||||
wxDEPRECATED_MSG("use wxFONT{FAMILY,STYLE,WEIGHT}_XXX constants ie: wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD")
|
wxDEPRECATED_MSG("use wxFONT{FAMILY,STYLE,WEIGHT}_XXX constants ie: wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD")
|
||||||
wxFont(int size,
|
wxFont(int size,
|
||||||
int family,
|
int family,
|
||||||
|
@@ -592,6 +592,11 @@ public:
|
|||||||
void MSWUpdateOnDPIChange(const wxSize& oldDPI, const wxSize& newDPI);
|
void MSWUpdateOnDPIChange(const wxSize& oldDPI, const wxSize& newDPI);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// Called from MSWUpdateOnDPIChange() specifically to update the control
|
||||||
|
// font, as this may need to be done differently for some specific native
|
||||||
|
// controls. The default version updates m_font of this window.
|
||||||
|
virtual void MSWUpdateFontOnDPIChange(const wxSize& newDPI);
|
||||||
|
|
||||||
// this allows you to implement standard control borders without
|
// this allows you to implement standard control borders without
|
||||||
// repeating the code in different classes that are not derived from
|
// repeating the code in different classes that are not derived from
|
||||||
// wxControl
|
// wxControl
|
||||||
|
@@ -1726,6 +1726,8 @@ wxFont wxWindowBase::GetFont() const
|
|||||||
if ( !font.IsOk() )
|
if ( !font.IsOk() )
|
||||||
font = GetClassDefaultAttributes().font;
|
font = GetClassDefaultAttributes().font;
|
||||||
|
|
||||||
|
font.WXAdjustToPPI(GetDPI());
|
||||||
|
|
||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1744,6 +1746,9 @@ bool wxWindowBase::SetFont(const wxFont& font)
|
|||||||
m_hasFont = font.IsOk();
|
m_hasFont = font.IsOk();
|
||||||
m_inheritFont = m_hasFont;
|
m_inheritFont = m_hasFont;
|
||||||
|
|
||||||
|
if ( m_hasFont )
|
||||||
|
m_font.WXAdjustToPPI(GetDPI());
|
||||||
|
|
||||||
InvalidateBestSize();
|
InvalidateBestSize();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@@ -512,7 +512,8 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const
|
|||||||
void wxNativeFontInfo::SetFractionalPointSize(float pointSizeNew)
|
void wxNativeFontInfo::SetFractionalPointSize(float pointSizeNew)
|
||||||
{
|
{
|
||||||
// We don't have the correct DPI to use here, so use that of the
|
// We don't have the correct DPI to use here, so use that of the
|
||||||
// primary screen.
|
// primary screen and rely on WXAdjustToPPI() changing it later if
|
||||||
|
// necessary.
|
||||||
const int ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
|
const int ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY);
|
||||||
lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi);
|
lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi);
|
||||||
|
|
||||||
@@ -899,6 +900,19 @@ void wxFont::SetPixelSize(const wxSize& pixelSize)
|
|||||||
M_FONTDATA->SetPixelSize(pixelSize);
|
M_FONTDATA->SetPixelSize(pixelSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxFont::WXAdjustToPPI(const wxSize& ppi)
|
||||||
|
{
|
||||||
|
// We only use vertical component here as we only adjust LOGFONT::lfHeight.
|
||||||
|
const int heightNew = M_FONTDATA->GetLogFontHeightAtPPI(ppi.y);
|
||||||
|
|
||||||
|
if ( heightNew != M_FONTDATA->GetLogFontHeight() )
|
||||||
|
{
|
||||||
|
AllocExclusive();
|
||||||
|
|
||||||
|
M_FONTDATA->SetLogFontHeight(heightNew);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void wxFont::SetFamily(wxFontFamily family)
|
void wxFont::SetFamily(wxFontFamily family)
|
||||||
{
|
{
|
||||||
AllocExclusive();
|
AllocExclusive();
|
||||||
|
@@ -4837,6 +4837,17 @@ wxSize wxWindowMSW::GetDPI() const
|
|||||||
return dpi;
|
return dpi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxWindowMSW::MSWUpdateFontOnDPIChange(const wxSize& newDPI)
|
||||||
|
{
|
||||||
|
if ( m_font.IsOk() )
|
||||||
|
{
|
||||||
|
m_font.WXAdjustToPPI(newDPI);
|
||||||
|
|
||||||
|
// WXAdjustToPPI() changes the HFONT, so reassociate it with the window.
|
||||||
|
wxSetWindowFont(GetHwnd(), m_font);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Helper function to update the given coordinate by the scaling factor if it
|
// Helper function to update the given coordinate by the scaling factor if it
|
||||||
// is set, i.e. different from wxDefaultCoord.
|
// is set, i.e. different from wxDefaultCoord.
|
||||||
static void ScaleCoordIfSet(int& coord, float scaleFactor)
|
static void ScaleCoordIfSet(int& coord, float scaleFactor)
|
||||||
@@ -4861,6 +4872,9 @@ wxWindowMSW::MSWUpdateOnDPIChange(const wxSize& oldDPI, const wxSize& newDPI)
|
|||||||
|
|
||||||
InvalidateBestSize();
|
InvalidateBestSize();
|
||||||
|
|
||||||
|
// update font if necessary
|
||||||
|
MSWUpdateFontOnDPIChange(newDPI);
|
||||||
|
|
||||||
// update children
|
// update children
|
||||||
wxWindowList::compatibility_iterator current = GetChildren().GetFirst();
|
wxWindowList::compatibility_iterator current = GetChildren().GetFirst();
|
||||||
while ( current )
|
while ( current )
|
||||||
|
Reference in New Issue
Block a user