diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/editors/space_info/textview.c | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff) |
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211.
For details on usage and instructions for migrating branches
without conflicts, see:
https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/editors/space_info/textview.c')
-rw-r--r-- | source/blender/editors/space_info/textview.c | 606 |
1 files changed, 309 insertions, 297 deletions
diff --git a/source/blender/editors/space_info/textview.c b/source/blender/editors/space_info/textview.c index 7585cda5e19..c81e7574186 100644 --- a/source/blender/editors/space_info/textview.c +++ b/source/blender/editors/space_info/textview.c @@ -18,7 +18,6 @@ * \ingroup spinfo */ - #include <math.h> #include <string.h> #include <sys/stat.h> @@ -36,344 +35,357 @@ #include "GPU_immediate.h" #include "GPU_state.h" - #include "BKE_text.h" #include "textview.h" static void console_font_begin(const int font_id, const int lheight) { - /* 0.875 is based on: 16 pixels lines get 14 pixel text */ - BLF_size(font_id, 0.875 * lheight, 72); + /* 0.875 is based on: 16 pixels lines get 14 pixel text */ + BLF_size(font_id, 0.875 * lheight, 72); } typedef struct ConsoleDrawContext { - int font_id; - int cwidth; - int lheight; - /** text vertical offset */ - int lofs; - /** number of characters that fit into the width of the console (fixed width) */ - int console_width; - int winx; - int ymin, ymax; - int *xy; // [2] - int *sel; // [2] - /* bottom of view == 0, top of file == combine chars, end of line is lower then start. */ - int *pos_pick; - const int *mval; // [2] - int draw; + int font_id; + int cwidth; + int lheight; + /** text vertical offset */ + int lofs; + /** number of characters that fit into the width of the console (fixed width) */ + int console_width; + int winx; + int ymin, ymax; + int *xy; // [2] + int *sel; // [2] + /* bottom of view == 0, top of file == combine chars, end of line is lower then start. */ + int *pos_pick; + const int *mval; // [2] + int draw; } ConsoleDrawContext; BLI_INLINE void console_step_sel(ConsoleDrawContext *cdc, const int step) { - cdc->sel[0] += step; - cdc->sel[1] += step; + cdc->sel[0] += step; + cdc->sel[1] += step; } -static void console_draw_sel(const char *str, const int sel[2], const int xy[2], const int str_len_draw, - int cwidth, int lheight, const unsigned char bg_sel[4]) +static void console_draw_sel(const char *str, + const int sel[2], + const int xy[2], + const int str_len_draw, + int cwidth, + int lheight, + const unsigned char bg_sel[4]) { - if (sel[0] <= str_len_draw && sel[1] >= 0) { - const int sta = txt_utf8_offset_to_column(str, max_ii(sel[0], 0)); - const int end = txt_utf8_offset_to_column(str, min_ii(sel[1], str_len_draw)); + if (sel[0] <= str_len_draw && sel[1] >= 0) { + const int sta = txt_utf8_offset_to_column(str, max_ii(sel[0], 0)); + const int end = txt_utf8_offset_to_column(str, min_ii(sel[1], str_len_draw)); - GPU_blend(true); - GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA); + GPU_blend(true); + GPU_blend_set_func_separate( + GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA); - GPUVertFormat *format = immVertexFormat(); - uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT); - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + GPUVertFormat *format = immVertexFormat(); + uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - immUniformColor4ubv(bg_sel); - immRecti(pos, xy[0] + (cwidth * sta), xy[1] - 2 + lheight, xy[0] + (cwidth * end), xy[1] - 2); + immUniformColor4ubv(bg_sel); + immRecti(pos, xy[0] + (cwidth * sta), xy[1] - 2 + lheight, xy[0] + (cwidth * end), xy[1] - 2); - immUnbindProgram(); + immUnbindProgram(); - GPU_blend(false); - } + GPU_blend(false); + } } /* warning: allocated memory for 'offsets' must be freed by caller */ static int console_wrap_offsets(const char *str, int len, int width, int *lines, int **offsets) { - int i, end; /* column */ - int j; /* mem */ + int i, end; /* column */ + int j; /* mem */ - *lines = 1; + *lines = 1; - *offsets = MEM_callocN(sizeof(**offsets) * (len * BLI_UTF8_WIDTH_MAX / MAX2(1, width - (BLI_UTF8_WIDTH_MAX - 1)) + 1), - "console_wrap_offsets"); - (*offsets)[0] = 0; + *offsets = MEM_callocN( + sizeof(**offsets) * + (len * BLI_UTF8_WIDTH_MAX / MAX2(1, width - (BLI_UTF8_WIDTH_MAX - 1)) + 1), + "console_wrap_offsets"); + (*offsets)[0] = 0; - for (i = 0, end = width, j = 0; j < len && str[j]; j += BLI_str_utf8_size_safe(str + j)) { - int columns = BLI_str_utf8_char_width_safe(str + j); + for (i = 0, end = width, j = 0; j < len && str[j]; j += BLI_str_utf8_size_safe(str + j)) { + int columns = BLI_str_utf8_char_width_safe(str + j); - if (i + columns > end) { - (*offsets)[*lines] = j; - (*lines)++; + if (i + columns > end) { + (*offsets)[*lines] = j; + (*lines)++; - end = i + width; - } - i += columns; - } - return j; /* return actual length */ + end = i + width; + } + i += columns; + } + return j; /* return actual length */ } /* return 0 if the last line is off the screen * should be able to use this for any string type */ -static int console_draw_string(ConsoleDrawContext *cdc, const char *str, int str_len, - const unsigned char fg[3], const unsigned char bg[3], const unsigned char bg_sel[4]) +static int console_draw_string(ConsoleDrawContext *cdc, + const char *str, + int str_len, + const unsigned char fg[3], + const unsigned char bg[3], + const unsigned char bg_sel[4]) { - int tot_lines; /* total number of lines for wrapping */ - int *offsets; /* offsets of line beginnings for wrapping */ - int y_next; - - str_len = console_wrap_offsets(str, str_len, cdc->console_width, &tot_lines, &offsets); - y_next = cdc->xy[1] + cdc->lheight * tot_lines; - - /* just advance the height */ - if (cdc->draw == 0) { - if (cdc->pos_pick && cdc->mval[1] != INT_MAX && cdc->xy[1] <= cdc->mval[1]) { - if (y_next >= cdc->mval[1]) { - int ofs = 0; - - /* wrap */ - if (tot_lines > 1) { - int iofs = (int)((float)(y_next - cdc->mval[1]) / cdc->lheight); - ofs += offsets[MIN2(iofs, tot_lines - 1)]; - } - - /* last part */ - ofs += txt_utf8_column_to_offset(str + ofs, - (int)floor((float)cdc->mval[0] / cdc->cwidth)); - - CLAMP(ofs, 0, str_len); - *cdc->pos_pick += str_len - ofs; - } - else - *cdc->pos_pick += str_len + 1; - } - - cdc->xy[1] = y_next; - MEM_freeN(offsets); - return 1; - } - else if (y_next < cdc->ymin) { - /* have not reached the drawable area so don't break */ - cdc->xy[1] = y_next; - - /* adjust selection even if not drawing */ - if (cdc->sel[0] != cdc->sel[1]) { - console_step_sel(cdc, -(str_len + 1)); - } - - MEM_freeN(offsets); - return 1; - } - - if (tot_lines > 1) { /* wrap? */ - const int initial_offset = offsets[tot_lines - 1]; - size_t len = str_len - initial_offset; - const char *s = str + initial_offset; - int i; - - int sel_orig[2]; - copy_v2_v2_int(sel_orig, cdc->sel); - - /* invert and swap for wrapping */ - cdc->sel[0] = str_len - sel_orig[1]; - cdc->sel[1] = str_len - sel_orig[0]; - - if (bg) { - GPUVertFormat *format = immVertexFormat(); - uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT); - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - - immUniformColor3ubv(bg); - immRecti(pos, 0, cdc->xy[1], cdc->winx, (cdc->xy[1] + (cdc->lheight * tot_lines))); - - immUnbindProgram(); - } - - /* last part needs no clipping */ - BLF_position(cdc->font_id, cdc->xy[0], cdc->lofs + cdc->xy[1], 0); - BLF_color3ubv(cdc->font_id, fg); - BLF_draw_mono(cdc->font_id, s, len, cdc->cwidth); - - if (cdc->sel[0] != cdc->sel[1]) { - console_step_sel(cdc, -initial_offset); - /* BLF_color3ub(cdc->font_id, 255, 0, 0); // debug */ - console_draw_sel(s, cdc->sel, cdc->xy, len, cdc->cwidth, cdc->lheight, bg_sel); - } - - cdc->xy[1] += cdc->lheight; - - for (i = tot_lines - 1; i > 0; i--) { - len = offsets[i] - offsets[i - 1]; - s = str + offsets[i - 1]; - - BLF_position(cdc->font_id, cdc->xy[0], cdc->lofs + cdc->xy[1], 0); - BLF_draw_mono(cdc->font_id, s, len, cdc->cwidth); - - if (cdc->sel[0] != cdc->sel[1]) { - console_step_sel(cdc, len); - /* BLF_color3ub(cdc->font_id, 0, 255, 0); // debug */ - console_draw_sel(s, cdc->sel, cdc->xy, len, cdc->cwidth, cdc->lheight, bg_sel); - } - - cdc->xy[1] += cdc->lheight; - - /* check if were out of view bounds */ - if (cdc->xy[1] > cdc->ymax) { - MEM_freeN(offsets); - return 0; - } - } - - copy_v2_v2_int(cdc->sel, sel_orig); - console_step_sel(cdc, -(str_len + 1)); - } - else { /* simple, no wrap */ - - if (bg) { - GPUVertFormat *format = immVertexFormat(); - uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT); - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - - immUniformColor3ubv(bg); - immRecti(pos, 0, cdc->xy[1], cdc->winx, cdc->xy[1] + cdc->lheight); - - immUnbindProgram(); - } - - BLF_color3ubv(cdc->font_id, fg); - BLF_position(cdc->font_id, cdc->xy[0], cdc->lofs + cdc->xy[1], 0); - BLF_draw_mono(cdc->font_id, str, str_len, cdc->cwidth); - - if (cdc->sel[0] != cdc->sel[1]) { - int isel[2]; - - isel[0] = str_len - cdc->sel[1]; - isel[1] = str_len - cdc->sel[0]; - - /* BLF_color3ub(cdc->font_id, 255, 255, 0); // debug */ - console_draw_sel(str, isel, cdc->xy, str_len, cdc->cwidth, cdc->lheight, bg_sel); - console_step_sel(cdc, -(str_len + 1)); - } + int tot_lines; /* total number of lines for wrapping */ + int *offsets; /* offsets of line beginnings for wrapping */ + int y_next; + + str_len = console_wrap_offsets(str, str_len, cdc->console_width, &tot_lines, &offsets); + y_next = cdc->xy[1] + cdc->lheight * tot_lines; + + /* just advance the height */ + if (cdc->draw == 0) { + if (cdc->pos_pick && cdc->mval[1] != INT_MAX && cdc->xy[1] <= cdc->mval[1]) { + if (y_next >= cdc->mval[1]) { + int ofs = 0; + + /* wrap */ + if (tot_lines > 1) { + int iofs = (int)((float)(y_next - cdc->mval[1]) / cdc->lheight); + ofs += offsets[MIN2(iofs, tot_lines - 1)]; + } + + /* last part */ + ofs += txt_utf8_column_to_offset(str + ofs, (int)floor((float)cdc->mval[0] / cdc->cwidth)); + + CLAMP(ofs, 0, str_len); + *cdc->pos_pick += str_len - ofs; + } + else + *cdc->pos_pick += str_len + 1; + } + + cdc->xy[1] = y_next; + MEM_freeN(offsets); + return 1; + } + else if (y_next < cdc->ymin) { + /* have not reached the drawable area so don't break */ + cdc->xy[1] = y_next; + + /* adjust selection even if not drawing */ + if (cdc->sel[0] != cdc->sel[1]) { + console_step_sel(cdc, -(str_len + 1)); + } + + MEM_freeN(offsets); + return 1; + } + + if (tot_lines > 1) { /* wrap? */ + const int initial_offset = offsets[tot_lines - 1]; + size_t len = str_len - initial_offset; + const char *s = str + initial_offset; + int i; + + int sel_orig[2]; + copy_v2_v2_int(sel_orig, cdc->sel); + + /* invert and swap for wrapping */ + cdc->sel[0] = str_len - sel_orig[1]; + cdc->sel[1] = str_len - sel_orig[0]; + + if (bg) { + GPUVertFormat *format = immVertexFormat(); + uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + + immUniformColor3ubv(bg); + immRecti(pos, 0, cdc->xy[1], cdc->winx, (cdc->xy[1] + (cdc->lheight * tot_lines))); + + immUnbindProgram(); + } + + /* last part needs no clipping */ + BLF_position(cdc->font_id, cdc->xy[0], cdc->lofs + cdc->xy[1], 0); + BLF_color3ubv(cdc->font_id, fg); + BLF_draw_mono(cdc->font_id, s, len, cdc->cwidth); + + if (cdc->sel[0] != cdc->sel[1]) { + console_step_sel(cdc, -initial_offset); + /* BLF_color3ub(cdc->font_id, 255, 0, 0); // debug */ + console_draw_sel(s, cdc->sel, cdc->xy, len, cdc->cwidth, cdc->lheight, bg_sel); + } + + cdc->xy[1] += cdc->lheight; + + for (i = tot_lines - 1; i > 0; i--) { + len = offsets[i] - offsets[i - 1]; + s = str + offsets[i - 1]; + + BLF_position(cdc->font_id, cdc->xy[0], cdc->lofs + cdc->xy[1], 0); + BLF_draw_mono(cdc->font_id, s, len, cdc->cwidth); + + if (cdc->sel[0] != cdc->sel[1]) { + console_step_sel(cdc, len); + /* BLF_color3ub(cdc->font_id, 0, 255, 0); // debug */ + console_draw_sel(s, cdc->sel, cdc->xy, len, cdc->cwidth, cdc->lheight, bg_sel); + } + + cdc->xy[1] += cdc->lheight; + + /* check if were out of view bounds */ + if (cdc->xy[1] > cdc->ymax) { + MEM_freeN(offsets); + return 0; + } + } + + copy_v2_v2_int(cdc->sel, sel_orig); + console_step_sel(cdc, -(str_len + 1)); + } + else { /* simple, no wrap */ + + if (bg) { + GPUVertFormat *format = immVertexFormat(); + uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + + immUniformColor3ubv(bg); + immRecti(pos, 0, cdc->xy[1], cdc->winx, cdc->xy[1] + cdc->lheight); + + immUnbindProgram(); + } + + BLF_color3ubv(cdc->font_id, fg); + BLF_position(cdc->font_id, cdc->xy[0], cdc->lofs + cdc->xy[1], 0); + BLF_draw_mono(cdc->font_id, str, str_len, cdc->cwidth); + + if (cdc->sel[0] != cdc->sel[1]) { + int isel[2]; + + isel[0] = str_len - cdc->sel[1]; + isel[1] = str_len - cdc->sel[0]; + + /* BLF_color3ub(cdc->font_id, 255, 255, 0); // debug */ + console_draw_sel(str, isel, cdc->xy, str_len, cdc->cwidth, cdc->lheight, bg_sel); + console_step_sel(cdc, -(str_len + 1)); + } - cdc->xy[1] += cdc->lheight; - - if (cdc->xy[1] > cdc->ymax) { - MEM_freeN(offsets); - return 0; - } - } + cdc->xy[1] += cdc->lheight; + + if (cdc->xy[1] > cdc->ymax) { + MEM_freeN(offsets); + return 0; + } + } - MEM_freeN(offsets); - return 1; + MEM_freeN(offsets); + return 1; } #define CONSOLE_DRAW_MARGIN 4 -int textview_draw(TextViewContext *tvc, const int draw, int mval[2], void **mouse_pick, int *pos_pick) +int textview_draw( + TextViewContext *tvc, const int draw, int mval[2], void **mouse_pick, int *pos_pick) { - ConsoleDrawContext cdc = {0}; - - int x_orig = CONSOLE_DRAW_MARGIN, y_orig = CONSOLE_DRAW_MARGIN + tvc->lheight / 6; - int xy[2], y_prev; - int sel[2] = {-1, -1}; /* defaults disabled */ - unsigned char fg[3], bg[3]; - const int font_id = blf_mono_font; - - console_font_begin(font_id, tvc->lheight); - - xy[0] = x_orig; xy[1] = y_orig; - - if (mval[1] != INT_MAX) { - mval[1] += (tvc->ymin + CONSOLE_DRAW_MARGIN); - } - - if (pos_pick) { - *pos_pick = 0; - } - - /* constants for the sequencer context */ - cdc.font_id = font_id; - cdc.cwidth = (int)BLF_fixed_width(font_id); - assert(cdc.cwidth > 0); - cdc.lheight = tvc->lheight; - cdc.lofs = -BLF_descender(font_id); - /* note, scroll bar must be already subtracted () */ - cdc.console_width = (tvc->winx - (CONSOLE_DRAW_MARGIN * 2)) / cdc.cwidth; - /* avoid divide by zero on small windows */ - if (cdc.console_width < 1) { - cdc.console_width = 1; - } - cdc.winx = tvc->winx - CONSOLE_DRAW_MARGIN; - cdc.ymin = tvc->ymin; - cdc.ymax = tvc->ymax; - cdc.xy = xy; - cdc.sel = sel; - cdc.pos_pick = pos_pick; - cdc.mval = mval; - cdc.draw = draw; - - /* shouldnt be needed */ - tvc->cwidth = cdc.cwidth; - tvc->console_width = cdc.console_width; - tvc->iter_index = 0; - - if (tvc->sel_start != tvc->sel_end) { - sel[0] = tvc->sel_start; - sel[1] = tvc->sel_end; - } - - if (tvc->begin(tvc)) { - unsigned char bg_sel[4] = {0}; - - if (draw && tvc->const_colors) { - tvc->const_colors(tvc, bg_sel); - } - - do { - const char *ext_line; - int ext_len; - int color_flag = 0; - - y_prev = xy[1]; - - if (draw) { - color_flag = tvc->line_color(tvc, fg, bg); - } - - tvc->line_get(tvc, &ext_line, &ext_len); - - if (!console_draw_string(&cdc, ext_line, ext_len, - (color_flag & TVC_LINE_FG) ? fg : NULL, - (color_flag & TVC_LINE_BG) ? bg : NULL, - bg_sel)) - { - /* when drawing, if we pass v2d->cur.ymax, then quit */ - if (draw) { - break; /* past the y limits */ - } - } - - if ((mval[1] != INT_MAX) && (mval[1] >= y_prev && mval[1] <= xy[1])) { - *mouse_pick = (void *)tvc->iter; - break; - } - - tvc->iter_index++; - - } while (tvc->step(tvc)); - } - - tvc->end(tvc); - - xy[1] += tvc->lheight * 2; - - return xy[1] - y_orig; + ConsoleDrawContext cdc = {0}; + + int x_orig = CONSOLE_DRAW_MARGIN, y_orig = CONSOLE_DRAW_MARGIN + tvc->lheight / 6; + int xy[2], y_prev; + int sel[2] = {-1, -1}; /* defaults disabled */ + unsigned char fg[3], bg[3]; + const int font_id = blf_mono_font; + + console_font_begin(font_id, tvc->lheight); + + xy[0] = x_orig; + xy[1] = y_orig; + + if (mval[1] != INT_MAX) { + mval[1] += (tvc->ymin + CONSOLE_DRAW_MARGIN); + } + + if (pos_pick) { + *pos_pick = 0; + } + + /* constants for the sequencer context */ + cdc.font_id = font_id; + cdc.cwidth = (int)BLF_fixed_width(font_id); + assert(cdc.cwidth > 0); + cdc.lheight = tvc->lheight; + cdc.lofs = -BLF_descender(font_id); + /* note, scroll bar must be already subtracted () */ + cdc.console_width = (tvc->winx - (CONSOLE_DRAW_MARGIN * 2)) / cdc.cwidth; + /* avoid divide by zero on small windows */ + if (cdc.console_width < 1) { + cdc.console_width = 1; + } + cdc.winx = tvc->winx - CONSOLE_DRAW_MARGIN; + cdc.ymin = tvc->ymin; + cdc.ymax = tvc->ymax; + cdc.xy = xy; + cdc.sel = sel; + cdc.pos_pick = pos_pick; + cdc.mval = mval; + cdc.draw = draw; + + /* shouldnt be needed */ + tvc->cwidth = cdc.cwidth; + tvc->console_width = cdc.console_width; + tvc->iter_index = 0; + + if (tvc->sel_start != tvc->sel_end) { + sel[0] = tvc->sel_start; + sel[1] = tvc->sel_end; + } + + if (tvc->begin(tvc)) { + unsigned char bg_sel[4] = {0}; + + if (draw && tvc->const_colors) { + tvc->const_colors(tvc, bg_sel); + } + + do { + const char *ext_line; + int ext_len; + int color_flag = 0; + + y_prev = xy[1]; + + if (draw) { + color_flag = tvc->line_color(tvc, fg, bg); + } + + tvc->line_get(tvc, &ext_line, &ext_len); + + if (!console_draw_string(&cdc, + ext_line, + ext_len, + (color_flag & TVC_LINE_FG) ? fg : NULL, + (color_flag & TVC_LINE_BG) ? bg : NULL, + bg_sel)) { + /* when drawing, if we pass v2d->cur.ymax, then quit */ + if (draw) { + break; /* past the y limits */ + } + } + + if ((mval[1] != INT_MAX) && (mval[1] >= y_prev && mval[1] <= xy[1])) { + *mouse_pick = (void *)tvc->iter; + break; + } + + tvc->iter_index++; + + } while (tvc->step(tvc)); + } + + tvc->end(tvc); + + xy[1] += tvc->lheight * 2; + + return xy[1] - y_orig; } |