123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /*
- * 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
|