home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 May / PCWorld_2002-05_cd.bin / Software / TemaCD / activepython / ActivePython-2.1.1.msi / Python21_Tools_pynche_README < prev    next >
Encoding:
Text File  |  2001-07-26  |  15.4 KB  |  378 lines

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