home *** CD-ROM | disk | FTP | other *** search
- Pynche - The PYthonically Natural Color and Hue Editor
-
- Contact: Barry A. Warsaw
- Email: bwarsaw@python.org
- Version: 1.3
-
- Introduction
-
- Pynche is a color editor based largely on a similar program that I
- originally wrote back in 1987 for the Sunview window system. That
- editor was called ICE, the Interactive Color Editor. I'd always
- wanted to port this program to X but didn't feel like hacking X
- and C code to do it. Fast forward many years, to where Python +
- Tkinter provides such a nice programming environment, with enough
- power, that I finally buckled down and re-implemented it. I
- changed the name because these days, too many other systems have
- the acronym `ICE'.
-
- Pynche should work with any variant of Python after 1.5.2
- (e.g. 2.0.1 and 2.1.1), using Tk 8.0.x. It's been tested on
- Solaris 2.6, Windows NT 4, and various Linux distros. You'll want
- to be sure to have at least Tk 8.0.3 for Windows. Also, Pynche is
- very colormap intensive, so it doesn't work very well on 8-bit
- graphics cards; 24bit+ graphics cards are so cheap these days,
- I'll probably never "fix" that.
-
- Pynche must find a text database of colors names in order to
- provide `nearest' color matching. Pynche is distributed with an
- rgb.txt file from the X11R6.4 distribution for this reason, along
- with other "Web related" database (see below). You can use a
- different file with the -d option. The file xlicense.txt contains
- the license only for rgb.txt and both files are in the X/
- subdirectory.
-
- Pynche is pronounced: Pin'-chee
-
-
- Running Standalone
-
- On Unix, start it by running the `pynche' script. On Windows, run
- pynche.pyw to inhibit the console window. When run from the
- command line, the following options are recognized:
-
- --database file
- -d file
- Alternate location of the color database file. Without this
- option, the first valid file found will be used (see below).
-
- --initfile file
- -i file
- Alternate location of the persistent initialization file. See
- the section on Persistency below.
-
- --ignore
- -X
- Ignore the persistent initialization file when starting up.
- Pynche will still write the current option settings to the
- persistent init file when it quits.
-
- --help
- -h
- Print the help message.
-
- initialcolor
- a Tk color name or #rrggbb color spec to be used as the
- initially selected color. This overrides any color saved in
- the persistent init file. Since `#' needs to be escaped in
- many shells, it is optional in the spec (e.g. #45dd1f is the
- same as 45dd1f).
-
-
- Running as a Modal Dialog
-
- Pynche can be run as a modal dialog, inside another application,
- say as a general color chooser. In fact, Grail 0.6 uses Pynche
- and a future version of IDLE may as well. Pynche supports the API
- implemented by the Tkinter standard tkColorChooser module, with a
- few changes as described below. By importing pyColorChooser from
- the Pynche package, you can run
-
- pyColorChooser.askcolor()
-
- which will popup Pynche as a modal dialog, and return the selected
- color.
-
- There are some UI differences when running as a modal
- vs. standalone. When running as a modal, there is no "Quit" menu
- item under the "File" menu. Instead there are "Okay" and "Cancel"
- buttons.
-
- When "Okay" is hit, askcolor() returns the tuple
-
- ((r, g, b), "name")
-
- where r, g, and b are red, green, and blue color values
- respectively (in the range 0 to 255). "name" will be a color name
- from the color database if there is an exact match, otherwise it
- will be an X11 color spec of the form "#rrggbb". Note that this
- is different than tkColorChooser, which doesn't know anything
- about color names.
-
- askcolor() supports the following optional keyword arguments:
-
- color
- the color to set as the initial selected color
-
- master[*]
- the master window to use as the parent of the modal
- dialog. Without this argument, pyColorChooser will create
- it's own Tkinter.Tk instance as the master. This may not
- be what you want.
-
- databasefile
- similar to the --database option, the value must be a
- file name
-
- initfile[*]
- similar to the --initfile option, the value must be a
- file name
-
- ignore[*]
- similar to the --ignore flag, the value is a boolean
-
- wantspec
- When this is true, the "name" field in the return tuple
- will always be a color spec of the form "#rrggbb". It
- will not return a color name even if there is a match;
- this is so pyColorChooser can exactly match the API of
- tkColorChooser.
-
- [*] these arguments must be specified the first time
- askcolor() is used and cannot be changed on subsequent calls.
-
-
- The Colorstrip Window
-
- The top part of the main Pynche window contains the "variation
- strips". Each strip contains a number of "color chips". The
- strips always indicate the currently selected color by a highlight
- rectangle around the selected color chip, with an arrow pointing
- to the chip. Each arrow has an associated number giving you the
- color value along the variation's axis. Each variation strip
- shows you the colors that are reachable from the selected color by
- varying just one axis of the color solid.
-
- For example, when the selected color is (in Red/Green/Blue
- notation) 127/127/127, the Red Variations strip shows you every
- color in the range 0/127/127 to 255/127/127. Similarly for the
- green and blue axes. You can select any color by clicking on its
- chip. This will update the highlight rectangle and the arrow, as
- well as other displays in Pynche.
-
- Click on "Update while dragging" if you want Pynche to update the
- selected color while you drag along any variation strip (this will
- be a bit slower). Click on "Hexadecimal" to display the arrow
- numbers in hex.
-
- There are also two shortcut buttons in this window, which
- auto-select Black (0/0/0) and White (255/255/255).
-
-
- The Proof Window
-
- In the lower left corner of the main window you see two larger
- color chips. The Selected chip shows you a larger version of the
- color selected in the variation strips, along with its X11 color
- specification. The Nearest chip shows you the closest color in
- the X11 database to the selected color, giving its X11 color
- specification, and below that, its X11 color name. When the
- Selected chip color exactly matches the Nearest chip color, you
- will see the color name appear below the color specification for
- the Selected chip.
-
- Clicking on the Nearest color chip selects that color. Color
- distance is calculated in the 3D space of the RGB color solid and
- if more than one color name is the same distance from the selected
- color, the first one found will be chosen.
-
- Note that there may be more than one X11 color name for the same
- RGB value. In that case, the first one found in the text database
- is designated the "primary" name, and this is shown under the
- Nearest chip. The other names are "aliases" and they are visible
- in the Color List Window (see below).
-
- Both the color specifications and color names are selectable for
- copying and pasting into another window.
-
-
- The Type-in Window
-
- At the lower right of the main window are three entry fields.
- Here you can type numeric values for any of the three color axes.
- Legal values are between 0 and 255, and these fields do not allow
- you to enter illegal values. You must hit Enter or Tab to select
- the new color.
-
- Click on "Update while typing" if you want Pynche to select the
- color on every keystroke (well, every one that produces a legal
- value!) Click on "Hexadecimal" to display and enter color values
- in hex.
-
-
- Other Views
-
- There are three secondary windows which are not displayed by
- default. You can bring these up via the "View" menu on the main
- Pynche window.
-
-
- The Text Window
-
- The "Text Window" allows you to see what effects various colors
- have on the standard Tk text widget elements. In the upper part
- of the window is a plain Tk text widget and here you can edit the
- text, select a region of text, etc. Below this is a button "Track
- color changes". When this is turned on, any colors selected in
- the other windows will change the text widget element specified in
- the radio buttons below. When this is turned off, text widget
- elements are not affected by color selection.
-
- You can choose which element gets changed by color selection by
- clicking on one of the radio buttons in the bottom part of this
- window. Text foreground and background affect the text in the
- upper part of the window. Selection foreground and background
- affect the colors of the primary selection which is what you see
- when you click the middle button (depending on window system) and
- drag it through some text.
-
- The Insertion is the insertion cursor in the text window, where
- new text will be inserted as you type. The insertion cursor only
- has a background.
-
-
- The Color List Window
-
- The "Color List" window shows every named color in the color name
- database (this window may take a while to come up). In the upper
- part of the window you see a scrolling list of all the color names
- in the database, in alphabetical order. Click on any color to
- select it. In the bottom part of the window is displayed any
- aliases for the selected color (those color names that have the
- same RGB value, but were found later in the text database). For
- example, find the color "Black" and you'll see that its aliases
- are "gray0" and "grey0".
-
- If the color has no aliases you'll see "<no aliases>" here. If you
- just want to see if a color has an alias, and do not want to select a
- color when you click on it, turn off "Update on Click".
-
- Note that the color list is always updated when a color is selected
- from the main window. There's no way to turn this feature off. If
- the selected color has no matching color name you'll see
- "<no matching color>" in the Aliases window.
-
-
- The Details Window
-
- The "Details" window gives you more control over color selection
- than just clicking on a color chip in the main window. The row of
- buttons along the top apply the specified increment and decrement
- amounts to the selected color. These delta amounts are applied to
- the variation strips specified by the check boxes labeled "Move
- Sliders". Thus if just Red and Green are selected, hitting -10
- will subtract 10 from the color value along the red and green
- variation only. Note the message under the checkboxes; this
- indicates the primary color level being changed when more than one
- slider is tied together. For example, if Red and Green are
- selected, you will be changing the Yellow level of the selected
- color.
-
- The "At Boundary" behavior determines what happens when any color
- variation hits either the lower or upper boundaries (0 or 255) as
- a result of clicking on the top row buttons:
-
- Stop
- When the increment or decrement would send any of the tied
- variations out of bounds, the entire delta is discarded.
-
- Wrap Around
- When the increment or decrement would send any of the tied
- variations out of bounds, the out of bounds value is wrapped
- around to the other side. Thus if red were at 238 and +25
- were clicked, red would have the value 7.
-
- Preserve Distance
- When the increment or decrement would send any of the tied
- variations out of bounds, all tied variations are wrapped as
- one, so as to preserve the distance between them. Thus if
- green and blue were tied, and green was at 238 while blue was
- at 223, and +25 were clicked, green would be at 15 and blue
- would be at 0.
-
- Squash
- When the increment or decrement would send any of the tied
- variations out of bounds, the out of bounds variation is set
- to the ceiling of 255 or floor of 0, as appropriate. In this
- way, all tied variations are squashed to one edge or the
- other.
-
- The top row buttons have the following keyboard accelerators:
-
- -25 == Shift Left Arrow
- -10 == Control Left Arrow
- -1 == Left Arrow
- +1 == Right Arrow
- +10 == Control Right Arrow
- +25 == Shift Right Arrow
-
-
- Keyboard Accelerators
-
- Alt-w in any secondary window dismisses the window. In the main
- window it exits Pynche (except when running as a modal).
-
- Alt-q in any window exits Pynche (except when running as a modal).
-
-
- Persistency
-
- Pynche remembers various settings of options and colors between
- invocations, storing these values in a `persistent initialization
- file'. The actual location of this file is specified by the
- --initfile option (see above), and defaults to ~/.pynche.
-
- When Pynche exits, it saves these values in the init file, and
- re-reads them when it starts up. There is no locking on this
- file, so if you run multiple instances of Pynche at a time, you
- may clobber the init file.
-
- The actual options stored include
-
- - the currently selected color
-
- - all settings of checkbox and radio button options in all windows
-
- - the contents of the text window, the current text selection and
- insertion point, and all current text widget element color
- settings.
-
- - the name of the color database file (but not its contents)
-
- You can inhibit Pynche from reading the init file by supplying the
- --ignore option on the command line. However, you cannot suppress
- the storing of the settings in the init file on Pynche exit. If
- you really want to do this, use /dev/null as the init file, using
- --initfile.
-
-
- Color Name Database Files
-
- Pynche uses a color name database file to calculate the nearest
- color to the selected color, and to display in the Color List
- view. Several files are distributed with Pynche, described
- below. By default, the X11 color name database file is selected.
- Other files:
-
- html40colors.txt -- the HTML 4.0 guaranteed color names
-
- websafe.txt -- the 216 "Web-safe" colors that Netscape and MSIE
- guarantee will not be dithered. These are specified in #rrggbb
- format for both values and names
-
- webcolors.txt -- The 140 color names that Tim Peters and his
- sister say NS and MSIE both understand (with some controversy over
- AliceBlue).
-
- namedcolors.txt -- an alternative set of Netscape colors.
-
- You can switch between files by choosing "Load palette..." from
- the "File" menu. This brings up a standard Tk file dialog.
- Choose the file you want and then click "Ok". If Pynche
- understands the format in this file, it will load the database and
- update the appropriate windows. If not, it will bring up an error
- dialog.
-
-
- To Do
-
- Here's a brief list of things I want to do (some mythical day):
-
- - Better support for resizing the top level windows
-
- - More output views, e.g. color solids
-
- - Have the notion of a `last color selected'; this may require a
- new output view
-
- - Support setting the font in the text view
-
- - Support distutils setup.py for installation
-
- I'm open to suggestions!
-
-
-
- Local Variables:
- indent-tabs-mode: nil
- End:
-