symbian-qemu-0.9.1-12/python-2.6.1/Tools/pynche/README
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 Pynche - The PYthonically Natural Color and Hue Editor
       
     2 
       
     3 Contact: Barry A. Warsaw
       
     4 Email:   bwarsaw@python.org
       
     5 Version: 1.3
       
     6 
       
     7 Introduction
       
     8 
       
     9     Pynche is a color editor based largely on a similar program that I
       
    10     originally wrote back in 1987 for the Sunview window system.  That
       
    11     editor was called ICE, the Interactive Color Editor.  I'd always
       
    12     wanted to port this program to X but didn't feel like hacking X
       
    13     and C code to do it.  Fast forward many years, to where Python +
       
    14     Tkinter provides such a nice programming environment, with enough
       
    15     power, that I finally buckled down and re-implemented it.  I
       
    16     changed the name because these days, too many other systems have
       
    17     the acronym `ICE'.
       
    18 
       
    19     Pynche should work with any variant of Python after 1.5.2
       
    20     (e.g. 2.0.1 and 2.1.1), using Tk 8.0.x.  It's been tested on
       
    21     Solaris 2.6, Windows NT 4, and various Linux distros.  You'll want
       
    22     to be sure to have at least Tk 8.0.3 for Windows.  Also, Pynche is
       
    23     very colormap intensive, so it doesn't work very well on 8-bit
       
    24     graphics cards; 24bit+ graphics cards are so cheap these days,
       
    25     I'll probably never "fix" that.
       
    26 
       
    27     Pynche must find a text database of colors names in order to
       
    28     provide `nearest' color matching.  Pynche is distributed with an
       
    29     rgb.txt file from the X11R6.4 distribution for this reason, along
       
    30     with other "Web related" database (see below).  You can use a
       
    31     different file with the -d option.  The file xlicense.txt contains
       
    32     the license only for rgb.txt and both files are in the X/
       
    33     subdirectory.
       
    34 
       
    35     Pynche is pronounced: Pin'-chee
       
    36 
       
    37 
       
    38 Running Standalone
       
    39 
       
    40     On Unix, start it by running the `pynche' script.  On Windows, run
       
    41     pynche.pyw to inhibit the console window.  When run from the
       
    42     command line, the following options are recognized:
       
    43 
       
    44     --database file
       
    45     -d file
       
    46         Alternate location of the color database file.  Without this
       
    47         option, the first valid file found will be used (see below).
       
    48 
       
    49     --initfile file
       
    50     -i file
       
    51         Alternate location of the persistent initialization file.  See 
       
    52         the section on Persistency below.
       
    53 
       
    54     --ignore
       
    55     -X
       
    56         Ignore the persistent initialization file when starting up.
       
    57         Pynche will still write the current option settings to the
       
    58         persistent init file when it quits.
       
    59 
       
    60     --help
       
    61     -h
       
    62         Print the help message.
       
    63 
       
    64     initialcolor
       
    65         a Tk color name or #rrggbb color spec to be used as the
       
    66         initially selected color.  This overrides any color saved in
       
    67         the persistent init file.  Since `#' needs to be escaped in
       
    68         many shells, it is optional in the spec (e.g. #45dd1f is the
       
    69         same as 45dd1f).
       
    70 
       
    71 
       
    72 Running as a Modal Dialog
       
    73 
       
    74     Pynche can be run as a modal dialog, inside another application,
       
    75     say as a general color chooser.  In fact, Grail 0.6 uses Pynche
       
    76     and a future version of IDLE may as well.  Pynche supports the API
       
    77     implemented by the Tkinter standard tkColorChooser module, with a
       
    78     few changes as described below.  By importing pyColorChooser from
       
    79     the Pynche package, you can run
       
    80 
       
    81         pyColorChooser.askcolor()
       
    82 
       
    83     which will popup Pynche as a modal dialog, and return the selected 
       
    84     color.
       
    85 
       
    86     There are some UI differences when running as a modal
       
    87     vs. standalone.  When running as a modal, there is no "Quit" menu
       
    88     item under the "File" menu.  Instead there are "Okay" and "Cancel"
       
    89     buttons.
       
    90 
       
    91     When "Okay" is hit, askcolor() returns the tuple
       
    92 
       
    93         ((r, g, b), "name")
       
    94 
       
    95     where r, g, and b are red, green, and blue color values
       
    96     respectively (in the range 0 to 255).  "name" will be a color name
       
    97     from the color database if there is an exact match, otherwise it
       
    98     will be an X11 color spec of the form "#rrggbb".  Note that this
       
    99     is different than tkColorChooser, which doesn't know anything
       
   100     about color names.
       
   101 
       
   102     askcolor() supports the following optional keyword arguments:
       
   103 
       
   104         color
       
   105             the color to set as the initial selected color
       
   106 
       
   107         master[*]
       
   108             the master window to use as the parent of the modal
       
   109             dialog.  Without this argument, pyColorChooser will create 
       
   110             its own Tkinter.Tk instance as the master.  This may not
       
   111             be what you want.
       
   112 
       
   113         databasefile
       
   114             similar to the --database option, the value must be a
       
   115             file name
       
   116 
       
   117         initfile[*]
       
   118             similar to the --initfile option, the value must be a
       
   119             file name
       
   120 
       
   121         ignore[*]
       
   122             similar to the --ignore flag, the value is a boolean
       
   123 
       
   124         wantspec
       
   125             When this is true, the "name" field in the return tuple
       
   126             will always be a color spec of the form "#rrggbb".  It
       
   127             will not return a color name even if there is a match;
       
   128             this is so pyColorChooser can exactly match the API of
       
   129             tkColorChooser.
       
   130 
       
   131         [*] these arguments must be specified the first time
       
   132         askcolor() is used and cannot be changed on subsequent calls.
       
   133 
       
   134 
       
   135 The Colorstrip Window
       
   136 
       
   137     The top part of the main Pynche window contains the "variation
       
   138     strips".  Each strip contains a number of "color chips".  The
       
   139     strips always indicate the currently selected color by a highlight
       
   140     rectangle around the selected color chip, with an arrow pointing
       
   141     to the chip.  Each arrow has an associated number giving you the
       
   142     color value along the variation's axis.  Each variation strip
       
   143     shows you the colors that are reachable from the selected color by
       
   144     varying just one axis of the color solid.
       
   145 
       
   146     For example, when the selected color is (in Red/Green/Blue
       
   147     notation) 127/127/127, the Red Variations strip shows you every
       
   148     color in the range 0/127/127 to 255/127/127.  Similarly for the
       
   149     green and blue axes.  You can select any color by clicking on its
       
   150     chip.  This will update the highlight rectangle and the arrow, as
       
   151     well as other displays in Pynche.
       
   152 
       
   153     Click on "Update while dragging" if you want Pynche to update the
       
   154     selected color while you drag along any variation strip (this will
       
   155     be a bit slower).  Click on "Hexadecimal" to display the arrow
       
   156     numbers in hex.
       
   157 
       
   158     There are also two shortcut buttons in this window, which
       
   159     auto-select Black (0/0/0) and White (255/255/255).
       
   160 
       
   161 
       
   162 The Proof Window
       
   163 
       
   164     In the lower left corner of the main window you see two larger
       
   165     color chips.  The Selected chip shows you a larger version of the
       
   166     color selected in the variation strips, along with its X11 color
       
   167     specification.  The Nearest chip shows you the closest color in
       
   168     the X11 database to the selected color, giving its X11 color
       
   169     specification, and below that, its X11 color name.  When the
       
   170     Selected chip color exactly matches the Nearest chip color, you
       
   171     will see the color name appear below the color specification for
       
   172     the Selected chip.
       
   173     
       
   174     Clicking on the Nearest color chip selects that color.  Color
       
   175     distance is calculated in the 3D space of the RGB color solid and
       
   176     if more than one color name is the same distance from the selected
       
   177     color, the first one found will be chosen.
       
   178 
       
   179     Note that there may be more than one X11 color name for the same
       
   180     RGB value.  In that case, the first one found in the text database
       
   181     is designated the "primary" name, and this is shown under the
       
   182     Nearest chip.  The other names are "aliases" and they are visible
       
   183     in the Color List Window (see below).
       
   184 
       
   185     Both the color specifications and color names are selectable for
       
   186     copying and pasting into another window.
       
   187 
       
   188 
       
   189 The Type-in Window
       
   190 
       
   191     At the lower right of the main window are three entry fields.
       
   192     Here you can type numeric values for any of the three color axes.
       
   193     Legal values are between 0 and 255, and these fields do not allow
       
   194     you to enter illegal values.  You must hit Enter or Tab to select
       
   195     the new color.
       
   196 
       
   197     Click on "Update while typing" if you want Pynche to select the
       
   198     color on every keystroke (well, every one that produces a legal
       
   199     value!)  Click on "Hexadecimal" to display and enter color values
       
   200     in hex.
       
   201 
       
   202 
       
   203 Other Views
       
   204 
       
   205     There are three secondary windows which are not displayed by
       
   206     default.  You can bring these up via the "View" menu on the main
       
   207     Pynche window.
       
   208 
       
   209 
       
   210 The Text Window
       
   211 
       
   212     The "Text Window" allows you to see what effects various colors
       
   213     have on the standard Tk text widget elements.  In the upper part
       
   214     of the window is a plain Tk text widget and here you can edit the
       
   215     text, select a region of text, etc.  Below this is a button "Track
       
   216     color changes".  When this is turned on, any colors selected in
       
   217     the other windows will change the text widget element specified in
       
   218     the radio buttons below.  When this is turned off, text widget
       
   219     elements are not affected by color selection.
       
   220 
       
   221     You can choose which element gets changed by color selection by
       
   222     clicking on one of the radio buttons in the bottom part of this
       
   223     window.  Text foreground and background affect the text in the
       
   224     upper part of the window.  Selection foreground and background
       
   225     affect the colors of the primary selection which is what you see
       
   226     when you click the middle button (depending on window system) and
       
   227     drag it through some text.
       
   228 
       
   229     The Insertion is the insertion cursor in the text window, where
       
   230     new text will be inserted as you type.  The insertion cursor only
       
   231     has a background.
       
   232 
       
   233 
       
   234 The Color List Window
       
   235 
       
   236     The "Color List" window shows every named color in the color name
       
   237     database (this window may take a while to come up).  In the upper
       
   238     part of the window you see a scrolling list of all the color names
       
   239     in the database, in alphabetical order.  Click on any color to
       
   240     select it.  In the bottom part of the window is displayed any
       
   241     aliases for the selected color (those color names that have the
       
   242     same RGB value, but were found later in the text database).  For
       
   243     example, find the color "Black" and you'll see that its aliases
       
   244     are "gray0" and "grey0".
       
   245 
       
   246     If the color has no aliases you'll see "<no aliases>" here.  If you
       
   247     just want to see if a color has an alias, and do not want to select a
       
   248     color when you click on it, turn off "Update on Click".
       
   249 
       
   250     Note that the color list is always updated when a color is selected
       
   251     from the main window.  There's no way to turn this feature off.  If
       
   252     the selected color has no matching color name you'll see
       
   253     "<no matching color>" in the Aliases window.
       
   254 
       
   255 
       
   256 The Details Window
       
   257 
       
   258     The "Details" window gives you more control over color selection
       
   259     than just clicking on a color chip in the main window.  The row of
       
   260     buttons along the top apply the specified increment and decrement
       
   261     amounts to the selected color.  These delta amounts are applied to
       
   262     the variation strips specified by the check boxes labeled "Move
       
   263     Sliders".  Thus if just Red and Green are selected, hitting -10
       
   264     will subtract 10 from the color value along the red and green
       
   265     variation only.  Note the message under the checkboxes; this
       
   266     indicates the primary color level being changed when more than one
       
   267     slider is tied together.  For example, if Red and Green are
       
   268     selected, you will be changing the Yellow level of the selected
       
   269     color.
       
   270 
       
   271     The "At Boundary" behavior determines what happens when any color
       
   272     variation hits either the lower or upper boundaries (0 or 255) as
       
   273     a result of clicking on the top row buttons:
       
   274 
       
   275     Stop
       
   276         When the increment or decrement would send any of the tied
       
   277         variations out of bounds, the entire delta is discarded.
       
   278 
       
   279     Wrap Around
       
   280         When the increment or decrement would send any of the tied
       
   281         variations out of bounds, the out of bounds value is wrapped
       
   282         around to the other side.  Thus if red were at 238 and +25
       
   283         were clicked, red would have the value 7.
       
   284 
       
   285     Preserve Distance
       
   286         When the increment or decrement would send any of the tied
       
   287         variations out of bounds, all tied variations are wrapped as
       
   288         one, so as to preserve the distance between them.  Thus if
       
   289         green and blue were tied, and green was at 238 while blue was
       
   290         at 223, and +25 were clicked, green would be at 15 and blue
       
   291         would be at 0.
       
   292 
       
   293     Squash
       
   294         When the increment or decrement would send any of the tied
       
   295         variations out of bounds, the out of bounds variation is set
       
   296         to the ceiling of 255 or floor of 0, as appropriate.  In this
       
   297         way, all tied variations are squashed to one edge or the
       
   298         other.
       
   299 
       
   300     The top row buttons have the following keyboard accelerators:
       
   301 
       
   302     -25 == Shift Left Arrow
       
   303     -10 == Control Left Arrow
       
   304      -1 == Left Arrow
       
   305      +1 == Right Arrow
       
   306     +10 == Control Right Arrow
       
   307     +25 == Shift Right Arrow
       
   308 
       
   309 
       
   310 Keyboard Accelerators
       
   311 
       
   312     Alt-w in any secondary window dismisses the window.  In the main
       
   313     window it exits Pynche (except when running as a modal).
       
   314 
       
   315     Alt-q in any window exits Pynche (except when running as a modal).
       
   316 
       
   317 
       
   318 Persistency
       
   319 
       
   320     Pynche remembers various settings of options and colors between
       
   321     invocations, storing these values in a `persistent initialization
       
   322     file'.  The actual location of this file is specified by the
       
   323     --initfile option (see above), and defaults to ~/.pynche.
       
   324 
       
   325     When Pynche exits, it saves these values in the init file, and
       
   326     re-reads them when it starts up.  There is no locking on this
       
   327     file, so if you run multiple instances of Pynche at a time, you
       
   328     may clobber the init file.
       
   329 
       
   330     The actual options stored include
       
   331 
       
   332     - the currently selected color
       
   333 
       
   334     - all settings of checkbox and radio button options in all windows
       
   335 
       
   336     - the contents of the text window, the current text selection and
       
   337       insertion point, and all current text widget element color
       
   338       settings.
       
   339 
       
   340     - the name of the color database file (but not its contents)
       
   341 
       
   342     You can inhibit Pynche from reading the init file by supplying the
       
   343     --ignore option on the command line.  However, you cannot suppress
       
   344     the storing of the settings in the init file on Pynche exit.  If
       
   345     you really want to do this, use /dev/null as the init file, using
       
   346     --initfile.
       
   347 
       
   348 
       
   349 Color Name Database Files
       
   350 
       
   351     Pynche uses a color name database file to calculate the nearest
       
   352     color to the selected color, and to display in the Color List
       
   353     view.  Several files are distributed with Pynche, described
       
   354     below.  By default, the X11 color name database file is selected.
       
   355     Other files:
       
   356 
       
   357     html40colors.txt -- the HTML 4.0 guaranteed color names
       
   358 
       
   359     websafe.txt -- the 216 "Web-safe" colors that Netscape and MSIE
       
   360     guarantee will not be dithered.  These are specified in #rrggbb
       
   361     format for both values and names
       
   362 
       
   363     webcolors.txt -- The 140 color names that Tim Peters and his
       
   364     sister say NS and MSIE both understand (with some controversy over 
       
   365     AliceBlue).
       
   366 
       
   367     namedcolors.txt -- an alternative set of Netscape colors.
       
   368 
       
   369     You can switch between files by choosing "Load palette..." from
       
   370     the "File" menu.  This brings up a standard Tk file dialog.
       
   371     Choose the file you want and then click "Ok".  If Pynche
       
   372     understands the format in this file, it will load the database and 
       
   373     update the appropriate windows.  If not, it will bring up an error 
       
   374     dialog.
       
   375 
       
   376 
       
   377 To Do
       
   378 
       
   379     Here's a brief list of things I want to do (some mythical day):
       
   380 
       
   381     - Better support for resizing the top level windows
       
   382 
       
   383     - More output views, e.g. color solids
       
   384 
       
   385     - Have the notion of a `last color selected'; this may require a
       
   386       new output view
       
   387 
       
   388     - Support setting the font in the text view
       
   389 
       
   390     - Support distutils setup.py for installation
       
   391 
       
   392     I'm open to suggestions!
       
   393 
       
   394 
       
   395 
       
   396 Local Variables:
       
   397 indent-tabs-mode: nil
       
   398 End: