Author: ianmacarthur
Date: 2012-03-23 06:52:24 -0700 (Fri, 23 Mar 2012)
New Revision: 9298
Log:
For some reason, the colbrowser demo seems to have fallen out of the test1 
folder.

This puts it back in, for testing.

And, FWIW, it builds OK.



Added:
   branches/branch-3.0/test1/colbrowser.cxx
Modified:
   branches/branch-3.0/test1/Makefile

Modified: branches/branch-3.0/test1/Makefile
===================================================================
--- branches/branch-3.0/test1/Makefile  2012-03-23 13:07:26 UTC (rev 9297)
+++ branches/branch-3.0/test1/Makefile  2012-03-23 13:52:24 UTC (rev 9298)
@@ -40,6 +40,7 @@
        buttons.cxx \
        checkers.cxx \
        clock.cxx \
+       colbrowser.cxx \
        color_chooser.cxx \
        cube.cxx \
        CubeView.cxx \
@@ -91,7 +92,6 @@
        unittests.cxx \
        utf8.cxx
 
-#      colbrowser.cxx \
 #      shapedwindow.cxx \
 #      unittest_about.cxx \
 #      unittest_circles.cxx \
@@ -117,6 +117,7 @@
        buttons$(EXEEXT) \
        checkers$(EXEEXT) \
        clock$(EXEEXT) \
+       colbrowser$(EXEEXT) \
        color_chooser$(EXEEXT) \
        cube$(EXEEXT) \
        CubeView$(EXEEXT) \
@@ -174,7 +175,6 @@
        utf8$(EXEEXT) \
        valuators$(EXEEXT)
 
-#      colbrowser$(EXEEXT) \
 #      shapedwindow$(EXEEXT) \
 
 GLALL =

Added: branches/branch-3.0/test1/colbrowser.cxx
===================================================================
--- branches/branch-3.0/test1/colbrowser.cxx                            (rev 0)
+++ branches/branch-3.0/test1/colbrowser.cxx    2012-03-23 13:52:24 UTC (rev 
9298)
@@ -0,0 +1,340 @@
+//
+// "$Id$"
+//
+// X Color Browser demo program for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Value_Slider.H>
+#include <FL/Fl_Hold_Browser.H>
+#include <FL/Fl_Box.H>
+
+#include <FL/fl_ask.H>
+#include <FL/filename.H>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+
+// some constants
+
+#define MAX_RGB 3000
+
+#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;
+static Fl_Hold_Browser *colbr;
+static Fl_Value_Slider *rs, *gs, *bs;
+
+static char dbname[FL_PATH_MAX];
+
+static void create_form_cl(void);
+static int load_browser(char *);
+
+typedef struct { int r, g, b; } RGBdb;
+
+static RGBdb rgbdb[MAX_RGB];
+
+
+int main(int argc, char *argv[])
+{
+  Fl::args(argc, argv);
+  
+  create_form_cl();
+  
+#ifdef USING_XCODE
+  // 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();
+}
+
+
+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)
+{
+  int r = ((Fl_Browser *)ob)->value();
+  
+  if (r <= 0)
+    return;
+  set_entry(r - 1);
+}
+
+
+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;
+  
+  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)
+{
+  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")))
+#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);
+    }
+  }
+  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;
+    
+#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))));
+#else
+    diff = unsigned(3.0 * (diffr *diffr) +
+                    5.9 * (diffg *diffg) +
+                    1.1 * (diffb *diffb));
+#endif
+    
+    if (mindiff > diff)
+    {
+      mindiff = diff;
+      j = i;
+    }
+  }
+  
+  return j;
+}
+
+
+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);
+}
+
+
+/* change database */
+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);
+}
+
+
+static void done_cb(Fl_Widget *, long)
+{
+  exit(0);
+}
+
+
+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);
+}
+
+//
+// End of "$Id$".
+//


Property changes on: branches/branch-3.0/test1/colbrowser.cxx
___________________________________________________________________
Name: svn:keywords
   + author date id revision
Name: svn:eol-style
   + native

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to