Annotation of researchv10dc/630/man/src/p_man/man3/screenswap.3r, revision 1.1.1.1

1.1       root        1: .ds ZZ DEVELOPMENT PACKAGE
                      2: .TH SCREENSWAP 3R "630 MTG"
                      3: .XE "screenswap()"
                      4: .SH NAME  
                      5: screenswap \- swap screen Rectangle and Bitmap
                      6: .SH SYNOPSIS
                      7: .ft B
                      8: #include <dmd.h>
                      9: .sp
                     10: void screenswap (b, r, s) 
                     11: .br
                     12: Bitmap \(**b;
                     13: .br 
                     14: Rectangle r, s; 
                     15: .SH DESCRIPTION
                     16: The
                     17: .I screenswap
                     18: function
                     19: does an in-place exchange of the Rectangle
                     20: .I r
                     21: within the Bitmap
                     22: .I b
                     23: and screen rectangle
                     24: .IR s.
                     25: This exchange is done by \fIbitblt\fR'ing the bitmaps back and forth
                     26: three times in XOR mode. This technique allows bitmaps to be exchanged
                     27: without need for intermediate storage.
                     28: .PP
                     29: The action of screenswap is undefined, if
                     30: .I r
                     31: and
                     32: .I s
                     33: are not the same size.
                     34: .PP
                     35: .I Screenswap
                     36: writes to the
                     37: .I physical
                     38: bitmap, so the
                     39: .I s
                     40: argument
                     41: is clipped to the screen,
                     42: not to the window's rectangle (display.rect).
                     43: .SH EXAMPLE
                     44: The following program floats a picture of a sailboat
                     45: across the screen.
                     46: .PP
                     47: The 630 MTG mouse cursor is painted in XOR mode and therefore
                     48: changes to inverse video when it moves over highlighted areas. This sailboat,
                     49: however, does not inverse video when it moves over parts of the
                     50: screen that are highlighted. This is accomplished by saving
                     51: whatever is on the screen in the spot where the sailboat is currently
                     52: painted and restoring the screen when the sailboat moves. The unique
                     53: aspect of this is that the same physical memory is used to alternately
                     54: store the picture of the sailboat and the saved screen rectangle, and
                     55: these two bitmaps are swapped without use of intermediate storage.
                     56: .PP
                     57: .RS 3
                     58: .nf
                     59: .ft CM
                     60: #include <dmd.h>
                     61: 
                     62: unsigned short sailicon[] = {
                     63:        0xFDFF, 0xF9FF, 0xF1FF, 0xE0FF,
                     64:        0xFD7F, 0xF9BF, 0xF5DF, 0xEDEF,
                     65:        0xDDF7, 0xDDF7, 0xBDFB, 0xB8FB,
                     66:        0x0000, 0x8003, 0xE007, 0xFFFF,
                     67: };
                     68: 
                     69: Bitmap sailmap = {
                     70:        (Word *)sailicon,
                     71:        1,
                     72:        (short)0, (short)0, (short)16, (short)16,
                     73:        (char *)0
                     74: };
                     75: 
                     76: extern Rectangle fRpt();
                     77: extern Rectangle raddp();
                     78: 
                     79: main()
                     80: {
                     81:        Rectangle r;
                     82: 
                     83:        r = fRpt(0, YMAX/2-8, 16, YMAX/2+8);
                     84: 
                     85:        /* put the sailboat onto the screen */
                     86:        screenswap(&sailmap, sailmap.rect, r);
                     87: 
                     88:        /* move the sailboat across the screen */
                     89:        while(r.corner.x <= YMAX) {
                     90:                sleep(3);
                     91:                screenswap(&sailmap, sailmap.rect, r);
                     92:                r = raddp(r, Pt(1,0));
                     93:                screenswap(&sailmap, sailmap.rect, r);
                     94:        }
                     95: 
                     96:        /* remove the sailboat for the last time */
                     97:        screenswap(&sailmap, sailmap.rect, r);
                     98: }
                     99: \fR
                    100: .fi
                    101: .RE
                    102: .PP
                    103: This example is very similar to how message boxes are implemented.
                    104: Message boxes are rectangles containing messages which float
                    105: around the screen when the mouse moves.
                    106: .SH SEE ALSO
                    107: bitblt(3R), msgbox(3R).

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.