Account for DPI scale factors when calculating some sizes (#2118). v2.15.173
authorCarl Hetherington <cth@carlh.net>
Thu, 11 Nov 2021 21:15:47 +0000 (22:15 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 13 Nov 2021 23:27:31 +0000 (00:27 +0100)
src/wx/film_viewer.cc
src/wx/gl_video_view.cc

index 2c90b86095278c9bd19b81831e27f3d82123909b..a93b4226e97084f228b104d5957e8351c0b5e7d7 100644 (file)
@@ -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);
        }
 
index 877cd5125fec15cf1ee547e8cd315c38023dfd0b..559cff4136c1bfea40459e4b2892ecb2abe5d7be 100644 (file)
@@ -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;