2019-05-16 19:45:38 -04:00
|
|
|
/*
|
|
|
|
* This file is part of the Micro Python project, http://micropython.org/
|
|
|
|
*
|
|
|
|
* The MIT License (MIT)
|
|
|
|
*
|
|
|
|
* Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
|
|
* in the Software without restriction, including without limitation the rights
|
|
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
|
|
* furnished to do so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
* all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
* THE SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_AREA_H
|
|
|
|
#define MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_AREA_H
|
|
|
|
|
|
|
|
// Implementations are in __init__.c
|
2019-06-06 18:11:02 -04:00
|
|
|
typedef struct _displayio_area_t displayio_area_t;
|
2019-05-16 19:45:38 -04:00
|
|
|
|
2019-06-06 18:11:02 -04:00
|
|
|
struct _displayio_area_t {
|
2019-05-16 19:45:38 -04:00
|
|
|
int16_t x1;
|
|
|
|
int16_t y1;
|
2019-05-22 18:00:47 -04:00
|
|
|
int16_t x2; // Second point is exclusive.
|
2019-05-16 19:45:38 -04:00
|
|
|
int16_t y2;
|
2021-03-15 09:57:36 -04:00
|
|
|
const displayio_area_t *next; // Next area in the linked list.
|
2019-06-06 18:11:02 -04:00
|
|
|
};
|
2019-05-16 19:45:38 -04:00
|
|
|
|
|
|
|
typedef struct {
|
2019-06-06 18:11:02 -04:00
|
|
|
uint16_t x;
|
|
|
|
uint16_t y;
|
|
|
|
int8_t dx;
|
|
|
|
int8_t dy;
|
|
|
|
uint8_t scale;
|
2019-05-16 19:45:38 -04:00
|
|
|
uint16_t width;
|
|
|
|
uint16_t height;
|
|
|
|
bool mirror_x;
|
|
|
|
bool mirror_y;
|
|
|
|
bool transpose_xy;
|
|
|
|
} displayio_buffer_transform_t;
|
|
|
|
|
2021-03-04 14:40:50 -05:00
|
|
|
extern displayio_buffer_transform_t null_transform;
|
|
|
|
|
displayio: area: add displayo_area_copy_coords, displayio_area_empty
.. and simplify the implmentation of displayio_area_union
This _slightly_ changes the behavior of displayio_area_union:
Formerly, if one of the areas was empty, its coordinates were still
used in the min/max calculations.
Now, if one of the areas is empty, the result gets the other area's coords
In particular, taking the union of the empty area with coords (0,0,0,0)
with the non-empty area (x1,y1,x2,y2) would give the area (0,0,x2,y2)
before, and (x1,y1,x2,y2) after the change.
2021-03-18 10:04:53 -04:00
|
|
|
bool displayio_area_empty(const displayio_area_t *a);
|
|
|
|
void displayio_area_copy_coords(const displayio_area_t *src, displayio_area_t *dest);
|
2021-03-18 10:06:00 -04:00
|
|
|
void displayio_area_canon(displayio_area_t *a);
|
2021-03-15 09:57:36 -04:00
|
|
|
void displayio_area_union(const displayio_area_t *a,
|
|
|
|
const displayio_area_t *b,
|
|
|
|
displayio_area_t *u);
|
|
|
|
void displayio_area_expand(displayio_area_t *original, const displayio_area_t *addition);
|
|
|
|
void displayio_area_copy(const displayio_area_t *src, displayio_area_t *dst);
|
|
|
|
void displayio_area_scale(displayio_area_t *area, uint16_t scale);
|
|
|
|
void displayio_area_shift(displayio_area_t *area, int16_t dx, int16_t dy);
|
|
|
|
bool displayio_area_compute_overlap(const displayio_area_t *a,
|
|
|
|
const displayio_area_t *b,
|
|
|
|
displayio_area_t *overlap);
|
|
|
|
uint16_t displayio_area_width(const displayio_area_t *area);
|
|
|
|
uint16_t displayio_area_height(const displayio_area_t *area);
|
|
|
|
uint32_t displayio_area_size(const displayio_area_t *area);
|
|
|
|
bool displayio_area_equal(const displayio_area_t *a, const displayio_area_t *b);
|
2019-06-06 18:11:02 -04:00
|
|
|
void displayio_area_transform_within(bool mirror_x, bool mirror_y, bool transpose_xy,
|
2021-03-15 09:57:36 -04:00
|
|
|
const displayio_area_t *original,
|
|
|
|
const displayio_area_t *whole,
|
|
|
|
displayio_area_t *transformed);
|
2019-05-16 19:45:38 -04:00
|
|
|
|
|
|
|
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_AREA_H
|