From ae2e4bd341c96f0ab75bcb5406aec29af4e44d75 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Wed, 21 Dec 2005 02:01:28 +0000
Subject: [PATCH] added radial gradient ;-)

---
 Common/DefaultOptions.h |  2 +-
 Common/Options.cpp      |  4 ++--
 Fltk/GUI.cpp            |  3 ++-
 Graphics/Draw.cpp       | 28 +++++++++++++++++++++++-----
 4 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 895b09b2b1..e7638f1bc5 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -469,7 +469,7 @@ StringXNumber GeneralOptions_Number[] = {
   { F|O, "AxesTicsZ" , opt_general_axes_tics2 , 5. ,
     "Number of tics on the Z-axis" },
   { F|O, "BackgroundGradient" , opt_general_background_gradient , 0. ,
-    "Draw background gradient (0=none, 1=vertical, 2=horizontal)" },
+    "Draw background gradient (0=none, 1=vertical, 2=horizontal, 3=radial)" },
   { F,   "Clip0" , opt_general_clip0 , 0. ,
     "Enable clipping plane 0 (Geometry=2^0, Mesh=2^1, View[i]=2^(2+i))" },
   { F,   "Clip0A" , opt_general_clip0a , 1.0 ,
diff --git a/Common/Options.cpp b/Common/Options.cpp
index de4c7437b6..74952095b8 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.267 2005-12-20 23:17:28 geuzaine Exp $
+// $Id: Options.cpp,v 1.268 2005-12-21 02:01:26 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -3106,7 +3106,7 @@ double opt_general_background_gradient(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET){
     CTX.bg_gradient = (int)val;
-    if(CTX.bg_gradient < 0 || CTX.bg_gradient > 2)
+    if(CTX.bg_gradient < 0 || CTX.bg_gradient > 3)
       CTX.bg_gradient = 0;
   }
 #if defined(HAVE_FLTK)
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 3434d77184..cf5cf06188 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.474 2005-12-18 22:13:26 geuzaine Exp $
+// $Id: GUI.cpp,v 1.475 2005-12-21 02:01:27 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -1985,6 +1985,7 @@ void GUI::create_option_window()
 	{"None", 0, 0, 0},
 	{"Vertical", 0, 0, 0},
 	{"Horizontal", 0, 0, 0},
+	{"Radial", 0, 0, 0},
 	{0}
       };
 
diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp
index 558de666bd..770be8b017 100644
--- a/Graphics/Draw.cpp
+++ b/Graphics/Draw.cpp
@@ -1,4 +1,4 @@
-// $Id: Draw.cpp,v 1.88 2005-12-19 05:08:05 geuzaine Exp $
+// $Id: Draw.cpp,v 1.89 2005-12-21 02:01:28 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -217,24 +217,42 @@ void InitProjection(int x, int y)
     glPushMatrix();
     glLoadIdentity();
     glTranslated(0., 0., -grad_z);
-    glBegin(GL_QUADS);
-    if(CTX.bg_gradient == 1){
+    if(CTX.bg_gradient == 1){ // vertical
+      glBegin(GL_QUADS);
       glColor4ubv((GLubyte *) & CTX.color.bg);
       glVertex3d(grad_xy * CTX.vxmin, grad_xy * CTX.vymin, 0.);
       glVertex3d(grad_xy * CTX.vxmax, grad_xy * CTX.vymin, 0.);
       glColor4ubv((GLubyte *) & CTX.color.bg_grad);
       glVertex3d(grad_xy * CTX.vxmax, grad_xy * CTX.vymax, 0.);
       glVertex3d(grad_xy * CTX.vxmin, grad_xy * CTX.vymax, 0.);
+      glEnd();
     }
-    else{
+    else if(CTX.bg_gradient == 2){ // horizontal
+      glBegin(GL_QUADS);
       glColor4ubv((GLubyte *) & CTX.color.bg);
       glVertex3d(grad_xy * CTX.vxmax, grad_xy * CTX.vymin, 0.);
       glVertex3d(grad_xy * CTX.vxmax, grad_xy * CTX.vymax, 0.);
       glColor4ubv((GLubyte *) & CTX.color.bg_grad);
       glVertex3d(grad_xy * CTX.vxmin, grad_xy * CTX.vymax, 0.);
       glVertex3d(grad_xy * CTX.vxmin, grad_xy * CTX.vymin, 0.);
+      glEnd();
+    }
+    else{ // radial
+      double cx = grad_xy * (CTX.vxmin + CTX.vxmax) / 2.;
+      double cy = grad_xy * (CTX.vymin + CTX.vymax) / 2.;
+      double r = MAX(CTX.vxmax - CTX.vxmin, CTX.vymax - CTX.vymin) / 2.;
+      glBegin(GL_TRIANGLE_FAN);
+      glColor4ubv((GLubyte *) & CTX.color.bg_grad);
+      glVertex3d(cx, cy, 0.);
+      glColor4ubv((GLubyte *) & CTX.color.bg);
+      glVertex3d(cx + r, cy, 0.);
+      int ntheta = 36;
+      for(int i = 1; i < ntheta + 1; i ++){
+	double theta = i * 2 * M_PI / (double)ntheta;
+	glVertex3d(cx + r * cos(theta), cy + r * sin(theta), 0.);	
+      }
+      glEnd();
     }
-    glEnd();
     glPopMatrix();
   }
 }
-- 
GitLab