Adjust the font size when DPI of window changes
This commit is contained in:
parent
e3d3a0b7e8
commit
e563d4858a
@ -501,6 +501,13 @@ public:
|
||||
// account as well.
|
||||
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
|
||||
#if WXWIN_COMPATIBILITY_2_8
|
||||
wxDEPRECATED_INLINE(void SetNoAntiAliasing(bool no = true), wxUnusedVar(no);)
|
||||
|
@ -120,6 +120,8 @@ public:
|
||||
|
||||
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")
|
||||
wxFont(int size,
|
||||
int family,
|
||||
|
@ -592,6 +592,11 @@ public:
|
||||
void MSWUpdateOnDPIChange(const wxSize& oldDPI, const wxSize& newDPI);
|
||||
|
||||
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
|
||||
// repeating the code in different classes that are not derived from
|
||||
// wxControl
|
||||
|
@ -1726,6 +1726,8 @@ wxFont wxWindowBase::GetFont() const
|
||||
if ( !font.IsOk() )
|
||||
font = GetClassDefaultAttributes().font;
|
||||
|
||||
font.WXAdjustToPPI(GetDPI());
|
||||
|
||||
return font;
|
||||
}
|
||||
else
|
||||
@ -1744,6 +1746,9 @@ bool wxWindowBase::SetFont(const wxFont& font)
|
||||
m_hasFont = font.IsOk();
|
||||
m_inheritFont = m_hasFont;
|
||||
|
||||
if ( m_hasFont )
|
||||
m_font.WXAdjustToPPI(GetDPI());
|
||||
|
||||
InvalidateBestSize();
|
||||
|
||||
return true;
|
||||
|
@ -512,7 +512,8 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const
|
||||
void wxNativeFontInfo::SetFractionalPointSize(float pointSizeNew)
|
||||
{
|
||||
// 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);
|
||||
lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi);
|
||||
|
||||
@ -899,6 +900,19 @@ void wxFont::SetPixelSize(const wxSize& 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)
|
||||
{
|
||||
AllocExclusive();
|
||||
|
@ -4837,6 +4837,17 @@ wxSize wxWindowMSW::GetDPI() const
|
||||
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
|
||||
// is set, i.e. different from wxDefaultCoord.
|
||||
static void ScaleCoordIfSet(int& coord, float scaleFactor)
|
||||
@ -4861,6 +4872,9 @@ wxWindowMSW::MSWUpdateOnDPIChange(const wxSize& oldDPI, const wxSize& newDPI)
|
||||
|
||||
InvalidateBestSize();
|
||||
|
||||
// update font if necessary
|
||||
MSWUpdateFontOnDPIChange(newDPI);
|
||||
|
||||
// update children
|
||||
wxWindowList::compatibility_iterator current = GetChildren().GetFirst();
|
||||
while ( current )
|
||||
|
Loading…
Reference in New Issue
Block a user