Drawing a Textured Background

The window would look more interesting with a textured background. We decide that a 4x4 pixmap with two lines between opposite corners forming an X would make an interesting background texture.

     | ?- create_pixmap(Pix, [size(4,4)]),
             draw_segments(Pix, [segment(0,0,3,3), segment(0,3,3,0)]),
             win(Window),
             put_window_attributes(Window, [background(Pix)]).
     
     Pix = pixmap(2383840),
     Window = window(2376568)
     

The first line is as simple as it looks: it creates a 4x4 pixel pixmap. The second line draws the X. Note that coordinates are given with (0,0) as the northwest corner pixel, so (3,3) is the southeast corner. Then the third line installs the new pixmap as the background pattern.

You might be wondering why the window didn't change. The reason is simple: the background is used to fill parts of the window that have been cleared. The easiest way to get the new background displayed is to use your window manager to either iconify and then uniconify the window, or to push it behind another window and then pull it back to the front. You could also do it by calling

     | ?- win(Window),
          clear_window(Window).
     
     Window = window(2376568)
     

Again we need to refresh the window:

     | ?- win(Window),
          draw_string(Window, 2, 19, 'Hello, world!!').
     
     Window = window(2376568)
     

That doesn't look terribly interesting. Try drawing the string in white instead of black.

     | ?- win(Window),
          get_screen_attributes([white_pixel(Pix)]),
          put_graphics_attributes(Window, [foreground(Pix)]),
          draw_string(Window, 2, 19, 'Hello, world!!').
     
     Window = window(2376568),
     Pix = 0
     

The second line determines the pixel value for white on our screen. X does not establish a standard pixel value for black and white, so you must determine it explicitly. In fact, X doesn't even guarantee that the black_pixel/1 and white_pixel/1 attributes will yield black and white, but they are logical black and white.

The third line sets the foreground color, the color to draw in, to white. Finally, we draw our message. The default drawing color in ProXL is black_pixel; this is why you didn't have to specify it earlier. But now that we've specified white, all drawing will be done in white until we change it again.