[Tkabber-dev] r301 - in trunk/plugins/nicksanecolors: . msgs

tkabber-svn at jabber.ru tkabber-svn at jabber.ru
Fri Feb 19 21:04:42 MSK 2010


Author: hekp0maht
Date: 2010-02-19 21:04:42 +0300 (Fri, 19 Feb 2010)
New Revision: 301

Added:
   trunk/plugins/nicksanecolors/Changelog
   trunk/plugins/nicksanecolors/README
   trunk/plugins/nicksanecolors/msgs/
   trunk/plugins/nicksanecolors/msgs/ru.msg
   trunk/plugins/nicksanecolors/nicksanecolors.tcl
Log:
2010-02-19  Kozlov Andrey  <xmpp:hekp0maht at jabber.ru>
	*   Initial NickSaneColors plugin commit


Added: trunk/plugins/nicksanecolors/Changelog
===================================================================
--- trunk/plugins/nicksanecolors/Changelog	                        (rev 0)
+++ trunk/plugins/nicksanecolors/Changelog	2010-02-19 18:04:42 UTC (rev 301)
@@ -0,0 +1,7 @@
+2010-02-19  Andrey Kozlov  <xmpp:hekp0maht at jabber.ru>
+
+	* v 0.1. Nick color pool now being recalculated on settings change.
+
+2010-02-18  Andrey Kozlov  <xmpp:hekp0maht at jabber.ru>
+
+	* Initial commit

Added: trunk/plugins/nicksanecolors/README
===================================================================
--- trunk/plugins/nicksanecolors/README	                        (rev 0)
+++ trunk/plugins/nicksanecolors/README	2010-02-19 18:04:42 UTC (rev 301)
@@ -0,0 +1,25 @@
+NickSaneColors, plugin for Tkabber, Tcl/Tk-based XMPP client software.
+
+Most tkabber users use their own color themes, so background colors are 
+vastly differ. Default NickColorPool colors can flow together with user's 
+custom bg color. Main idea of plugin is to choose nick colors considering 
+the chat background color.
+
+Human's eye perceives different colors unequally, so use weights to 
+calculate color distance:
+D^2 = 30*(r2-r1)^2 + 59*(g2-g1)^2 + 11*(b2-b1)^2; (30 + 59 + 11 = 100)
+Squared color distance threshold range 
+(0..429483622500): = [(0..100)*65535^2]
+429483622500 is for black/white or some other inverted color pairs;
+0 for exactly same colors.
+So user can choose the coefficient in braces (0..100) in some range, e.g. 
+40..60 (this is the default).
+
+This is simplified model, squared distance (no sqrt) between bg and fg 
+colors is being compared with predefined threshold range.
+If calculated D^2 lays in threshold range, colors are enough 
+distinguishable and not overcontrasted with the background, so we use 
+this foreground color.
+
+# This is not Delta E described in 
+# http://en.wikipedia.org/wiki/Color_difference

Added: trunk/plugins/nicksanecolors/msgs/ru.msg
===================================================================
--- trunk/plugins/nicksanecolors/msgs/ru.msg	                        (rev 0)
+++ trunk/plugins/nicksanecolors/msgs/ru.msg	2010-02-19 18:04:42 UTC (rev 301)
@@ -0,0 +1,4 @@
+::msgcat::mcset ru "Whether to load NickSaneColors plugin." "Загружено ли расширение NickSaneColors, обеспечивающее приемлемые цвета ников в чатах."
+::msgcat::mcset ru "NickSaneColors options." "Настройки расширения NickSaneColors, обеспечивающего приемлемые цвета ников в чатах."
+::msgcat::mcset ru "Minimum color threshold. Must be in range 0..100." "Минимальный цветовой порог, значение от 0 до 100."
+::msgcat::mcset ru "Maximum color threshold. Must be in range 0..100." "Максимальный цветовой порог, значение от 0 до 100."

Added: trunk/plugins/nicksanecolors/nicksanecolors.tcl
===================================================================
--- trunk/plugins/nicksanecolors/nicksanecolors.tcl	                        (rev 0)
+++ trunk/plugins/nicksanecolors/nicksanecolors.tcl	2010-02-19 18:04:42 UTC (rev 301)
@@ -0,0 +1,170 @@
+# nicksanecolors.tcl, v 0.1 - Copyright (C) 2010 hekp0maht <xmpp:hekp0maht at jabber.ru>
+# Reinitialize ::plugins::nickcolors::NickColorPool for better text distinction
+# Consider background color when selecting foreground colors
+package require msgcat
+
+namespace eval nicksanecolors {
+	::msgcat::mcload [file join [file dirname [info script]] msgs]
+	if {![::plugins::is_registered nicksanecolors]} {
+        	::plugins::register nicksanecolors \
+			-namespace [namespace current] \
+			-source [info script] \
+			-description [::msgcat::mc "Whether to load NickSaneColors plugin."] \
+			-loadcommand [namespace code load] \
+			-unloadcommand [namespace code unload]
+		return
+	}
+
+	custom::defgroup Plugins [::msgcat::mc "Plugins options."] -group Tkabber
+
+	custom::defgroup NickSaneColors [::msgcat::mc "NickSaneColors options."] -group Plugins
+
+	custom::defvar options(color_threshold_min) 40 \
+		[::msgcat::mc "Minimum color threshold. Must be in range 0..100."] \
+			-type integer -group NickSaneColors \
+			-command [namespace current]::set_nick_sane_colors
+
+	custom::defvar options(color_threshold_max) 60 \
+		[::msgcat::mc "Maximum color threshold. Must be in range 0..100."] \
+			-type integer -group NickSaneColors \
+			-command [namespace current]::set_nick_sane_colors
+
+	variable NickSaneColorPool
+	variable origPool $::plugins::nickcolors::NickColorPool
+
+	# color array taken from http://wiki.tcl.tk/16166
+	variable COLORS {
+		snow {ghost white} {white smoke} gainsboro {floral white}
+		{old lace} linen {antique white} {papaya whip} {blanched almond}
+		bisque {peach puff} {navajo white} moccasin cornsilk ivory
+		{lemon chiffon} seashell honeydew {mint cream} azure {alice blue}
+		lavender {lavender blush} {misty rose} white black {dark slate gray}
+		{dim gray} {slate gray} {light slate gray} gray {light grey}
+		{midnight blue} navy {cornflower blue} {dark slate blue} {slate blue}
+		{medium slate blue} {light slate blue} {medium blue} {royal blue}
+		blue {dodger blue} {deep sky blue} {sky blue} {light sky blue}
+		{steel blue} {light steel blue} {light blue} {powder blue}
+		{pale turquoise} {dark turquoise} {medium turquoise} turquoise
+		cyan {light cyan} {cadet blue} {medium aquamarine} aquamarine
+		{dark green} {dark olive green} {dark sea green} {sea green}
+		{medium sea green} {light sea green} {pale green} {spring green}
+		{lawn green} green chartreuse {medium spring green} {green yellow}
+		{lime green} {yellow green} {forest green} {olive drab} {dark khaki}
+		khaki {pale goldenrod} {light goldenrod yellow} {light yellow} yellow
+		gold {light goldenrod} goldenrod {dark goldenrod} {rosy brown}
+		{indian red} {saddle brown} sienna peru burlywood beige wheat
+		{sandy brown} tan chocolate firebrick brown {dark salmon} salmon
+		{light salmon} orange {dark orange} coral {light coral} tomato
+		{orange red} red {hot pink} {deep pink} pink {light pink}
+		{pale violet red} maroon {medium violet red} {violet red}
+		magenta violet plum orchid {medium orchid} {dark orchid} {dark violet}
+		{blue violet} purple {medium purple} thistle snow2 snow3
+		snow4 seashell2 seashell3 seashell4 AntiqueWhite1 AntiqueWhite2
+		AntiqueWhite3 AntiqueWhite4 bisque2 bisque3 bisque4 PeachPuff2
+		PeachPuff3 PeachPuff4 NavajoWhite2 NavajoWhite3 NavajoWhite4
+		LemonChiffon2 LemonChiffon3 LemonChiffon4 cornsilk2 cornsilk3
+		cornsilk4 ivory2 ivory3 ivory4 honeydew2 honeydew3 honeydew4
+		LavenderBlush2 LavenderBlush3 LavenderBlush4 MistyRose2 MistyRose3
+		MistyRose4 azure2 azure3 azure4 SlateBlue1 SlateBlue2 SlateBlue3
+		SlateBlue4 RoyalBlue1 RoyalBlue2 RoyalBlue3 RoyalBlue4 blue2 blue4
+		DodgerBlue2 DodgerBlue3 DodgerBlue4 SteelBlue1 SteelBlue2
+		SteelBlue3 SteelBlue4 DeepSkyBlue2 DeepSkyBlue3 DeepSkyBlue4
+		SkyBlue1 SkyBlue2 SkyBlue3 SkyBlue4 LightSkyBlue1 LightSkyBlue2
+		LightSkyBlue3 LightSkyBlue4 SlateGray1 SlateGray2 SlateGray3
+		SlateGray4 LightSteelBlue1 LightSteelBlue2 LightSteelBlue3
+		LightSteelBlue4 LightBlue1 LightBlue2 LightBlue3 LightBlue4
+		LightCyan2 LightCyan3 LightCyan4 PaleTurquoise1 PaleTurquoise2
+		PaleTurquoise3 PaleTurquoise4 CadetBlue1 CadetBlue2 CadetBlue3
+		CadetBlue4 turquoise1 turquoise2 turquoise3 turquoise4 cyan2 cyan3
+		cyan4 DarkSlateGray1 DarkSlateGray2 DarkSlateGray3 DarkSlateGray4
+		aquamarine2 aquamarine4 DarkSeaGreen1 DarkSeaGreen2 DarkSeaGreen3
+		DarkSeaGreen4 SeaGreen1 SeaGreen2 SeaGreen3 PaleGreen1 PaleGreen2
+		PaleGreen3 PaleGreen4 SpringGreen2 SpringGreen3 SpringGreen4
+		green2 green3 green4 chartreuse2 chartreuse3 chartreuse4
+		OliveDrab1 OliveDrab2 OliveDrab4 DarkOliveGreen1 DarkOliveGreen2
+		DarkOliveGreen3 DarkOliveGreen4 khaki1 khaki2 khaki3 khaki4
+		LightGoldenrod1 LightGoldenrod2 LightGoldenrod3 LightGoldenrod4
+		LightYellow2 LightYellow3 LightYellow4 yellow2 yellow3 yellow4
+		gold2 gold3 gold4 goldenrod1 goldenrod2 goldenrod3 goldenrod4
+		DarkGoldenrod1 DarkGoldenrod2 DarkGoldenrod3 DarkGoldenrod4
+		RosyBrown1 RosyBrown2 RosyBrown3 RosyBrown4 IndianRed1 IndianRed2
+		IndianRed3 IndianRed4 sienna1 sienna2 sienna3 sienna4 burlywood1
+		burlywood2 burlywood3 burlywood4 wheat1 wheat2 wheat3 wheat4 tan1
+		tan2 tan4 chocolate1 chocolate2 chocolate3 firebrick1 firebrick2
+		firebrick3 firebrick4 brown1 brown2 brown3 brown4 salmon1 salmon2
+		salmon3 salmon4 LightSalmon2 LightSalmon3 LightSalmon4 orange2
+		orange3 orange4 DarkOrange1 DarkOrange2 DarkOrange3 DarkOrange4
+		coral1 coral2 coral3 coral4 tomato2 tomato3 tomato4 OrangeRed2
+		OrangeRed3 OrangeRed4 red2 red3 red4 DeepPink2 DeepPink3 DeepPink4
+		HotPink1 HotPink2 HotPink3 HotPink4 pink1 pink2 pink3 pink4
+		LightPink1 LightPink2 LightPink3 LightPink4 PaleVioletRed1
+		PaleVioletRed2 PaleVioletRed3 PaleVioletRed4 maroon1 maroon2
+		maroon3 maroon4 VioletRed1 VioletRed2 VioletRed3 VioletRed4
+		magenta2 magenta3 magenta4 orchid1 orchid2 orchid3 orchid4 plum1
+		plum2 plum3 plum4 MediumOrchid1 MediumOrchid2 MediumOrchid3
+		MediumOrchid4 DarkOrchid1 DarkOrchid2 DarkOrchid3 DarkOrchid4
+		purple1 purple2 purple3 purple4 MediumPurple1 MediumPurple2
+		MediumPurple3 MediumPurple4 thistle1 thistle2 thistle3 thistle4
+		gray1 gray2 gray3 gray4 gray5 gray6 gray7 gray8 gray9 gray10
+		gray11 gray12 gray13 gray14 gray15 gray16 gray17 gray18 gray19
+		gray20 gray21 gray22 gray23 gray24 gray25 gray26 gray27 gray28
+		gray29 gray30 gray31 gray32 gray33 gray34 gray35 gray36 gray37
+		gray38 gray39 gray40 gray42 gray43 gray44 gray45 gray46 gray47
+		gray48 gray49 gray50 gray51 gray52 gray53 gray54 gray55 gray56
+		gray57 gray58 gray59 gray60 gray61 gray62 gray63 gray64 gray65
+		gray66 gray67 gray68 gray69 gray70 gray71 gray72 gray73 gray74
+		gray75 gray76 gray77 gray78 gray79 gray80 gray81 gray82 gray83
+		gray84 gray85 gray86 gray87 gray88 gray89 gray90 gray91 gray92
+		gray93 gray94 gray95 gray97 gray98 gray99
+	}
+}
+
+proc nicksanecolors::set_nick_sane_colors {args} {
+	variable COLORS
+	variable NickSaneColorPool
+	variable options
+	variable origPool
+
+	if {$options(color_threshold_min) < 0 || $options(color_threshold_min) > 100} {
+		set options(color_threshold_min) 0
+	}
+	if {$options(color_threshold_max) < $options(color_threshold_min) || $options(color_threshold_max) > 100} {
+		set options(color_threshold_max) 100
+	}
+
+	set color_distance_threshold_min [expr $options(color_threshold_min) * 4294836225]
+	set color_distance_threshold_max [expr $options(color_threshold_max) * 4294836225]
+	
+	if {[info exists NickSaneColorPool]} {unset NickSaneColorPool}
+	set bgcolor_rgb [winfo rgb . [option get . *Chat.background Chat]]
+	set r0 [lindex $bgcolor_rgb 0]
+	set g0 [lindex $bgcolor_rgb 1]
+	set b0 [lindex $bgcolor_rgb 2]
+	foreach color_name $COLORS {
+		set color_rgb [winfo rgb . $color_name ]
+		set r1 [lindex $color_rgb 0]
+		set g1 [lindex $color_rgb 1]
+		set b1 [lindex $color_rgb 2]
+		set color_distance [expr 30*($r1-$r0)**2+59*($g1-$g0)**2+11*($b1-$b0)**2]
+		if {$color_distance >= $color_distance_threshold_min &&  $color_distance <= $color_distance_threshold_max} {
+			lappend NickSaneColorPool $color_name
+		}
+	}
+	if {[llength $NickSaneColorPool]} {
+		if {[info exists ::plugins::nickcolors::NickColorPool]} {
+			lset ::plugins::nickcolors::NickColorPool $NickSaneColorPool
+			::plugins::nickcolors::change_options
+		}
+	} else {
+		lset ::plugins::nickcolors::NickColorPool $origPool
+	}
+}
+
+proc nicksanecolors::load {} {
+	set_nick_sane_colors
+}
+
+proc nicksanecolors::unload {} {
+	variable origPool
+	lset ::plugins::nickcolors::NickColorPool $origPool
+}



More information about the Tkabber-dev mailing list