Rethink HiDPI output layouts, fixes everything
Except for subsurfaces not rendering at the right scale. But that part is (somewhat) easy.
This commit is contained in:
parent
ed74f473d6
commit
ca8cf7d48d
|
@ -167,15 +167,14 @@ struct roots_view *view_at(struct roots_desktop *desktop, double lx, double ly,
|
|||
continue;
|
||||
}
|
||||
|
||||
int scale = view->wlr_surface->current->scale;
|
||||
double view_sx = (lx - view->x) / (double)scale;
|
||||
double view_sy = (ly - view->y) / (double)scale;
|
||||
double view_sx = lx - view->x;
|
||||
double view_sy = ly - view->y;
|
||||
|
||||
struct wlr_box box = {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.width = view->wlr_surface->current->buffer_width * scale,
|
||||
.height = view->wlr_surface->current->buffer_height * scale,
|
||||
.width = view->wlr_surface->current->buffer_width,
|
||||
.height = view->wlr_surface->current->buffer_height,
|
||||
};
|
||||
if (view->rotation != 0.0) {
|
||||
// Coordinates relative to the center of the view
|
||||
|
|
|
@ -25,6 +25,8 @@ static void render_surface(struct wlr_surface *surface,
|
|||
int height = surface->current->buffer_height * scale_factor;
|
||||
double ox = lx, oy = ly;
|
||||
wlr_output_layout_output_coords(desktop->layout, wlr_output, &ox, &oy);
|
||||
ox *= wlr_output->scale;
|
||||
oy *= wlr_output->scale;
|
||||
|
||||
if (wlr_output_layout_intersects(desktop->layout, wlr_output,
|
||||
lx, ly, lx + width, ly + height)) {
|
||||
|
|
|
@ -227,7 +227,6 @@ void wlr_output_destroy(struct wlr_output *output) {
|
|||
|
||||
void wlr_output_effective_resolution(struct wlr_output *output,
|
||||
int *width, int *height) {
|
||||
// TODO: Scale factor
|
||||
if (output->transform % 2 == 1) {
|
||||
*width = output->height;
|
||||
*height = output->width;
|
||||
|
@ -235,6 +234,8 @@ void wlr_output_effective_resolution(struct wlr_output *output,
|
|||
*width = output->width;
|
||||
*height = output->height;
|
||||
}
|
||||
*width /= output->scale;
|
||||
*height /= output->scale;
|
||||
}
|
||||
|
||||
void wlr_output_make_current(struct wlr_output *output) {
|
||||
|
@ -450,6 +451,8 @@ void wlr_output_cursor_set_surface(struct wlr_output_cursor *cursor,
|
|||
}
|
||||
|
||||
bool wlr_output_cursor_move(struct wlr_output_cursor *cursor, int x, int y) {
|
||||
x *= cursor->output->scale;
|
||||
y *= cursor->output->scale;
|
||||
cursor->x = x;
|
||||
cursor->y = y;
|
||||
|
||||
|
|
Loading…
Reference in New Issue