mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-04 12:36:30 +00:00
72ffe1bd0f
It fixes a bug when showing options for autocompletion, where the first row has less items than the others. With this patch every line, except the last, should have the same number of elements.
+--------+ | r_cons | +--------+ r_cons_fb r_cons_frame r_cons_frame_add r_cons_frame_del struct r_cons_frame_t { int w, h; // should be the same as text|draw->w and text|draw->h int rw, rh; struct r_cons_buffer_t *text; struct r_cons_buffer_t *draw; struct }; struct r_cons_buffer_t { int alpha; /* ' ' chars in buffers are not written */ int w, h; ut8 *buf; }; struct r_cons_t { struct r_cons_buffer_t *b; int w, h; struct list_head frames; }; struct r_cons_frame_t *r_cons_frame_new(int x, int y, int w, int h) { struct r_cons_frame_t *f = R_NEW(struct r_cons_frame_t); f->text = r_cons_buffer_new(w, h); f->draw = r_cons_buffer_new(w, h); f->w = w; f->h = h; return f; } void r_cons_frame_add(struct r_cons_t *cons, struct r_cons_frame_t *f, int head) { if (head) list_add(&(f->list), &cons->frames); else list_add_tail(&(f->list), &cons->frames); } int r_cons_frame_render(struct r_cons_frame_t *frame, struct r_cons_buffer_t *buf) { /* foreach pixel resolve matching frame (Z-ordered) and draw */ } /* <{:api-prefix r_cons_}> */ /* <{:doc Draws a line between two points in a buffer}> */ /* <{:api int,buffer_line,int,int,int,int}> */ void r_cons_buffer_line(struct r_cons_buffer_t *buf, int x0, int y0, int x1, int y1) { /* XXX PURE SHIT */ char onechars[9] = { '.', '_',',', '\\', '|','/', '\'', '^','\'', }; double x = x0; double y = y0; double xi = x1-x0; double yi = y1-y0; for(;x<x1;x++) { r_cons_buffer_putch(buf, x, y, '.'); x+=xi; } } /* buffers */ struct r_cons_buffer *r_cons_buffer_new(int w, int h) { struct r_cons_buffer_t *buf = R_NEW(struct r_cons_buffer_t); if (w<1) w=1; if (h<1) h=1; buf->rw = buf->w = w; buf->rh = buf->h = h; buf->buf = (ut8*)malloc(w*h); return buf; } int r_cons_buffer_set_size(struct r_cons_buffer *buf, int w, int h) { struct r_cons_buffer_t *buf = R_NEW(struct r_cons_buffer_t); if (w<1) w=1; if (h<1) h=1; if (w>buf->rw) { /* must resize internal buffer */ buf->rw = w; buf->buf = (ut8*) realloc(buf->buf, w*h); } buf->rw = buf->w = w; buf->rh = buf->h = h; buf->buf = (ut8*)malloc(w*h); return buf; }