aboutsummaryrefslogtreecommitdiff
path: root/library
diff options
context:
space:
mode:
Diffstat (limited to 'library')
-rw-r--r--library/pkgIndex.tcl13
-rw-r--r--library/zincGraphics.tcl1322
-rw-r--r--library/zincLogo.tcl107
-rw-r--r--library/zincText.tcl191
4 files changed, 0 insertions, 1633 deletions
diff --git a/library/pkgIndex.tcl b/library/pkgIndex.tcl
deleted file mode 100644
index fed6d76..0000000
--- a/library/pkgIndex.tcl
+++ /dev/null
@@ -1,13 +0,0 @@
-# Tcl package index file, version 1.1
-# This file is generated by the "pkg_mkIndex" command
-# and sourced either when an application starts up or
-# by a "package unknown" script. It invokes the
-# "package ifneeded" command to set up package-related
-# information so that packages will be loaded automatically
-# in response to "package require" commands. When this
-# script is sourced, the variable $dir must contain the
-# full path name of this file's directory.
-
-package ifneeded zincText 1.0 [list source [file join $dir zincText.tcl]]
-package ifneeded zincLogo 1.0 [list source [file join $dir zincLogo.tcl]]
-package ifneeded zincGraphics 1.0 [list source [file join $dir zincGraphics.tcl]]
diff --git a/library/zincGraphics.tcl b/library/zincGraphics.tcl
deleted file mode 100644
index 10f6a27..0000000
--- a/library/zincGraphics.tcl
+++ /dev/null
@@ -1,1322 +0,0 @@
-#
-#-----------------------------------------------------------------------------------
-#
-# Graphics.tcl
-# some graphic design functions
-#
-#-----------------------------------------------------------------------------------
-# Functions to create complexe graphic component :
-# ------------------------------------------------
-# BuildZincItem (realize a zinc item from description hash table)
-#
-# Function to compute complexe geometrical forms :
-# (text header of functions explain options for each form,
-# function return curve coords using control points of cubic curve)
-# -----------------------------------------------------------------
-# RoundedRectangleCoords (return curve coords of rounded rectangle)
-# HippodromeCoords (return curve coords of circus form)
-# PolygonCoords (return curve coords of regular polygon)
-# RoundedCurveCoords (return curve coords of rounded curve)
-# PolylineCoords (return curve coords of polyline)
-# TabBoxCoords (return curve coords of tabBox's pages)
-# PathLineCoords (return triangles coords of pathline)
-#
-# Geometrical basic Functions :
-# -----------------------------
-# PerpendicularPoint
-# LineAngle
-# VertexAngle
-# ArcPts
-# RadPoint
-#
-# Pictorial Functions :
-# ----------------------
-# SetGradients
-# GetPattern
-# GetTexture
-# GetImage
-# InitPixmaps
-# HexaRGBcolor
-# CreateGraduate
-#
-#-----------------------------------------------------------------------------------
-# Authors: Jean-Luc Vinot <vinot@cena.fr>
-# Patrick Lecoanet <lecoanet@cena.fr> (Straight translation
-# to Tcl, based on Graphics.pm revision 1.9)
-# $Id:
-#-----------------------------------------------------------------------------------
-
-namespace eval ::zincGraphics {
-
- package provide zincGraphics 1.0
-
- namespace export BuildZincItem RoundedRectangleCoords HippodromeCoords \
- PolygonCoords RoundedCurveCoords PolylineCoords TabBoxCoords PathLineCoords \
- PerpendicularPoint SetGradients GetPattern GetTexture GetImage InitPixmaps \
- HexaRGBcolor CreateGraduate
-
- namespace eval v {
- # constante facteur point directeur
- variable constPtdFactor 0.5523
- variable Gradients {}
- variable textures {}
- variable images {}
- variable bitmaps {}
- variable pi 3.14159
- }
-
- if { ![info exists zinc_library] } {
- set zinc_library [file dirname [info script]]
- }
-
- set imagePath [file join $zinc_library .. demos images]
-
- proc deg2rad {angle} {
- return [expr {$angle * $v::pi / 180.0}]
- }
-
- proc TLGet {list tag {default ""}} {
- foreach {key val} $list {
- if { [string compare $key $tag] == 0 } {
- return $val
- }
- }
- return $default
- }
-
- #proc TLGet {assoc tag {default ""}} {
- # array set temp $assoc
- # if { [info exists temp($tag)] } {
- # return $temp($tag)
- # }
- # return $default
- #}
-
- proc PointX {point} {
- return [lindex $point 0]
- }
-
- proc PointY {point} {
- return [lindex $point 1]
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::BuildZincItem
- # Création d'un objet Zinc de représentation
- # paramètres :
- # widget : <widget>
- # parentGroup : <group>
- # style : {hash table options}
- # specificTags : [list of specific tags] to add to params -tags
- # name : <str> nom de l'item
- #-----------------------------------------------------------------------------------
- # type d'item valide :
- # les items natifs zinc : group, rectangle, arc, curve, text, icon
- # les items ci-après permettent de spécifier des curves 'particulières' :
- # -roundedrectangle : rectangle à coin arrondi
- # -hippodrome : hippodrome
- # -polygone : polygone régulier à n cotés (convexe ou en étoile)
- # -roundedcurve : curve multicontours à coins arrondis (rayon unique)
- # -polyline : curve multicontours à coins arrondis (le rayon pouvant être défini
- # spécifiquement pour chaque sommet)
- # -pathline : création d'une ligne 'épaisse' avec l'item Zinc triangles
- # décalage par rapport à un chemin donné (largeur et sens de décalage)
- # dégradé de couleurs de la ligne (linéaire, transversal ou double)
- #-----------------------------------------------------------------------------------
- proc BuildZincItem {zinc parentGroup styleTL specificTags name} {
- array set style $styleTL
- if { [info exists style(-params)] } {
- array set params $style(-params)
- }
-
- if { ! $parentGroup } {
- set parentGroup 1
- }
-
- if { [llength $specificTags] } {
- if { [info exists params(-tags)] } {
- set params(-tags) [concat $specificTags $params(-tags)]
- } else {
- set params(-tags) $specificTags
- }
- }
-
- set itemType $style(-itemtype)
- set coords {}
- if { [info exists style(-coords)] } {
- set coords $style(-coords)
- }
- # gestion des polygones particuliers et à coin arrondi
- switch -- $itemType {
- roundedrectangle {
- set itemType curve
- set params(-closed) 1
- set coords [RoundedRectangleCoords $coords $styleTL]
- }
- hippodrome {
- set itemType curve
- set params(-closed) 1
- set coords [HippodromeCoords $coords $styleTL]
- }
- polygone {
- set itemType curve
- set params(-closed) 1
- set coords [PolygonCoords $coords $styleTL]
- }
- roundedcurve -
- polyline {
- set itemType curve
- if { $itemType eq "roundedcurve" } {
- set params(-closed) 1
- set coords [RoundedCurveCoords $coords $styleTL]
- } else {
- set coords [PolylineCoords $coords $styleTL]
- }
- #
- # multi-contours
- if { [info exists style(-contours)] } {
- set contours $style(-contours)
- set numContours [llength $contours]
- for {set i 0} {$i < $numContours} {incr i} {
- # radius et corners peuvent être défini spécifiquement
- # pour chaque contour
- foreach {type way inCoords radius corners cornersRadius} \
- [lindex $contours $i] break
-
- if { $radius eq "" } {
- set radius $style(-radius)
- }
- if { $itemType eq "roundedcurve" } {
- set newCoords [RoundedCurveCoords $inCoords [list -radius $radius \
- -corners $corners]]
- } else {
- set newCoords [PolylineCoords $inCoords \
- [list -radius $radius -corners $corners \
- -cornersradius $cornersRadius]]
- }
- lset style(-contours) $i [list $type $way $newCoords]
- }
- }
- }
- pathline {
- set itemType triangles
- if { [info exists style(-metacoords)] } {
- set coords [MetaCoords $style(-metacoords)]
- }
-
- if { [info exists style(-graduate)] } {
- set numColors [llength $coords]
- set params(-colors) [PathGraduate $numColors $style(-graduate)]
- }
- set coords [PathLineCoords $coords $styleTL]
- }
- }
-
- switch -- $itemType {
- group {
- set item [eval {$zinc add $itemType $parentGroup} [array get params]]
- if { [llength $coords] } {
- $zinc coords $item $coords
- }
-
- }
- text -
- icon {
- set imageFile ""
- if { $itemType eq "icon" } {
- set imageFile $params(-image)
- if { $imageFile ne "" } {
- set params(-image) [InitPixmap $imageFile]
- }
- }
-
- set item [eval {$zinc add $itemType $parentGroup -position $coords} [array get params]]
- if { $imageFile ne "" } {
- set params(-image) $imageFile
- }
- }
- default {
- set item [eval {$zinc add $itemType $parentGroup $coords} [array get params]]
- if { $itemType eq "curve" && [info exists style(-contours)] } {
- foreach contour $style(-contours) {
- eval $zinc contour $item $contour
- }
- }
-
- # gestion du mode norender
- if { [info exists style(-texture)] } {
- set texture [GetTexture $style(-texture)]
- if { $texture ne "" } {
- $zinc itemconfigure $item -tile $texture
- }
- }
-
- if { [info exists style(-fillpattern)] } {
- set bitmap [GetBitmap $style(-fillpattern)]
- if { $bitmap ne "" } {
- $zinc itemconfigure $item -fillpattern $bitmap
- }
- }
- }
- }
-
- # transformation scale de l'item si nécessaire
- if { [info exists style(-scale)] } {
- $zinc scale $item $style(-scale)
- }
-
- # transformation rotate de l'item si nécessaire
- if { [info exists style(-rotate)] } {
- $zinc rotate $item [deg2rad $style(-rotate)]
- }
- # transformation scale de l'item si nécessaire
- if { [info exists style(-translate)] } {
- $zinc translate $item $style(-translate)
- }
-
- return $item
- }
-
- #-----------------------------------------------------------------------------------
- # FONCTIONS GEOMETRIQUES
- #-----------------------------------------------------------------------------------
-
- #-----------------------------------------------------------------------------------
- # Graphics::MetaCoords
- # retourne une liste de coordonnées en utilisant la fonction d'un autre type d'item
- # paramètres : (options)
- # -type : type de primitive utilisée
- # -coords : coordonnées nécessitée par la fonction [type]Coords
- # + options spécialisées passés à la fonction [type]Coords
- #-----------------------------------------------------------------------------------
- proc MetaCoords {options} {
- set pts {}
- set type [TLGet $options -type]
- set coords [TLGet $options -coords]
-
- switch -- $type {
- polygone {
- set pts [PolygonCoords $coords $options]
- }
- hippodrome {
- set pts [HippodromeCoords $coords $options]
- }
- polyline {
- set pts [PolylineCoords $coords $options]
- }
- }
-
- return $pts
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::RoundedRectangleCoords
- # calcul des coords du rectangle à coins arrondis
- # paramètres :
- # coords : point centre du polygone
- # options :
- # -radius : rayon de raccord d'angle
- # -corners : liste des raccords de sommets [0 (aucun raccord)|1] par défaut [1,1,1,1]
- #-----------------------------------------------------------------------------------
- proc RoundedRectangleCoords {coords optionsTL} {
- foreach {p0 p1} $coords break
- foreach {x0 y0} $p0 break
- foreach {xn yn} $p1 break
-
- set radius [TLGet $optionsTL -radius]
- set corners [TLGet $optionsTL -corners]
- if { [llength $corners] == 0 } {
- set corners [list 1 1 1 1]
- }
-
- # attention aux formes 'négatives'
- if { $xn < $x0 } {
- set xs $x0
- set x0 $xn
- set xn $xs
- }
- if { $yn < $y0 } {
- set ys $y0
- set y0 $yn
- set yn $ys
- }
-
- set height [_min [expr {$xn - $x0}] [expr {$yn - $y0}]]
-
- if { $radius eq "" } {
- set radius [expr {int($height/10.0)}]
- if { $radius < 3 } {
- set radius 3
- }
- }
-
- if { $radius < 2 } {
- return [list [list $x0 $y0] [list $x0 $yn] \
- [list $xn $yn] [list $xn $y0]]
- }
-
-
- # correction de radius si necessaire
- set maxRad $height
- if { $corners eq "" } {
- set maxRad [expr {$maxRad / 2.0}]
- }
- if { $radius > $maxRad } {
- set radius $maxRad
- }
-
- # points remarquables
- set ptdDelta [expr {$radius * $v::constPtdFactor}]
- set x2 [expr {$x0 + $radius}]
- set x3 [expr {$xn - $radius}]
- set x1 [expr {$x2 - $ptdDelta}]
- set x4 [expr {$x3 + $ptdDelta}]
- set y2 [expr {$y0 + $radius}]
- set y3 [expr {$yn - $radius}]
- set y1 [expr {$y2 - $ptdDelta}]
- set y4 [expr {$y3 + $ptdDelta}]
-
- # liste des 4 points sommet du rectangle : angles sans raccord circulaire
- set anglePts [list [list $x0 $y0] [list $x0 $yn] \
- [list $xn $yn] [list $xn $y0]]
-
- # liste des 4 segments quadratique : raccord d'angle = radius
- set roundeds [list \
- [list [list $x2 $y0] [list $x1 $y0 c] \
- [list $x0 $y1 c] [list $x0 $y2]] \
- [list [list $x0 $y3] [list $x0 $y4 c] \
- [list $x1 $yn c] [list $x2 $yn]] \
- [list [list $x3 $yn] [list $x4 $yn c] \
- [list $xn $y4 c] [list $xn $y3]] \
- [list [list $xn $y2] [list $xn $y1 c] \
- [list $x4 $y0 c] [list $x3 $y0]]]
-
- set pts [list]
- set previous 0
- foreach seg $roundeds aPt $anglePts corner $corners {
- set px 0
- set py 0
- if { $corner } {
- # on teste si non duplication de point
- foreach {nx ny} [lindex $seg 0] break
- if { $previous && ($px == $nx && $py == $ny) } {
- eval lappend pts [lrange $seg 1 end]
- } else {
- eval lappend pts $seg
- }
- foreach {px py} [lindex $seg 3] break
- set previous 1
- } else {
- lappend pts $aPt
- }
- }
- return $pts
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::HippodromeCoords
- # calcul des coords d'un hippodrome
- # paramètres :
- # coords : coordonnées du rectangle exinscrit
- # options :
- # -orientation : orientation forcée de l'ippodrome [horizontal|vertical]
- # -corners : liste des raccords de sommets [0|1] par défaut [1,1,1,1]
- # -trunc : troncatures [left|right|top|bottom|both]
- #-----------------------------------------------------------------------------------
- proc HippodromeCoords {coords optionsTL} {
- foreach {p0 p1} $coords break
- foreach {x0 y0} $p0 break
- foreach {xn yn} $p1 break
-
- set orientation [TLGet $optionsTL -orientation none]
-
- # orientation forcée de l'hippodrome (sinon hippodrome sur le plus petit coté)
- switch -- $orientation {
- horizontal { set height [expr {abs($yn - $y0)}] }
- vertical { set height [expr {abs($xn - $x0)}] }
- default { set height [_min [expr {abs($xn - $x0)}] [expr {abs($yn - $y0)}]] }
- }
-
- set radius [expr {$height/2.0}]
-
- set corners [TLGet $optionsTL -corners]
- set trunc [TLGet $optionsTL -trunc]
- if { [llength $corners] == 0 } {
- switch -- $trunc {
- both { return [list [list $x0 $y0] [list $x0 $yn] \
- [list $xn $yn] [list $xn $y0]] }
- left { set corners [list 0 0 1 1] }
- right { set corners [list 1 1 0 0] }
- top { set corners [list 0 1 1 0] }
- bottom { set corners [list 1 0 0 1] }
- default { set corners [list 1 1 1 1] }
- }
- }
-
- # l'hippodrome est un cas particulier de roundedRectangle
- # on retourne en passant la 'configuration' à la fonction
- # générique roundedRectangleCoords
- return [RoundedRectangleCoords $coords [list -radius [expr {$height/2.0}] -corners $corners]]
- }
-
-
- #-----------------------------------------------------------------------------------
- # Graphics::PolygonCoords
- # calcul des coords d'un polygone régulier
- # paramètres :
- # coords : point centre du polygone
- # options :
- # -numsides : nombre de cotés
- # -radius : rayon de définition du polygone (distance centre-sommets)
- # -innerradius : rayon interne (polygone type étoile)
- # -corners : liste des raccords de sommets [0|1] par défaut [1,1,1,1]
- # -cornerradius : rayon de raccord des cotés
- # -startangle : angle de départ du polygone
- #-----------------------------------------------------------------------------------
- proc PolygonCoords {coords optionsTL} {
- set numSides [TLGet $optionsTL -numsides 0]
- set radius [TLGet $optionsTL -radius 0]
- if { $numSides < 3 || !$radius } {
- puts "Vous devez au moins spécifier un nombre de cotés >= 3 et un rayon..."
- return {};
- }
-
- if { [llength $coords] } {
- foreach {cx cy} $coords break
- } else {
- set cx 0
- set cy 0
- }
-
- set startAngle [TLGet $optionsTL -startangle 0]
- set angleStep [expr {360.0/$numSides}]
- set innerRadius [TLGet $optionsTL -innerradius 0]
- set pts [list]
-
- # points du polygone
- for {set i 0} {$i < $numSides} {incr i} {
- set p [RadPoint $cx $cy $radius [expr {$startAngle + ($angleStep*$i)}]]
- lappend pts $p
-
- # polygones 'étoiles'
- if { $innerRadius } {
- set p [RadPoint $cx $cy $innerRadius [expr {$startAngle + ($angleStep*($i+ 0.5))}]]
- lappend pts $p
- }
- }
-
- set cornerRadius [TLGet $optionsTL -cornerradius {}]
- if { $cornerRadius ne "" } {
- set pts [RoundedCurveCoords $pts [list -radius $cornerRadius -corners \
- [TLGet $optionsTL -corners {}]]]
- }
- return $pts
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::RoundedAngle
- # THIS FUNCTION IS NO MORE USED, NEITHER EXPORTED
- # curve d'angle avec raccord circulaire
- # paramètres :
- # zinc : widget
- # parentGroup : group zinc parent
- # coords : les 3 points de l'angle
- # radius : rayon de raccord
- #-----------------------------------------------------------------------------------
- proc RoundedAngle {zinc parentGroup coords radius} {
- foreach {pt0 pt1 pt2} $coords break
-
- foreach {cornerPts centerPts} [RoundedAngleCoords $coords $radius] break
- foreach {cx0 cy0} $centerPts break
-
- # valeur d'angle et angle formé par la bisectrice
- # set angle [VertexAngle $pt0 $pt1 $pt2]
-
- if { $parentGroup eq "" } {
- set parentGroup 1
- }
-
- set cornerPts [linsert $cornerPts 0 $pt0]
- lappend cornerPts $pt2
- $zinc add curve $parentGroup $cornerPts -closed 0 -linewidth 1 -priority 20
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::RoundedAngleCoords
- # calcul des coords d'un raccord d'angle circulaire
- #-----------------------------------------------------------------------------------
- # le raccord circulaire de 2 droites sécantes est traditionnellement réalisé par un
- # arc (conique) du cercle inscrit de rayon radius tangent à ces 2 droites
- #
- # Quadratique :
- # une approche de cette courbe peut être réalisée simplement par le calcul de 4 points
- # spécifiques qui définiront - quelle que soit la valeur de l'angle formé par les 2
- # droites - le segment de raccord :
- # - les 2 points de tangence au cercle inscrit seront les points de début et de fin
- # du segment de raccord
- # - les 2 points de controle seront situés chacun sur le vecteur reliant le point de
- # tangence au sommet de l'angle (point secant des 2 droites)
- # leur position sur ce vecteur peut être simplifiée comme suit :
- # - à un facteur de 0.5523 de la distance au sommet pour un angle >= 90° et <= 270°
- # - à une 'réduction' de ce point vers le point de tangence pour les angles limites
- # de 90° vers 0° et de 270° vers 360°
- # ce facteur sera légérement modulé pour recouvrir plus précisement l'arc correspondant
- #-----------------------------------------------------------------------------------
- proc RoundedAngleCoords {coords radius} {
- foreach {pt0 pt1 pt2} $coords break
- foreach {pt1x pt1y} $pt1 break
-
- # valeur d'angle et angle formé par la bisectrice
- foreach {angle bisecAngle} [VertexAngle $pt0 $pt1 $pt2] break
-
- # distance au centre du cercle inscrit : rayon/sinus demi-angle
- set sin [expr {sin([deg2rad $angle] / 2.0)}]
- set delta [expr {$sin ? abs($radius / $sin) : $radius}]
-
- # point centre du cercle inscrit de rayon $radius
- set refAngle [expr {($angle < 180) ? $bisecAngle+90 : $bisecAngle-90}]
- set c0 [RadPoint $pt1x $pt1y $delta $refAngle]
-
- # points de tangeance : pts perpendiculaires du centre aux 2 droites
- set p1 [PerpendicularPoint $c0 [list $pt0 $pt1]]
- set p2 [PerpendicularPoint $c0 [list $pt1 $pt2]]
- foreach {p1x p1y} $p1 break
- foreach {p2x p2y} $p2 break
-
- # point de controle de la quadratique
- # facteur de positionnement sur le vecteur pt.tangence, sommet
- set ptdFactor $v::constPtdFactor
- if { $angle < 90 || $angle > 270 } {
- set diffAngle [expr {($angle < 90) ? $angle : 360 - $angle}]
- if { $diffAngle > 15 } {
- set ptdFactor [expr {$ptdFactor - (((90.0 - $diffAngle)/90.0) * ($ptdFactor/4.0))}]
- }
- set ptdFactor [expr {($diffAngle/90.0) * \
- ($ptdFactor + ((1.0 - $ptdFactor) * (90.0 - $diffAngle)/90.0))}]
- } else {
- set diffAngle [expr {abs(180.0 - $angle)}]
- if { $diffAngle > 15 } {
- set ptdFactor [expr {$ptdFactor + (((90.0 - $diffAngle)/90.0) * ($ptdFactor/3.0))}]
- }
- }
-
- # delta xy aux pts de tangence
- set d1x [expr {($pt1x - $p1x) * $ptdFactor}]
- set d1y [expr {($pt1y - $p1y) * $ptdFactor}]
- set d2x [expr {($pt1x - $p2x) * $ptdFactor}]
- set d2y [expr {($pt1y - $p2y) * $ptdFactor}]
-
- # les 4 points de l'arc 'quadratique' et le centre du cercle inscrit
- set cornerPts [list $p1 \
- [list [expr {$p1x + $d1x}] [expr {$p1y + $d1y}] c] \
- [list [expr {$p2x + $d2x}] [expr {$p2y + $d2y}] c] \
- $p2]
-
- return [list $cornerPts $c0]
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::RoundedCurveCoords
- # retourne les coordonnées d'une curve à coins arrondis
- # paramètres :
- # coords : points de la curve
- # options :
- # -radius : rayon de raccord d'angle
- # -corners : liste des raccords de sommets [0|1] par défaut [1,1,1,1]
- #-----------------------------------------------------------------------------------
- proc RoundedCurveCoords {coords options} {
- set numFaces [llength $coords]
- set curvePts {}
- set radius [TLGet $options -radius 0]
- set corners [TLGet $options -corners {}]
-
- for {set index 0} {$index < $numFaces} {incr index} {
- if { ([llength $corners] > $index) && ([lindex $corners $index] == 0) } {
- lappend curvePts [lindex $coords $index]
- } else {
- set prev [expr {$index ? $index - 1 : $numFaces - 1}]
- set next [expr {($index > $numFaces - 2) ? 0 : $index + 1}]
- set angleCoords [list [lindex $coords $prev] \
- [lindex $coords $index] \
- [lindex $coords $next]]
- foreach {quadPts centerPts} [RoundedAngleCoords $angleCoords $radius] break
- set curvePts [concat $curvePts $quadPts]
- }
- }
- return $curvePts
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::PolylineCoords
- # retourne les coordonnées d'une polyline
- # paramètres :
- # coords : sommets de la polyline
- # options :
- # -radius : rayon global de raccord d'angle
- # -corners : liste des raccords de sommets [0|1] par défaut [1,1,1,1],
- # -cornersradius : liste des rayons de raccords de sommets
- #-----------------------------------------------------------------------------------
- proc PolylineCoords {coords options} {
- set numFaces [llength $coords]
- set curvePts {}
-
- set radius [TLGet $options -radius 0]
- set cornersRadius [TLGet $options -cornersradius]
-
- if { [llength $cornersRadius] } {
- set corners $cornersRadius
- } else {
- set corners [TLGet $options -corners]
- }
-
- set numCorners [llength $corners]
- for {set index 0} {$index < $numFaces} {incr index} {
- if { $numCorners && (($index >= $numCorners) || ![lindex $corners $index]) } {
- foreach {x y} [lindex $coords $index] { lappend curvePts [list $x $y] }
- } else {
- set prev [expr {$index ? $index - 1 : $numFaces - 1}]
- set next [expr {($index > $numFaces - 2) ? 0 : $index + 1}]
- set angleCoords [list [lindex $coords $prev] [lindex $coords $index] \
- [lindex $coords $next]]
-
- if { [llength $cornersRadius] } {
- set rad [lindex $cornersRadius $index]
- } else {
- set rad $radius
- }
- foreach {cornerPts centerPts} [RoundedAngleCoords $angleCoords $rad] break
- set curvePts [concat $curvePts $cornerPts]
- }
- }
-
- return $curvePts
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::PathLineCoords
- # retourne les coordonnées d'une pathLine
- # paramètres :
- # coords : points de path
- # options :
- # -closed : ligne fermée
- # -shifting : sens de décalage [both|left|right] par défaut both
- # -linewidth : epaisseur de la ligne
- #-----------------------------------------------------------------------------------
- proc PathLineCoords {coords options} {
- set numFaces [llength $coords]
- set pts {}
-
- set closed [TLGet $options -closed]
- set lineWidth [TLGet $options -linewidth 0]
- set shifting [TLGet $options -shifting both]
-
- if { ! $numFaces || $lineWidth < 2 } {
- return {}
- }
-
- set previous {}
- if { $closed } {
- set previous [lindex $coords [expr $numFaces - 1]]
- }
- set next [lindex $coords 1]
- if { $shifting eq "both" } {
- set lineWidth [expr {$lineWidth / 2.0}]
- }
-
- for {set i 0} {$i < $numFaces} {incr i} {
- set pt [lindex $coords $i]
- foreach {ptX ptY} $pt break
- foreach {nextX nextY} $next break
-
- if { [llength $previous] == 0 } {
- # extrémité de curve sans raccord -> angle plat
- set previous [list [expr {$ptX + ($ptX - $nextX)}] \
- [expr {$ptY + ($ptY - $nextY)}]]
- }
-
- foreach {angle bisecAngle} [VertexAngle $previous $pt $next] break
-
- # distance au centre du cercle inscrit : rayon/sinus demi-angle
- set sin [expr {sin([deg2rad [expr $angle/2.0]])}]
- set delta [expr {$sin ? abs($lineWidth / $sin) : $lineWidth}]
-
- if { $shifting eq "left" || $shifting eq "right" } {
- set adding [expr {($shifting eq "left") ? 90 : -90}]
- foreach {x y} [RadPoint $ptX $ptY $delta [expr {$bisecAngle + $adding}]] {
- lappend pts $x $y
- }
- lappend pts $ptX $ptY
-
- } else {
- foreach {x y} [RadPoint $ptX $ptY $delta [expr {$bisecAngle + 90}]] {
- lappend pts $x $y
- }
- foreach {x y} [RadPoint $ptX $ptY $delta [expr {$bisecAngle - 90}]] {
- lappend pts $x $y
- }
- }
-
- if { $i == [expr $numFaces - 2] } {
- if { $closed } {
- set next [lindex $coords 0]
- } else {
- set nextI [expr $i + 1]
- set next [list [expr {2 * [PointX [lindex $coords $nextI]] - [PointX $pt]}] \
- [expr {2 * [PointY [lindex $coords $nextI]] - [PointY $pt]}]]
- }
- } else {
- set next [lindex $coords [expr {$i + 2}]]
- }
- set previous [lindex $coords $i]
- }
-
- if { $closed } {
- lappend pts [lindex $pts 0] [lindex $pts 1] [lindex $pts 2] [lindex $pts 3]
- }
-
- return $pts
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::PerpendicularPoint
- # retourne les coordonnées du point perpendiculaire abaissé d'un point sur une ligne
- #-----------------------------------------------------------------------------------
- proc PerpendicularPoint {point line} {
- foreach {x y} $point {p1 p2} $line break
- foreach {x1 y1} $p1 {x2 y2} $p2 break
-
- # cas particulier de lignes ortho.
- set minDist .01
- if { abs($y2 - $y1) < $minDist } {
- # la ligne de référence est horizontale
- return [list $x $y1]
- } elseif { abs($x2 - $x1) < $minDist } {
- # la ligne de référence est verticale
- return [list $x1 $y]
- }
-
- set a1 [expr {double($y2 - $y1) / double($x2 - $x1)}]
- set b1 [expr {$y1 - $a1 * $x1}]
-
- set a2 [expr {-1.0 / $a1}]
- set b2 [expr {$y - $a2 * $x}]
-
- set xRet [expr {double($b2 - $b1) / double($a1 - $a2)}]
- set yRet [expr {$a1 * $xRet + $b1}]
-
- return [list $xRet $yRet]
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::LineAngle
- # retourne l'angle d'un point par rapport à un centre de référence
- #-----------------------------------------------------------------------------------
- proc LineAngle {p center} {
- foreach {x y} $p {xref yref} $center break
- set angle [expr {(atan2($y - $yref, $x - $xref) + $v::pi/2.0) * 180.0 / $v::pi}]
- if { $angle < 0 } {
- set angle [expr {$angle + 360}]
- }
- return $angle
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::VertexAngle
- # retourne la valeur de l'angle formée par 3 points
- # ainsi que l'angle de la bisectrice
- #-----------------------------------------------------------------------------------
- proc VertexAngle {pt0 pt1 pt2} {
- set angle1 [LineAngle $pt1 $pt0]
- set angle2 [LineAngle $pt1 $pt2]
-
- if { $angle2 < $angle1 } {
- set angle2 [expr $angle2 + 360]
- }
- set alpha [expr {$angle2 - $angle1}]
- set bisectrice [expr {$angle1 + ($alpha/2.0)}]
-
- return [list $alpha $bisectrice]
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::ArcPts
- # calcul des points constitutif d'un arc
- # params : x,y centre, rayon, angle départ, delta angulaire, pas en degré
- #-----------------------------------------------------------------------------------
- proc ArcPts {x y rad angle extent step debug} {
- set pts {}
-
- if { $extent > 0 } {
- for {set alpha $angle} {$alpha <= ($angle + $extent)} {incr $alpha $step} {
- foreach {xn yn} [RadPoint $x $y $rad $alpha] {}
- lappend pts $xn $yn
- }
- } else {
- for {set alpha $angle} {$alpha >= ($angle + $extent)} {incr $alpha $step} {
- lappend pts [RadPoint $x $y $rad $alpha]
- }
- }
- return $pts
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::RadPoint
- # retourne le point circulaire défini par centre-rayon-angle
- #-----------------------------------------------------------------------------------
- proc RadPoint {x y rad angle} {
- set alpha [deg2rad $angle]
-
- set xpt [expr {$x + ($rad * cos($alpha))}]
- set ypt [expr {$y + ($rad * sin($alpha))}]
-
- return [list $xpt $ypt]
- }
-
-
- #-----------------------------------------------------------------------------------
- # TabBoxCoords
- # Calcul des shapes de boites à onglets
- #
- # coords : coordonnées rectangle de la bounding box
- #
- # options
- # -numpages <n> : nombre de pages (onglets) de la boite
- # -anchor [n|e|s|w] : ancrage des onglets
- # -alignment [left|center|right] : alignement des onglets sur le coté d'ancrage
- # -tabwidth [<n>|[<n1>,<n2>,<n3>...]|auto] : largeur des onglets
- # -tabheight [<n>|auto] : hauteur des onglets
- # -tabshift <n> : décalage onglet
- # -radius <n> : rayon des arrondis d'angle
- # -overlap <n> : distance de recouvrement des onglets
- #-----------------------------------------------------------------------------------
- proc TabBoxCoords args {
- set coords [lindex $args 0]
- set options [lrange $args 1 end]
- foreach {p0 p1} $coords break
- foreach {x0 y0} $p0 {xn yn} $p1 break
- set numPages [TLGet $options -numpages 0]
-
- if { $x0 eq "" || $y0 eq "" || $xn eq "" || $yn eq "" || !$numPages } {
- puts "Vous devez au minimum spécifier le rectangle englobant et le nombre de pages"
- return {}
- }
-
- set anchor [TLGet $options -anchor n]
- set alignment [TLGet $options -alignment left]
- set len [TLGet $options -tabwidth auto]
- set thick [TLGet $options -tabheight auto]
- set biso [TLGet $options -tabshift auto]
- set radius [TLGet $options -radius 0]
- set overlap [TLGet $options -overlap 0]
- set orientation [expr {($anchor eq "n" || $anchor eq "s") ? "horizontal" : "vertical"}]
- set maxwidth [expr {($orientation eq "horizontal") ? ($xn - $x0) : ($yn - $y0)}]
- set tabswidth 0
- set align 1
-
- if { $len eq "auto" } {
- set tabswidth $maxwidth
- set len [expr {($tabswidth + ($overlap * ($numPages - 1)))/$numPages}]
- } else {
- if { [llength $len] > 1 } {
- foreach w $len {
- set tabswidth [expr {$tabswidth + ($w - $overlap)}]
- }
- set tabswidth [expr {$tabswidth + $overlap}]
- } else {
- set tabswidth [expr {($len * $numPages) - ($overlap * ($numPages - 1))}]
- }
- if { $tabswidth > $maxwidth } {
- set tabswidth $maxwidth
- set len [expr {($tabswidth + ($overlap * ($numPages - 1)))/$numPages}]
- }
- if { $alignment eq "center" && (($maxwidth - $tabswidth) > $radius) } {
- set align 0
- }
- }
- if { $thick eq "auto" } {
- set thick [expr {($orientation eq "horizontal") ? \
- int(($yn - $y0)/10.0) : int(($xn - $y0)/10.0)}]
- if {$thick < 10 } {
- set thick 10
- } elseif {$thick > 40} {
- set thick 40
- }
- }
- if { $biso eq "auto" } {
- set biso [expr {int($thick/2.0)}]
- }
- if { ($alignment eq "right" && $anchor ne "w") || \
- ($anchor eq "w" && $alignment ne "right") } {
- if { [llength $len] > 1 } {
- for {set p 0} {$p < $numPages} {incr p} {
- lset len $p [expr {-[lindex $len $p]}]
- }
- } else {
- set len [expr {-$len}]
- }
- set biso [expr {-$biso}]
- set overlap [expr {-$overlap}]
- }
-
- if { $alignment eq "center" } {
- set biso1 [expr {$biso / 2.0}]
- set biso2 $biso1
- } else {
- set biso1 0
- set biso2 $biso
- }
-
- if { $orientation eq "vertical" } {
- if { $anchor eq "w" } {
- set thick [expr {-$thick}]
- set startx $x0
- set endx $xn
- } else {
- set startx $xn
- set endx $x0
- }
- if { ($anchor eq "w" && $alignment ne "right") || \
- ($anchor eq "e" && $alignment eq "right") } {
- set starty $yn
- set endy $y0
- } else {
- set starty $y0
- set endy $yn
- }
-
- set xref [expr {$startx - $thick}]
- set yref $starty
- if { $alignment eq "center" } {
- set ratio [expr {($anchor eq "w") ? -2 : 2}]
- set yref [expr {$yref + (($maxwidth - $tabswidth)/$ratio)}]
- }
-
- set cadre [list [list $xref $endy] [list $endx $endy] \
- [list $endx $starty] [list $xref $starty]]
- #
- # flag de retournement de la liste des pts de
- # curve si nécessaire -> sens anti-horaire
- set inverse [expr {$alignment ne "right"}]
- } else {
- if { $anchor eq "s" } {
- set thick [expr {-$thick}]
- }
- if { $alignment eq "right" } {
- set startx $xn
- set endx $x0
- } else {
- set startx $x0
- set endx $xn
- }
- if { $anchor eq "s" } {
- set starty $yn
- set endy $y0
- } else {
- set starty $y0
- set endy $yn
- }
-
- set yref [expr {$starty + $thick}]
- if { $alignment eq "center" } {
- set xref [expr {$x0 + (($maxwidth - $tabswidth)/2.0)}]
- } else {
- set xref $startx
- }
-
- set cadre [list [list $endx $yref] [list $endx $endy] \
- [list $startx $endy] [list $startx $yref]]
- #
- # flag de retournement de la liste des pts de
- # curve si nécessaire -> sens anti-horaire
- set inverse [expr {($anchor eq "n" && $alignment ne "right") || \
- ($anchor eq "s" && $alignment eq "right")}]
- }
-
- for {set i 0} {$i < $numPages} {incr i} {
- set pts {}
- #
- # décrochage onglet
- #push (@pts, ([$xref, $yref])) if $i > 0;
- #
- # cadre
- set pts [lrange $cadre 0 end]
- #
- # points onglets
- if { $i > 0 || ! $align } {
- lappend pts [list $xref $yref]
- }
- set tw [expr {([llength $len] > 1) ? [lindex $len $i] : $len}]
- if { $orientation eq "vertical" } {
- set tabdxy [list $thick $biso1 $thick [expr {$tw - $biso2}] 0 $tw]
- } else {
- set tabdxy [list $biso1 [expr {-$thick}] [expr {$tw - $biso2}] [expr {-$thick}] $tw 0]
- }
- foreach {dx dy} $tabdxy {
- lappend pts [list [expr {$xref + $dx}] [expr {$yref + $dy}]]
- }
-
- if { $radius } {
- if { $i > 0 || ! $align } {
- set corners [list 0 1 1 1 0 1 1 0]
- } else {
- set corners [list 0 1 1 0 1 1 0 0 0]
- }
- set curvePts [RoundedCurveCoords $pts [list -radius $radius -corners $corners]]
- if { $inverse } {
- set curvePts [lreverse $curvePts]
- }
- lappend shapes $curvePts
- } else {
- if { $inverse } {
- set pts [lreverse $pts]
- }
- lappend shapes $pts
- }
-
- if { $orientation eq "horizontal" } {
- lappend titlesCoords [list [expr {$xref + ($tw - ($biso2 - $biso1))/2.0}] \
- [expr {$yref - ($thick/2.0)}]]
- set xref [expr {$xref + ($tw - $overlap)}]
- } else {
- lappend titlesCoords [list [expr {$xref + ($thick/2.0)}] \
- [expr {$yref + ($len - (($biso2 - $biso1)/2.0))/2.0}]]
- set yref [expr {$yref + ($len - $overlap)}]
- }
- }
-
- return [list $shapes $titlesCoords $inverse]
- }
-
- #-----------------------------------------------------------------------------------
- # RESOURCES GRAPHIQUES GRADIENTS, PATTERNS, TEXTURES, IMAGES...
- #-----------------------------------------------------------------------------------
- #-----------------------------------------------------------------------------------
- # Graphics::SetGradients
- # création de gradient nommés Zinc
- #-----------------------------------------------------------------------------------
- proc SetGradients {zinc grads} {
- # initialise les gradients de taches
- if { ! [llength $v::Gradients] } {
- foreach {name gradient} $grads {
- # création des gradients nommés
- $zinc gname $gradient $name
- lappend v::Gradients $name
- }
- }
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::GetPattern
- # retourne la ressource bitmap en l'initialisant si première utilisation
- #-----------------------------------------------------------------------------------
- proc GetPattern {name} {
- global bitmaps imagePath
-
- if { ![info exists bitmaps($name)] } {
- set bitmap "@[file join $imagePath $name]"
- set bitmaps($name) $bitmap
- return $bitmap
- }
- return $bitmaps($name)
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::GetTexture
- # retourne l'image de texture en l'initialisant si première utilisation
- #-----------------------------------------------------------------------------------
- proc GetTexture {name} {
- global imagePath
-
- if { ![info exists v::textures($name)] } {
- set texture [image create photo -file [file join $imagePath $name]]
- if { $texture ne "" } {
- set v::textures($name) $texture
- }
- return $texture
- }
- return $v::textures($name)
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::GetImage
- # retourne la ressource image en l'initialisant si première utilisation
- #-----------------------------------------------------------------------------------
- proc GetImage {name} {
- global imagePath
-
- if { ![info exists v::images($name)] } {
- set image [image create photo -file [file join $imagePath $name]]
- if { $image ne "" } {
- set v::images($name) $image
- }
- return $image
- }
- return $v::images($name)
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::InitPixmaps
- # initialise une liste de fichier image
- #-----------------------------------------------------------------------------------
- proc InitPixmaps {pixFiles} {
- set imgs {}
- foreach f $pixFiles {
- lappend imgs [GetImage $f]
- }
- return $imgs
- }
-
-
- proc _min {n1 n2} {
- return [expr {($n1 > $n2) ? $n2 : $n1}]
- }
-
- proc _max {n1 n2} {
- return [expr {($n1 > $n2) ? $n1 : $n2}]
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::_trunc
- # fonction interne de troncature des nombres: n = position décimale
- #-----------------------------------------------------------------------------------
- proc _trunc {val n} {
- regexp {([0-9]+)\.?([0-9]*)} $val match ent dec
- set str [expr {($val < 0) ? -$ent : $ent}]
- if { ($dec ne "") && ($n != 0) } {
- set dec [string range $dec 0 [expr {$n-1}]]
- if { $dec != 0 } {
- set str "$str.$dec"
- }
- }
- return $str;
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::RGBdec2hex
- # conversion d'une couleur RGB (255,255,255) au format Zinc '#ffffff'
- #-----------------------------------------------------------------------------------
- proc RGBdec2hex {rgb} {
- return [eval "format {#%04x%04x%04x} $rgb"]
- }
-
- #-----------------------------------------------------------------------------------
- # zincGraphics::PathGraduate
- # création d'un jeu de couleurs dégradées pour item pathLine
- #-----------------------------------------------------------------------------------
- proc PathGraduate {numColors style} {
- set type [TLGet $style -type]
- set colors [TLGet $style -colors]
-
- if { $type eq "linear" } {
- return [CreateGraduate $numColors $colors 2]
-
- } elseif { $type eq "double" } {
- set colors1 [CreateGraduate [expr {$numColors/2+1}] [lindex $colors 0]]
- set colors2 [CreateGraduate [expr {$numColors/2+1}] [lindex $colors 1]]
- set clrs {}
- for {set i 0} {$i <= $numColors} {incr i} {
- lappend clrs [lindex $colors1 $i] [lindex $colors2 $i]
- }
- return $clrs
-
- } elseif { $type eq "transversal" } {
- foreach {c1 c2} $colors break
- set clrs [list $c1 $c2]
- for {set i 0} {$i < $numColors} {incr i} {
- lappend clrs $c1 $c2
- }
- return $clrs;
- }
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::CreateGraduate
- # création d'un jeu de couleurs intermédiaires (dégradé) entre n couleurs
- #-----------------------------------------------------------------------------------
- proc CreateGraduate {totalSteps refColors {repeat 1}} {
- set colors {}
- set numGraduates [expr {[llength $refColors] - 1}]
-
- if { $numGraduates < 1 } {
- puts "Le dégradé necessite au minimum 2 couleurs de référence..."
- return {}
- }
-
- set steps [expr {($numGraduates > 1) ? ($totalSteps/($numGraduates - 1.0)) : $totalSteps}]
-
- for {set c 0} {$c < $numGraduates} {incr c} {
- set c1 [lindex $refColors $c]
- set c2 [lindex $refColors [expr {$c+1}]]
-
- #
- # Pas de duplication de la couleur de raccord entre
- # deux segments
- set thisSteps $steps
- if { $c < [expr $numGraduates - 1] } {
- set thisSteps [expr $thisSteps - 1]
- }
- for {set i 0} {$i < $thisSteps} {incr i} {
- set color [ComputeColor $c1 $c2 [expr {$i/($steps-1.0)}]]
- for {set k 0} {$k < $repeat} {incr k} {
- lappend colors $color
- }
- }
- }
-
- return $colors
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::computeColor
- # calcul d'une couleur intermédiaire défini par un ratio ($ratio) entre 2 couleurs
- #-----------------------------------------------------------------------------------
- proc ComputeColor {color0 color1 ratio} {
- if { $ratio > 1.0 } {
- set ratio 1
- } elseif { $ratio < 0 } {
- set ratio 0
- }
-
- foreach {r0 g0 b0 a0} [ZnColorToRGB $color0] break
- foreach {r1 g1 b1 a1} [ZnColorToRGB $color1] break
-
- set r [expr {$r0 + int(($r1 - $r0) * $ratio)}]
- set g [expr {$g0 + int(($g1 - $g0) * $ratio)}]
- set b [expr {$b0 + int(($b1 - $b0) * $ratio)}]
- set a [expr {$a0 + int(($a1 - $a0) * $ratio)}]
- return [HexaRGBcolor $r $g $b $a]
- }
-
- proc ZnColorToRGB {znColor} {
- foreach {color alpha} [split $znColor ";"] break
- set pattern [expr {[string length $color] > 8 ? {#%4x%4x%4x} : {#%2x%2x%2x}}]
- scan $color $pattern r g b
-
- if {$alpha eq ""} {
- set alpha 100
- }
-
- return [list $r $g $b $alpha]
- }
-
- #-----------------------------------------------------------------------------------
- # Graphics::hexaRGBcolor
- # conversion d'une couleur RGB (255,255,255) au format Zinc '#ffffff'
- #-----------------------------------------------------------------------------------
- proc HexaRGBcolor {r g b args} {
- if { [llength $args] } {
- return [format {#%02x%02x%02x;%d} $r $g $b [lindex $args 0]]
- } else {
- return [format {#%02x%02x%02x} $r $g $b]
- }
- }
-}
-
-proc lreverse {l} {
- set res {}
- set i [llength $l]
- while {$i} {
- lappend res [lindex $l [incr i -1]]
- }
- return $res
-}
diff --git a/library/zincLogo.tcl b/library/zincLogo.tcl
deleted file mode 100644
index aeafb6f..0000000
--- a/library/zincLogo.tcl
+++ /dev/null
@@ -1,107 +0,0 @@
-#---------------------------------------------------------------
-# File : LogoZinc.pm
-#
-# Copyright (C) 2001-2002
-# Centre d'Études de la Navigation Aérienne
-# Authors: Vinot Jean-Luc <vinot@cena.fr>
-# $Id$
-#---------------------------------------------------------------
-
-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]
- }
- }
- }
-}
diff --git a/library/zincText.tcl b/library/zincText.tcl
deleted file mode 100644
index 2e235c5..0000000
--- a/library/zincText.tcl
+++ /dev/null
@@ -1,191 +0,0 @@
-#
-# ZincText - Zinc extension for text input on text items and fields
-#
-# $Id$
-#
-# AUTHOR
-#
-# Patrick Lecoanet <lecoanet@cena.fr>
-# (and documentation by Christophe Mertz <mertz@cena.fr>)
-#
-# Copyright (c) 2002 - 2003 CENA, Patrick Lecoanet
-#
-# This code is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This code is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this code; if not, write to the Free
-# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-#
-# SYNOPSIS
-#
-# package require zincText;
-#
-# zn_TextBindings $zinc
-#
-# $zinc addtag text withtag $a_text
-# $zinc addtag text withtag $a_track
-# $zinc addtag text withtag $a_waypoint
-# $zinc addtag text withtag $a_tabular
-#
-#
-# DESCRIPTION
-#
-# This module implements text input with the mouse and keyboard 'a la emacs'.
-# Text items must have the 'text' tag and must of course be sensitive.
-# Track, waypoint and tabular items have fields and these fields can
-# be edited the same way. Only sensitive fields can be edited. the following
-# interactions are supported:
-#
-# <click 1> To set the cursor position
-# <click 2> To paste the current selection
-# <drag 1> To make a selection
-# <shift drag 1> To extend the current selection
-# <shift 1> To extend the current selection
-# <left arrow>,
-# <right arrow> To move the cursor to the left or to the right
-# <up arrow>,
-# <down arrow> To move the cursor up or down a line
-# <ctrl+a>,
-# <home> To move the cursor at the begining of the line
-# <ctrl+e>
-# <end> To move the cursor at the end of the line
-# <meta+<>,
-# <meta+>> To move the cursor at the beginning / end of the text
-# <BackSpace>
-# <ctrl+h> To delete the char just before the cursor
-# <Delete> To delete the char just after the cursor
-# <Return> To insert a return char. This does not validate the input!
-#
-#
-
-proc zn_TextBindings {zinc} {
- $zinc bind text <1> "startSel $zinc %x %y"
- $zinc bind text <2> "pasteSel $zinc %x %y"
- $zinc bind text <B1-Motion> "extendSel $zinc %x %y"
- $zinc bind text <Shift-B1-Motion> "extendSel $zinc %x %y"
- $zinc bind text <Shift-1> "$zinc select adjust current @%x,%y"
- $zinc bind text <Left> "moveCur $zinc -1"
- $zinc bind text <Right> "moveCur $zinc 1"
- $zinc bind text <Up> "setCur $zinc up"
- $zinc bind text <Down> "setCur $zinc down"
- $zinc bind text <Control-a> "setCur $zinc bol"
- $zinc bind text <Home> "setCur $zinc bol"
- $zinc bind text <Control-e> "setCur $zinc eol"
- $zinc bind text <End> "setCur $zinc eol"
- $zinc bind text <Meta-less> "setCur $zinc 0"
- $zinc bind text <Meta-greater> "setCur $zinc end"
- $zinc bind text <KeyPress> "insertKey $zinc %A"
- $zinc bind text <Shift-KeyPress> "insertKey $zinc %A"
- $zinc bind text <Return> "insertChar $zinc \\n"
- $zinc bind text <BackSpace> "textDel $zinc -1"
- $zinc bind text <Control-h> "textDel $zinc -1"
- $zinc bind text <Delete> "textDel $zinc 0"
-}
-
-
-proc pasteSel {w x y} {
- set item [$w focus]
-
- if {[llength $item] != 0} {
- catch {$w insert [lindex $item 0] [lindex $item 1] @$x,$y [selection get]}
- }
-}
-
-
-proc insertChar {w c} {
- set item [$w focus]
- set selItem [$w select item]
-
- if {[llength $item] == 0} {
- return;
- }
-
- if {([llength $selItem]!= 0) &&
- ([lindex $selItem 0] == [lindex $item 0]) &&
- ([lindex $selItem 1] == [lindex $item 1])} {
- $w dchars [lindex $item 0] [lindex $item 1] sel.first sel.last
- }
- $w insert [lindex $item 0] [lindex $item 1] insert $c
-}
-
-
-proc insertKey {w c} {
- if {! [binary scan $c {c} code]} {
- return
- }
- set code [expr $code & 0xFF]
- if {($code < 32) || ($code == 128)} {
- puts "rejet $code"
- return
- }
-
- insertChar $w $c
-}
-
-
-proc setCur {w where} {
- set item [$w focus]
-
- if {[llength $item] != 0} {
- $w cursor [lindex $item 0] [lindex $item 1] $where
- }
-}
-
-
-proc moveCur {w dir} {
- set item [$w focus]
-
- if {[llength $item] != 0} {
- set index [$w index [lindex $item 0] [lindex $item 1] insert]
- $w cursor [lindex $item 0] [lindex $item 1] [expr $index + $dir]
- }
-}
-
-
-proc startSel {w x y} {
- set part [$w currentpart t]
-
- $w cursor current $part @$x,$y
- $w focus current $part
- focus $w
- $w select from current $part @$x,$y
-}
-
-
-proc extendSel {w x y} {
- set part [$w currentpart t]
-
- $w select to current $part @$x,$y
-}
-
-
-proc textDel {w dir} {
- set item [$w focus]
- set selItem [$w select item]
-
- if {[llength $item] == 0} {
- return;
- }
-
- if {([llength $selItem] != 0) &&
- ([lindex $selItem 0] == [lindex $item 0]) &&
- ([lindex $selItem 1] == [lindex $item 1])} {
- $w dchars [lindex $item 0] [lindex $item 1] sel.first sel.last
- } else {
- set ind [expr [$w index [lindex $item 0] [lindex $item 1] insert] + $dir]
- if { $ind >= 0 } {
- $w dchars [lindex $item 0] [lindex $item 1] $ind $ind
- }
- }
-}
-
-package provide zincText 1.0