5050
5151#ifdef WINDOWS_COMPILE
5252#include "directx_renderer.h"
53+ #include "directx_renderer_impl.h"
5354#else
5455#include "opengl_renderer.h"
5556#endif
@@ -294,6 +295,7 @@ static gboolean event_box_motion_cb(GtkWidget *widget,
294295
295296#elif defined(WINDOWS_COMPILE )
296297
298+ /* scale is a uniform scaling applied to eg high dpi widgets by gtk */
297299 int scale = gtk_widget_get_scale_factor (widget );
298300 POINT pt ;
299301 /* mouse_host_moved(motion->x_root * scale, motion->y_root * scale); */
@@ -308,6 +310,7 @@ static gboolean event_box_motion_cb(GtkWidget *widget,
308310
309311#else /* Xlib, warp is relative to window */
310312
313+ /* scale is a uniform scaling applied to eg high dpi widgets by gtk */
311314 int scale = gtk_widget_get_scale_factor (widget );
312315 mouse_host_moved (
313316 (widget_x + motion -> x ) * scale ,
@@ -322,8 +325,35 @@ static gboolean event_box_motion_cb(GtkWidget *widget,
322325 /*
323326 * Mouse isn't captured, so we update the pen position.
324327 */
325-
328+ #if 0
329+ /* FIXME: this value is wrong in (at least) xvic, it is always the full
330+ width of produced video, not just the width of the shown window */
326331 double render_w = canvas -> geometry -> screen_size .width ;
332+ #else
333+ /* get width from render context instead */
334+ #ifdef WINDOWS_COMPILE
335+ vice_directx_renderer_context_t * context = (vice_directx_renderer_context_t * )canvas -> renderer_context ;
336+ double render_w = context -> bitmap_width ;
337+ if (canvas -> videoconfig -> double_size_enabled ) {
338+ render_w /= 2.0f ;
339+ }
340+ #else
341+ vice_opengl_renderer_context_t * context = (vice_opengl_renderer_context_t * )canvas -> renderer_context ;
342+ double render_w = context -> current_frame_width ;
343+ if (canvas -> videoconfig -> double_size_enabled ) {
344+ render_w /= 2.0f ;
345+ }
346+ #endif
347+ /* sanity check */
348+ if (render_w != canvas -> geometry -> screen_size .width ) {
349+ static int once = 0 ;
350+ if (!once ) {
351+ log_warning (LOG_DEFAULT , "geometry->screen_size.width (%u) does not match actual rendered width (%f)" ,
352+ canvas -> geometry -> screen_size .width , render_w );
353+ once ++ ;
354+ }
355+ }
356+ #endif
327357 double render_h = canvas -> geometry -> last_displayed_line - canvas -> geometry -> first_displayed_line + 1 ;
328358
329359 /* There might be some sweet off-by-0.5 bugs here */
@@ -370,10 +400,10 @@ static gboolean event_box_mouse_button_cb(GtkWidget *widget, GdkEvent *event, gp
370400 pthread_mutex_lock (& canvas -> lock );
371401 if (button == 1 ) {
372402 /* Left mouse button */
373- canvas -> pen_buttons |= LP_HOST_BUTTON_1 ;
403+ canvas -> pen_buttons |= LP_HOST_BUTTON_LEFT ;
374404 } else if (button == 3 ) {
375405 /* Right mouse button */
376- canvas -> pen_buttons |= LP_HOST_BUTTON_2 ;
406+ canvas -> pen_buttons |= LP_HOST_BUTTON_RIGHT ;
377407 }
378408 pthread_mutex_unlock (& canvas -> lock );
379409
@@ -387,10 +417,10 @@ static gboolean event_box_mouse_button_cb(GtkWidget *widget, GdkEvent *event, gp
387417 pthread_mutex_lock (& canvas -> lock );
388418 if (button == 1 ) {
389419 /* Left mouse button */
390- canvas -> pen_buttons &= ~LP_HOST_BUTTON_1 ;
420+ canvas -> pen_buttons &= ~LP_HOST_BUTTON_LEFT ;
391421 } else if (button == 3 ) {
392422 /* Right mouse button */
393- canvas -> pen_buttons &= ~LP_HOST_BUTTON_2 ;
423+ canvas -> pen_buttons &= ~LP_HOST_BUTTON_RIGHT ;
394424 }
395425 pthread_mutex_unlock (& canvas -> lock );
396426
0 commit comments