[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference bulova::decw_jan-89_to_nov-90

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.RTitleUserPersonal
Name
DateLines
1028.1spr'dCSC32::B_BRADACHThu Aug 10 1989 12:186
    problem has been spr'd
    
    bernie
    csc/cs