fix memory leak in layout.cpp

This commit is contained in:
j3d1 2018-11-08 14:37:35 +01:00
parent 6af3988056
commit 806fc7c3e5
5 changed files with 31 additions and 26 deletions

View file

@ -14,9 +14,13 @@ lib/libssd1306.a:
@mkdir -p lib @mkdir -p lib
@cp deps/ssd1306/bld/libssd1306.a lib/libssd1306.a @cp deps/ssd1306/bld/libssd1306.a lib/libssd1306.a
flash: flash: avr
@make -f avr.Makefile flash @make -f avr.Makefile flash
run: linux
@make -f linux.Makefile run
clean: clean:
@rm -r build @rm -r build
@echo clean all @echo clean all

View file

@ -42,3 +42,7 @@ $(OBJDIR):
clean: clean:
@$(REMOVEDIR) "$(OBJDIR)" @$(REMOVEDIR) "$(OBJDIR)"
@echo clean $(OBJDIR) @echo clean $(OBJDIR)
run: $(OBJDIR)/$(TARGET)
@echo run $(OBJDIR)/$(TARGET)
@$(OBJDIR)/$(TARGET)

View file

@ -46,6 +46,8 @@ int layout::expand_(int packedsize) {
if (size > slots[i].content->maxsize) if (size > slots[i].content->maxsize)
size = slots[i].content->maxsize; size = slots[i].content->maxsize;
slots[i].size_ = size; slots[i].size_ = size;
if(slots[i].canvas_)
delete slots[i].canvas_;
slots[i].canvas_ = new canvas(size, maxheight_); slots[i].canvas_ = new canvas(size, maxheight_);
pos += size; pos += size;
} }

View file

@ -9,15 +9,11 @@
#include <stdint.h> #include <stdint.h>
#include <hal/hal.h> #include <hal/hal.h>
uint8_t *canvasData; uint8_t canvasData[128 * (32 / 8)];
NanoCanvas *canvas; NanoCanvas canvas(128, 32, canvasData);
void hal_init_screen(int w, int h) { void hal_init_screen(int w, int h) {
ssd1306_128x32_i2c_init(); ssd1306_128x32_i2c_init();
ssd1306_fillScreen( 0x00 );
canvasData = new uint8_t[w * (h / 8)];
canvas = new NanoCanvas(w, h, canvasData);
canvas.clear();
DDRD = 0; DDRD = 0;
PORTD |= (1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5); PORTD |= (1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5);
@ -31,17 +27,16 @@ void hal_draw(int x, int y){
void hal_poll_input(bool *ptr) { void hal_poll_input(bool *ptr) {
int in = PIND & 0x3c; int in = PIND & 0x3c;
ptr[0] = in & (1 << PC2); ptr[0] = !(in & (1 << PC2));
ptr[1] = in & (1 << PC3); ptr[1] = !(in & (1 << PC3));
ptr[2] = in & (1 << PC4); ptr[2] = !(in & (1 << PC4));
ptr[3] = in & (1 << PC5); ptr[3] = !(in & (1 << PC5));
} }
void hal_render() { void hal_render() {
while (true) { while (true) {
canvas.clear(); ssd1306_fillScreen( 0x00 );
render(); render();
canvas.blt(0, 0); canvas.blt(0, 0);
} }

View file

@ -31,7 +31,6 @@ int main() {
root = new menu("", root = new menu("",
new menu("foo", new menu("foo",
new menu("bar",
new menu("baz", new menu("baz",
new fooValue("I", 5), new fooValue("I", 5),
new fooValue("II", 5), new fooValue("II", 5),
@ -42,7 +41,6 @@ int main() {
new fooValue("o", 5), new fooValue("o", 5),
new fooValue("oo", 5), new fooValue("oo", 5),
new fooValue("o o", 5) new fooValue("o o", 5)
)
), ),
new menu("x", new menu("x",
new fooValue("x x", 5), new fooValue("x x", 5),
@ -93,6 +91,8 @@ void buttons::onPush(int id, bool state) {
l.cursor = c; l.cursor = c;
} }
break; break;
case I_UP:
break;
case I_RIGHT: case I_RIGHT:
c = l.cursor; c = l.cursor;
if (c = c->getCursor()) { if (c = c->getCursor()) {