mirror of
https://github.com/cage-kiosk/cage.git
synced 2025-11-18 06:59:48 -05:00
output: add initial renderer
This will only render the clearing for now as there is no damage tracking yet.
This commit is contained in:
parent
ab1eac11df
commit
9b1641aa14
7 changed files with 212 additions and 1 deletions
36
desktop/util.c
Normal file
36
desktop/util.c
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue