Hey all,

Sorry for the cross-posting.

I took Chrisoph Willing's advice and patched my full-screen vic against the CVS 
version of VIC.

Here are the patches tested on the ag-media module as of today, with more 
logical names.

Has anyone out there compiled VIC for windows? I'd really like to use the 
fullscreen vic on our display machine.

Thanks.

B. Bogart
Ryerson University
60c60
< 	label $w.bar.title -text "VIC v[version]" -font [smallfont] \
---
> 	label $w.bar.title -text "VIC v[version]-ryehack" -font [smallfont] \
74a75,78
> ####bbogart
>         button $w.bar.full -text "Fullscreen" -command fullscreen_setup\
>                 -relief raised -font [smallfont] -highlightthickness 1
> ####
79c83,86
< 	pack $w.bar.menu $w.bar.autoplace $w.bar.help $w.bar.quit -side left -padx 1 -pady 1
---
> # bbogart added bar.full here below
> 	pack $w.bar.menu $w.bar.full $w.bar.autoplace $w.bar.help $w.bar.quit -side left -padx 1 -pady 1
> 
> 
875a883,920
> #####bbogart
> proc full_deactivate w {
>         global ftext btext ltext fpshat bpshat lhat shat win_list V fullscreen_control switcher_src
> 
>         set src $switcher_src($w)
>         if [info exists win_list($src)] {
>                 # disable fullscreen_control widget
>                 foreach child [winfo children $fullscreen_control($w)] {
>                         if {[string match "*.bprev" $child] || [string match "*.bnext" $child] } {
>                                 # Its a button!
>                                 $child configure -command {}
>                                 $child configure -state disabled
> 
>                                 # Its not a button!
>                         } else {$child configure -foreground grey60 }
> 
>                         # Remove fullscreen_control binding
>                         bind $fullscreen_control($w) <Enter> {}
>                 }
>         }
> 
>         # Deal with vic internal stuff
>         destroy_decoder_stats $src
> 
>         if { [info exists ftext($src)] } {
>                 unset ftext($src)
>                 unset ftext($src)
>                 unset btext($src)
>                 unset ltext($src)
>                 unset fpshat($src)
>                 unset bpshat($src)
>                 unset lhat($src)
>                 unset shat($src)
>         }
> }
> 
> #####
> 
79a80,98
> #####bbogart
> proc destroy_fullscreen w {
> 
>         global win_src
>         set children [winfo children $w]
>         foreach child $children {
>                 if {[info exists win_src($child.video)]} {
>                         set src $win_src($child.video)
>                         switcher_unregister "$child.video"
>                         detach_window $src "$child.video"
>                 }
>         }
> 
>         set top [winfo toplevel $w]
>         destroy $top
> }
> #####
> 
> 
405a425,667
> #######bbogart
> 
> proc wrap_display_name {src} {
> 
>         global win_src
> 
>         if {[info exists win_src($src)]} {
>                 display_name $src
>         } else {
>                 full_deactivate $src
>         }
> 
> }
> 
> proc display_name {v} {
>         global switcher_src fname win_src
> 
>         set tmp [getid $switcher_src($v)]
>         if {[string length $tmp] > 26} {
>                 set fname [string range $tmp 0 25]
>         } else {
>                 set fname $tmp
>         }
> }
> 
> proc fullscreen_setup {} {
> 
>         global numScreens numVideos output_screenWidth output_screenHeight output_xoffset output_yoffset
> 
>         # Variable Defaults
>         set numScreens 1
>         set numVideos 1
>         set screenWidth 640
>         set screenHeight 480
>         set xoffset 1024
>         set yoffset 0
> 
>         # New toplevel
>         toplevel .fsetup
>         wm title .fsetup "Fullscreen Setup"
>         catch {wm resizable .fsetup false false}
> 
>         # Top Bar
>         set w .fsetup
>         frame $w.top -border 2 -relief groove
>         label $w.top.l -text "# of Screens:"
>         label $w.top.l2 -text "Videos/Screen:"
> 
>         foreach i {1 2 3 4} {
>                 radiobutton $w.top.ns$i -text "$i" -variable numScreens -value $i
>         }
>         $w.top.ns$numScreens select
> 
>         set i 1
>         foreach vids {1 4 16 64} {
>                 radiobutton $w.top.nv$i -text "$vids" -variable numVideos -value $vids
>                 incr i
>         }
>         $w.top.nv$numVideos select
> 
>        # Middle Bar
>         set mid $w.middle
>         frame $mid -border 0 -relief groove
>         label $mid.l -text "Screen Parameters:"
>         label $mid.lw -text "Width:"
>         label $mid.lh -text "Height:"
>         label $mid.lx -text "X Offset:"
>         label $mid.ly -text "Y Offset:"
>         entry $mid.ew -width 5
>         entry $mid.eh -width 5
>         entry $mid.ex -width 5
>         entry $mid.ey -width 5
> 
>         # Default Entry Values
>         $mid.ew insert 0 $screenWidth
>         $mid.eh insert 0 $screenHeight
>         $mid.ex insert 0 $xoffset
>         $mid.ey insert 0 $yoffset
> 
>         # Bottom Bar
>         set br $w.bar
>         frame $br -relief ridge -borderwidth 2
>         button $br.dismiss -text Dismiss -relief raised -command {destroy .fsetup}
>         button $br.launch -text Launch -relief raised \
>                 -command {
>                         # set variables from entry widgets
>                         set screenWidth [expr abs([.fsetup.middle.ew get])]
>                         set screenHeight [expr abs([.fsetup.middle.eh get])]
>                         set xoffset [expr abs([.fsetup.middle.ex get])]
>                         set yoffset [expr abs([.fsetup.middle.ey get])]
> 
>                        # launch only if the entries are valid
>                         set ow [catch {expr $screenWidth*1} output_screenWidth]
>                         set oh [catch {expr $screenHeight*1} output_screenHeight]
>                         set ox [catch {expr $xoffset*1} output_xoffset]
>                         set oy [catch {expr $yoffset*1} output_yoffset]
>                         if { $ow==0 && $oh==0 && $ox==0 && $oy==0 } {
>                                 fullscreen_gui $numScreens $numVideos\
>                                                $output_screenWidth $output_screenHeight\
>                                                $output_xoffset $output_yoffset
>                                 destroy .fsetup
>                         } else {
>                                 tk_messageBox -icon error \
>                                               -type ok \
>                                               -message "You entered an invalid screen parameter." \
>                                               -title error
>                         }
>                 }
> 
>         # Build GUI
>         grid $w.top -row 0 -column 0 -sticky news
>         grid $w.top.l -row 0 -column 0
>         grid $w.top.l2 -row 1 -column 0
>         for {set i 1} {$i <=4} {incr i} {
>                 grid $w.top.ns$i -row 0 -column $i
>                 grid $w.top.nv$i -row 1 -column $i
>         }
> 
>         grid $mid -row 1 -column 0 -sticky news
>         grid $mid.l -row 0 -column 0 -columnspan 4 -sticky nws
>         grid $mid.lw -row 1 -column 0 -sticky news
>         grid $mid.ew -row 1 -column 1 -sticky news
>         grid $mid.lh -row 1 -column 2 -sticky news
>         grid $mid.eh -row 1 -column 3 -sticky news
>         grid $mid.lx -row 2 -column 0 -sticky news
>         grid $mid.ex -row 2 -column 1 -sticky news
>         grid $mid.ly -row 2 -column 2 -sticky news
>         grid $mid.ey -row 2 -column 3 -sticky news
> 
>         grid $br -row 2 -column 0 -sticky news
>         pack $br.dismiss $br.launch -side right -padx 1 -pady 1
> }
> 
> proc fullscreen_gui {numScreens numVideos output_screenWidth output_screenHeight output_xoffset output_yoffset} {
>         global fname switcher_src win_src fullscreen_control
> 
>         toplevel .fullscreen
>         wm title .fullscreen "Fullscreen Control"
>         catch "wm resizable .fullscreen false false"
> 
>         set active [session active]
>         open_fullscreen $numScreens $numVideos $output_screenWidth $output_screenHeight $output_xoffset $output_yoffset
> 
>         frame .fullscreen.frames
> 
>         set numColumns [expr int(sqrt($numVideos)*$numScreens)]
> 
>         for {set i 1} {$i<=[expr $numVideos*$numScreens]} {incr i} {
>           if {$i <= [llength $active]} {
> 
>                 set f .fullscreen.frames.frame$i
>                 set v ".wvfull.frame$i.video"
>                 set fname "[display_name $v]"
> 
>                 # keep track of what video goes with what controller frame
>                 set fullscreen_control($v) $f
> 
>                 frame $f -relief groove -border 2
>                 label $f.t -text "Video $i"
>                 button $f.bprev -text "Prev" -command "switcher_prev $v ; display_name $v"
>                 button $f.bnext -text "Next" -command "switcher_next $v ; display_name $v"
> 
>                grid $f.t -row 0 -column 0 -columnspan 2
>                 grid $f.bprev -row 1 -column 0
>                 grid $f.bnext -row 1 -column 1
> 
>                 grid $f -row 0 -column $i -sticky nws
> 
>                 # window placement on large multiscreen window
>                 set row [expr abs(($i-1)/$numColumns)]
>                 set column [expr (($i-1)%$numColumns)]
>                 grid $f -row $row -column $column
> 
>                 bind $f <Enter> "wrap_display_name $v"
>            }
>         }
>         grid .fullscreen.frames -row 0 -column 0
> 
>         #button bar
>         set b .fullscreen.bar
>         set n .fullscreen.name
>         frame $n -border 2 -relief ridge
>         frame $b -border 0 -relief raise
> 
>         button $b.q -text "Dismiss" -command { destroy_fullscreen .wvfull ; destroy .fullscreen }
>         label $n.l -textvariable fname -font [smallfont]
> 
>         pack $b.q -side right
>         pack $n.l
>         grid $n -row 1 -column 0 -sticky news
>         grid $b -row 2 -column 0 -sticky news
> 
> }
> 
> proc open_fullscreen {numScreens numVideos output_screenWidth output_screenHeight output_xoffset output_yoffset} {
>         set f [smallfont]
>         set w .wvfull
>         set active [session active]
>         set screen_width 1024
>         set screen_height 768
> 
>         toplevel $w -class Vic \
>                 -visual "[winfo visual .top] [winfo depth .top]" \
>                 -colormap .top -background black
>         catch "wm resizable $w false false"
> 
>         set geo4 "+$output_yoffset"
>         set geo3 "+$output_xoffset"
>         set geo2 "x$output_screenHeight"
>         set geof "$output_screenWidth$geo2$geo3$geo4"
>         wm geometry $w $geof
>         wm title $w "fullscreen"
>         wm overrideredirect $w true
> 
>         switch $numVideos {
>                 "1" {set width [expr $output_screenWidth/$numScreens] ; set height [expr round($width/1.33)] }
>                 "4" {set width [expr $output_screenWidth/(2*$numScreens)] ; set height [expr round($width/1.33)] }
>                 "16" {set width [expr $output_screenWidth/(4*$numScreens)] ; set height [expr round($width/1.33)] }
>                 "64" {set width [expr $output_screenWidth/(8*$numScreens)] ; set height [expr round($width/1.33)] }
>         }
> 
>         set numColumns [expr int(sqrt($numVideos)*$numScreens)]
> 
>         for {set i 1} {$i <= [expr $numVideos*$numScreens]} {incr i} {
>                 frame $w.frame$i
>                 create_video_widget $w.frame$i.video $width $height
> #               set size$w "$width{x}$height"
> 
>                 set v $w.frame$i.video
>                 pack $v -anchor c
>                 if {$i <= [llength $active]} {
>                                 set row [expr abs(($i-1)/$numColumns)]
>                                 set column [expr (($i-1)%$numColumns)]
>                                 grid $w.frame$i -row $row -column $column
>                                 set current [lindex $active [expr $i-1]]
>                                 switcher_register $v $current window_switch
>                                 attach_window $current $v
>                 }
> 
>         }
> }
> #######
> 

Reply via email to