uint32_t transform, uint32_t scale);
WL_EXPORT int
-weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode)
+weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode, int32_t scale)
{
struct weston_seat *seat;
pixman_region32_t old_output_region;
if (ret < 0)
return ret;
+ output->scale = scale;
+
pixman_region32_init(&old_output_region);
pixman_region32_copy(&old_output_region, &output->region);
weston_surface_destroy(struct weston_surface *surface);
int
-weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode);
+weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode, int32_t scale);
int
noop_renderer_init(struct weston_compositor *ec);
if (shsurf->fullscreen.type == WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER &&
shell_surface_is_top_fullscreen(shsurf)) {
weston_output_switch_mode(shsurf->fullscreen_output,
- shsurf->fullscreen_output->origin);
+ shsurf->fullscreen_output->origin,
+ shsurf->fullscreen_output->origin_scale);
}
shsurf->fullscreen.type = WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT;
shsurf->fullscreen.framerate = 0;
case WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER:
if (shell_surface_is_top_fullscreen(shsurf)) {
struct weston_mode mode = {0,
- surf_width,
- surf_height,
+ surf_width * surface->buffer_scale,
+ surf_height * surface->buffer_scale,
shsurf->fullscreen.framerate};
- if (weston_output_switch_mode(output, &mode) == 0) {
+ if (weston_output_switch_mode(output, &mode, surface->buffer_scale) == 0) {
weston_surface_configure(shsurf->fullscreen.black_surface,
output->x - surf_x,
output->y - surf_y,
if (shsurf->fullscreen.type == WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER &&
shell_surface_is_top_fullscreen(shsurf)) {
weston_output_switch_mode(shsurf->fullscreen_output,
- shsurf->fullscreen_output->origin);
+ shsurf->fullscreen_output->origin,
+ shsurf->fullscreen_output->origin_scale);
}
if (shsurf->fullscreen.black_surface)