summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2011-01-01 21:06:56 +0000
committerMatthias Melcher <fltk@matthiasm.com>2011-01-01 21:06:56 +0000
commit5f2aa6ca9c0f3054a0dfa061d9e0662f421f8862 (patch)
tree56209bed86869f89c0831be418db09b813db4da6 /test
parent4be4baed6b0a1775817fcaf6c2673a36fc4a6e37 (diff)
Change colbrowser to btter conform to FLTK coding standards. For OS X bundle format, move the RGB file into the bundel.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8166 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'test')
-rw-r--r--test/colbrowser.cxx460
1 files changed, 234 insertions, 226 deletions
diff --git a/test/colbrowser.cxx b/test/colbrowser.cxx
index 2f9fa617a..8d172c86b 100644
--- a/test/colbrowser.cxx
+++ b/test/colbrowser.cxx
@@ -25,6 +25,7 @@
// http://www.fltk.org/str.php
//
+
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Button.H>
@@ -39,6 +40,7 @@
#include <stdio.h>
#include <string.h>
+
// some constants
#define MAX_RGB 3000
@@ -46,6 +48,7 @@
#define FL_FREE_COL4 ((Fl_Color)(FL_FREE_COLOR+3))
#define FL_INDIANRED ((Fl_Color)(164))
+
static Fl_Double_Window *cl;
static Fl_Box *rescol;
static Fl_Button *dbobj;
@@ -61,279 +64,284 @@ typedef struct { int r, g, b; } RGBdb;
static RGBdb rgbdb[MAX_RGB];
-int
-main(int argc, char *argv[])
-{
- create_form_cl();
+int main(int argc, char *argv[])
+{
+ Fl::args(argc, argv);
+
+ create_form_cl();
+
#ifdef USING_XCODE
- strcpy(dbname, "../../../../../../../test/rgb.txt");
+ // Xcode apps do not set the current directory
+ strcpy(dbname, argv[0]);
+ char *slash = strrchr(dbname, '/');
+ if (slash)
+ strcpy(slash, "/../Resources/rgb.txt");
#else
strcpy(dbname, "rgb.txt");
#endif
-
- if (load_browser(dbname))
- dbobj->label(dbname);
- else
- dbobj->label("None");
- dbobj->redraw();
-
- cl->size_range(cl->w(),cl->h(),2*cl->w(),2*cl->h());
-
- cl->label("RGB Browser");
- cl->free_position();
- cl->show(argc,argv);
-
- return Fl::run();
+
+ if (load_browser(dbname))
+ dbobj->label(dbname);
+ else
+ dbobj->label("None");
+ dbobj->redraw();
+
+ cl->size_range(cl->w(),cl->h(),2*cl->w(),2*cl->h());
+
+ cl->label("RGB Browser");
+ cl->free_position();
+ cl->show(argc,argv);
+
+ return Fl::run();
}
-static void
-set_entry(int i)
-{
- RGBdb *db = rgbdb + i;
- Fl::set_color(FL_FREE_COL4, db->r, db->g, db->b);
- rs->value(db->r);
- gs->value(db->g);
- bs->value(db->b);
- rescol->redraw();
-}
-static void
-br_cb(Fl_Widget *ob, long)
+static void set_entry(int i)
{
- int r = ((Fl_Browser *)ob)->value();
-
- if (r <= 0)
- return;
- set_entry(r - 1);
+ RGBdb *db = rgbdb + i;
+ Fl::set_color(FL_FREE_COL4, db->r, db->g, db->b);
+ rs->value(db->r);
+ gs->value(db->g);
+ bs->value(db->b);
+ rescol->redraw();
}
-static int
-read_entry(FILE * fp, int *r, int *g, int *b, char *name)
-{
- int n;
- char buf[512], *p;
-
- if (!fgets(buf, sizeof(buf) - 1, fp))
- return 0;
- if(buf[0] == '!') {
- if (fgets(buf,sizeof(buf)-1,fp)==0) {
- /* ignore */
- }
- }
-
- if(sscanf(buf, " %d %d %d %n", r, g, b, &n) < 3)
- return 0;
+static void br_cb(Fl_Widget *ob, long)
+{
+ int r = ((Fl_Browser *)ob)->value();
+
+ if (r <= 0)
+ return;
+ set_entry(r - 1);
+}
- p = buf + n;
- /* squeeze out all spaces */
- while (*p)
- {
- if (*p != ' ' && *p != '\n')
- *name++ = *p;
- p++;
+static int read_entry(FILE * fp, int *r, int *g, int *b, char *name)
+{
+ int n;
+ char buf[512], *p;
+
+ if (!fgets(buf, sizeof(buf) - 1, fp))
+ return 0;
+
+ if(buf[0] == '!') {
+ if (fgets(buf,sizeof(buf)-1,fp)==0) {
+ /* ignore */
}
- *name = 0;
-
- return (feof(fp) || ferror(fp)) ? 0 : 1;
+ }
+
+ if(sscanf(buf, " %d %d %d %n", r, g, b, &n) < 3)
+ return 0;
+
+ p = buf + n;
+
+ /* squeeze out all spaces */
+ while (*p)
+ {
+ if (*p != ' ' && *p != '\n')
+ *name++ = *p;
+ p++;
+ }
+ *name = 0;
+
+ return (feof(fp) || ferror(fp)) ? 0 : 1;
}
-static int
-load_browser(char *fname)
+static int load_browser(char *fname)
{
- FILE *fp;
- RGBdb *db = rgbdb, *dbs = db + MAX_RGB;
- int r, g, b, lr = -1 , lg = -1, lb = -1;
- char name[256], buf[256];
+ FILE *fp;
+ RGBdb *db = rgbdb, *dbs = db + MAX_RGB;
+ int r, g, b, lr = -1 , lg = -1, lb = -1;
+ char name[256], buf[256];
#ifdef __EMX__
- if (!(fp = fl_fopen(__XOS2RedirRoot(fname), "r")))
+ if (!(fp = fl_fopen(__XOS2RedirRoot(fname), "r")))
#else
if (!(fp = fl_fopen(fname, "r")))
#endif
{
- fl_alert("%s\n%s\n%s","Load", fname, "Can't open");
- return 0;
- }
-
- /* read the items */
-
- for (; db < dbs && read_entry(fp, &r, &g, &b, name);)
- {
- db->r = r;
- db->g = g;
- db->b = b;
-
- /* unique the entries on the fly */
- if (lr != r || lg != g || lb != b)
- {
- db++;
- lr = r;
- lg = g;
- lb = b;
- sprintf(buf, "(%3d %3d %3d) %s", r, g, b, name);
- colbr->add(buf);
- }
+ fl_alert("%s\n%s\n%s","Load", fname, "Can't open");
+ return 0;
}
- fclose(fp);
-
- if (db < dbs)
- db->r = 1000; /* sentinel */
- else
+
+ /* read the items */
+
+ for (; db < dbs && read_entry(fp, &r, &g, &b, name);)
+ {
+ db->r = r;
+ db->g = g;
+ db->b = b;
+
+ /* unique the entries on the fly */
+ if (lr != r || lg != g || lb != b)
{
- db--;
- db->r = 1000;
+ db++;
+ lr = r;
+ lg = g;
+ lb = b;
+ sprintf(buf, "(%3d %3d %3d) %s", r, g, b, name);
+ colbr->add(buf);
}
-
- colbr->topline(1);
- colbr->select(1,1);
- set_entry(0);
-
- return 1;
+ }
+ fclose(fp);
+
+ if (db < dbs)
+ db->r = 1000; /* sentinel */
+ else
+ {
+ db--;
+ db->r = 1000;
+ }
+
+ colbr->topline(1);
+ colbr->select(1,1);
+ set_entry(0);
+
+ return 1;
}
-static int
-search_entry(int r, int g, int b)
-{
- register RGBdb *db = rgbdb;
- int i, j, diffr, diffg, diffb;
- unsigned int diff, mindiff;
-
- mindiff = (unsigned int)~0;
- for (i = j = 0; db->r < 256; db++, i++)
- {
- diffr = r - db->r;
- diffg = g - db->g;
- diffb = b - db->b;
+static int search_entry(int r, int g, int b)
+{
+ register RGBdb *db = rgbdb;
+ int i, j, diffr, diffg, diffb;
+ unsigned int diff, mindiff;
+
+ mindiff = (unsigned int)~0;
+ for (i = j = 0; db->r < 256; db++, i++)
+ {
+ diffr = r - db->r;
+ diffg = g - db->g;
+ diffb = b - db->b;
+
#ifdef FL_LINEAR
- diff = unsigned(3.0 * (FL_abs(r - db->r)) +
- (5.9 * FL_abs(g - db->g)) +
- (1.1 * (FL_abs(b - db->b)));
+ diff = unsigned(3.0 * (FL_abs(r - db->r)) +
+ (5.9 * FL_abs(g - db->g)) +
+ (1.1 * (FL_abs(b - db->b))));
#else
- diff = unsigned(3.0 * (diffr *diffr) +
- 5.9 * (diffg *diffg) +
- 1.1 * (diffb *diffb));
+ diff = unsigned(3.0 * (diffr *diffr) +
+ 5.9 * (diffg *diffg) +
+ 1.1 * (diffb *diffb));
#endif
-
- if (mindiff > diff)
- {
- mindiff = diff;
- j = i;
- }
+
+ if (mindiff > diff)
+ {
+ mindiff = diff;
+ j = i;
}
-
- return j;
+ }
+
+ return j;
}
-static void
-search_rgb(Fl_Widget *, long)
+
+static void search_rgb(Fl_Widget *, long)
{
- int r, g, b, i;
- int top = colbr->topline();
-
- r = int(rs->value());
- g = int(gs->value());
- b = int(bs->value());
-
- // fl_freeze_form(cl);
- Fl::set_color(FL_FREE_COL4, r, g, b);
- rescol->redraw();
- i = search_entry(r, g, b);
- /* change topline only if necessary */
- if(i < top || i > (top+15))
- colbr->topline(i-8);
- colbr->select(i+1, 1);
- // fl_unfreeze_form(cl);
+ int r, g, b, i;
+ int top = colbr->topline();
+
+ r = int(rs->value());
+ g = int(gs->value());
+ b = int(bs->value());
+
+ // fl_freeze_form(cl);
+ Fl::set_color(FL_FREE_COL4, r, g, b);
+ rescol->redraw();
+ i = search_entry(r, g, b);
+ /* change topline only if necessary */
+ if(i < top || i > (top+15))
+ colbr->topline(i-8);
+ colbr->select(i+1, 1);
+ // fl_unfreeze_form(cl);
}
+
/* change database */
-static void
-db_cb(Fl_Widget * ob, long)
+static void db_cb(Fl_Widget * ob, long)
{
- const char *p = fl_input("Enter New Database Name", dbname);
- char buf[512];
-
- if (!p || strcmp(p, dbname) == 0)
- return;
-
- strcpy(buf, p);
- if (load_browser(buf))
- strcpy(dbname, buf);
- else
- ob->label(dbname);
+ const char *p = fl_input("Enter New Database Name", dbname);
+ char buf[512];
+
+ if (!p || strcmp(p, dbname) == 0)
+ return;
+
+ strcpy(buf, p);
+ if (load_browser(buf))
+ strcpy(dbname, buf);
+ else
+ ob->label(dbname);
}
-static void
-done_cb(Fl_Widget *, long)
+
+static void done_cb(Fl_Widget *, long)
{
- exit(0);
+ exit(0);
}
-static void
-create_form_cl(void)
+
+static void create_form_cl(void)
{
- if (cl)
- return;
-
- cl = new Fl_Double_Window(400,385);
- cl->box(FL_UP_BOX);
- cl->color(FL_INDIANRED, FL_GRAY);
-
- Fl_Box *title = new Fl_Box(40, 10, 300, 30, "Color Browser");
- title->box(FL_NO_BOX);
- title->labelcolor(FL_RED);
- title->labelsize(32);
- title->labelfont(FL_HELVETICA_BOLD);
- title->labeltype(FL_SHADOW_LABEL);
-
- dbobj = new Fl_Button(40, 50, 300, 25, "");
- dbobj->type(FL_NORMAL_BUTTON);
- dbobj->box(FL_BORDER_BOX);
- dbobj->color(FL_INDIANRED,FL_INDIANRED);
- dbobj->callback(db_cb, 0);
-
- colbr = new Fl_Hold_Browser(10, 90, 280, 240, "");
- colbr->textfont(FL_COURIER);
- colbr->callback(br_cb, 0);
- colbr->box(FL_DOWN_BOX);
-
- rescol = new Fl_Box(300, 90, 90, 35, "");
- rescol->color(FL_FREE_COL4, FL_FREE_COL4);
- rescol->box(FL_BORDER_BOX);
-
- rs = new Fl_Value_Slider(300, 130, 30, 200, "");
- rs->type(FL_VERT_FILL_SLIDER);
- rs->color(FL_INDIANRED, FL_RED);
- rs->bounds(0, 255);
- rs->precision(0);
- rs->callback(search_rgb, 0);
- rs->when(FL_WHEN_RELEASE);
-
- gs = new Fl_Value_Slider(330, 130, 30, 200, "");
- gs->type(FL_VERT_FILL_SLIDER);
- gs->color(FL_INDIANRED, FL_GREEN);
- gs->bounds(0, 255);
- gs->precision(0);
- gs->callback(search_rgb, 1);
- gs->when(FL_WHEN_RELEASE);
-
- bs = new Fl_Value_Slider(360, 130, 30, 200, "");
- bs->type(FL_VERT_FILL_SLIDER);
- bs->color(FL_INDIANRED, FL_BLUE);
- bs->bounds(0, 255);
- bs->precision(0);
- bs->callback(search_rgb, 2);
- bs->when(FL_WHEN_RELEASE);
-
- Fl_Button *done = new Fl_Button(160, 345, 80, 30, "Done");
- done->type(FL_NORMAL_BUTTON);
- done->callback(done_cb, 0);
-
- cl->end();
- cl->resizable(cl);
+ if (cl)
+ return;
+
+ cl = new Fl_Double_Window(400,385);
+ cl->box(FL_UP_BOX);
+ cl->color(FL_INDIANRED, FL_GRAY);
+
+ Fl_Box *title = new Fl_Box(40, 10, 300, 30, "Color Browser");
+ title->box(FL_NO_BOX);
+ title->labelcolor(FL_RED);
+ title->labelsize(32);
+ title->labelfont(FL_HELVETICA_BOLD);
+ title->labeltype(FL_SHADOW_LABEL);
+
+ dbobj = new Fl_Button(40, 50, 300, 25, "");
+ dbobj->type(FL_NORMAL_BUTTON);
+ dbobj->box(FL_BORDER_BOX);
+ dbobj->color(FL_INDIANRED,FL_INDIANRED);
+ dbobj->callback(db_cb, 0);
+
+ colbr = new Fl_Hold_Browser(10, 90, 280, 240, "");
+ colbr->textfont(FL_COURIER);
+ colbr->callback(br_cb, 0);
+ colbr->box(FL_DOWN_BOX);
+
+ rescol = new Fl_Box(300, 90, 90, 35, "");
+ rescol->color(FL_FREE_COL4, FL_FREE_COL4);
+ rescol->box(FL_BORDER_BOX);
+
+ rs = new Fl_Value_Slider(300, 130, 30, 200, "");
+ rs->type(FL_VERT_FILL_SLIDER);
+ rs->color(FL_INDIANRED, FL_RED);
+ rs->bounds(0, 255);
+ rs->precision(0);
+ rs->callback(search_rgb, 0);
+ rs->when(FL_WHEN_RELEASE);
+
+ gs = new Fl_Value_Slider(330, 130, 30, 200, "");
+ gs->type(FL_VERT_FILL_SLIDER);
+ gs->color(FL_INDIANRED, FL_GREEN);
+ gs->bounds(0, 255);
+ gs->precision(0);
+ gs->callback(search_rgb, 1);
+ gs->when(FL_WHEN_RELEASE);
+
+ bs = new Fl_Value_Slider(360, 130, 30, 200, "");
+ bs->type(FL_VERT_FILL_SLIDER);
+ bs->color(FL_INDIANRED, FL_BLUE);
+ bs->bounds(0, 255);
+ bs->precision(0);
+ bs->callback(search_rgb, 2);
+ bs->when(FL_WHEN_RELEASE);
+
+ Fl_Button *done = new Fl_Button(160, 345, 80, 30, "Done");
+ done->type(FL_NORMAL_BUTTON);
+ done->callback(done_cb, 0);
+
+ cl->end();
+ cl->resizable(cl);
}
//