[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
Title: | DECWINDOWS 26-JAN-89 to 29-NOV-90 |
Notice: | See 1639.0 for VMS V5.3 kit; 2043.0 for 5.4 IFT kit |
Moderator: | STAR::VATNE |
|
Created: | Mon Oct 30 1989 |
Last Modified: | Mon Dec 31 1990 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 3726 |
Total number of notes: | 19516 |
1028.0. "clipping rectangle bug?" by CSC32::B_BRADACH () Wed Jun 28 1989 11:26
I have a customer who has written the following pascal application.
He is attempting to draw some simple lines and use a clipping rectangle
on the output. Everything works okay for the first set of lines,
however the second set of lines does not display correctly. We have
tried this on a VAXstation running VMS5.2. Has anyone seen this
problem, is there a "bug" in the vax bindings for this routine, or is
he just doing something wrong.
The output should consist of three lines, first one solid
and the next two dashed followed by another set of lines at the
same x value that are identical. However, the first dashed
line of the second set does not display when using the clipping rectangle.
The Pascal code follows. Any and all help or suggestions are greatly
appreciated.
bernie
csc/cs
cut here
-------------------------------------------------------------------------
[INHERIT ('sys$library:decw$xlibdef.pen')]
program SAMPLE_PROGRAM(INPUT, OUTPUT);
type
STRING_19 = varying [19] of char;
STRING_60 = varying [60] of char;
$BYTE = [BYTE] -128 .. 127;
var
DISPLAY : UNSIGNED;
SCREEN : UNSIGNED;
WINDOW : UNSIGNED;
ATTR_MASK : [STATIC] UNSIGNED := ZERO;
GC_MASK : [STATIC] UNSIGNED := ZERO;
GC : [STATIC] UNSIGNED := ZERO;
WINDOW_X, WINDOW_Y : INTEGER;
DEPTH : INTEGER;
STATUS : INTEGER;
VISUAL : X$VISUAL;
XSWDA : [STATIC] X$SET_WIN_ATTRIBUTES := ZERO;
XGCVL : [STATIC] X$GC_VALUES := ZERO;
XSZHN : [STATIC] X$SIZE_HINTS:= ZERO;
EVENT : X$EVENT;
WINDOW_NAME : STRING_19;
WINDOW_W, WINDOW_H : INTEGER;
RECTANGLE : X$RECTANGLE;
(*--------------------------------------------------------------------------------------------------
procedure define_line_style(style : integer);
var
DASH_LIST : array [1..3] of $BYTE;
begin
case style of
1 : X$SET_LINE_ATTRIBUTES(DISPLAY, GC, 2, X$C_LINE_SOLID, X$C_CAP_BUTT, X$C_JOIN_MITER);
2 : begin
DASH_LIST[1] := 6;
DASH_LIST[2] := 3;
X$SET_DASHES(DISPLAY, GC, 0, DASH_LIST, 2);
X$SET_LINE_ATTRIBUTES(DISPLAY, GC, 2, X$C_LINE_DOUBLE_DASH, X$C_CAP_BUTT, X$C_JOIN_MITE
end;
end;
end;
(*--------------------------------------------------------------------------------------------------
begin
WINDOW_NAME := 'Sample XLib Program';
WINDOW_W := 800;
WINDOW_H := 800;
DISPLAY := X$OPEN_DISPLAY;
if (DISPLAY = 0) then
writeln('DISPLAY NOT OPENED');
x$synchronize ( display, 1, %ref 0);
SCREEN := X$DEFAULT_SCREEN_OF_DISPLAY(DISPLAY);
WINDOW_X := 10;
WINDOW_Y := 10;
DEPTH := X$DEFAULT_DEPTH_OF_SCREEN(SCREEN);
X$DEFAULT_VISUAL_OF_SCREEN(SCREEN, VISUAL);
ATTR_MASK := UOR(X$M_CW_EVENT_MASK, X$M_CW_BACK_PIXEL);
XSWDA.X$L_SWDA_EVENT_MASK := INT(UOR(X$M_EXPOSURE, X$M_BUTTON_PRESS));
XSWDA.X$L_SWDA_BACKGROUND_PIXEL := X$WHITE_PIXEL_OF_SCREEN(SCREEN);
WINDOW := X$CREATE_WINDOW(DISPLAY, X$ROOT_WINDOW_OF_SCREEN(SCREEN),
WINDOW_X, WINDOW_Y, WINDOW_W, WINDOW_H, 0,
DEPTH, X$C_INPUT_OUTPUT, VISUAL, ATTR_MASK, XSWDA);
GC_MASK := UOR(X$M_GC_FOREGROUND, X$M_GC_BACKGROUND);
GC_MASK := UOR(GC_MASK, X$M_GC_DASH_OFFSET);
GC_MASK := UOR(GC_MASK, X$M_GC_DASH_LIST);
GC_MASK := UOR(GC_MASK, X$M_GC_CLIP_X_ORIGIN);
GC_MASK := UOR(GC_MASK, X$M_GC_CLIP_Y_ORIGIN);
GC_MASK := UOR(GC_MASK, X$M_GC_CLIP_MASK);
XGCVL.X$L_GCVL_FOREGROUND := X$BLACK_PIXEL_OF_SCREEN(SCREEN);
XGCVL.X$L_GCVL_BACKGROUND := X$WHITE_PIXEL_OF_SCREEN(SCREEN);
GC := X$DEFAULT_GC( DISPLAY, 0);
{
GC := X$CREATE_GC(DISPLAY, WINDOW, GC_MASK, XGCVL);
}
XSZHN.X$L_SZHN_X := 10;
XSZHN.X$L_SZHN_Y := 10;
XSZHN.X$L_SZHN_WIDTH := 800;
XSZHN.X$L_SZHN_HEIGHT := 800;
XSZHN.X$L_SZHN_FLAGS := UOR(X$M_P_POSITION, X$M_P_SIZE);
X$SET_NORMAL_HINTS(DISPLAY, WINDOW, XSZHN);
X$STORE_NAME(DISPLAY, WINDOW, WINDOW_NAME);
X$MAP_WINDOW(DISPLAY, WINDOW);
X$NEXT_EVENT(DISPLAY, EVENT);
RECTANGLE.X$W_GREC_X := 0;
RECTANGLE.X$W_GREC_Y := 0;
RECTANGLE.X$W_GREC_WIDTH := 200;
RECTANGLE.X$W_GREC_HEIGHT := 200;
X$SET_CLIP_RECTANGLES(DISPLAY, GC, 0, 0, RECTANGLE, 1, X$C_UNSORTED);
define_line_style(1);
x$draw_line(display, window, gc, 100, 100, 150, 100);
define_line_style(2);
x$draw_line(display, window, gc, 100, 110, 150, 110);
x$draw_line(display, window, gc, 100, 120, 150, 120);
RECTANGLE.X$W_GREC_X := 0;
RECTANGLE.X$W_GREC_Y := 0;
RECTANGLE.X$W_GREC_WIDTH := 400;
RECTANGLE.X$W_GREC_HEIGHT := 400;
X$SET_CLIP_RECTANGLES(DISPLAY, GC, 0, 0, RECTANGLE, 1, X$C_UNSORTED);
define_line_style(1);
x$draw_line(display, window, gc, 300, 100, 350, 100);
define_line_style(2);
x$draw_line(display, window, gc, 300, 110, 350, 110);
x$draw_line(display, window, gc, 300, 120, 350, 120);
X$NEXT_EVENT(DISPLAY, EVENT);
X$UNMAP_WINDOW(DISPLAY, WINDOW);
X$DESTROY_WINDOW(DISPLAY, WINDOW);
X$CLOSE_DISPLAY(DISPLAY);
end.
T.R | Title | User | Personal Name | Date | Lines |
---|
1028.1 | spr'd | CSC32::B_BRADACH | | Thu Aug 10 1989 12:18 | 6 |
| problem has been spr'd
bernie
csc/cs
|