Support DPI change in wxStyledTextCtrl

Change to zoom-level and margin width based on the active DPI.
Send wxDPIChangedEvent to all controls and windows.
This commit is contained in:
Maarten Bent
2016-10-16 17:29:51 +02:00
parent 125b2c18ea
commit 62c5b2d8d1
4 changed files with 52 additions and 2 deletions

View File

@@ -5479,6 +5479,7 @@ protected:
void OnKeyDown(wxKeyEvent& evt); void OnKeyDown(wxKeyEvent& evt);
void OnLoseFocus(wxFocusEvent& evt); void OnLoseFocus(wxFocusEvent& evt);
void OnGainFocus(wxFocusEvent& evt); void OnGainFocus(wxFocusEvent& evt);
void OnDPIChanged(wxDPIChangedEvent& evt);
void OnSysColourChanged(wxSysColourChangedEvent& evt); void OnSysColourChanged(wxSysColourChangedEvent& evt);
void OnEraseBackground(wxEraseEvent& evt); void OnEraseBackground(wxEraseEvent& evt);
void OnMenu(wxCommandEvent& evt); void OnMenu(wxCommandEvent& evt);

View File

@@ -159,6 +159,7 @@ wxBEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
EVT_KEY_DOWN (wxStyledTextCtrl::OnKeyDown) EVT_KEY_DOWN (wxStyledTextCtrl::OnKeyDown)
EVT_KILL_FOCUS (wxStyledTextCtrl::OnLoseFocus) EVT_KILL_FOCUS (wxStyledTextCtrl::OnLoseFocus)
EVT_SET_FOCUS (wxStyledTextCtrl::OnGainFocus) EVT_SET_FOCUS (wxStyledTextCtrl::OnGainFocus)
EVT_DPI_CHANGED (wxStyledTextCtrl::OnDPIChanged)
EVT_SYS_COLOUR_CHANGED (wxStyledTextCtrl::OnSysColourChanged) EVT_SYS_COLOUR_CHANGED (wxStyledTextCtrl::OnSysColourChanged)
EVT_ERASE_BACKGROUND (wxStyledTextCtrl::OnEraseBackground) EVT_ERASE_BACKGROUND (wxStyledTextCtrl::OnEraseBackground)
EVT_MENU_RANGE (10, 16, wxStyledTextCtrl::OnMenu) EVT_MENU_RANGE (10, 16, wxStyledTextCtrl::OnMenu)
@@ -239,6 +240,16 @@ bool wxStyledTextCtrl::Create(wxWindow *parent,
SetFontQuality(wxSTC_EFF_QUALITY_DEFAULT); SetFontQuality(wxSTC_EFF_QUALITY_DEFAULT);
#endif #endif
#ifdef __WXMSW__
// Set zoom for DPI
double baseDPI = ::GetDeviceCaps(WindowHDC(parent->GetHWND()), LOGPIXELSY);
double activeDPI = parent->GetDPI().y;
int ptSizeOld = StyleGetSize(wxSTC_STYLE_DEFAULT);
int ptSizeNew = (int)wxMulDivInt32(ptSizeOld, activeDPI, baseDPI);
SetZoom(GetZoom() + (ptSizeNew - ptSizeOld));
#endif
return true; return true;
} }
@@ -5432,6 +5443,19 @@ void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
} }
void wxStyledTextCtrl::OnDPIChanged(wxDPIChangedEvent& evt)
{
int ptSizeOld = StyleGetSize(wxSTC_STYLE_DEFAULT);
int ptSizeNew = (int)wxMulDivInt32(ptSizeOld, evt.GetNewDPI().y, evt.GetOldDPI().y);
SetZoom(GetZoom() + (ptSizeNew - ptSizeOld));
for ( int i = 0; i < SC_MAX_MARGIN; ++i )
{
SetMarginWidth(i, (int)wxMulDivInt32(GetMarginWidth(i), evt.GetNewDPI().y, evt.GetOldDPI().y));
}
}
void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) { void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) {
m_swx->DoSysColourChange(); m_swx->DoSysColourChange();
} }
@@ -5467,7 +5491,7 @@ wxSize wxStyledTextCtrl::DoGetBestSize() const
{ {
// What would be the best size for a wxSTC? // What would be the best size for a wxSTC?
// Just give a reasonable minimum until something else can be figured out. // Just give a reasonable minimum until something else can be figured out.
return wxSize(200,100); return FromDIP(wxSize(200,100));
} }

View File

@@ -159,6 +159,7 @@ wxBEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
EVT_KEY_DOWN (wxStyledTextCtrl::OnKeyDown) EVT_KEY_DOWN (wxStyledTextCtrl::OnKeyDown)
EVT_KILL_FOCUS (wxStyledTextCtrl::OnLoseFocus) EVT_KILL_FOCUS (wxStyledTextCtrl::OnLoseFocus)
EVT_SET_FOCUS (wxStyledTextCtrl::OnGainFocus) EVT_SET_FOCUS (wxStyledTextCtrl::OnGainFocus)
EVT_DPI_CHANGED (wxStyledTextCtrl::OnDPIChanged)
EVT_SYS_COLOUR_CHANGED (wxStyledTextCtrl::OnSysColourChanged) EVT_SYS_COLOUR_CHANGED (wxStyledTextCtrl::OnSysColourChanged)
EVT_ERASE_BACKGROUND (wxStyledTextCtrl::OnEraseBackground) EVT_ERASE_BACKGROUND (wxStyledTextCtrl::OnEraseBackground)
EVT_MENU_RANGE (10, 16, wxStyledTextCtrl::OnMenu) EVT_MENU_RANGE (10, 16, wxStyledTextCtrl::OnMenu)
@@ -239,6 +240,16 @@ bool wxStyledTextCtrl::Create(wxWindow *parent,
SetFontQuality(wxSTC_EFF_QUALITY_DEFAULT); SetFontQuality(wxSTC_EFF_QUALITY_DEFAULT);
#endif #endif
#ifdef __WXMSW__
// Set zoom for DPI
double baseDPI = ::GetDeviceCaps(WindowHDC(parent->GetHWND()), LOGPIXELSY);
double activeDPI = parent->GetDPI().y;
int ptSizeOld = StyleGetSize(wxSTC_STYLE_DEFAULT);
int ptSizeNew = (int)wxMulDivInt32(ptSizeOld, activeDPI, baseDPI);
SetZoom(GetZoom() + (ptSizeNew - ptSizeOld));
#endif
return true; return true;
} }
@@ -959,6 +970,19 @@ void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
} }
void wxStyledTextCtrl::OnDPIChanged(wxDPIChangedEvent& evt)
{
int ptSizeOld = StyleGetSize(wxSTC_STYLE_DEFAULT);
int ptSizeNew = (int)wxMulDivInt32(ptSizeOld, evt.GetNewDPI().y, evt.GetOldDPI().y);
SetZoom(GetZoom() + (ptSizeNew - ptSizeOld));
for ( int i = 0; i < SC_MAX_MARGIN; ++i )
{
SetMarginWidth(i, (int)wxMulDivInt32(GetMarginWidth(i), evt.GetNewDPI().y, evt.GetOldDPI().y));
}
}
void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) { void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) {
m_swx->DoSysColourChange(); m_swx->DoSysColourChange();
} }
@@ -994,7 +1018,7 @@ wxSize wxStyledTextCtrl::DoGetBestSize() const
{ {
// What would be the best size for a wxSTC? // What would be the best size for a wxSTC?
// Just give a reasonable minimum until something else can be figured out. // Just give a reasonable minimum until something else can be figured out.
return wxSize(200,100); return FromDIP(wxSize(200,100));
} }

View File

@@ -597,6 +597,7 @@ protected:
void OnKeyDown(wxKeyEvent& evt); void OnKeyDown(wxKeyEvent& evt);
void OnLoseFocus(wxFocusEvent& evt); void OnLoseFocus(wxFocusEvent& evt);
void OnGainFocus(wxFocusEvent& evt); void OnGainFocus(wxFocusEvent& evt);
void OnDPIChanged(wxDPIChangedEvent& evt);
void OnSysColourChanged(wxSysColourChangedEvent& evt); void OnSysColourChanged(wxSysColourChangedEvent& evt);
void OnEraseBackground(wxEraseEvent& evt); void OnEraseBackground(wxEraseEvent& evt);
void OnMenu(wxCommandEvent& evt); void OnMenu(wxCommandEvent& evt);