画布的宽度有限制吗?

3

画布的属性“width”是否有限制?

在以下示例中,我在一个滚动窗口中创建了一个画布。

# 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”作为画布的宽度,但当我使用滚动条时,画布的黑色框在之前就结束了。同样的问题也影响了在画布上绘制的水平线。
我错过了什么吗?canvas的“width”属性有已知的限制吗?
谢谢您的帮助。

是的,我最近没有查看过浏览器画布大小的最大值,但它们曾经是8k-12k宽度或高度和最大2mb像素。在我看来,过度的画布大小通常是为了“平铺”设计要求而创建的。如果由于画布大小的原因而遇到问题(例如,您已超出浏览器的最大大小),那么您应该将其视为改变设计以使其更少平面化的信号。 - markE
渲染所需缓冲区的大小纯粹取决于视口(画布的可见部分)的大小。但是,当使用超出“short”范围的坐标(在转换为视口坐标后)绘制可在视口中看到的内容时,坐标计算会有些问题。 - Donal Fellows
1个回答

3
如果您将它们变得大于32,000(严格为32767,即C中已签署的short限制),特别是在渲染层面上(绝对不要使画布视口达到这个大小!),事情会有点奇怪。然而,底层画布模型使用IEEE double来存储坐标,因此您无法使物体移动得更远。您只需保持单个对象的大小即可。
这一切都是X11的遗留问题,它在许多关键结构中使用16位值来表示坐标和尺寸。理论上更改这一点很容易,但实际上需要大量工作(假设都是混乱的) 。

谢谢你的回答。 所以我可以在画布上绘制坐标高于其视图大小的图形项,而我必须使用滚动条来移动可视部分的画布吗? - Chlipouni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接