diff options
| author | Jeff Epler <jepler@gmail.com> | 2020-08-06 14:46:54 -0500 |
|---|---|---|
| committer | Jeff Epler <jepler@gmail.com> | 2020-08-12 07:32:18 -0500 |
| commit | 5e4ed9341586c3444409feeb61237e86a5c74c6f (patch) | |
| tree | a16086ac151fa91a54f04f2d5b42326aec3494d5 /shared-module/framebufferio/FramebufferDisplay.c | |
| parent | 1ee2062c1b64ecfda0af49cb0f721573aad7dea4 (diff) | |
framebufferio: Add getters for remaining displayio_display_core_construct arguments
.. and introduce a convenience macro that helps many of them be required
(if their values match defaults or are inapplicable)
Diffstat (limited to 'shared-module/framebufferio/FramebufferDisplay.c')
| -rw-r--r-- | shared-module/framebufferio/FramebufferDisplay.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/shared-module/framebufferio/FramebufferDisplay.c b/shared-module/framebufferio/FramebufferDisplay.c index 230dd6991..37989c29f 100644 --- a/shared-module/framebufferio/FramebufferDisplay.c +++ b/shared-module/framebufferio/FramebufferDisplay.c @@ -40,6 +40,11 @@ #include <stdint.h> #include <string.h> +#define fb_getter_default(method, default_value) \ + (self->framebuffer_protocol->method \ + ? self->framebuffer_protocol->method(self->framebuffer) \ + : (default_value)) + void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebufferdisplay_obj_t* self, mp_obj_t framebuffer, uint16_t rotation, @@ -51,7 +56,7 @@ void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebu uint16_t ram_width = 0x100; uint16_t ram_height = 0x100; - uint16_t depth = self->framebuffer_protocol->get_color_depth(self->framebuffer); + uint16_t depth = fb_getter_default(get_color_depth, 16); displayio_display_core_construct( &self->core, NULL, @@ -63,19 +68,15 @@ void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebu 0, rotation, depth, - (depth < 12), // grayscale - true, // pixels_in_byte_share_row - self->framebuffer_protocol->get_bytes_per_cell(self->framebuffer), - true, // reverse_pixels_in_byte - false // reverse_bytes_in_word + fb_getter_default(get_grayscale, (depth < 8)), + fb_getter_default(get_pixels_in_byte_share_row, false), + fb_getter_default(get_bytes_per_cell, 2), + fb_getter_default(get_reverse_pixels_in_byte, false), + fb_getter_default(get_reverse_pixels_in_word, false) ); - self->first_pixel_offset = self->framebuffer_protocol->get_first_pixel_offset - ? self->framebuffer_protocol->get_first_pixel_offset(self->framebuffer) - : 0; - self->row_stride = self->framebuffer_protocol->get_row_stride - ? self->framebuffer_protocol->get_row_stride(self->framebuffer) - : 0; + self->first_pixel_offset = fb_getter_default(get_first_pixel_offset, 0); + self->row_stride = fb_getter_default(get_row_stride, 0); if (self->row_stride == 0) { self->row_stride = self->core.width * self->core.colorspace.depth/8; } @@ -88,7 +89,7 @@ void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebu self->first_manual_refresh = !auto_refresh; - self->native_frames_per_second = self->framebuffer_protocol->get_native_frames_per_second(self->framebuffer); + self->native_frames_per_second = fb_getter_default(get_native_frames_per_second, 60); self->native_ms_per_frame = 1000 / self->native_frames_per_second; supervisor_start_terminal(self->core.width, self->core.height); |
