diff options
-rw-r--r-- | source/blender/editors/include/UI_view2d.h | 4 | ||||
-rw-r--r-- | source/blender/editors/interface/view2d.c | 52 | ||||
-rw-r--r-- | source/blender/editors/space_nla/nla_draw.c | 17 | ||||
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_draw.c | 16 |
4 files changed, 52 insertions, 37 deletions
diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h index d44e74ff54d..7cad1d82d50 100644 --- a/source/blender/editors/include/UI_view2d.h +++ b/source/blender/editors/include/UI_view2d.h @@ -191,8 +191,8 @@ void UI_view2d_getscale(struct View2D *v2d, float *x, float *y); short UI_view2d_mouse_in_scrollers(const struct bContext *C, struct View2D *v2d, int x, int y); /* 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_add(struct View2D *v2d, float x, float y, const char *str, const char col[4]); +void UI_view2d_text_cache_rectf(struct View2D *v2d, struct rctf *rect, const char *str, const char col[4]); void UI_view2d_text_cache_draw(struct ARegion *ar); /* operators */ diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index 0cd4518fe85..21146dc8cec 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -2006,42 +2006,48 @@ static ListBase strings= {NULL, NULL}; typedef struct View2DString { struct View2DString *next, *prev; - float col[4]; - char str[128]; + GLbyte col[4]; short mval[2]; rcti rect; } View2DString; -void UI_view2d_text_cache_add(View2D *v2d, float x, float y, char *str) +void UI_view2d_text_cache_add(View2D *v2d, float x, float y, const char *str, const char col[4]) { int mval[2]; UI_view2d_view_to_region(v2d, x, y, mval, mval+1); if(mval[0]!=V2D_IS_CLIPPED && mval[1]!=V2D_IS_CLIPPED) { + int len= strlen(str)+1; /* use calloc, rect has to be zeroe'd */ - View2DString *v2s= MEM_callocN(sizeof(View2DString), "View2DString"); - + View2DString *v2s= MEM_callocN(sizeof(View2DString)+len, "View2DString"); + char *v2s_str= (char *)(v2s+1); + memcpy(v2s_str, str, len); + BLI_addtail(&strings, v2s); - BLI_strncpy(v2s->str, str, 128); v2s->mval[0]= mval[0]; v2s->mval[1]= mval[1]; - glGetFloatv(GL_CURRENT_COLOR, v2s->col); + QUATCOPY(v2s->col, col); } } /* no clip (yet) */ -void UI_view2d_text_cache_rectf(View2D *v2d, rctf *rect, char *str) +void UI_view2d_text_cache_rectf(View2D *v2d, rctf *rect, const char *str, const char col[4]) { - View2DString *v2s= MEM_callocN(sizeof(View2DString), "View2DString"); - + int len= strlen(str)+1; + View2DString *v2s= MEM_callocN(sizeof(View2DString)+len, "View2DString"); + char *v2s_str= (char *)(v2s+1); + memcpy(v2s_str, str, len); + 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); - + + v2s->mval[0]= v2s->rect.xmin; + v2s->mval[1]= v2s->rect.ymin; + BLI_addtail(&strings, v2s); - BLI_strncpy(v2s->str, str, 128); - glGetFloatv(GL_CURRENT_COLOR, v2s->col); + QUATCOPY(v2s->col, col); } @@ -2056,18 +2062,20 @@ void UI_view2d_text_cache_draw(ARegion *ar) ED_region_pixelspace(ar); for(v2s= strings.first; v2s; v2s= v2s->next) { - glColor3fv(v2s->col); - if(v2s->rect.xmin==v2s->rect.xmax) - BLF_draw_default((float)v2s->mval[0], (float)v2s->mval[1], 0.0, v2s->str, sizeof(v2s->str)-1); + const char *str= (const char *)(v2s+1); + int xofs=0, yofs; + + yofs= ceil( 0.5f*(v2s->rect.ymax - v2s->rect.ymin - BLF_height_default("28"))); + if(yofs<1) yofs= 1; + + glColor3bv(v2s->col); + + if(v2s->rect.xmin >= v2s->rect.xmax) + BLF_draw_default((float)v2s->mval[0]+xofs, (float)v2s->mval[1]+yofs, 0.0, str, 65535); 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_default(v2s->rect.xmin-4, v2s->rect.ymin-4, v2s->rect.xmax+4, v2s->rect.ymax+4); BLF_enable_default(BLF_CLIPPING); - BLF_draw_default(v2s->rect.xmin+xofs, v2s->rect.ymin+yofs, 0.0f, v2s->str, sizeof(v2s->str)-1); + BLF_draw_default(v2s->rect.xmin+xofs, v2s->rect.ymin+yofs, 0.0f, str, 65535); BLF_disable_default(BLF_CLIPPING); } } diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index d5a007fd506..e6028735d52 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -417,6 +417,7 @@ static void nla_draw_strip (SpaceNla *snla, AnimData *adt, NlaTrack *UNUSED(nlt) static void nla_draw_strip_text (NlaTrack *UNUSED(nlt), NlaStrip *strip, int UNUSED(index), View2D *v2d, float yminc, float ymaxc) { char str[256], dir[3]; + char col[4]; rctf rect; /* 'dir' - direction that strip is played in */ @@ -432,11 +433,14 @@ static void nla_draw_strip_text (NlaTrack *UNUSED(nlt), NlaStrip *strip, int UNU sprintf(str, "%s | %.2f %s %.2f", strip->name, strip->start, dir, strip->end); /* set text color - if colors (see above) are light, draw black text, otherwise draw white */ - if (strip->flag & (NLASTRIP_FLAG_ACTIVE|NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_TWEAKUSER)) - glColor3f(0.0f, 0.0f, 0.0f); - else - glColor3f(1.0f, 1.0f, 1.0f); - + if (strip->flag & (NLASTRIP_FLAG_ACTIVE|NLASTRIP_FLAG_SELECT|NLASTRIP_FLAG_TWEAKUSER)) { + col[0]= col[1]= col[2]= 0; + } + else { + col[0]= col[1]= col[2]= 255; + } + col[3]= 1.0; + /* set bounding-box for text * - padding of 2 'units' on either side */ @@ -447,7 +451,8 @@ static void nla_draw_strip_text (NlaTrack *UNUSED(nlt), NlaStrip *strip, int UNU rect.ymax= ymaxc; /* add this string to the cache of texts to draw*/ - UI_view2d_text_cache_rectf(v2d, &rect, str); + + UI_view2d_text_cache_rectf(v2d, &rect, str, col); } /* ---------------------- */ diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 49d7e6a2f33..087b0b7dcd7 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -343,7 +343,7 @@ static void draw_seq_handle(View2D *v2d, Sequence *seq, float pixelx, short dire } if(G.moving || (seq->flag & whichsel)) { - cpack(0xFFFFFF); + const char col[4]= {255, 255, 255, 255}; if (direction == SEQ_LEFTHANDLE) { sprintf(str, "%d", seq->startdisp); x1= rx1; @@ -353,7 +353,7 @@ static void draw_seq_handle(View2D *v2d, Sequence *seq, float pixelx, short dire x1= x2 - handsize*0.75; y1= y2 + 0.05; } - UI_view2d_text_cache_add(v2d, x1, y1, str); + UI_view2d_text_cache_add(v2d, x1, y1, str, col); } } @@ -467,6 +467,7 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float rctf rect; char str[32 + FILE_MAXDIR+FILE_MAXFILE]; const char *name= seq->name+2; + char col[4]; if(name[0]=='\0') name= give_seqname(seq); @@ -511,18 +512,19 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float } if(seq->flag & SELECT){ - cpack(0xFFFFFF); + col[0]= col[1]= col[2]= 255; }else if ((((int)background_col[0] + (int)background_col[1] + (int)background_col[2]) / 3) < 50){ - cpack(0x505050); /* use lighter text color for dark background */ + col[0]= col[1]= col[2]= 80; /* use lighter text color for dark background */ }else{ - cpack(0); + col[0]= col[1]= col[2]= 0; } - + col[3]= 255; + rect.xmin= x1; rect.ymin= y1; rect.xmax= x2; rect.ymax= y2; - UI_view2d_text_cache_rectf(v2d, &rect, str); + UI_view2d_text_cache_rectf(v2d, &rect, str, col); } /* draws a shaded strip, made from gradient + flat color + gradient */ |