diff options
author | Diego Borghetti <bdiego@gmail.com> | 2009-04-23 00:54:27 +0400 |
---|---|---|
committer | Diego Borghetti <bdiego@gmail.com> | 2009-04-23 00:54:27 +0400 |
commit | 6a5a94a8feadaf1cf4d5fca2b73ca68a0582c20b (patch) | |
tree | 477874e6c255c008e93e0d7695b1d020d8969afa /source | |
parent | 76d000fd9625981189d55fc3fbe4619aaeaf1676 (diff) |
Add clipping option for bitmap draw mode and remove the "test code" from
space_info.c
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenfont/intern/blf_glyph.c | 11 | ||||
-rw-r--r-- | source/blender/blenfont/intern/blf_internal.c | 27 | ||||
-rw-r--r-- | source/blender/editors/space_info/space_info.c | 34 |
3 files changed, 33 insertions, 39 deletions
diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 063093efb1d..bdec76e01ff 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -543,6 +543,17 @@ int blf_glyph_bitmap_render(FontBLF *font, GlyphBLF *g, float x, float y) if (!gt->image) return(1); + if (font->flags & BLF_CLIPPING) { + if (!BLI_in_rctf(&font->clip_rec, x + font->pos[0], y + font->pos[1])) + return(0); + if (!BLI_in_rctf(&font->clip_rec, x + font->pos[0], y + gt->height + font->pos[1])) + return(0); + if (!BLI_in_rctf(&font->clip_rec, x + gt->width + font->pos[0], y + gt->height + font->pos[1])) + return(0); + if (!BLI_in_rctf(&font->clip_rec, x + gt->width + font->pos[0], y + font->pos[1])) + return(0); + } + glBitmap(0, 0, 0.0, 0.0, x + font->pos[0], y - font->pos[1], (const GLubyte *)&null_bitmap); glPixelStorei(GL_UNPACK_ROW_LENGTH, gt->pitch * 8); glBitmap(gt->width, gt->height, 0.0, gt->pos_y, 0.0, 0.0, (const GLubyte *)gt->image); diff --git a/source/blender/blenfont/intern/blf_internal.c b/source/blender/blenfont/intern/blf_internal.c index d868a0fa32a..bc569e3d080 100644 --- a/source/blender/blenfont/intern/blf_internal.c +++ b/source/blender/blenfont/intern/blf_internal.c @@ -178,14 +178,15 @@ void blf_internal_texture_draw(FontBLF *font, char *str) dy1= -base_line + y + 16.0; if (font->flags & BLF_CLIPPING) { + /* Don't return, just skip this character and check the others. */ if (!BLI_in_rctf(&font->clip_rec, dx + font->pos[0], dy + font->pos[1])) - return; + goto next_tex_char; if (!BLI_in_rctf(&font->clip_rec, dx + font->pos[0], dy1 + font->pos[1])) - return; + goto next_tex_char; if (!BLI_in_rctf(&font->clip_rec, dx1 + font->pos[0], dy1 + font->pos[1])) - return; + goto next_tex_char; if (!BLI_in_rctf(&font->clip_rec, dx1 + font->pos[0], dy + font->pos[1])) - return; + goto next_tex_char; } glBegin(GL_QUADS); @@ -202,7 +203,7 @@ void blf_internal_texture_draw(FontBLF *font, char *str) glVertex3f(dx1, dy, z); glEnd(); } - +next_tex_char: pos += cd->advance; } } @@ -213,15 +214,29 @@ void blf_internal_bitmap_draw(FontBLF *font, char *str) CharDataBLF *cd; unsigned char c; GLint alignment; + float dx; data= (FontDataBLF *)font->engine; glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + dx= 0; while ((c= (unsigned char) *str++)) { cd= &data->chars[c]; + if (font->flags & BLF_CLIPPING) { + /* The same here, always check all the characters. */ + if (!BLI_in_rctf(&font->clip_rec, dx + font->pos[0], font->pos[1])) + goto next_bitmap_char; + if (!BLI_in_rctf(&font->clip_rec, dx + font->pos[0], cd->height + font->pos[1])) + goto next_bitmap_char; + if (!BLI_in_rctf(&font->clip_rec, dx + cd->width + font->pos[0], cd->height + font->pos[1])) + goto next_bitmap_char; + if (!BLI_in_rctf(&font->clip_rec, dx + cd->width + font->pos[0], font->pos[1])) + goto next_bitmap_char; + } + if (cd->data_offset==-1) { GLubyte nullBitmap= 0; glBitmap(1, 1, 0, 0, cd->advance, 0, &nullBitmap); @@ -229,6 +244,8 @@ void blf_internal_bitmap_draw(FontBLF *font, char *str) GLubyte *bitmap= &data->bitmap_data[cd->data_offset]; glBitmap(cd->width, cd->height, cd->xorig, cd->yorig, cd->advance, 0, bitmap); } +next_bitmap_char: + dx += cd->advance; } glPixelStorei(GL_UNPACK_ALIGNMENT, alignment); diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index 66d807eb69c..12f23f03e66 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -48,7 +48,6 @@ #include "ED_screen.h" #include "BIF_gl.h" -#include "BLF_api.h" #include "WM_api.h" #include "WM_types.h" @@ -133,7 +132,6 @@ static void info_main_area_draw(const bContext *C, ARegion *ar) // SpaceInfo *sinfo= (SpaceInfo*)CTX_wm_space_data(C); View2D *v2d= &ar->v2d; float col[3]; - float width, height; /* clear and setup matrix */ UI_GetThemeColor3fv(TH_BACK, col); @@ -143,38 +141,6 @@ static void info_main_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_ortho(C, v2d); /* data... */ - // XXX 2.50 Testing new font library - Diego - glColor3f(1.0, 0.0, 0.0); - BLF_aspect(1.0); - - BLF_size(14, 96); - BLF_position(5.0, 5.0, 0.0); - - width= BLF_width("Hello Blender, size 14, dpi 96"); - height= BLF_height("Hello Blender, size 14, dpi 96"); - - glRectf(7.0, 20.0, 7.0+width, 20.0+height); - glRectf(5.0+width+10.0, 3.0, 5.0+width+10.0+width, 3.0+height); - BLF_draw("Hello Blender, size 14, dpi 96"); - - glColor3f(0.0, 0.0, 1.0); - BLF_size(11, 96); - BLF_position(200.0, 50.0, 0.0); - BLF_enable(BLF_ROTATION); - BLF_rotation(45.0f); - BLF_draw("Another Hello Blender, size 11 and dpi 96!!"); - - glColor3f(0.8, 0.0, 0.7); - BLF_size(12, 72); - BLF_position(200.0, 100.0, 0.0); - BLF_rotation(180.0f); - BLF_draw("Hello World, size 12, dpi 72"); - - glColor3f(0.8, 0.7, 0.5); - BLF_size(12, 96); - BLF_position(5.0, 200.0, 0.0); - BLF_disable(BLF_ROTATION); - BLF_draw("And this make a new glyph cache!!"); /* reset view matrix */ UI_view2d_view_restore(C); |