diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2011-01-01 21:06:56 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2011-01-01 21:06:56 +0000 |
| commit | 5f2aa6ca9c0f3054a0dfa061d9e0662f421f8862 (patch) | |
| tree | 56209bed86869f89c0831be418db09b813db4da6 /test | |
| parent | 4be4baed6b0a1775817fcaf6c2673a36fc4a6e37 (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.cxx | 460 |
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); } // |
