#!/usr/bin/perl -w
######################################################################
# (c) Michael Schilli 1999
######################################################################

use Tk;
use strict;

my $top = MainWindow->new();

my $frame = $top->Frame();
my $text  = $frame->Text(-wrap => 'none');

my $yscrollbar = $frame->Scrollbar(-command => [yview => $text]);
my $xscrollbar = $top->Scrollbar(-orient => 'horizontal', 
                                 -command => [xview => $text]);

### Anzeige: Anzahl der Farben
my $labelvar = "";
my $label = $top->Label(-textvariable => \$labelvar);

$text->configure(-yscrollcommand => [set => $yscrollbar]);
$text->configure(-xscrollcommand => [set => $xscrollbar]);

### Alles packen
$yscrollbar->pack(-side => 'right', -fill => 'y');
$xscrollbar->pack(-side => 'bottom', -fill => 'x');
$label->pack(-fill => 'x', -side => 'bottom');

$frame->pack(-expand => 'yes', -fill => 'both');
$text->pack(-expand => 'yes', -fill => 'both', -side => 'left');


### Farben auslesen und Textzeilen einfaerben
open(COLORS, "< /usr/lib/X11/rgb.txt") || 
                       die "rgb.txt not found";
my $i=1;
while(<COLORS>) {

    s/!.*//;          # Kommentare entfernen
    next if /^\s*$/;  # Leerzeilen ignorieren

    my ($red, $green, $blue, $name) = split(' ', $_);
    my $col = sprintf("#%02x%02x%02x", $red, $green, $blue);

    ### Beschriftungsfarbe weiß fuer dunkle Hintergrundfarben
    my $foreground = 
           ($red + $green + $blue < 350) ? "white" : "black";

    $text->insert("end", "$name\n");  # Text in Text-Widget
                                      # einfügen (mit \n)

    ### Tag definieren und Farbe dort setzen
    $text->tag("add", $i, "$i.0", sprintf("%d.0", $i+1));
    $text->tag("configure", $i, -background => $col, 
                                  -foreground => $foreground);

    ### Jede neue Farbe sofort anzeigen
    $text->update();

    ### Anzeige auffrischen
    $i++;
    $labelvar="Colors: $i";
}
close(COLORS);

MainLoop;
