mirror of
https://github.com/cage-kiosk/cage.git
synced 2025-10-29 05:40:19 -04:00
This is based on code from Sway, which is also MIT licensed hence compatible. This makes the surface damaging and rendering code easier to follow and makes it easier to import future changes to Sway as well.
36 lines
976 B
C
36 lines
976 B
C
/*
|
|
* Cage: A Wayland kiosk.
|
|
*
|
|
* Copyright (C) 2019 The Sway authors
|
|
*
|
|
* See the LICENSE file accompanying this file.
|
|
*/
|
|
|
|
#include <wlr/types/wlr_box.h>
|
|
|
|
#include "util.h"
|
|
|
|
int
|
|
scale_length(int length, int offset, float scale)
|
|
{
|
|
/**
|
|
* One does not simply multiply the width by the scale. We allow fractional
|
|
* scaling, which means the resulting scaled width might be a decimal.
|
|
* So we round it.
|
|
*
|
|
* But even this can produce undesirable results depending on the X or Y
|
|
* offset of the box. For example, with a scale of 1.5, a box with
|
|
* width=1 should not scale to 2px if its X coordinate is 1, because the
|
|
* X coordinate would have scaled to 2px.
|
|
*/
|
|
return round((offset + length) * scale) - round(offset * scale);
|
|
}
|
|
|
|
void
|
|
scale_box(struct wlr_box *box, float scale)
|
|
{
|
|
box->width = scale_length(box->width, box->x, scale);
|
|
box->height = scale_length(box->height, box->y, scale);
|
|
box->x = round(box->x * scale);
|
|
box->y = round(box->y * scale);
|
|
}
|