diff options
Diffstat (limited to 'source/blender/editors/space_console/console_draw.c')
-rw-r--r-- | source/blender/editors/space_console/console_draw.c | 272 |
1 files changed, 135 insertions, 137 deletions
diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index 042fb366224..4d6b05df609 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -24,7 +24,6 @@ #include <sys/stat.h> #include <limits.h> - #include "BLI_blenlib.h" #include "BLI_utildefines.h" @@ -41,45 +40,44 @@ #include "console_intern.h" - #include "../space_info/textview.h" static void console_line_color(unsigned char fg[3], int type) { - switch (type) { - case CONSOLE_LINE_OUTPUT: - UI_GetThemeColor3ubv(TH_CONSOLE_OUTPUT, fg); - break; - case CONSOLE_LINE_INPUT: - UI_GetThemeColor3ubv(TH_CONSOLE_INPUT, fg); - break; - case CONSOLE_LINE_INFO: - UI_GetThemeColor3ubv(TH_CONSOLE_INFO, fg); - break; - case CONSOLE_LINE_ERROR: - UI_GetThemeColor3ubv(TH_CONSOLE_ERROR, fg); - break; - } + switch (type) { + case CONSOLE_LINE_OUTPUT: + UI_GetThemeColor3ubv(TH_CONSOLE_OUTPUT, fg); + break; + case CONSOLE_LINE_INPUT: + UI_GetThemeColor3ubv(TH_CONSOLE_INPUT, fg); + break; + case CONSOLE_LINE_INFO: + UI_GetThemeColor3ubv(TH_CONSOLE_INFO, fg); + break; + case CONSOLE_LINE_ERROR: + UI_GetThemeColor3ubv(TH_CONSOLE_ERROR, fg); + break; + } } void console_scrollback_prompt_begin(struct SpaceConsole *sc, ConsoleLine *cl_dummy) { - /* fake the edit line being in the scroll buffer */ - ConsoleLine *cl = sc->history.last; - int prompt_len = strlen(sc->prompt); - - cl_dummy->type = CONSOLE_LINE_INPUT; - cl_dummy->len = prompt_len + cl->len; - cl_dummy->len_alloc = cl_dummy->len + 1; - cl_dummy->line = MEM_mallocN(cl_dummy->len_alloc, "cl_dummy"); - memcpy(cl_dummy->line, sc->prompt, prompt_len); - memcpy(cl_dummy->line + prompt_len, cl->line, cl->len + 1); - BLI_addtail(&sc->scrollback, cl_dummy); + /* fake the edit line being in the scroll buffer */ + ConsoleLine *cl = sc->history.last; + int prompt_len = strlen(sc->prompt); + + cl_dummy->type = CONSOLE_LINE_INPUT; + cl_dummy->len = prompt_len + cl->len; + cl_dummy->len_alloc = cl_dummy->len + 1; + cl_dummy->line = MEM_mallocN(cl_dummy->len_alloc, "cl_dummy"); + memcpy(cl_dummy->line, sc->prompt, prompt_len); + memcpy(cl_dummy->line + prompt_len, cl->line, cl->len + 1); + BLI_addtail(&sc->scrollback, cl_dummy); } void console_scrollback_prompt_end(struct SpaceConsole *sc, ConsoleLine *cl_dummy) { - MEM_freeN(cl_dummy->line); - BLI_remlink(&sc->scrollback, cl_dummy); + MEM_freeN(cl_dummy->line); + BLI_remlink(&sc->scrollback, cl_dummy); } #define CONSOLE_DRAW_MARGIN 4 @@ -87,165 +85,165 @@ void console_scrollback_prompt_end(struct SpaceConsole *sc, ConsoleLine *cl_dumm /* console textview callbacks */ static int console_textview_begin(TextViewContext *tvc) { - SpaceConsole *sc = (SpaceConsole *)tvc->arg1; - tvc->lheight = sc->lheight * UI_DPI_FAC; - tvc->sel_start = sc->sel_start; - tvc->sel_end = sc->sel_end; + SpaceConsole *sc = (SpaceConsole *)tvc->arg1; + tvc->lheight = sc->lheight * UI_DPI_FAC; + tvc->sel_start = sc->sel_start; + tvc->sel_end = sc->sel_end; - /* iterator */ - tvc->iter = sc->scrollback.last; + /* iterator */ + tvc->iter = sc->scrollback.last; - return (tvc->iter != NULL); + return (tvc->iter != NULL); } static void console_textview_end(TextViewContext *tvc) { - SpaceConsole *sc = (SpaceConsole *)tvc->arg1; - (void)sc; - + SpaceConsole *sc = (SpaceConsole *)tvc->arg1; + (void)sc; } static int console_textview_step(TextViewContext *tvc) { - return ((tvc->iter = (void *)((Link *)tvc->iter)->prev) != NULL); + return ((tvc->iter = (void *)((Link *)tvc->iter)->prev) != NULL); } static int console_textview_line_get(struct TextViewContext *tvc, const char **line, int *len) { - ConsoleLine *cl = (ConsoleLine *)tvc->iter; - *line = cl->line; - *len = cl->len; - // printf("'%s' %d\n", *line, cl->len); - BLI_assert(cl->line[cl->len] == '\0' && (cl->len == 0 || cl->line[cl->len - 1] != '\0')); - return 1; + ConsoleLine *cl = (ConsoleLine *)tvc->iter; + *line = cl->line; + *len = cl->len; + // printf("'%s' %d\n", *line, cl->len); + BLI_assert(cl->line[cl->len] == '\0' && (cl->len == 0 || cl->line[cl->len - 1] != '\0')); + return 1; } -static void console_cursor_wrap_offset(const char *str, int width, int *row, int *column, const char *end) +static void console_cursor_wrap_offset( + const char *str, int width, int *row, int *column, const char *end) { - int col; + int col; - for (; *str; str += BLI_str_utf8_size_safe(str)) { - col = BLI_str_utf8_char_width_safe(str); + for (; *str; str += BLI_str_utf8_size_safe(str)) { + col = BLI_str_utf8_char_width_safe(str); - if (*column + col > width) { - (*row)++; - *column = 0; - } + if (*column + col > width) { + (*row)++; + *column = 0; + } - if (end && str >= end) { - break; - } + if (end && str >= end) { + break; + } - *column += col; - } - return; + *column += col; + } + return; } -static int console_textview_line_color(struct TextViewContext *tvc, unsigned char fg[3], unsigned char UNUSED(bg[3])) +static int console_textview_line_color(struct TextViewContext *tvc, + unsigned char fg[3], + unsigned char UNUSED(bg[3])) { - ConsoleLine *cl_iter = (ConsoleLine *)tvc->iter; - - /* annoying hack, to draw the prompt */ - if (tvc->iter_index == 0) { - const SpaceConsole *sc = (SpaceConsole *)tvc->arg1; - const ConsoleLine *cl = (ConsoleLine *)sc->history.last; - int offl = 0, offc = 0; - int xy[2] = {CONSOLE_DRAW_MARGIN, CONSOLE_DRAW_MARGIN}; - int pen[2]; - GPUVertFormat *format = immVertexFormat(); - uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - xy[1] += tvc->lheight / 6; - - console_cursor_wrap_offset(sc->prompt, tvc->console_width, &offl, &offc, NULL); - console_cursor_wrap_offset(cl->line, tvc->console_width, &offl, &offc, cl->line + cl->cursor); - pen[0] = tvc->cwidth * offc; - pen[1] = -2 - tvc->lheight * offl; - - console_cursor_wrap_offset(cl->line + cl->cursor, tvc->console_width, &offl, &offc, NULL); - pen[1] += tvc->lheight * offl; - - /* cursor */ - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - immUniformThemeColor(TH_CONSOLE_CURSOR); - - immRectf(pos, - (xy[0] + pen[0]) - 1, - (xy[1] + pen[1]), - (xy[0] + pen[0]) + 1, - (xy[1] + pen[1] + tvc->lheight) - ); - - immUnbindProgram(); - } - - console_line_color(fg, cl_iter->type); - - return TVC_LINE_FG; + ConsoleLine *cl_iter = (ConsoleLine *)tvc->iter; + + /* annoying hack, to draw the prompt */ + if (tvc->iter_index == 0) { + const SpaceConsole *sc = (SpaceConsole *)tvc->arg1; + const ConsoleLine *cl = (ConsoleLine *)sc->history.last; + int offl = 0, offc = 0; + int xy[2] = {CONSOLE_DRAW_MARGIN, CONSOLE_DRAW_MARGIN}; + int pen[2]; + GPUVertFormat *format = immVertexFormat(); + uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + xy[1] += tvc->lheight / 6; + + console_cursor_wrap_offset(sc->prompt, tvc->console_width, &offl, &offc, NULL); + console_cursor_wrap_offset(cl->line, tvc->console_width, &offl, &offc, cl->line + cl->cursor); + pen[0] = tvc->cwidth * offc; + pen[1] = -2 - tvc->lheight * offl; + + console_cursor_wrap_offset(cl->line + cl->cursor, tvc->console_width, &offl, &offc, NULL); + pen[1] += tvc->lheight * offl; + + /* cursor */ + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + immUniformThemeColor(TH_CONSOLE_CURSOR); + + immRectf(pos, + (xy[0] + pen[0]) - 1, + (xy[1] + pen[1]), + (xy[0] + pen[0]) + 1, + (xy[1] + pen[1] + tvc->lheight)); + + immUnbindProgram(); + } + + console_line_color(fg, cl_iter->type); + + return TVC_LINE_FG; } static void console_textview_const_colors(TextViewContext *UNUSED(tvc), unsigned char bg_sel[4]) { - UI_GetThemeColor4ubv(TH_CONSOLE_SELECT, bg_sel); + UI_GetThemeColor4ubv(TH_CONSOLE_SELECT, bg_sel); } -static int console_textview_main__internal(struct SpaceConsole *sc, ARegion *ar, int draw, - int mval[2], void **mouse_pick, int *pos_pick) +static int console_textview_main__internal( + struct SpaceConsole *sc, ARegion *ar, int draw, int mval[2], void **mouse_pick, int *pos_pick) { - ConsoleLine cl_dummy = {NULL}; - int ret = 0; + ConsoleLine cl_dummy = {NULL}; + int ret = 0; - View2D *v2d = &ar->v2d; + View2D *v2d = &ar->v2d; - TextViewContext tvc = {0}; + TextViewContext tvc = {0}; - tvc.begin = console_textview_begin; - tvc.end = console_textview_end; + tvc.begin = console_textview_begin; + tvc.end = console_textview_end; - tvc.step = console_textview_step; - tvc.line_get = console_textview_line_get; - tvc.line_color = console_textview_line_color; - tvc.const_colors = console_textview_const_colors; + tvc.step = console_textview_step; + tvc.line_get = console_textview_line_get; + tvc.line_color = console_textview_line_color; + tvc.const_colors = console_textview_const_colors; - tvc.arg1 = sc; - tvc.arg2 = NULL; + tvc.arg1 = sc; + tvc.arg2 = NULL; - /* view */ - tvc.sel_start = sc->sel_start; - tvc.sel_end = sc->sel_end; - tvc.lheight = sc->lheight * UI_DPI_FAC; - tvc.ymin = v2d->cur.ymin; - tvc.ymax = v2d->cur.ymax; - tvc.winx = ar->winx - V2D_SCROLL_WIDTH; + /* view */ + tvc.sel_start = sc->sel_start; + tvc.sel_end = sc->sel_end; + tvc.lheight = sc->lheight * UI_DPI_FAC; + tvc.ymin = v2d->cur.ymin; + tvc.ymax = v2d->cur.ymax; + tvc.winx = ar->winx - V2D_SCROLL_WIDTH; - console_scrollback_prompt_begin(sc, &cl_dummy); - ret = textview_draw(&tvc, draw, mval, mouse_pick, pos_pick); - console_scrollback_prompt_end(sc, &cl_dummy); + console_scrollback_prompt_begin(sc, &cl_dummy); + ret = textview_draw(&tvc, draw, mval, mouse_pick, pos_pick); + console_scrollback_prompt_end(sc, &cl_dummy); - return ret; + return ret; } - void console_textview_main(struct SpaceConsole *sc, ARegion *ar) { - int mval[2] = {INT_MAX, INT_MAX}; - console_textview_main__internal(sc, ar, 1, mval, NULL, NULL); + int mval[2] = {INT_MAX, INT_MAX}; + console_textview_main__internal(sc, ar, 1, mval, NULL, NULL); } int console_textview_height(struct SpaceConsole *sc, ARegion *ar) { - int mval[2] = {INT_MAX, INT_MAX}; - return console_textview_main__internal(sc, ar, 0, mval, NULL, NULL); + int mval[2] = {INT_MAX, INT_MAX}; + return console_textview_main__internal(sc, ar, 0, mval, NULL, NULL); } int console_char_pick(struct SpaceConsole *sc, ARegion *ar, const int mval[2]) { - int pos_pick = 0; - void *mouse_pick = NULL; - int mval_clamp[2]; + int pos_pick = 0; + void *mouse_pick = NULL; + int mval_clamp[2]; - mval_clamp[0] = CLAMPIS(mval[0], CONSOLE_DRAW_MARGIN, ar->winx - CONSOLE_DRAW_MARGIN); - mval_clamp[1] = CLAMPIS(mval[1], CONSOLE_DRAW_MARGIN, ar->winy - CONSOLE_DRAW_MARGIN); + mval_clamp[0] = CLAMPIS(mval[0], CONSOLE_DRAW_MARGIN, ar->winx - CONSOLE_DRAW_MARGIN); + mval_clamp[1] = CLAMPIS(mval[1], CONSOLE_DRAW_MARGIN, ar->winy - CONSOLE_DRAW_MARGIN); - console_textview_main__internal(sc, ar, 0, mval_clamp, &mouse_pick, &pos_pick); - return pos_pick; + console_textview_main__internal(sc, ar, 0, mval_clamp, &mouse_pick, &pos_pick); + return pos_pick; } |