summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>1999-01-13 15:45:50 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>1999-01-13 15:45:50 +0000
commitab5771b62fbff2510ff495ba6dd2fcd8d1720593 (patch)
tree053c436d4a29715f964a5955c9da1e51aad0f693
parenta64292cc5f56e165b471f5bb23acea765d838c7e (diff)
Fixes from Bill:
- Fl_Clock now uses the Fl_Clock_Output base class to get the system time. - Fl_Window::iconize() and Fl_Window::icon() now coexist peacefully with all X window managers. - Minor fixes to mandelbrot and shape demos. - Menu code cleanup. git-svn-id: file:///fltk/svn/fltk/trunk@209 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--FL/Fl_Clock.H25
-rw-r--r--fluid/Fl_Function_Type.cxx14
-rw-r--r--src/Fl_Clock.cxx69
-rw-r--r--src/Fl_Menu.cxx6
-rw-r--r--src/Fl_Menu_Bar.cxx7
-rw-r--r--src/Fl_Window.cxx6
-rw-r--r--src/Fl_x.cxx24
-rw-r--r--test/mandelbrot.cxx6
-rw-r--r--test/shape.cxx7
9 files changed, 88 insertions, 76 deletions
diff --git a/FL/Fl_Clock.H b/FL/Fl_Clock.H
index a095c6452..8a17ee338 100644
--- a/FL/Fl_Clock.H
+++ b/FL/Fl_Clock.H
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Clock.H,v 1.4 1999/01/07 19:16:52 mike Exp $"
+// "$Id: Fl_Clock.H,v 1.5 1999/01/13 15:45:48 mike Exp $"
//
// Clock header file for the Fast Light Tool Kit (FLTK).
//
@@ -36,19 +36,17 @@
#define FL_ANALOG_CLOCK FL_SQUARE_CLOCK
#define FL_DIGITAL_CLOCK FL_SQUARE_CLOCK // nyi
-class Fl_Clock : public Fl_Widget {
+// a Fl_Clock_Output can be used to display a program-supplied time:
+
+class Fl_Clock_Output : public Fl_Widget {
int hour_, minute_, second_;
ulong value_;
void drawhands(Fl_Color,Fl_Color); // part of draw
protected:
void draw(int, int, int, int);
void draw();
- void _Fl_Clock();
- int handle(int);
public:
- Fl_Clock(int x,int y,int w,int h, const char *l = 0);
- Fl_Clock(uchar t,int x,int y,int w,int h, const char *l);
- ~Fl_Clock();
+ Fl_Clock_Output(int x,int y,int w,int h, const char *l = 0);
void value(ulong v); // set to this Unix time
void value(int,int,int); // set hour, minute, second
ulong value() const {return value_;}
@@ -57,8 +55,19 @@ public:
int second() const {return second_;}
};
+// a Fl_Clock displays the current time always by using a timeout:
+
+class Fl_Clock : public Fl_Clock_Output {
+ int handle(int);
+public:
+ void update();
+ Fl_Clock(int x,int y,int w,int h, const char *l = 0);
+ Fl_Clock(uchar t,int x,int y,int w,int h, const char *l);
+ ~Fl_Clock();
+};
+
#endif
//
-// End of "$Id: Fl_Clock.H,v 1.4 1999/01/07 19:16:52 mike Exp $".
+// End of "$Id: Fl_Clock.H,v 1.5 1999/01/13 15:45:48 mike Exp $".
//
diff --git a/fluid/Fl_Function_Type.cxx b/fluid/Fl_Function_Type.cxx
index 9dd1d1f53..023dc03ff 100644
--- a/fluid/Fl_Function_Type.cxx
+++ b/fluid/Fl_Function_Type.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Function_Type.cxx,v 1.11 1999/01/07 21:21:20 mike Exp $"
+// "$Id: Fl_Function_Type.cxx,v 1.12 1999/01/13 15:45:48 mike Exp $"
//
// C function type code for the Fast Light Tool Kit (FLTK).
//
@@ -211,14 +211,14 @@ void Fl_Function_Type::write_code1() {
if (name()[0] == '~')
constructor = 1;
else {
- size_t n = strlen(k);
- if (!strncmp(name(), k, n) && name()[n] == '(') constructor = 1;
+ size_t n = strlen(k);
+ if (!strncmp(name(), k, n) && name()[n] == '(') constructor = 1;
}
write_h(" ");
if (!constructor) {
- if (is_static) write_h("static ");
- write_h("%s ", t);
- write_c("%s ", t);
+ if (is_static) write_h("static ");
+ write_h("%s ", t);
+ write_c("%s ", t);
}
write_h("%s;\n", name());
write_c("%s::%s {\n", k, name());
@@ -697,5 +697,5 @@ void Fl_Class_Type::write_code2() {
}
//
-// End of "$Id: Fl_Function_Type.cxx,v 1.11 1999/01/07 21:21:20 mike Exp $".
+// End of "$Id: Fl_Function_Type.cxx,v 1.12 1999/01/13 15:45:48 mike Exp $".
//
diff --git a/src/Fl_Clock.cxx b/src/Fl_Clock.cxx
index ace13e0c8..91e9155a2 100644
--- a/src/Fl_Clock.cxx
+++ b/src/Fl_Clock.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Clock.cxx,v 1.4 1999/01/07 19:17:18 mike Exp $"
+// "$Id: Fl_Clock.cxx,v 1.5 1999/01/13 15:45:49 mike Exp $"
//
// Clock widget for the Fast Light Tool Kit (FLTK).
//
@@ -29,9 +29,6 @@
#include <math.h>
#include <time.h>
-// There really should be a way to make this display something other
-// than the current time...
-
// Original clock display written by Paul Haeberli at SGI.
// Modifications by Mark Overmars for Forms
// Further changes by Bill Spitzak for fltk
@@ -51,7 +48,7 @@ static void drawhand(double ang,const float v[][2],Fl_Color fill,Fl_Color line)
fl_pop_matrix();
}
-void Fl_Clock::drawhands(Fl_Color fill, Fl_Color line) {
+void Fl_Clock_Output::drawhands(Fl_Color fill, Fl_Color line) {
drawhand(-360*(hour()+minute()/60.0)/12, hourhand, fill, line);
drawhand(-360*(minute()+second()/60.0)/60, minhand, fill, line);
drawhand(-360*(second()/60.0), sechand, fill, line);
@@ -68,7 +65,7 @@ static void rect(double x, double y, double w, double h) {
fl_end_polygon();
}
-void Fl_Clock::draw(int x, int y, int w, int h) {
+void Fl_Clock_Output::draw(int x, int y, int w, int h) {
draw_box(box(), x, y, w, h, type()==FL_ROUND_CLOCK ? FL_GRAY : color());
fl_push_matrix();
fl_translate(x+w/2.0-.5, y+h/2.0-.5);
@@ -99,65 +96,75 @@ void Fl_Clock::draw(int x, int y, int w, int h) {
fl_pop_matrix();
}
-void Fl_Clock::draw() {
+void Fl_Clock_Output::draw() {
draw(x(), y(), w(), h());
draw_label();
}
-void Fl_Clock::value(int h, int m, int s) {
+void Fl_Clock_Output::value(int h, int m, int s) {
if (h!=hour_ || m!=minute_ || s!=second_) {
hour_ = h; minute_ = m; second_ = s;
- redraw();
+ damage(FL_DAMAGE_CHILD);
}
}
-void Fl_Clock::value(ulong v) {
+void Fl_Clock_Output::value(ulong v) {
struct tm *timeofday;
timeofday = localtime((const time_t *)&v);
value(timeofday->tm_hour, timeofday->tm_min, timeofday->tm_sec);
}
-static void tick(void *v) {
- ((Fl_Clock*)v)->value(time(0));
- Fl::add_timeout(1, tick, v);
-}
-
-void Fl_Clock::_Fl_Clock() {
+Fl_Clock_Output::Fl_Clock_Output(int x, int y, int w, int h, const char *l)
+: Fl_Widget(x, y, w, h, l) {
+ box(FL_UP_BOX);
selection_color(fl_gray_ramp(5));
align(FL_ALIGN_BOTTOM);
- value(time(0));
- //Fl::add_timeout(1, tick, this);
+ hour_ = 0;
+ minute_ = 0;
+ second_ = 0;
+ value_ = 0;
}
+////////////////////////////////////////////////////////////////
+
Fl_Clock::Fl_Clock(int x, int y, int w, int h, const char *l)
-: Fl_Widget(x, y, w, h, l) {
- box(FL_UP_BOX);
- _Fl_Clock();
-}
+ : Fl_Clock_Output(x, y, w, h, l) {}
Fl_Clock::Fl_Clock(uchar t, int x, int y, int w, int h, const char *l)
-: Fl_Widget(x, y, w, h, l) {
+ : Fl_Clock_Output(x, y, w, h, l) {
type(t);
box(t==FL_ROUND_CLOCK ? FL_NO_BOX : FL_UP_BOX);
- _Fl_Clock();
}
-Fl_Clock::~Fl_Clock() {
- Fl::remove_timeout(tick, this);
+#ifndef WIN32
+#include <sys/time.h>
+#endif
+
+static void tick(void *v) {
+ struct timeval t;
+ gettimeofday(&t, NULL);
+ ((Fl_Clock*)v)->value(t.tv_sec);
+ double delay = 1.0-t.tv_usec*.000001;
+ if (delay < .1 || delay > .9) delay = 1.0;
+ Fl::add_timeout(delay, tick, v);
}
int Fl_Clock::handle(int event) {
switch (event) {
+ case FL_SHOW:
+ tick(this);
+ break;
case FL_HIDE:
Fl::remove_timeout(tick, this);
break;
- case FL_SHOW:
- Fl::remove_timeout(tick, this);
- tick(this);
}
- return 0;
+ return Fl_Clock_Output::handle(event);
+}
+
+Fl_Clock::~Fl_Clock() {
+ Fl::remove_timeout(tick, this);
}
//
-// End of "$Id: Fl_Clock.cxx,v 1.4 1999/01/07 19:17:18 mike Exp $".
+// End of "$Id: Fl_Clock.cxx,v 1.5 1999/01/13 15:45:49 mike Exp $".
//
diff --git a/src/Fl_Menu.cxx b/src/Fl_Menu.cxx
index 1ecfaa7bc..aa93d015e 100644
--- a/src/Fl_Menu.cxx
+++ b/src/Fl_Menu.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Menu.cxx,v 1.11 1999/01/07 19:17:22 mike Exp $"
+// "$Id: Fl_Menu.cxx,v 1.12 1999/01/13 15:45:49 mike Exp $"
//
// Menu code for the Fast Light Tool Kit (FLTK).
//
@@ -138,7 +138,7 @@ void Fl_Menu_Item::draw(int x, int y, int w, int h, const Fl_Menu_* m,
b = m ? m->box() : FL_UP_BOX;
} else {
r = (Fl_Color)(FL_COLOR_CUBE-1); // white
- l.color = contrast((Fl_Color)labelcolor_, r);
+ l.color = contrast((Fl_Color)labelcolor_, r);
}
} else {
l.color = contrast((Fl_Color)labelcolor_, r);
@@ -703,5 +703,5 @@ const Fl_Menu_Item* Fl_Menu_Item::test_shortcut() const {
}
//
-// End of "$Id: Fl_Menu.cxx,v 1.11 1999/01/07 19:17:22 mike Exp $".
+// End of "$Id: Fl_Menu.cxx,v 1.12 1999/01/13 15:45:49 mike Exp $".
//
diff --git a/src/Fl_Menu_Bar.cxx b/src/Fl_Menu_Bar.cxx
index 7d022681b..b01e8cabb 100644
--- a/src/Fl_Menu_Bar.cxx
+++ b/src/Fl_Menu_Bar.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Menu_Bar.cxx,v 1.5 1999/01/07 19:17:22 mike Exp $"
+// "$Id: Fl_Menu_Bar.cxx,v 1.6 1999/01/13 15:45:49 mike Exp $"
//
// Menu bar widget for the Fast Light Tool Kit (FLTK).
//
@@ -40,6 +40,9 @@ void Fl_Menu_Bar::draw() {
int Fl_Menu_Bar::handle(int event) {
const Fl_Menu_Item* v;
if (menu() && menu()->text) switch (event) {
+ case FL_ENTER:
+ case FL_LEAVE:
+ return 1;
case FL_PUSH:
v = 0;
J1:
@@ -57,5 +60,5 @@ int Fl_Menu_Bar::handle(int event) {
}
//
-// End of "$Id: Fl_Menu_Bar.cxx,v 1.5 1999/01/07 19:17:22 mike Exp $".
+// End of "$Id: Fl_Menu_Bar.cxx,v 1.6 1999/01/13 15:45:49 mike Exp $".
//
diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx
index 9119ba59b..54097cddb 100644
--- a/src/Fl_Window.cxx
+++ b/src/Fl_Window.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Window.cxx,v 1.5 1999/01/07 19:17:29 mike Exp $"
+// "$Id: Fl_Window.cxx,v 1.6 1999/01/13 15:45:49 mike Exp $"
//
// Window widget class for the Fast Light Tool Kit (FLTK).
//
@@ -59,7 +59,7 @@ Fl_Window::Fl_Window(int W, int H, const char *l)
Fl_Window *Fl_Widget::window() const {
for (Fl_Widget *o = parent(); o; o = o->parent())
- if (o->type()>=FL_WINDOW) return (Fl_Window*)o;
+ if (o->type() >= FL_WINDOW) return (Fl_Window*)o;
return 0;
}
@@ -102,5 +102,5 @@ void Fl_Window::default_callback(Fl_Window* window, void* v) {
}
//
-// End of "$Id: Fl_Window.cxx,v 1.5 1999/01/07 19:17:29 mike Exp $".
+// End of "$Id: Fl_Window.cxx,v 1.6 1999/01/13 15:45:49 mike Exp $".
//
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index ecaecddc6..c9e34e5ab 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_x.cxx,v 1.20 1999/01/07 19:17:33 mike Exp $"
+// "$Id: Fl_x.cxx,v 1.21 1999/01/13 15:45:50 mike Exp $"
//
// X specific code for the Fast Light Tool Kit (FLTK).
//
@@ -652,15 +652,6 @@ void Fl_X::make_xid(Fl_Window* w, XVisualInfo *visual, Colormap colormap)
(unsigned char *)buffer, p-buffer-1);
}
- // Set the icon pixmap as needed:
- if (w->icon()) {
- XWMHints hints;
-
- hints.icon_pixmap = (Pixmap)w->icon();
- hints.flags = IconPixmapHint;
- XSetWMHints(fl_display, x->xid, &hints);
- }
-
if (w->non_modal() && x->next && !fl_disable_transient_for) {
// find some other window to be "transient for":
Fl_Window* w = x->next->w;
@@ -668,13 +659,18 @@ void Fl_X::make_xid(Fl_Window* w, XVisualInfo *visual, Colormap colormap)
XSetTransientForHint(fl_display, x->xid, fl_xid(w));
}
+ XWMHints hints;
+ hints.flags = 0;
if (fl_show_iconic) {
- XWMHints hints;
hints.flags = StateHint;
- hints.initial_state = 3;
- XSetWMHints(fl_display, x->xid, &hints);
+ hints.initial_state = IconicState;
fl_show_iconic = 0;
}
+ if (w->icon()) {
+ hints.icon_pixmap = (Pixmap)w->icon();
+ hints.flags |= IconPixmapHint;
+ }
+ if (hints.flags) XSetWMHints(fl_display, x->xid, &hints);
}
XMapWindow(fl_display, x->xid);
@@ -823,5 +819,5 @@ void Fl_Window::make_current() {
#endif
//
-// End of "$Id: Fl_x.cxx,v 1.20 1999/01/07 19:17:33 mike Exp $".
+// End of "$Id: Fl_x.cxx,v 1.21 1999/01/13 15:45:50 mike Exp $".
//
diff --git a/test/mandelbrot.cxx b/test/mandelbrot.cxx
index e089fe23c..2ff27515b 100644
--- a/test/mandelbrot.cxx
+++ b/test/mandelbrot.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: mandelbrot.cxx,v 1.7 1999/01/07 19:17:57 mike Exp $"
+// "$Id: mandelbrot.cxx,v 1.8 1999/01/13 15:45:50 mike Exp $"
//
// Mandelbrot set demo for the Fast Light Tool Kit (FLTK).
//
@@ -69,7 +69,7 @@ void Drawing_Area::draw() {
}
int Drawing_Area::idle() {
- if (!window()->shown() || !window()->visible()) return 0;
+ if (!window()->visible()) return 0;
if (drawn < nextline) {
window()->make_current();
int yy = drawn+y()+4;
@@ -197,5 +197,5 @@ void Drawing_Area::resize(int X,int Y,int W,int H) {
}
//
-// End of "$Id: mandelbrot.cxx,v 1.7 1999/01/07 19:17:57 mike Exp $".
+// End of "$Id: mandelbrot.cxx,v 1.8 1999/01/13 15:45:50 mike Exp $".
//
diff --git a/test/shape.cxx b/test/shape.cxx
index 2797b82f9..8335a2c17 100644
--- a/test/shape.cxx
+++ b/test/shape.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: shape.cxx,v 1.4 1999/01/07 19:18:00 mike Exp $"
+// "$Id: shape.cxx,v 1.5 1999/01/13 15:45:50 mike Exp $"
//
// Tiny OpenGL demo program for the Fast Light Tool Kit (FLTK).
//
@@ -106,13 +106,10 @@ int main(int argc, char **argv) {
window.end();
window.show(argc,argv);
-// in the X version you must show() all Fl_Window's in top/down order
-// other systems may not require this, but it will be harmless:
- //sw.show();
return Fl::run();
}
//
-// End of "$Id: shape.cxx,v 1.4 1999/01/07 19:18:00 mike Exp $".
+// End of "$Id: shape.cxx,v 1.5 1999/01/13 15:45:50 mike Exp $".
//