Skip to content

Commit faea85b

Browse files
authored
Merge pull request #5447 from pewpew-game/stage-scroll
Stage: add support for viewport scrolling
2 parents 4c45364 + caa3d37 commit faea85b

File tree

4 files changed

+17
-15
lines changed

4 files changed

+17
-15
lines changed

shared-bindings/_stage/__init__.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,21 +81,17 @@ STATIC mp_obj_t stage_render(size_t n_args, const mp_obj_t *args) {
8181
mp_raise_TypeError(translate("argument num/types mismatch"));
8282
}
8383
displayio_display_obj_t *display = MP_OBJ_TO_PTR(native_display);
84-
uint8_t scale = 1;
85-
if (n_args > 7) {
86-
scale = mp_obj_get_int(args[7]);
87-
}
84+
uint8_t scale = mp_obj_get_int(args[7]);
85+
int16_t vx = mp_obj_get_int(args[8]);
86+
int16_t vy = mp_obj_get_int(args[9]);
8887
uint16_t background = 0;
89-
if (n_args > 8) {
90-
background = mp_obj_get_int(args[8]);
91-
}
9288

93-
render_stage(x0, y0, x1, y1, layers, layers_size, buffer, buffer_size,
94-
display, scale, background);
89+
render_stage(x0, y0, x1, y1, vx, vy, layers, layers_size,
90+
buffer, buffer_size, display, scale, background);
9591

9692
return mp_const_none;
9793
}
98-
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(stage_render_obj, 7, 8, stage_render);
94+
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(stage_render_obj, 10, 10, stage_render);
9995

10096

10197
STATIC const mp_rom_map_elem_t stage_module_globals_table[] = {

shared-module/_stage/__init__.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@
3131
#include "shared-bindings/_stage/Text.h"
3232

3333

34-
void render_stage(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,
34+
void render_stage(
35+
uint16_t x0, uint16_t y0,
36+
uint16_t x1, uint16_t y1,
37+
int16_t vx, int16_t vy,
3538
mp_obj_t *layers, size_t layers_size,
3639
uint16_t *buffer, size_t buffer_size,
3740
displayio_display_obj_t *display,
@@ -55,9 +58,9 @@ void render_stage(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,
5558
CHIP_SELECT_TOGGLE_EVERY_BYTE,
5659
&display->write_ram_command, 1);
5760
size_t index = 0;
58-
for (uint16_t y = y0; y < y1; ++y) {
61+
for (int16_t y = y0 + vy; y < y1 + vy; ++y) {
5962
for (uint8_t yscale = 0; yscale < scale; ++yscale) {
60-
for (uint16_t x = x0; x < x1; ++x) {
63+
for (int16_t x = x0 + vx; x < x1 + vx; ++x) {
6164
uint16_t c = TRANSPARENT;
6265
for (size_t layer = 0; layer < layers_size; ++layer) {
6366
layer_obj_t *obj = MP_OBJ_TO_PTR(layers[layer]);

shared-module/_stage/__init__.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@
3434

3535
#define TRANSPARENT (0x1ff8)
3636

37-
void render_stage(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,
37+
void render_stage(
38+
uint16_t x0, uint16_t y0,
39+
uint16_t x1, uint16_t y1,
40+
int16_t vx, int16_t vy,
3841
mp_obj_t *layers, size_t layers_size,
3942
uint16_t *buffer, size_t buffer_size,
4043
displayio_display_obj_t *display,

0 commit comments

Comments
 (0)