Add DPI scaling to KIPLATFORM
GTK needs to check current scaling but wx doesn't provide this functionality in 3.0, so we can bypass by going straight to the source.
This commit is contained in:
parent
2013a801d1
commit
507ca9bc73
|
@ -28,6 +28,7 @@
|
|||
#include <env_vars.h>
|
||||
#include <pgm_base.h>
|
||||
#include <settings/common_settings.h>
|
||||
#include <kiplatform/ui.h>
|
||||
|
||||
#include <wx/log.h>
|
||||
|
||||
|
@ -117,7 +118,7 @@ double DPI_SCALING::GetScaleFactor() const
|
|||
// Use the native WX reporting.
|
||||
// On Linux, this will not work until WX 3.2 and GTK >= 3.10
|
||||
// Otherwise it returns 1.0
|
||||
val = m_window->GetContentScaleFactor();
|
||||
val = KIPLATFORM::UI::GetSystemScaleFactor( m_window );
|
||||
wxLogTrace( traceHiDpi, "Scale factor (WX): %f", *val );
|
||||
}
|
||||
|
||||
|
|
|
@ -91,3 +91,16 @@ void KIPLATFORM::UI::EllipsizeChoiceBox( wxChoice* aChoice )
|
|||
// Only the list of cells must be freed, the renderer isn't ours to free
|
||||
g_list_free( cells );
|
||||
}
|
||||
|
||||
|
||||
double KIPLATFORM::UI::GetSystemScaleFactor( const wxWindow* aWindow )
|
||||
{
|
||||
double val = 1.0;
|
||||
|
||||
GtkWidget* widget = static_cast<GtkWidget*>( aWindow->GetHandle() );
|
||||
|
||||
if( widget && gtk_check_version( 3, 10, 0 ) == NULL )
|
||||
val = gtk_widget_get_scale_factor( widget );
|
||||
|
||||
return val;
|
||||
}
|
||||
|
|
|
@ -85,6 +85,14 @@ namespace KIPLATFORM
|
|||
* @param aChoice is the choice box to ellipsize
|
||||
*/
|
||||
void EllipsizeChoiceBox( wxChoice* aChoice );
|
||||
|
||||
/**
|
||||
* Tries to determine the system scaling factor currently in use for the window. Under wx3.0, GTK
|
||||
* fails to properly detect the scale factor.
|
||||
* @param aWindow pointer to the window to check
|
||||
* @return System scale factor in use, defaulting to the wxWidgets method
|
||||
*/
|
||||
double GetSystemScaleFactor( const wxWindow* aWindow );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -95,3 +95,9 @@ void KIPLATFORM::UI::EllipsizeChoiceBox( wxChoice* aChoice )
|
|||
{
|
||||
// Not implemented
|
||||
}
|
||||
|
||||
|
||||
double KIPLATFORM::UI::GetSystemScaleFactor( const wxWindow* aWindow )
|
||||
{
|
||||
return aWindow->GetContentScaleFactor();
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <wx/nonownedwnd.h>
|
||||
#include <wx/toplevel.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/window.h>
|
||||
|
||||
|
||||
bool KIPLATFORM::UI::IsDarkTheme()
|
||||
|
@ -91,3 +92,9 @@ void KIPLATFORM::UI::EllipsizeChoiceBox( wxChoice* aChoice )
|
|||
{
|
||||
// Not implemented
|
||||
}
|
||||
|
||||
|
||||
double KIPLATFORM::UI::GetSystemScaleFactor( const wxWindow* aWindow )
|
||||
{
|
||||
return aWindow->GetContentScaleFactor();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue