home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!charon.amdahl.com!pacbell.com!mips!swrinde!elroy.jpl.nasa.gov!ames!agate!sprite.Berkeley.EDU!ouster
- From: ouster@sprite.Berkeley.EDU (John Ousterhout)
- Newsgroups: comp.lang.tcl
- Subject: Re: canvas problem
- Message-ID: <16tqdfINNhf0@agate.berkeley.edu>
- Date: 19 Aug 92 15:46:55 GMT
- References: <1992Aug18.023804.25826@Arco.COM>
- Organization: U.C. Berkeley Sprite Project
- Lines: 62
- NNTP-Posting-Host: tyranny.berkeley.edu
-
- In article <1992Aug18.023804.25826@Arco.COM>, cgp@Arco.COM (Chris Phillips (214) 754-6419) writes:
- |> For some reason the following script doesn't give the expected results.
- |> It creates two canvases: one horizontal and one vertical. They should
- |> each create 10 squares, all in a row. The horizontal canvas is ok, but
- |> only 2 squares show up in the vertical canvas.
- |>
- |>
- |> #!/usr/local/bin/wish -f
- |>
- |> proc trash {w doy} {
- |> toplevel $w
- |> if {$doy == 1} {
- |> canvas $w.c -width 1c -height 10c
- |> $w.c create rectangle 0 0 1c 10c -fill red
- |> for {set j 1} {$j <= 10} {incr j} {
- |> $w.c create rectangle \
- |> 0 [expr $j-1]c 1c ${j}c \
- |> -outline black -fill blue
- |> }
- |> } else {
- |> canvas $w.c -width 10c -height 1c
- |> $w.c create rectangle 0 0 10c 1c -fill red
- |> for {set i 1} {$i <= 10} {incr i} {
- |> $w.c create rectangle \
- |> [expr $i-1]c 0 ${i}c 1c \
- |> -outline black -fill blue
- |> }
- |> }
- |>
- |> pack append $w $w.c {expand fill}
- |> }
- |>
- |> trash .t0 0
- |> trash .t1 1
- |> message .m -text "Horizontal: 10 blue squares\nVertical: 2 blue squares" \
- |> -aspect 1500 -justify center
- |> pack append . .m {expand fill}
- |>
- |>
-
- Oops. There's a bug in tkCanvas.c that's causing the lower boxes not to
- be redisplayed properly. Here is a patch to fix the problem:
-
- *** tkCanvas.orig Wed Aug 19 08:45:10 1992
- --- tkCanvas.c Wed Aug 19 08:45:38 1992
- ***************
- *** 1546,1552 ****
- screenX1 = canvasPtr->xOrigin;
- screenY1 = canvasPtr->yOrigin;
- screenX2 = screenX1 + Tk_Width(tkwin);
- ! screenY2 = screenY1 + Tk_Width(tkwin);
- if (canvasPtr->redrawX1 > screenX1) {
- screenX1 = canvasPtr->redrawX1;
- }
- --- 1546,1552 ----
- screenX1 = canvasPtr->xOrigin;
- screenY1 = canvasPtr->yOrigin;
- screenX2 = screenX1 + Tk_Width(tkwin);
- ! screenY2 = screenY1 + Tk_Height(tkwin);
- if (canvasPtr->redrawX1 > screenX1) {
- screenX1 = canvasPtr->redrawX1;
- }
-