From 081525ef1c392465fc5a0bb4be79af8e84655bc4 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 11 Nov 2021 22:15:47 +0100 Subject: [PATCH] Account for DPI scale factors when calculating some sizes (#2118). --- src/wx/film_viewer.cc | 10 +++++++--- src/wx/gl_video_view.cc | 7 +++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 2c90b8609..a93b4226e 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -283,17 +283,21 @@ FilmViewer::calculate_sizes () auto const container = _film->container (); - auto const view_ratio = float(_video_view->get()->GetSize().x) / _video_view->get()->GetSize().y; + auto const dpi_scale_factor = _video_view->get()->GetDPIScaleFactor(); + int const video_view_width = std::round(_video_view->get()->GetSize().x * dpi_scale_factor); + int const video_view_height = std::round(_video_view->get()->GetSize().y * dpi_scale_factor); + + auto const view_ratio = float(video_view_width) / video_view_height; auto const film_ratio = container ? container->ratio () : 1.78; dcp::Size out_size; if (view_ratio < film_ratio) { /* panel is less widscreen than the film; clamp width */ - out_size.width = _video_view->get()->GetSize().x; + out_size.width = video_view_width; out_size.height = lrintf (out_size.width / film_ratio); } else { /* panel is more widescreen than the film; clamp height */ - out_size.height = _video_view->get()->GetSize().y; + out_size.height = video_view_height; out_size.width = lrintf (out_size.height * film_ratio); } diff --git a/src/wx/gl_video_view.cc b/src/wx/gl_video_view.cc index 877cd5125..559cff413 100644 --- a/src/wx/gl_video_view.cc +++ b/src/wx/gl_video_view.cc @@ -103,12 +103,15 @@ GLVideoView::GLVideoView (FilmViewer* viewer, wxWindow *parent) void GLVideoView::size_changed (wxSizeEvent const& ev) { - _canvas_size = ev.GetSize (); + auto const scale = _canvas->GetDPIScaleFactor(); + int const width = std::round(ev.GetSize().GetWidth() * scale); + int const height = std::round(ev.GetSize().GetHeight() * scale); + _canvas_size = { width, height }; + LOG_GENERAL("GLVideoView canvas size changed to %1x%2", width, height); Sized (); } - GLVideoView::~GLVideoView () { boost::this_thread::disable_interruption dis; -- 2.30.2