From 4cfccbad3118efbcdeea6b84ee4c11d72cd7cf7e Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Thu, 12 Jan 2012 07:44:47 +0000
Subject: [PATCH] recompute font textures when colors change

---
 Common/Options.cpp     | 7 +++++++
 Fltk/FlGui.cpp         | 6 ++++++
 Graphics/drawContext.h | 1 +
 3 files changed, 14 insertions(+)

diff --git a/Common/Options.cpp b/Common/Options.cpp
index 58bfd6e0ab..2647bbc61c 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -5153,6 +5153,7 @@ double opt_mesh_color_carousel(OPT_ARGS_NUM)
   if(FlGui::available() && (action & GMSH_GUI)){
     FlGui::instance()->options->mesh.choice[4]->value
       (CTX::instance()->mesh.colorCarousel);
+    drawContext::global()->resetFontTextures();
   }
 #endif
   return CTX::instance()->mesh.colorCarousel;
@@ -7943,6 +7944,7 @@ unsigned int opt_general_color_text(OPT_ARGS_COL)
     CTX::instance()->color.text = val;
 #if defined(HAVE_FLTK)
   CCC(CTX::instance()->color.text, FlGui::instance()->options->general.color[3]);
+  drawContext::global()->resetFontTextures();
 #endif
   return CTX::instance()->color.text;
 }
@@ -7953,6 +7955,7 @@ unsigned int opt_general_color_axes(OPT_ARGS_COL)
     CTX::instance()->color.axes = val;
 #if defined(HAVE_FLTK)
   CCC(CTX::instance()->color.axes, FlGui::instance()->options->general.color[4]);
+  drawContext::global()->resetFontTextures();
 #endif
   return CTX::instance()->color.axes;
 }
@@ -7963,6 +7966,7 @@ unsigned int opt_general_color_small_axes(OPT_ARGS_COL)
     CTX::instance()->color.smallAxes = val;
 #if defined(HAVE_FLTK)
   CCC(CTX::instance()->color.smallAxes, FlGui::instance()->options->general.color[5]);
+  drawContext::global()->resetFontTextures();
 #endif
   return CTX::instance()->color.smallAxes;
 }
@@ -8507,6 +8511,7 @@ unsigned int opt_view_color_text2d(OPT_ARGS_COL)
 #if defined(HAVE_FLTK)
   if(_gui_action_valid(action, num)){
     CCC(opt->color.text2d, FlGui::instance()->options->view.color[10]);
+    drawContext::global()->resetFontTextures();
   }
 #endif
   return opt->color.text2d;
@@ -8525,6 +8530,7 @@ unsigned int opt_view_color_text3d(OPT_ARGS_COL)
 #if defined(HAVE_FLTK)
   if(_gui_action_valid(action, num)){
     CCC(opt->color.text3d, FlGui::instance()->options->view.color[11]);
+    drawContext::global()->resetFontTextures();
   }
 #endif
   return opt->color.text3d;
@@ -8543,6 +8549,7 @@ unsigned int opt_view_color_axes(OPT_ARGS_COL)
 #if defined(HAVE_FLTK)
   if(_gui_action_valid(action, num)){
     CCC(opt->color.axes, FlGui::instance()->options->view.color[12]);
+    drawContext::global()->resetFontTextures();
   }
 #endif
   return opt->color.axes;
diff --git a/Fltk/FlGui.cpp b/Fltk/FlGui.cpp
index 7f5fb23d66..cd12e7da24 100644
--- a/Fltk/FlGui.cpp
+++ b/Fltk/FlGui.cpp
@@ -180,6 +180,12 @@ class drawContextFltk : public drawContextGlobal{
   {
     gl_draw(str);
   }
+  void resetFontTextures()
+  {
+#if defined(__APPLE__) && (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 3)
+    gl_texture_pile_height(1); // force font texture recomputation
+#endif
+  }
 };
 
 static int globalShortcut(int event)
diff --git a/Graphics/drawContext.h b/Graphics/drawContext.h
index ced0b66e42..651e7ed27a 100644
--- a/Graphics/drawContext.h
+++ b/Graphics/drawContext.h
@@ -97,6 +97,7 @@ class drawContextGlobal {
   virtual int getStringHeight(){ return 12; }
   virtual int getStringDescent(){ return 3; }
   virtual void drawString(const char *str){}
+  virtual void resetFontTextures(){}
 };
 
 class drawContext {
-- 
GitLab