WIP: HiDPI support - 3D scene on Windows / Linux

HiDPI support on Windows - enabled in manifest.
This commit is contained in:
bubnikv 2019-02-04 21:41:10 +01:00
parent 09ee5793df
commit 5207d31df1
3 changed files with 34 additions and 15 deletions

View File

@ -31,7 +31,8 @@
</compatibility> </compatibility>
<asmv3:application> <asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">
<!-- set gdiScaling to true? --> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- legacy -->
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness>
</asmv3:windowsSettings> </asmv3:windowsSettings>
</asmv3:application> </asmv3:application>
</assembly> </assembly>

View File

@ -1102,12 +1102,11 @@ void GLCanvas3D::LayersEditing::_render_tooltip_texture(const GLCanvas3D& canvas
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
const float scale = canvas.get_canvas_size().get_scale_factor(); const float scale = canvas.get_canvas_size().get_scale_factor();
#else
const float scale = canvas.get_wxglcanvas()->GetContentScaleFactor();
#endif
const float width = (float)m_tooltip_texture.get_width() * scale; const float width = (float)m_tooltip_texture.get_width() * scale;
const float height = (float)m_tooltip_texture.get_height() * scale; const float height = (float)m_tooltip_texture.get_height() * scale;
#else
const float width = (float)m_tooltip_texture.get_width();
const float height = (float)m_tooltip_texture.get_height();
#endif
float zoom = canvas.get_camera_zoom(); float zoom = canvas.get_camera_zoom();
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
@ -1329,20 +1328,24 @@ void GLCanvas3D::LayersEditing::update_slicing_parameters()
float GLCanvas3D::LayersEditing::thickness_bar_width(const GLCanvas3D &canvas) float GLCanvas3D::LayersEditing::thickness_bar_width(const GLCanvas3D &canvas)
{ {
return
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
return canvas.get_canvas_size().get_scale_factor() * THICKNESS_BAR_WIDTH; canvas.get_canvas_size().get_scale_factor()
#else #else
return THICKNESS_BAR_WIDTH; canvas.get_wxglcanvas()->GetContentScaleFactor()
#endif #endif
* THICKNESS_BAR_WIDTH;
} }
float GLCanvas3D::LayersEditing::reset_button_height(const GLCanvas3D &canvas) float GLCanvas3D::LayersEditing::reset_button_height(const GLCanvas3D &canvas)
{ {
return
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
return canvas.get_canvas_size().get_scale_factor() * THICKNESS_RESET_BUTTON_HEIGHT; canvas.get_canvas_size().get_scale_factor()
#else #else
return THICKNESS_RESET_BUTTON_HEIGHT; canvas.get_wxglcanvas()->GetContentScaleFactor()
#endif #endif
* THICKNESS_RESET_BUTTON_HEIGHT;
} }
@ -6209,7 +6212,9 @@ void GLCanvas3D::_resize(unsigned int w, unsigned int h)
wxGetApp().imgui()->set_display_size((float)w, (float)h); wxGetApp().imgui()->set_display_size((float)w, (float)h);
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
wxGetApp().imgui()->set_style_scaling(m_retina_helper->get_scale_factor()); wxGetApp().imgui()->set_style_scaling(m_retina_helper->get_scale_factor());
#endif // ENABLE_RETINA_GL #else
wxGetApp().imgui()->set_style_scaling(m_canvas->GetContentScaleFactor());
#endif
#endif // ENABLE_IMGUI #endif // ENABLE_IMGUI
// ensures that this canvas is current // ensures that this canvas is current
@ -6668,7 +6673,10 @@ void GLCanvas3D::_render_gizmos_overlay() const
{ {
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
m_gizmos.set_overlay_scale(m_retina_helper->get_scale_factor()); m_gizmos.set_overlay_scale(m_retina_helper->get_scale_factor());
#endif #else
m_gizmos.set_overlay_scale(m_canvas->GetContentScaleFactor());
#endif /* __WXMSW__ */
m_gizmos.render_overlay(*this, m_selection); m_gizmos.render_overlay(*this, m_selection);
} }
@ -6676,7 +6684,10 @@ void GLCanvas3D::_render_toolbar() const
{ {
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
m_toolbar.set_icons_scale(m_retina_helper->get_scale_factor()); m_toolbar.set_icons_scale(m_retina_helper->get_scale_factor());
#endif #else
m_toolbar.set_icons_scale(m_canvas->GetContentScaleFactor());
#endif /* __WXMSW__ */
m_toolbar.render(*this); m_toolbar.render(*this);
} }
@ -6685,7 +6696,9 @@ void GLCanvas3D::_render_view_toolbar() const
if (m_view_toolbar != nullptr) { if (m_view_toolbar != nullptr) {
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
m_view_toolbar->set_icons_scale(m_retina_helper->get_scale_factor()); m_view_toolbar->set_icons_scale(m_retina_helper->get_scale_factor());
#endif #else
m_view_toolbar->set_icons_scale(m_canvas->GetContentScaleFactor());
#endif /* __WXMSW__ */
m_view_toolbar->render(*this); m_view_toolbar->render(*this);
} }
} }
@ -8433,7 +8446,9 @@ void GLCanvas3D::_resize_toolbars() const
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
m_toolbar.set_icons_scale(m_retina_helper->get_scale_factor()); m_toolbar.set_icons_scale(m_retina_helper->get_scale_factor());
#endif #else
m_toolbar.set_icons_scale(m_canvas->GetContentScaleFactor());
#endif /* __WXMSW__ */
GLToolbar::Layout::EOrientation orientation = m_toolbar.get_layout_orientation(); GLToolbar::Layout::EOrientation orientation = m_toolbar.get_layout_orientation();
@ -8480,7 +8495,9 @@ void GLCanvas3D::_resize_toolbars() const
{ {
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
m_view_toolbar->set_icons_scale(m_retina_helper->get_scale_factor()); m_view_toolbar->set_icons_scale(m_retina_helper->get_scale_factor());
#endif #else
m_view_toolbar->set_icons_scale(m_canvas->GetContentScaleFactor());
#endif /* __WXMSW__ */
// places the toolbar on the bottom-left corner of the 3d scene // places the toolbar on the bottom-left corner of the 3d scene
float top = (-0.5f * (float)cnv_size.get_height() + m_view_toolbar->get_height()) * inv_zoom; float top = (-0.5f * (float)cnv_size.get_height() + m_view_toolbar->get_height()) * inv_zoom;

View File

@ -941,6 +941,7 @@ public:
void set_context(wxGLContext* context) { m_context = context; } void set_context(wxGLContext* context) { m_context = context; }
wxGLCanvas* get_wxglcanvas() { return m_canvas; } wxGLCanvas* get_wxglcanvas() { return m_canvas; }
const wxGLCanvas* get_wxglcanvas() const { return m_canvas; }
void set_view_toolbar(GLToolbar* toolbar) { m_view_toolbar = toolbar; } void set_view_toolbar(GLToolbar* toolbar) { m_view_toolbar = toolbar; }