2014-10-26 35 views
3

畫布的屬性「寬度」的值是否有限制?畫布的寬度是否有限制

在以下示例中,我在ScrolledWindow中創建了一個Canvas。

# Packages 
package require BWidget 

# Mainframe 
set mfr [MainFrame .mfr -textvariable "Test"] 
pack $mfr -fill both -expand yes 

# Create a Paned Window with two panes 
set pw1 [PanedWindow [$mfr getframe].pw1 -side left] 
set pat [$pw1 add -minsize 200] 
set pai [$pw1 add -minsize 200] 
pack $pw1 -fill both -expand yes -anchor nw 

# Create a frame for each pane 
set tft [TitleFrame $pat.tft -text "Scrollable Canvas"] 
set tfi [TitleFrame $pai.tfi -text "Informations"] 
pack $tft -fill both -expand yes -anchor nw 
pack $tfi -fill both -expand yes -anchor nw 

# Create a canvas inside a ScrolledWindow for the first pane 
set swt [ScrolledWindow [$tft getframe].swt -relief sunken -borderwidth 2 -scrollbar horizontal -auto none] 
set sft [ScrollableFrame $swt.sft -width 50000 -height 200] 
$swt setwidget $sft 
set tab [canvas [$sft getframe].tab -width 50000 -height 200 -background black] 
# Draw an horizontal line on the canvas 
$tab create line 0 100 50000 100 -width 1 -fill white 

pack $tab -fill both -expand yes -anchor nw 
pack $swt -fill both -expand yes -anchor nw 

# Create a ScrolledWindow for the second pane 
set swl [ScrolledWindow [$tfi getframe].swl -relief sunken -borderwidth 2 -scrollbar vertical -auto both] 
pack $swl -expand yes -fill both 

# Display the window manager 
wm minsize . 600 350 
wm deiconify . 
wm protocol . WM_DELETE_WINDOW {exit} 
bind . <Control-q> {exit} 

在本例中,我使用的「50 000」的寬度爲畫布上,但是當我使用滾動條畫布的黑箱之前結束。同樣的問題也會影響畫布上繪製的水平線。

我錯過了什麼嗎? 畫布的「width」屬性是否有已知限制?

感謝您的幫助

+0

是的,我最近沒有看最近的瀏覽器畫布尺寸最大值,但他們曾經是8k-12k寬度或高度,最大值爲2mb最大。恕我直言,過多的帆布尺寸通常是爲了「扁平化」設計要求而創建的。如果由於畫布大小而遇到問題(例如,您已超出瀏覽器的最大大小),那麼您應該將其作爲信號將您的設計更改爲不太平。 – markE 2014-10-26 21:42:24

+0

渲染所需的緩衝區大小完全取決於視口的大小(畫布的可見部分)。但是,當使用coords從視口中可見的「short」範圍(_after_平移到視口座標)繪製事物時,座標計算會有點不可思議。 – 2014-10-27 10:08:36

回答

2

事情變得有點古怪,如果你讓他們更大的超過32,000名(嚴格32767,有符號çshort的限制)特別是在渲染層(和絕對不犯該大小的畫布視口!)。但是,底層的畫布模型使用IEEE double來存儲座標,所以沒有理由讓事情沒有發生。你只需要保持單個物體的大小。

這是X11的一項遺產,它在很多關鍵結構中使用16位值作爲座標和維度。改變這一點在邏輯上很簡單,而且在實踐中有很多工作要做(假設都在這個地方)。

+0

感謝您的回答。 因此,我可以在畫布上繪製座標高於其視圖大小的圖形項目,並且必須使用滾動條來移動畫布的可視部分? – Chlipouni 2014-10-27 22:56:10