8de5f90086
new utility function for all vectorio shape specializations for testing whether a screen-space x,y point falls within a shape's x,y. This respects the current orientation of the screen in the manner of displayio and vectorio - so your x,y requests are in the same coordinate domain as your x,y locations and your width/height etc. properties that ou set on other shapes. I.e., if you're using this for touch points then you will need to make sure the touch events are in the same x,y domain as your display. ``` contains(2, 4) -> true ------------------ | | | | | -- | | | \ | | |. \ | | | \ | | |____\ | | | ------------------ contains(5, 4) -> false ------------------ | | | | | -- | | | \ | | | \. | | | \ | | |____\ | | | ------------------ ``` This helps provide low overhead introspection of shape coverage on screen. It's envisioned that this will be used for things like touch-and-drag widget controls, touch "areas" and may help with random ornament placement on toy Christmas trees.
48 lines
2.2 KiB
C
48 lines
2.2 KiB
C
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_VECTORIO_SHAPE_H
|
|
#define MICROPY_INCLUDED_SHARED_BINDINGS_VECTORIO_SHAPE_H
|
|
|
|
#include "py/objproperty.h"
|
|
#include "py/objtuple.h"
|
|
|
|
#include "shared-bindings/vectorio/__init__.h"
|
|
#include "shared-module/vectorio/VectorShape.h"
|
|
#include "shared-module/displayio/area.h"
|
|
|
|
extern const mp_obj_type_t vectorio_vector_shape_type;
|
|
|
|
// Python shared bindings constructor
|
|
mp_obj_t vectorio_vector_shape_make_new(const mp_obj_t shape, const mp_obj_t pixel_shader, int32_t x, int32_t y);
|
|
|
|
// C data constructor
|
|
void common_hal_vectorio_vector_shape_construct(vectorio_vector_shape_t *self,
|
|
vectorio_ishape_t ishape,
|
|
mp_obj_t pixel_shader, int32_t x, int32_t y);
|
|
|
|
bool common_hal_vectorio_vector_shape_contains(vectorio_vector_shape_t *self, mp_int_t x, mp_int_t y);
|
|
|
|
void common_hal_vectorio_vector_shape_set_dirty(void *self);
|
|
|
|
mp_int_t common_hal_vectorio_vector_shape_get_x(vectorio_vector_shape_t *self);
|
|
void common_hal_vectorio_vector_shape_set_x(vectorio_vector_shape_t *self, mp_int_t x);
|
|
|
|
mp_obj_tuple_t *common_hal_vectorio_vector_shape_get_location(vectorio_vector_shape_t *self);
|
|
void common_hal_vectorio_vector_shape_set_location(vectorio_vector_shape_t *self, mp_obj_t xy);
|
|
|
|
mp_int_t common_hal_vectorio_vector_shape_get_y(vectorio_vector_shape_t *self);
|
|
void common_hal_vectorio_vector_shape_set_y(vectorio_vector_shape_t *self, mp_int_t y);
|
|
|
|
mp_obj_t common_hal_vectorio_vector_shape_get_pixel_shader(vectorio_vector_shape_t *self);
|
|
void common_hal_vectorio_vector_shape_set_pixel_shader(vectorio_vector_shape_t *self, mp_obj_t pixel_shader);
|
|
|
|
void vectorio_vector_shape_update_transform(vectorio_vector_shape_t *self, displayio_buffer_transform_t *group_transform);
|
|
|
|
// Composable property definition for shapes that use VectorShape
|
|
extern vectorio_draw_protocol_impl_t vectorio_vector_shape_draw_protocol_impl;
|
|
extern const mp_obj_property_t vectorio_vector_shape_x_obj;
|
|
extern const mp_obj_property_t vectorio_vector_shape_y_obj;
|
|
extern const mp_obj_property_t vectorio_vector_shape_location_obj;
|
|
extern const mp_obj_property_t vectorio_vector_shape_pixel_shader_obj;
|
|
extern const mp_obj_fun_builtin_fixed_t vectorio_vector_shape_contains_obj;
|
|
|
|
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_VECTORIO_SHAPE_H
|