diff options
author | Ton Roosendaal <ton@blender.org> | 2009-06-01 21:21:03 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2009-06-01 21:21:03 +0400 |
commit | a117731aa23c25d699c405325c7bb7ac5680a5e7 (patch) | |
tree | 19bf09edd70e5b50b582593f5db1bcdb7e7281ec /source/blender/editors | |
parent | cb96aa47dbcefa8be8db63dc8fc2607b16b2d5d1 (diff) |
2.5
- Fix: text draw in fonts was slightly too low; it didn't calculate offset
correctly. Now it is aligned to have number characters in center.
- Fix: text clip was too wide, giving errors on extreme zoom in.
- Added boundbox-clipped default text drawing for view2d:
void UI_view2d_text_cache_rectf(View2D *v2d, rctf *rect, char *str)
(Note; also for previous commit, this cache immediately projects, so if
you change view2d while drawing, text is still on correct positions)
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/include/UI_view2d.h | 1 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_style.c | 4 | ||||
-rw-r--r-- | source/blender/editors/interface/view2d.c | 32 | ||||
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_draw.c | 7 |
4 files changed, 40 insertions, 4 deletions
diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h index 3c58e218f09..4813b695795 100644 --- a/source/blender/editors/include/UI_view2d.h +++ b/source/blender/editors/include/UI_view2d.h @@ -184,6 +184,7 @@ short UI_view2d_mouse_in_scrollers(const struct bContext *C, struct View2D *v2d, /* cached text drawing in v2d, to allow pixel-aligned draw as post process */ void UI_view2d_text_cache_add(struct View2D *v2d, float x, float y, char *str); +void UI_view2d_text_cache_rectf(struct View2D *v2d, struct rctf *rect, char *str); void UI_view2d_text_cache_draw(struct ARegion *ar); /* operators */ diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 34f4d7294ee..fca88132771 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -164,7 +164,7 @@ void uiStyleFontDraw(uiFontStyle *fs, rcti *rect, char *str) uiStyleFontSet(fs); - height= BLF_height("A"); + height= BLF_height("2"); /* correct offset is on baseline, the j is below that */ yofs= floor( 0.5f*(rect->ymax - rect->ymin - height)); if(fs->align==UI_STYLE_TEXT_CENTER) @@ -173,7 +173,7 @@ void uiStyleFontDraw(uiFontStyle *fs, rcti *rect, char *str) xofs= rect->xmax - rect->xmin - BLF_width(str); /* clip is very strict, so we give it some space */ - BLF_clipping(rect->xmin-4, rect->ymin-4, rect->xmax+4, rect->ymax+4); + BLF_clipping(rect->xmin-1, rect->ymin-4, rect->xmax+1, rect->ymax+4); BLF_enable(BLF_CLIPPING); if(fs->shadow) diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index fc1de788f5f..b363f1f6272 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -1949,6 +1949,7 @@ typedef struct View2DString { float col[4]; char str[128]; short mval[2]; + rcti rect; } View2DString; @@ -1959,6 +1960,7 @@ void UI_view2d_text_cache_add(View2D *v2d, float x, float y, char *str) UI_view2d_view_to_region(v2d, x, y, mval, mval+1); if(mval[0]!=V2D_IS_CLIPPED && mval[1]!=V2D_IS_CLIPPED) { + /* use calloc, rect has to be zeroe'd */ View2DString *v2s= MEM_callocN(sizeof(View2DString), "View2DString"); BLI_addtail(&strings, v2s); @@ -1969,6 +1971,20 @@ void UI_view2d_text_cache_add(View2D *v2d, float x, float y, char *str) } } +/* no clip (yet) */ +void UI_view2d_text_cache_rectf(View2D *v2d, rctf *rect, char *str) +{ + View2DString *v2s= MEM_callocN(sizeof(View2DString), "View2DString"); + + UI_view2d_to_region_no_clip(v2d, rect->xmin, rect->ymin, &v2s->rect.xmin, &v2s->rect.ymin); + UI_view2d_to_region_no_clip(v2d, rect->xmax, rect->ymax, &v2s->rect.xmax, &v2s->rect.ymax); + + BLI_addtail(&strings, v2s); + BLI_strncpy(v2s->str, str, 128); + glGetFloatv(GL_CURRENT_COLOR, v2s->col); +} + + void UI_view2d_text_cache_draw(ARegion *ar) { View2DString *v2s; @@ -1978,7 +1994,21 @@ void UI_view2d_text_cache_draw(ARegion *ar) for(v2s= strings.first; v2s; v2s= v2s->next) { glColor3fv(v2s->col); - BLF_draw_default((float)v2s->mval[0], (float)v2s->mval[1], 0.0, v2s->str); + if(v2s->rect.xmin==v2s->rect.xmax) + BLF_draw_default((float)v2s->mval[0], (float)v2s->mval[1], 0.0, v2s->str); + else { + int xofs=0, yofs; + + yofs= ceil( 0.5f*(v2s->rect.ymax - v2s->rect.ymin - BLF_height_default("28"))); + if(yofs<1) yofs= 1; + + BLF_clipping(v2s->rect.xmin-4, v2s->rect.ymin-4, v2s->rect.xmax+4, v2s->rect.ymax+4); + BLF_enable(BLF_CLIPPING); + + BLF_draw_default(v2s->rect.xmin+xofs, v2s->rect.ymin+yofs, 0.0f, v2s->str); + + BLF_disable(BLF_CLIPPING); + } } // wmPopMatrix(); diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index a0b27cede05..675602a23a0 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -517,6 +517,7 @@ static void draw_seq_extensions(Scene *scene, SpaceSeq *sseq, Sequence *seq) /* draw info text on a sequence strip */ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float y1, float y2, char *background_col) { + rctf rect; char str[32 + FILE_MAXDIR+FILE_MAXFILE]; if(seq->name[2]) { @@ -564,7 +565,11 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float cpack(0); } - UI_view2d_text_cache_add(v2d, x1, y1+SEQ_STRIP_OFSBOTTOM, str); + rect.xmin= x1; + rect.ymin= y1; + rect.xmax= x2; + rect.ymax= y2; + UI_view2d_text_cache_rectf(v2d, &rect, str); } /* draws a shaded strip, made from gradient + flat color + gradient */ |