Challenge : le 'color picker'

 

Page du "défi" lancé par ulis sur f.c.l.t :


Énoncé

Je propose un "color picker", un sélectionneur de couleur, que l'on jugerait sur son élégance, élégance de l'interface et élégance du code, sur sa vitesse et sur sa facilité d'utilisation. Le but serait de fournir une couleur dans un format acceptable par Tk.


Propositions

Proposition Miko 02/02/06

Je persiste:

 set couleur [tk_chooseColor]

1 ligne de code, qui dit moins?


Proposition david cobac 01/02/06

3 bandes R V B, 1 bande NB, 1 bande blanche de séparation et 1 carré de visualisation à droite.

111 lignes de code

J'ai fait cela aujourd'hui. Plus j'avance plus je m'enfonce dans un code pas net du tout...je préfére donc arrêter. Je n'arrive pas à ce que l'appel au colorpicker retourne le code de couleur !!...

ulis, 2006-02-02. Pour retourner la valeur, un vwait sur une variable globale en fin de procédure principale ne convient pas ?

Merci ulis, je modifie en conséquence.

Sincérement, c'est plutôt raté mais ça fait une première proposition :)

 package require Tk

 namespace eval davidc_cp {
 }

 proc davidc_cp::choixfinal {x y} {
    .cp.c addtag sel closest $x $y
    set couleur [.cp.c itemcget sel -fill]
    destroy .cp
    set ::couleurRenvoyee $couleur
 }

 # on actualise le carre montrant la couleur
 # au dessus de la souris
 proc davidc_cp::audessus {couleur} {
    .cp.c itemconfigure carre -fill $couleur
 }

 proc davidc_cp::couleurSel {x y} {
    .cp.c addtag sel closest $x $y
    set couleur [.cp.c itemcget sel -fill]
    .cp.c dtag sel sel
    davidc_cp::audessus $couleur
    return [hex->dec $couleur]
 }

 proc davidc_cp::dec->hex {r v b} {
    format "\#%02x%02x%02x" $r $v $b
 }

 proc davidc_cp::hex->dec {h} {
    scan $h "#%02x%02x%02x" r v b
    list $r $v $b
 }

 proc davidc_cp::bandeNB {} {
    for {set i 0} {$i<=255} {incr i} {
	set y 30
	set couleur [dec->hex $i $i $i]
	.cp.c create line $i $y $i [expr {$y+10}]\
	    -fill $couleur -tags $couleur
	.cp.c bind $couleur <Motion> "davidc_cp::audessus $couleur"
    }
 }

 # 1 couleur varie dans la liste
 proc davidc_cp::bandeC {listeRVB indVar y {tag init}} {
    foreach {n(0) n(1) n(2)} $listeRVB break
    for {set i 0} {$i<=255} {incr i} {
	set n($indVar) $i
	set couleur [dec->hex $n(0) $n(1) $n(2)]
	set id [.cp.c create line $i $y $i [expr {$y+10}] -fill $couleur -tags $couleur]
	.cp.c bind $couleur <Motion> "davidc_cp::auJL

C'est cassé :-(


Proposition ulis 2006-12-03

ColouredColourPecker


Catégorie Concours