/* * SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef QEMU_RECT_H #define QEMU_RECT_H typedef struct QemuRect { int16_t x; int16_t y; uint16_t width; uint16_t height; } QemuRect; static inline void qemu_rect_init(QemuRect *rect, int16_t x, int16_t y, uint16_t width, uint16_t height) { rect->x = x; rect->y = y; rect->width = width; rect->height = height; } static inline void qemu_rect_translate(QemuRect *rect, int16_t dx, int16_t dy) { rect->x += dx; rect->y += dy; } static inline bool qemu_rect_intersect(const QemuRect *a, const QemuRect *b, QemuRect *res) { int16_t x1, x2, y1, y2; x1 = MAX(a->x, b->x); y1 = MAX(a->y, b->y); x2 = MIN(a->x + a->width, b->x + b->width); y2 = MIN(a->y + a->height, b->y + b->height); if (x1 >= x2 || y1 >= y2) { if (res) { qemu_rect_init(res, 0, 0, 0, 0); } return false; } if (res) { qemu_rect_init(res, x1, y1, x2 - x1, y2 - y1); } return true; } #endif