Article View: comp.sys.sun
Article #13620bug in sunview under 4.0
From: jaksa
Date: Mon, 05 Feb 1990 19:43
Date: Mon, 05 Feb 1990 19:43
130 lines
3858 bytes
3858 bytes
A developer of sunview-based software has run into an anomaly using
sunview. The problem is explained in the header comment of the following
small program that demonstrates the problem.
Any information or insight regarding this would be appreciated.
Thanks,
Rob Jaksa
/* This small program illustrates what I take to be a bug in
the SUNVIEW software system. The program creates a canvas
window within a Frame. The canvas handler simply calls the
draw_and_erase routine, which draws a line segment within the
canvas using two points input by two LEFT mouse clicks. A
third mouse click should erase the line. The program works as
expected on Sun3 terminals and on Color Sparc stations. However,
on Monochrome Sparc stations the line segment is not always
completely erased. Line segments that are more than about
45 degrees to the horizontal are only partially erased;
sometimes most and sometimes very little of the line is
removed.
Compilation: cc demo.c -lsuntool -lsunwindow -lpixrect
*/
#include <stdio.h>
#include <suntool/sunview.h>
#include <suntool/canvas.h>
Frame base_frame;
Canvas canvas;
Pixwin *canvas_pw;
Rect *canvas_rect;
static void
canvas_handler(canvas, event, arg)
Canvas canvas;
Event *event;
caddr_t arg;
{
if (!((event_id(event) == LOC_STILL) &&
(event_id(event) == LOC_MOVE))) {
draw_and_erase();
}
}
draw_and_erase()
{
int x1,
y1,
x2,
y2;
Event event;
printf("\n enter draw and erase ");
/* wait for left click for first endpoint */
do {
window_read_event(canvas, &event);
if ((event_id(&event) == LOC_RGNEXIT) ||
(event_id(&event) == LOC_WINEXIT)) {
printf(" leave window \n");
return;
}
} while (event_id(&event) != MS_LEFT);
x1 = event_x(&event);
y1 = event_y(&event);
/* wait for left click for second endpoint */
do {
window_read_event(canvas, &event);
if ((event_id(&event) == LOC_RGNEXIT) ||
(event_id(&event) == LOC_WINEXIT)) {
printf(" leave window \n");
return;
}
} while (event_id(&event) != MS_LEFT);
x2 = event_x(&event);
y2 = event_y(&event);
/* draw edge */
pw_vector(canvas_pw, x1, y1, x2, y2, PIX_SRC, 1);
/* wait for left click to erase edge */
do {
window_read_event(canvas, &event);
if ((event_id(&event) == LOC_RGNEXIT) ||
(event_id(&event) == LOC_WINEXIT)) {
printf(" leave window \n");
return;
}
} while (event_id(&event) != MS_LEFT);
/* erase edge */
pw_vector(canvas_pw, x1, y1, x2, y2, PIX_NOT(PIX_SRC) & PIX_DST, 1);
}
main()
{
base_frame =
window_create(0, FRAME,
WIN_X, 100,
WIN_Y, 100,
WIN_WIDTH, 500,
WIN_HEIGHT, 500,
FRAME_SUBWINDOWS_ADJUSTABLE, FALSE, 0);
canvas =
window_create(base_frame, CANVAS,
WIN_EVENT_PROC, canvas_handler,
WIN_WIDTH, 500,
WIN_HEIGHT, 500,
WIN_IGNORE_PICK_EVENTS, WIN_UP_EVENTS, 0,
WIN_IGNORE_KBD_EVENT, WIN_NO_EVENTS,
CANVAS_FIXED_IMAGE, TRUE,
CANVAS_FAST_MONO, TRUE,
0);
window_set(canvas, WIN_CONSUME_PICK_EVENTS, LOC_STILL, LOC_RGNENTER, LOC_RGNEXIT, 0);
canvas_pw = canvas_pixwin(canvas);
canvas_rect = (Rect *) window_get(canvas, WIN_RECT);
window_main_loop(base_frame);
exit(0);
}
Technical Details
Message-ID:
<4717@brazos.Rice.edu>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!mcgill-vision!bloom-beacon!snorkelwacker!think!samsung!cs.utexas.edu!rice!sun-spots-requestShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!mcgill-vision!bloom-beacon!snorkelwacker!think!samsung!cs.utexas.edu!rice!sun-spots-request From: jaksa@cpswh.cps.msu.edu Newsgroups: comp.sys.sun Subject: bug in sunview under 4.0 Keywords: SunOS Message-ID: <4717@brazos.Rice.edu> Date: 5 Feb 90 19:43:59 GMT Sender: root@rice.edu Organization: Sun-Spots Lines: 130 Approved: Sun-Spots@rice.edu X-Sun-Spots-Digest: Volume 9, Issue 26, message 4 of 6