From e177e2a897f4bff86f1b0d15992626bc09a71807 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Wed, 29 Dec 2004 17:48:47 +0000 Subject: [PATCH] use the alignement capabilities of GL2PS for TeX output (this allows gmsh to create nicely aligned labels even with equations) --- Fltk/Opengl.cpp | 91 ++++++++++++++++++++++++------------------ Graphics/Draw.h | 2 + Graphics/Graph2D.cpp | 20 +++++----- Graphics/Scale.cpp | 94 +++++++++++++++++++++++++++----------------- 4 files changed, 120 insertions(+), 87 deletions(-) diff --git a/Fltk/Opengl.cpp b/Fltk/Opengl.cpp index c7d7c1ea39..9e0448b789 100644 --- a/Fltk/Opengl.cpp +++ b/Fltk/Opengl.cpp @@ -1,4 +1,4 @@ -// $Id: Opengl.cpp,v 1.46 2004-12-28 23:59:48 geuzaine Exp $ +// $Id: Opengl.cpp,v 1.47 2004-12-29 17:48:47 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -66,62 +66,75 @@ void Draw(void) WID->redraw_opengl(); } -void Draw_String(char *s) +void Draw_String(char *s, char *font_name, int font_enum, int font_size, int align) { + if(align > 0){ + // change the raster position only if not creating TeX files + if(CTX.print.gl_fonts || (CTX.print.format != FORMAT_TEX)){ + GLboolean valid; + glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); + if(valid == GL_TRUE){ + GLfloat pos[4]; + glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); + gl_font(font_enum, font_size); + float width = gl_width(s); + if(align == 1) // center + glRasterPos2d(pos[0]-width/2., pos[1]); + else if(align == 2) // right + glRasterPos2d(pos[0]-width, pos[1]); + } + } + } + if(CTX.print.gl_fonts) { - gl_font(CTX.gl_font_enum, CTX.gl_fontsize); + gl_font(font_enum, font_size); gl_draw(s); } - else { // ps or *tex output + else { // ps, pdf or *tex output if(CTX.print.format == FORMAT_JPEGTEX || CTX.print.format == FORMAT_PNGTEX) return; - gl2psText(s, CTX.gl_font, CTX.gl_fontsize); + if(CTX.print.format == FORMAT_TEX) + gl2psTextOpt(s, font_name, font_size, + (align == 0) ? GL2PS_TEXT_BL : + (align == 1) ? GL2PS_TEXT_B : + GL2PS_TEXT_BR, 0.); + else + gl2psText(s, font_name, font_size); } } +void Draw_String(char *s) +{ + Draw_String(s, CTX.gl_font, CTX.gl_font_enum, CTX.gl_fontsize, 0); +} + +void Draw_String_Center(char *s) +{ + Draw_String(s, CTX.gl_font, CTX.gl_font_enum, CTX.gl_fontsize, 1); +} + +void Draw_String_Right(char *s) +{ + Draw_String(s, CTX.gl_font, CTX.gl_font_enum, CTX.gl_fontsize, 2); +} + void Draw_String(char *s, double style) { unsigned int bits = (unsigned int)style; if(!bits){ // use defaults Draw_String(s); - return; } - - int size = (bits & 0xff); - int font = (bits>>8 & 0xff); - int align = (bits>>16 & 0xff); - - int oldsize = CTX.gl_fontsize; - int oldfont_enum = CTX.gl_font_enum; - char * oldfont = CTX.gl_font; - - CTX.gl_font_enum = GetFontEnum(font); - CTX.gl_font = GetFontName(font); - if(size) - CTX.gl_fontsize = size; - if(align > 0){ - GLboolean valid; - glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); - if(valid == GL_TRUE){ - GLfloat pos[4]; - glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); - gl_font(CTX.gl_font_enum, CTX.gl_fontsize); - float width = gl_width(s); - if(align == 1) // center - glRasterPos2d(pos[0]-width/2., pos[1]); - else if(align == 2) // right - glRasterPos2d(pos[0]-width, pos[1]); - } + else{ + int size = (bits & 0xff); + int font = (bits>>8 & 0xff); + int align = (bits>>16 & 0xff); + int font_enum = GetFontEnum(font); + char *font_name = GetFontName(font); + if(!size) size = CTX.gl_fontsize; + Draw_String(s, font_name, font_enum, size, align); } - - Draw_String(s); - - CTX.gl_font_enum = oldfont_enum; - CTX.gl_font = oldfont; - if(size) - CTX.gl_fontsize = oldsize; } void Draw_OnScreenMessages() diff --git a/Graphics/Draw.h b/Graphics/Draw.h index 837454f6b1..2ccb9502f9 100644 --- a/Graphics/Draw.h +++ b/Graphics/Draw.h @@ -61,6 +61,8 @@ void Draw(void); void Draw_String(char *s); void Draw_String(char *s, double style); +void Draw_String_Center(char *s); +void Draw_String_Right(char *s); void Draw_Geom(Mesh *m); void Draw_Post(void); void Draw_Graph2D(void); diff --git a/Graphics/Graph2D.cpp b/Graphics/Graph2D.cpp index 4173801e0b..e43f99429b 100644 --- a/Graphics/Graph2D.cpp +++ b/Graphics/Graph2D.cpp @@ -1,4 +1,4 @@ -// $Id: Graph2D.cpp,v 1.41 2004-12-28 23:59:48 geuzaine Exp $ +// $Id: Graph2D.cpp,v 1.42 2004-12-29 17:48:47 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -190,9 +190,8 @@ static void Draw_Graph2D(Post_View * v, if(v->ShowScale) { glColor4ubv((GLubyte *) & CTX.color.text); sprintf(label, v->Format, (i == nb) ? ValMin : (ValMax - i * dv)); - glRasterPos2d(xtop - gl_width(label) - 2 * tic, - ytop - i * dy - font_a / 3.); - Draw_String(label); + glRasterPos2d(xtop - 2 * tic, ytop - i * dy - font_a / 3.); + Draw_String_Right(label); } } @@ -204,8 +203,8 @@ static void Draw_Graph2D(Post_View * v, sprintf(label, "%s (%g)", v->Name, *(double *)List_Pointer(v->Time, v->TimeStep)); else sprintf(label, "%s", v->Name); - glRasterPos2d(xtop - gl_width(label) / 2., ytop + font_h + tic); - Draw_String(label); + glRasterPos2d(xtop, ytop + font_h + tic); + Draw_String_Center(label); } // x tics + labels @@ -279,16 +278,15 @@ static void Draw_Graph2D(Post_View * v, else sprintf(label, v->AbscissaFormat, AbsMin + i * (AbsMax - AbsMin) / (double)(nb - 1)); - glRasterPos2d(xtop + i * dx - gl_width(label) / 2., - ybot - font_h - tic); - Draw_String(label); + glRasterPos2d(xtop + i * dx, ybot - font_h - tic); + Draw_String_Center(label); } } if(v->ShowScale) { glColor4ubv((GLubyte *) & CTX.color.text); sprintf(label, "%s", v->AbscissaName); - glRasterPos2d(xtop + width / 2 - gl_width(label) / 2., ybot - 2 * font_h - 2 * tic); - Draw_String(label); + glRasterPos2d(xtop + width / 2, ybot - 2 * font_h - 2 * tic); + Draw_String_Center(label); } // the curve(s) diff --git a/Graphics/Scale.cpp b/Graphics/Scale.cpp index b8cc305071..70042d5158 100644 --- a/Graphics/Scale.cpp +++ b/Graphics/Scale.cpp @@ -1,4 +1,4 @@ -// $Id: Scale.cpp,v 1.53 2004-11-25 02:10:32 geuzaine Exp $ +// $Id: Scale.cpp,v 1.54 2004-12-29 17:48:47 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -182,42 +182,55 @@ void draw_scale(Post_View * v, if(v->IntervalsType == DRAW_POST_DISCRETE || v->IntervalsType == DRAW_POST_CONTINUOUS) { sprintf(label, v->Format, ValMin); - if(horizontal) - glRasterPos2d(xmin - gl_width(label)/2., ymin + height + tic); - else + if(horizontal){ + glRasterPos2d(xmin, ymin + height + tic); + Draw_String_Center(label); + } + else{ glRasterPos2d(xmin + width + tic, ymin - font_a / 3.); - Draw_String(label); - + Draw_String(label); + } sprintf(label, v->Format, ValMax); - if(horizontal) - glRasterPos2d(xmin + width - gl_width(label)/2., ymin + height + tic); - else + if(horizontal){ + glRasterPos2d(xmin + width, ymin + height + tic); + Draw_String_Center(label); + } + else{ glRasterPos2d(xmin + width + tic, ymin + height - font_a / 3.); - Draw_String(label); + Draw_String(label); + } } else { sprintf(label, v->Format, ValMin); - if(horizontal) - glRasterPos2d(xmin + (box / 2) - gl_width(label)/2., ymin + height + tic); - else + if(horizontal){ + glRasterPos2d(xmin + (box / 2), ymin + height + tic); + Draw_String_Center(label); + } + else{ glRasterPos2d(xmin + width + tic, ymin + (box / 2) - font_a / 3.); - Draw_String(label); - + Draw_String(label); + } sprintf(label, v->Format, ValMax); - if(horizontal) - glRasterPos2d(xmin + width - (box / 2) - gl_width(label)/2., ymin + height + tic); - else + if(horizontal){ + glRasterPos2d(xmin + width - (box / 2), ymin + height + tic); + Draw_String_Center(label); + } + else{ glRasterPos2d(xmin + width + tic, ymin + height - (box / 2) - font_a / 3.); - Draw_String(label); + Draw_String(label); + } } if(nbv == -2){ double Val = v->GVFI(ValMin, ValMax, v->NbIso, v->NbIso/2); sprintf(label, v->Format, Val); - if(horizontal) - glRasterPos2d(xmin + width/2. - gl_width(label)/2., ymin + height + tic); - else + if(horizontal){ + glRasterPos2d(xmin + width/2., ymin + height + tic); + Draw_String_Center(label); + } + else{ glRasterPos2d(xmin + width + tic, ymin + height/2 - font_a / 3.); - Draw_String(label); + Draw_String(label); + } } } else { @@ -226,23 +239,28 @@ void draw_scale(Post_View * v, for(int i = 0; i < nbv + 1; i++) { double Val = v->GVFI(ValMin, ValMax, nbv + 1, i); sprintf(label, v->Format, Val); - if(horizontal) - glRasterPos2d(xmin + i * cv_box - gl_width(label) / 2., ymin + height + tic); - else + if(horizontal){ + glRasterPos2d(xmin + i * cv_box, ymin + height + tic); + Draw_String_Center(label); + } + else{ glRasterPos2d(xmin + width + tic, ymin + i * cv_box - font_a / 3.); - Draw_String(label); + Draw_String(label); + } } } else { for(int i = 0; i < nbv; i++) { double Val = v->GVFI(ValMin, ValMax, nbv, i); sprintf(label, v->Format, Val); - if(horizontal) - glRasterPos2d(xmin + (2 * i + 1) * (cv_box / 2) - gl_width(label) / 2., - ymin + height + tic); - else + if(horizontal){ + glRasterPos2d(xmin + (2 * i + 1) * (cv_box / 2), ymin + height + tic); + Draw_String_Center(label); + } + else{ glRasterPos2d(xmin + width + tic, ymin + (2 * i + 1) * (cv_box / 2) - font_a / 3.); - Draw_String(label); + Draw_String(label); + } } } } @@ -255,12 +273,14 @@ void draw_scale(Post_View * v, else sprintf(label, "%s", v->Name); - if(horizontal) - glRasterPos2d(xmin + width / 2. - gl_width(label) / 2., ymin + height + tic + 1.4*font_h); - else + if(horizontal){ + glRasterPos2d(xmin + width / 2., ymin + height + tic + 1.4*font_h); + Draw_String_Center(label); + } + else{ glRasterPos2d(xmin, ymin - 2 * font_h); - - Draw_String(label); + Draw_String(label); + } } void Draw_Scales(void) -- GitLab