[Bf-blender-cvs] [b64b18f] input_method_editor: IME: Refactor Underline Drawing Code
Severin
noreply at git.blender.org
Thu Dec 4 19:17:31 CET 2014
Commit: b64b18f8acb757e79756a2ffad064a3cc82e522d
Author: Severin
Date: Thu Dec 4 19:12:05 2014 +0100
Branches: input_method_editor
https://developer.blender.org/rBb64b18f8acb757e79756a2ffad064a3cc82e522d
IME: Refactor Underline Drawing Code
* ED_text_draw_underline is now UI_text_draw_underline and is used for all
IDE appearances
* usual minor cleanup
===================================================================
M source/blender/editors/include/ED_space_api.h
M source/blender/editors/include/UI_interface.h
M source/blender/editors/interface/interface_draw.c
M source/blender/editors/interface/interface_handlers.c
M source/blender/editors/interface/interface_widgets.c
M source/blender/editors/space_info/textview.c
M source/blender/editors/space_text/text_draw.c
M source/blender/editors/util/ed_util.c
===================================================================
diff --git a/source/blender/editors/include/ED_space_api.h b/source/blender/editors/include/ED_space_api.h
index 204c0e1..d268c57 100644
--- a/source/blender/editors/include/ED_space_api.h
+++ b/source/blender/editors/include/ED_space_api.h
@@ -78,6 +78,5 @@ void *ED_region_draw_cb_customdata(void *handle);
/* generic callbacks */
/* ed_util.c */
void ED_region_draw_mouse_line_cb(const struct bContext *C, struct ARegion *ar, void *arg_info);
-void ED_text_draw_underline(int x, int y, int len, int height);
#endif /* __ED_SPACE_API_H__ */
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index f7e34c9..402d54c 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -313,6 +313,7 @@ void UI_draw_box_shadow(unsigned char alpha, float minx, float miny, float maxx,
void UI_draw_roundbox_gl_mode(int mode, float minx, float miny, float maxx, float maxy, float rad);
void UI_draw_roundbox_shade_x(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
void UI_draw_roundbox_shade_y(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight);
+void UI_text_draw_underline(int pos_x, int pos_y, int len, int height);
/* state for scrolldrawing */
#define UI_SCROLL_PRESSED (1 << 0)
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 4dd952f..c145092 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -395,6 +395,11 @@ void UI_draw_roundbox(float minx, float miny, float maxx, float maxy, float rad)
ui_draw_anti_roundbox(GL_POLYGON, minx, miny, maxx, maxy, rad, roundboxtype & UI_RB_ALPHA);
}
+void UI_text_draw_underline(int pos_x, int pos_y, int len, int height) {
+ short ofs_y = 4 * U.pixelsize;
+ glRecti(pos_x, pos_y - ofs_y, pos_x + len, pos_y - ofs_y + (height * U.pixelsize));
+}
+
/* ************** SPECIAL BUTTON DRAWING FUNCTIONS ************* */
void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti *rect)
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index fef9e20..e18150d 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -2455,6 +2455,7 @@ void ui_but_ime_reposition(uiBut *but, int x, int y, int complete)
wm_window_IME_begin(but->active->window, x, y - 4, 0, 0, complete);
}
+/* should be ui_but_ime_data_get */
wmImeData *ui_but_get_ime_data(uiBut *but)
{
if (but->active && but->active->window)
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index c027406..97f3567 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -1236,6 +1236,48 @@ static void ui_text_clip_right_label(uiFontStyle *fstyle, uiBut *but, const rcti
BLF_disable(fstyle->uifont_id, BLF_KERNING_DEFAULT);
}
+#ifdef WITH_INPUT_IME
+static void widget_draw_text_ime_underline(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect, wmImeData *ime_data, char *drawstr)
+{
+ int ofs_x, width;
+ int rect_x = BLI_rcti_size_x(rect);
+ int target_start = ime_data->target_start, target_end = ime_data->target_end;
+
+ if (drawstr[0] != 0) {
+ if (but->pos >= but->ofs) {
+ ofs_x = BLF_width(fstyle->uifont_id, drawstr + but->ofs, but->pos - but->ofs);
+ }
+ else {
+ ofs_x = 0;
+ }
+
+ width = BLF_width(fstyle->uifont_id, drawstr + but->ofs,
+ ime_data->composite_len + but->pos - but->ofs);
+
+ glColor4ubv((unsigned char *)wcol->text);
+ UI_text_draw_underline(rect->xmin + ofs_x, rect->ymin + 6 * U.pixelsize, min_ii(width, rect_x - 2) - ofs_x, 1);
+
+ /* draw the thick line */
+ if (target_start != -1 && target_end != -1) {
+ target_end -= target_start;
+ target_start += but->pos;
+
+ if (target_start >= but->ofs) {
+ ofs_x = BLF_width(fstyle->uifont_id, drawstr + but->ofs, target_start - but->ofs);
+ }
+ else {
+ ofs_x = 0;
+ }
+
+ width = BLF_width(fstyle->uifont_id, drawstr + but->ofs,
+ target_end + target_start - but->ofs);
+
+ UI_text_draw_underline(rect->xmin + ofs_x, rect->ymin + 6 * U.pixelsize, min_ii(width, rect_x - 2) - ofs_x, 2);
+ }
+ }
+}
+#endif
+
static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect)
{
int drawstr_left_len = UI_MAX_DRAW_STR;
@@ -1278,16 +1320,13 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
if (ime_data && ime_data->composite_len) {
/* insert composite string into cursor pos */
- BLI_snprintf(drawstr, UI_MAX_DRAW_STR, "%s%s%s", /* XXX drawstr is limited to 400 chars - check if that's enough */
+ BLI_snprintf(drawstr, UI_MAX_DRAW_STR, "%s%s%s",
but->editstr, ime_data->composite,
but->editstr + but->pos);
}
- else {
-#else
- if (1) {
+ else
#endif
drawstr = but->editstr;
- }
}
}
@@ -1322,13 +1361,12 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
/* text cursor */
vpos = but->pos;
+
#ifdef WITH_INPUT_IME
/* if is ime compositing, move the cursor */
if (ime_data && ime_data->composite_len && ime_data->cursor_position != -1) {
vpos += ime_data->cursor_position;
}
-#else
- (void)ime;
#endif
if (but->pos >= but->ofs) {
@@ -1342,60 +1380,26 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
glColor3f(0.20, 0.6, 0.9);
-#ifdef WITH_INPUT_IME
tx = rect->xmin + t + 2;
ty = rect->ymin + 2;
- glRecti(rect->xmin + t, ty, tx, rect->ymax - 2);
- /* ime cursor following */
- ui_but_ime_reposition(but, tx + 5, ty + 3, false);
+ /* draw cursor */
+ glRecti(rect->xmin + t, ty, tx, rect->ymax - 2);
}
- /* composite underline */
+#ifdef WITH_INPUT_IME
if (ime_data && ime_data->composite_len) {
- int draw_start, draw_end, target_start = ime_data->target_start, target_end = ime_data->target_end;
-
- if (drawstr[0] != 0) {
-
- if (but->pos >= but->ofs) {
- draw_start = BLF_width(fstyle->uifont_id, drawstr + but->ofs, but->pos - but->ofs);
- }
- else {
- draw_start = 0;
- }
-
- draw_end = BLF_width(fstyle->uifont_id, drawstr + but->ofs,
- ime_data->composite_len + but->pos - but->ofs);
-
- glColor4ubv((unsigned char *)wcol->text);
- glRecti(rect->xmin + draw_start,
- rect->ymin + 2,
- min_ii(rect->xmin + draw_end, rect->xmax - 2), rect->ymin + 1);
-
- /* draw the thick line */
- if (target_start != -1 && target_end != -1) {
- target_end -= target_start;
- target_start += but->pos;
-
- if (target_start >= but->ofs) {
- draw_start = BLF_width(fstyle->uifont_id, drawstr + but->ofs, target_start - but->ofs);
- }
- else {
- draw_start = 0;
- }
-
- draw_end = BLF_width(fstyle->uifont_id, drawstr + but->ofs,
- target_end + target_start - but->ofs);
-
- glRecti(rect->xmin + draw_start,
- rect->ymin + 3,
- min_ii(rect->xmin + draw_end, rect->xmax - 2), rect->ymin + 1);
- }
+ /* ime cursor following */
+ if (but->pos >= but->ofs) {
+ ui_but_ime_reposition(but, tx + 5, ty + 3, false);
}
+
+ /* composite underline */
+ widget_draw_text_ime_underline(fstyle, wcol, but, rect, ime_data, drawstr);
+ }
#else
- (void)ty; (void)tx;
+ (void)ime_data;
#endif
- }
}
if (fstyle->kerning == 1)
diff --git a/source/blender/editors/space_info/textview.c b/source/blender/editors/space_info/textview.c
index 5ce5237..592a2dd 100644
--- a/source/blender/editors/space_info/textview.c
+++ b/source/blender/editors/space_info/textview.c
@@ -46,6 +46,8 @@
#include "textview.h"
+#include "UI_interface.h"
+
#include "WM_types.h"
static void console_font_begin(TextViewContext *sc)
@@ -92,19 +94,19 @@ static void console_draw_sel(const char *str, const int sel[2], const int xy[2],
}
static void console_draw_underline(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])
+ const int cwidth, const int height, 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));
- int tmp[2];
+ const int col_xmin = txt_utf8_offset_to_column(str, max_ii(sel[0], 0));
+ const int col_xmax = txt_utf8_offset_to_column(str, min_ii(sel[1], str_len_draw));
+
+ const int x = xy[0] + (cwidth * col_xmin);
+ const int y = xy[1];
+ const int width = (xy[0] + (cwidth * col_xmax)) - x;
glColor3ubv(bg_sel);
- /* return the coord for IME window following */
- tmp[0] = xy[0] + (cwidth * end);
- tmp[1] = xy[1] - 2;
- glRecti(xy[0] + (cwidth * sta), xy[1] - 2 + lheight, tmp[0], tmp[1]);
+ UI_text_draw_underline(x, y, width, height);
}
}
diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c
index 216937b..91b1a0d 100644
--- a/source/blender/editors/space_text/text_draw.c
+++ b/source/blender/editors/space_text/text_draw.c
@@ -48,8 +48,6 @@
#include "BIF_gl.h"
-#include "ED_space_api.h"
-
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -425,10 +423,10 @@ static int text_draw_wrapped(SpaceText *st, const char *str, int x, int y, int w
len = text_font_draw_character_utf8(st, x, y, str + ma);
/* draw underline */
if (format && format[a] == FMT_TYPE_ULINE)
- ED_text_draw_underline(x, y, len, 1);
+ UI_text_draw_underline(x, y, len, 1);
else
if (format && format[a] == FMT_TYPE_TULINE)
- ED_text_draw_underline(x, y, len, 2);
+ UI_text_draw_underline(x, y, len, 2);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list