aboutsummaryrefslogtreecommitdiff
path: root/library/zincLogo.tcl
blob: b18a9dd1995f673c9f64f97814ff2a8cc12e30d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#---------------------------------------------------------------
#  File            : LogoZinc.pm
#
#  Copyright (C) 2001-2002
#  Centre d'Études de la Navigation Aérienne
#  Authors: Vinot Jean-Luc <vinot@cena.fr>
#  $Id: zincLogo.tcl 1006 2003-03-31 15:56:29Z lecoanet $
#---------------------------------------------------------------

package provide zincLogo 1.0

namespace eval ::zincLogo:: {

    set letters(coords) {
	{0 0} {106 0} {106 58} {122 41} {156 41} {131 69}
	{153 99} {203 41} {155 41} {155 0} {218 0} {240 0 c}
	{252 17 c} {252 34} {252 40 c} {249 50 c} {244 56}
	{202 105} {246 105} {246 87} {246 60 c} {271 37 c} {297 37}
	{323 37 c} {342 57 c} {344 68} {347 64 c} {350 60 c}
	{353 56} {363 46 c} {375 37 c} {395 37} {395 79} {393 79}
	{385 79 c} {379 86 c} {379 93} {379 100 c} {385 107 c}
	{393 107} {409 107} {409 148} {397 148} {378 148 c} {364 144 c}
	{354 133} {346 124} {346 148} {305 148} {305 87} {305 83 c}
	{301 79 c} {297 79} {293 79 c} {289 83 c} {289 87} {289 150}
	{251 150} {251 130} {251 126 c} {247 122 c} {243 122} {239 122 c}
	{235 126 c} {235 130} {235 150} {176 150} {154 150 c} {146 131 c}
	{146 114} {148 105} {120 105} {104 81} {104 105} {74 105} {74 41} {52 41}
	{52 105} {20 105} {20 41} {0 41}}
    set letters(lineWidth) 3
    set letters(lineColor) {#000000;80}
    set letters(fillColor) {=axial 270|#ffffff;100 0 28|#66848c;100 96|#7192aa;100 100}
    set letters(shadow,dXy) {6 6}
    set letters(shadow,fillColor) {#000000;18}

    set point(pos) {240 96}
    set point(alpha) 80
    set point(lineWidth) 1
    set point(lineColor) {#a10000;100}
    set point(fillColor) {=radial -20 -20|#ffffff;100 0|#f70000;100 48|#900000;100 80|#ab0000;100 100}
    set point(shadow,dXy) {5 5}
    set point(shadow,fillColor) {=path 0 0|#770000;64 0|#770000;64 65|#770000;0 100}
    
    

    proc create {zinc parent priority x y scaleX scaleY} {
	variable letters
	variable point
	#
	# Create a group to hold the various parts
	set logoGroup [$zinc add group $parent -priority $priority]
	
	#
	# Move the group in the right place
	$zinc coords $logoGroup "$x $y"
	
	#
	# Add a sub-group to isolate the scaling
	set scaleGroup [$zinc add group $logoGroup]
	$zinc scale $scaleGroup $scaleX $scaleY
	
	foreach {dx dy} $letters(shadow,dXy) break
	#
	# Create a curve for the main form shadow
	set lShadow [$zinc add curve $scaleGroup $letters(coords) \
			 -tags lettersShadow -closed 1 -filled 1 -linewidth 0 \
			 -fillcolor $letters(shadow,fillColor)]
	$zinc translate $lShadow $dx $dy
	
	set lineWidth [adjustLineWidth $letters(lineWidth) $scaleX $scaleY]
	
	#
	# Create a curve for the main form
	$zinc add curve $scaleGroup $letters(coords) -tags letters -closed 0 \
	    -filled 1 -fillcolor $letters(fillColor) -linewidth $lineWidth \
	    -linecolor $letters(lineColor)
	
	#
	# Create a group to hold the point and its shadow
	set pointGroup [$zinc add group $scaleGroup -alpha $point(alpha)]
	$zinc coords $pointGroup $point(pos)
	
	foreach {dx dy} $point(shadow,dXy) break
	#
	# Create a curve for the dot shadow
	set pShadow [$zinc add arc $pointGroup {-20 -20 20 20} -tags pointShadow \
			 -closed 1 -filled 1 -fillcolor $point(shadow,fillColor) \
			 -linewidth 0]
	$zinc translate $pShadow $dx $dy
	
	#
	# Create a curve for the dot
	$zinc add arc $pointGroup {-20 -20 20 20} -tags point -closed 1 \
	    -filled 1 -fillcolor $point(fillColor) -linewidth $point(lineWidth) \
	    -linecolor $point(lineColor)

	return $logoGroup
    }
	
    proc adjustLineWidth {lineWidth scaleX scaleY} {
	if {$lineWidth != 0} {
	    if {$lineWidth >= 2} {
		set ratio [expr ($scaleX > $scaleY) ? $scaleY : $scaleX]
		return [expr $lineWidth * $ratio]
	    }
	}
    }
}