⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inkdraw.tcl

📁 Linux下的MSN聊天程序源码
💻 TCL
字号:
#ToDo:# loading images saved on HD# save drawing on HD# smileys as stamps / importing pencils# improve: show sent image in chatwin#Create our namespacenamespace eval ::draw {	proc Init { dir } {				#Register the plugin to the plugins-system		::plugins::RegisterPlugin "Inkdraw"				#Register events		::plugins::RegisterEvent "Inkdraw" chatwindowbutton AddInkSwitchButton		#Load our pixmaps		::skin::setPixmap grid grid.gif pixmaps [file join $dir pixmaps]		::skin::setPixmap butdraw butdraw.gif pixmaps [file join $dir pixmaps]		::skin::setPixmap butdraw_hover butdraw_hover.gif pixmaps [file join $dir pixmaps]		::skin::setPixmap buttext buttext.gif pixmaps [file join $dir pixmaps]				::skin::setPixmap buttext_hover buttext_hover.gif pixmaps [file join $dir pixmaps]		::skin::setPixmap butgridon butgridon.gif pixmaps [file join $dir pixmaps]				::skin::setPixmap butgridon_hover butgridon_hover.gif pixmaps [file join $dir pixmaps]		::skin::setPixmap butgridoff butgridoff.gif pixmaps [file join $dir pixmaps]				::skin::setPixmap butgridoff_hover butgridoff_hover.gif pixmaps [file join $dir pixmaps]		::skin::setPixmap butwipe butwipe.gif pixmaps [file join $dir pixmaps]				::skin::setPixmap butwipe_hover butwipe_hover.gif pixmaps [file join $dir pixmaps]					#load pencils		::draw::LoadPencils [file join $dir pencils]				package require drawboard	}	#This should load all pencils (image files) in a specified dir 	proc LoadPencils {dir} {		global pencilslist				set pencilslist [list ]		foreach file [glob -nocomplain -directory $dir *.{png,gif,jpg,jpeg} ] {			if { [file readable $file] } {				set filename [lindex [file split $file] end]				::skin::setPixmap [file rootname $filename] $filename pixmaps $dir				lappend pencilslist [file rootname $filename]			}		}	}	#for testing or maybe later "undocking" feature	proc OpenWin {w width height} {		if {[winfo exists $w]} {destroy $w}		toplevel $w -background white -borderwidth 0		wm geometry $w ${width}x${height}				set drawwidget $w.draw				drawboard $drawwidget -grid 0		pack $drawwidget -side left -padx 0 -pady 0 -expand true -fill both			}	proc AddInkSwitchButton { event evpar } {		upvar 2 $evpar newvar		set buttonbar $newvar(bottom)				set inkswitch $buttonbar.inkswitchbut		label $inkswitch -image [::skin::loadPixmap butdraw] -relief flat -padx 0 \			-background [::skin::getKey buttonbarbg] -highlightthickness 0 -borderwidth 0 \			-highlightbackground [::skin::getKey buttonbarbg] -activebackground [::skin::getKey buttonbarbg]		pack $inkswitch -side left -padx 0 -pady 0		set window $newvar(window_name)					bind $inkswitch  <<Button1>> "::draw::AddDrawboard $window $buttonbar"		bind $inkswitch  <Enter> "$inkswitch configure -image [::skin::loadPixmap butdraw_hover]"		bind $inkswitch  <Leave> "$inkswitch configure -image [::skin::loadPixmap butdraw]"			}	proc AddDrawboard { window buttonbar} {		set smileybut $buttonbar.smileys		set fontbut $buttonbar.fontsel		#remove the text/smiley controls				pack forget $smileybut		pack forget $fontbut		set w $window			set inputframe $w.f.bottom.left.in.inner		set textinput $inputframe.text				pack forget $textinput		set drawwidget $inputframe.draw		if {[winfo exists $drawwidget]} {status_log "drawwidget already exists"			pack $drawwidget -side left -padx 0 -pady 0 -expand true -fill both					} else {status_log "creating drawwidget"			drawboard $drawwidget -pencil pencil1 -color black -drawmode free -grid 0;#-gridimg [::skin::loadPixmap grid]			pack $drawwidget -side left -padx 0 -pady 0 -expand true -fill both		}				#GRIDSWITCH		set gridbut $buttonbar.gridswitchbutton		CreateToolButton $gridbut butgridon [list ::draw::ToggleGrid $gridbut $drawwidget]		#WIPE		set wipebut $buttonbar.wipebutton		CreateToolButton $wipebut butwipe [list $drawwidget ClearDrawboard]		#SENDBUTTON (if sendbutton in inputfield is not present		set sendbuttonframe $w.f.bottom.left.in.inner.sbframe		set sendbutton $sendbuttonframe.send		if {![::skin::getKey chat_show_sendbuttonframe]} {			#if no sendbutton, put a button in the buttonbar to send the drawing			set senddraw $buttonbar.senddrawingbutton			CreateToolButton $senddraw butsend [list ::draw::PressedSendDraw $window]		} else {			#bind the sendbutton					if { ($::tcl_version >= 8.4) && ![OnMac] } {				$sendbutton configure -command "::draw::PressedSendDraw $window"			} elseif { [OnMac] } {				bind $sendbutton <<Button1>> "::draw::PressedSendDraw $window"			} else {				$sendbutton configure -command "::draw::PressedSendDraw $window"			}		}							bind $sendbutton <Return> "::draw::PressedSendDraw $window"		bind $textinput <Return> "::draw::PressedSendDraw $window"		bind $textinput <Key-KP_Enter> "::draw::PressedSendDraw $window; break"				#SWITCHBUTTON		set inkswitch $buttonbar.inkswitchbut		$inkswitch configure -image [::skin::loadPixmap buttext]		bind $inkswitch  <<Button1>> "::draw::ResetTextInput $window $buttonbar"		bind $inkswitch  <Enter> "$inkswitch configure -image [::skin::loadPixmap buttext_hover]"		bind $inkswitch  <Leave> "$inkswitch configure -image [::skin::loadPixmap buttext]"			#needs to be repacked at last		pack forget $inkswitch		pack $inkswitch -side left -padx 0 -pady 0				}	proc ToggleGrid { gridbut widget } {#		set widget $window.f.bottom.left.in.inner.draw		set gridstate [$widget cget -grid]		if {$gridstate} {			set butimg "butgridon"					} else {			set butimg "butgridoff"		}				$gridbut configure -image [::skin::loadPixmap $butimg]		#bind $gridbut  <<Button1>> "::draw::SwitchGrid $gridbut $drawwidget"status_log "reconfigure gridbut with $butimg"		bind $gridbut  <Enter> "$gridbut configure -image [::skin::loadPixmap ${butimg}_hover]"		bind $gridbut  <Leave> "$gridbut configure -image [::skin::loadPixmap $butimg]"				$widget ToggleGrid	}							proc ResetTextInput { window buttonbar } {status_log "reset to text mode"		set smileybut $buttonbar.smileys		set fontbut $buttonbar.fontsel				set inkswitch $buttonbar.inkswitchbut		set senddraw $buttonbar.senddrawingbutton		set gridbut $buttonbar.gridswitchbutton		set wipebut $buttonbar.wipebutton		#remove the ink controls		foreach control [list senddrawingbutton gridswitchbutton wipebutton] {			if {[winfo exists $buttonbar.$control]} {pack forget $buttonbar.$control}		}	#...		#reconfigure inkswitch		$inkswitch configure -image [::skin::loadPixmap butdraw]		bind $inkswitch  <<Button1>> "::draw::AddDrawboard $window $buttonbar"		bind $inkswitch  <Enter> "$inkswitch configure -image [::skin::loadPixmap butdraw_hover]"		bind $inkswitch  <Leave> "$inkswitch configure -image [::skin::loadPixmap butdraw]"			#needs to be repacked at last		pack forget $inkswitch		#repack the text/smiley controls				pack $fontbut -side left -padx 0 -pady 0		pack $smileybut -side left -padx 0 -pady 0		pack $inkswitch -side left -padx 0 -pady 0						set inputframe $window.f.bottom.left.in.inner		set drawboardwidget $inputframe.draw		set textinput $inputframe.text		pack forget $drawboardwidget				pack $textinput -side left -expand true -fill both -padx 1 -pady 1								#rebind the sendbutton		set inputframe $window.f.bottom.left.in		set sendbuttonframe [$inputframe getinnerframe].sbframe		set sendbutton $sendbuttonframe.send			if {[winfo exists $sendbutton]} {status_log "reset sendbutton binding"			if { ($::tcl_version >= 8.4) && ![OnMac] } {				$sendbutton configure -command "::amsn::MessageSend $window $textinput"			} elseif { [OnMac] } {				bind $sendbutton <<Button1>> "::amsn::MessageSend $window $textinput"			} else {				$sendbutton configure -command "::amsn::MessageSend $window $textinput"			}			bind $sendbutton <Return> "::amsn::MessageSend $window $textinput; break"		}				bind $textinput <Return> "window_history add %W; ::amsn::MessageSend $window %W; break"		bind $textinput <Key-KP_Enter> "window_history add %W; ::amsn::MessageSend $window %W; break"			}		#this hack is needed	proc PressedSendDraw { window } {		global HOME		set widget $window.f.bottom.left.in.inner.draw		#Put inktosend picture into a temp directory  to send it		 if { [info exists ::env(TEMP) ] } {       		$widget SaveDrawing $::env(TEMP) "inktosend.gif"			#send the saved file			::amsn::InkSend $window [file join $::env(TEMP) "inktosend.gif"] 		} else {			$widget SaveDrawing "/tmp" "inktosend.gif"			#send the saved file			::amsn::InkSend $window [file join /tmp "inktosend.gif"]		}				$widget ClearDrawboard	}	proc CreateToolButton { widget imgname command } {		if {![winfo exists $widget]} {			label $widget -image [::skin::loadPixmap ${imgname}] -relief flat -padx 0 \			-background [::skin::getKey buttonbarbg] -highlightthickness 0 -borderwidth 0 \			-highlightbackground [::skin::getKey buttonbarbg] -activebackground [::skin::getKey buttonbarbg]			bind $widget  <<Button1>> $command			bind $widget  <Enter> "$widget configure -image [::skin::loadPixmap ${imgname}_hover]"			bind $widget  <Leave> "$widget configure -image [::skin::loadPixmap ${imgname}]"		}		pack $widget -side left -padx 0 -pady 0	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -