Class canvaseditor deals with objects dot, line, fill, group. Constructor takes canvas window as argument. Contextmenu only. Pointer coords are store on right mouse-key.
Common data: instances
to calculate ID for XML processing.
Private data: settings
, selection
, undoStack
, redoStack
, undonePtr
, destroyAction
to be iinvoked by destructor, memory
for different purposes.
Constructor parameters: canvas window and optional action to be done on destroy.
obj class canvaseditor -common " instances {} garbage [obj new group] "
obj constructor canvaseditor {canvas {destroyAction {}}} { ::destroy $canvas.x $canvas.y $canvas configure\ -xscrollcommand "[scrollbar $canvas.x\ -orient horizontal\ -command "$canvas xview"] set"\ -yscrollcommand "[scrollbar $canvas.y\ -orient vertical\ -command "$canvas yview"] set" variable level incr level($canvas) if {$self ni [our instances]} then { our instances [list {*}[our instances] $self] } my destroyAction $destroyAction my zoom [obj inscope dot set zoom] my canvas $canvas my defaultmessage Ready my memory { before {} after {} transformation {} } my settings [dict create filename ""\ width [winfo reqwidth $canvas]\ height [winfo reqheight $canvas]\ background gray95\ svgtool eog\ pstool evince] my undoStack {} my redoStack {} my undonePtr 0 my lastFillColor white my lastLineColor black my selection {} if {![winfo exists $canvas]} then { ::canvas $canvas } $canvas configure -highlightthickness 0\ -background [$self setting background]\ -width [$self setting width]\ -height [$self setting height]\ -scrollregion "0 0\ [* [my zoom] [$self setting width]]\ [* [my zoom] [$self setting height]]" $self buildMenu $self basicBindings }
obj destructor canvaseditor { variable level incr level([my canvas]) -1 set index [lsearch [our instances] $self] our instances [lreplace [our instances] $index $index] $self basicBindings off apply [list self [my destroyAction]] $self }
© Wolf-Dieter Busch | Home | Sitemap | Urheber | A-Z