Blame


1 cfa37a7b 2004-04-10 devnull .TH MEMLAYER 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull memdraw, memlalloc, memldelete, memlexpose, memlfree, memlhide, memline, memlnorefresh, memload, memunload, memlorigin, memlsetrefresh, memltofront, memltofrontn, memltorear, memltorearn \- windows of memory-resident images
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .nf
6 cfa37a7b 2004-04-10 devnull .B #include <u.h>
7 cfa37a7b 2004-04-10 devnull .br
8 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
9 cfa37a7b 2004-04-10 devnull .br
10 cfa37a7b 2004-04-10 devnull .B #include <draw.h>
11 cfa37a7b 2004-04-10 devnull .br
12 cfa37a7b 2004-04-10 devnull .B #include <memdraw.h>
13 cfa37a7b 2004-04-10 devnull .br
14 cfa37a7b 2004-04-10 devnull .B #include <memlayer.h>
15 cfa37a7b 2004-04-10 devnull .PP
16 cfa37a7b 2004-04-10 devnull .ft L
17 cfa37a7b 2004-04-10 devnull typedef struct Memscreen Memscreen;
18 cfa37a7b 2004-04-10 devnull typedef struct Memlayer Memlayer;
19 cfa37a7b 2004-04-10 devnull typedef void (*Refreshfn)(Memimage*, Rectangle, void*);
20 cfa37a7b 2004-04-10 devnull .ta 4n +\w'\fLRefreshfn 'u +\w'\fL*frontmost; 'u
21 cfa37a7b 2004-04-10 devnull
22 cfa37a7b 2004-04-10 devnull struct Memscreen
23 cfa37a7b 2004-04-10 devnull {
24 cfa37a7b 2004-04-10 devnull Memimage *frontmost; /* frontmost layer on screen */
25 cfa37a7b 2004-04-10 devnull Memimage *rearmost; /* rearmost layer on screen */
26 cfa37a7b 2004-04-10 devnull Memimage *image; /* upon which all layers are drawn */
27 cfa37a7b 2004-04-10 devnull Memimage *fill; /* if non-zero, picture to use when repainting */
28 cfa37a7b 2004-04-10 devnull };
29 cfa37a7b 2004-04-10 devnull
30 cfa37a7b 2004-04-10 devnull struct Memlayer
31 cfa37a7b 2004-04-10 devnull {
32 cfa37a7b 2004-04-10 devnull Rectangle screenr; /* true position of layer on screen */
33 cfa37a7b 2004-04-10 devnull Point delta; /* add delta to go from image coords to screen */
34 cfa37a7b 2004-04-10 devnull Memscreen *screen; /* screen this layer belongs to */
35 cfa37a7b 2004-04-10 devnull Memimage *front; /* window in front of this one */
36 cfa37a7b 2004-04-10 devnull Memimage *rear; /* window behind this one*/
37 cfa37a7b 2004-04-10 devnull int clear; /* layer is fully visible */
38 cfa37a7b 2004-04-10 devnull Memimage *save; /* save area for obscured parts */
39 cfa37a7b 2004-04-10 devnull Refreshfn refreshfn; /* fn to refresh obscured parts if save==nil */
40 cfa37a7b 2004-04-10 devnull void *refreshptr; /* argument to refreshfn */
41 cfa37a7b 2004-04-10 devnull };
42 cfa37a7b 2004-04-10 devnull .ft
43 cfa37a7b 2004-04-10 devnull .ta \w'\fLMemimage* 'u
44 cfa37a7b 2004-04-10 devnull .PP
45 cfa37a7b 2004-04-10 devnull .B
46 cfa37a7b 2004-04-10 devnull Memimage* memlalloc(Memscreen *s, Rectangle r, Refreshfn fn, void *arg, ulong col)
47 cfa37a7b 2004-04-10 devnull .PP
48 cfa37a7b 2004-04-10 devnull .B void memlnorefresh(Memimage *i, Rectangle r, void *arg)
49 cfa37a7b 2004-04-10 devnull .PP
50 cfa37a7b 2004-04-10 devnull .B
51 cfa37a7b 2004-04-10 devnull int memlsetrefresh(Memimage *i, Refreshfn fn, void *arg)
52 cfa37a7b 2004-04-10 devnull .PP
53 cfa37a7b 2004-04-10 devnull .B
54 cfa37a7b 2004-04-10 devnull int memldelete(Memimage *i)
55 cfa37a7b 2004-04-10 devnull .PP
56 cfa37a7b 2004-04-10 devnull .B
57 cfa37a7b 2004-04-10 devnull int memlfree(Memimage *i)
58 cfa37a7b 2004-04-10 devnull .PP
59 cfa37a7b 2004-04-10 devnull .B
60 cfa37a7b 2004-04-10 devnull int memlexpose(Memimage *i, Rectangle r)
61 cfa37a7b 2004-04-10 devnull .PP
62 cfa37a7b 2004-04-10 devnull .B
63 cfa37a7b 2004-04-10 devnull int memlhide(Memimage *i, Rectangle r)
64 cfa37a7b 2004-04-10 devnull .PP
65 cfa37a7b 2004-04-10 devnull .B
66 cfa37a7b 2004-04-10 devnull void memltofront(Memimage *i)
67 cfa37a7b 2004-04-10 devnull .PP
68 cfa37a7b 2004-04-10 devnull .B
69 cfa37a7b 2004-04-10 devnull void memltofrontn(Memimage**ia, int n)
70 cfa37a7b 2004-04-10 devnull .PP
71 cfa37a7b 2004-04-10 devnull .B
72 cfa37a7b 2004-04-10 devnull void memltorear(Memimage *i)
73 cfa37a7b 2004-04-10 devnull .PP
74 cfa37a7b 2004-04-10 devnull .B
75 cfa37a7b 2004-04-10 devnull void memltorearn(Memimage **ia , int n)
76 cfa37a7b 2004-04-10 devnull .PP
77 cfa37a7b 2004-04-10 devnull .B
78 cfa37a7b 2004-04-10 devnull int memlorigin(Memimage *i, Point log, Point phys)
79 cfa37a7b 2004-04-10 devnull .PP
80 cfa37a7b 2004-04-10 devnull .B
81 cfa37a7b 2004-04-10 devnull void memdraw(Image *dst, Rectangle r,
82 cfa37a7b 2004-04-10 devnull .br
83 cfa37a7b 2004-04-10 devnull .B
84 cfa37a7b 2004-04-10 devnull Image *src, Point sp, Image *mask, Point mp, Drawop op)
85 cfa37a7b 2004-04-10 devnull .fi
86 cfa37a7b 2004-04-10 devnull .B
87 cfa37a7b 2004-04-10 devnull int memload(Memimage *i, Rectangle r,
88 cfa37a7b 2004-04-10 devnull .br
89 cfa37a7b 2004-04-10 devnull .B
90 cfa37a7b 2004-04-10 devnull uchar *buf, int n, int iscompressed)
91 cfa37a7b 2004-04-10 devnull .PP
92 cfa37a7b 2004-04-10 devnull .B
93 cfa37a7b 2004-04-10 devnull int memunload(Memimage *i, Rectangle r,
94 cfa37a7b 2004-04-10 devnull .br
95 cfa37a7b 2004-04-10 devnull .B
96 cfa37a7b 2004-04-10 devnull uchar *buf, int n)
97 cfa37a7b 2004-04-10 devnull .PP
98 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
99 cfa37a7b 2004-04-10 devnull These functions build upon the
100 d32deab1 2020-08-16 rsc .MR memdraw (3)
101 cfa37a7b 2004-04-10 devnull interface to maintain overlapping graphical windows on in-memory images.
102 cfa37a7b 2004-04-10 devnull They are used by the kernel to implement the windows interface presented by
103 d32deab1 2020-08-16 rsc .MR draw (3)
104 cfa37a7b 2004-04-10 devnull and
105 d32deab1 2020-08-16 rsc .MR window (3)
106 cfa37a7b 2004-04-10 devnull and probably have little use outside of the kernel.
107 cfa37a7b 2004-04-10 devnull .PP
108 cfa37a7b 2004-04-10 devnull The basic function is to extend the definition of a
109 cfa37a7b 2004-04-10 devnull .B Memimage
110 cfa37a7b 2004-04-10 devnull (see
111 d32deab1 2020-08-16 rsc .MR memdraw (3) )
112 cfa37a7b 2004-04-10 devnull to include overlapping windows defined by the
113 cfa37a7b 2004-04-10 devnull .B Memlayer
114 cfa37a7b 2004-04-10 devnull type.
115 cfa37a7b 2004-04-10 devnull The first fields of the
116 cfa37a7b 2004-04-10 devnull .B Memlayer
117 cfa37a7b 2004-04-10 devnull structure are identical to those in
118 cfa37a7b 2004-04-10 devnull .BR Memimage ,
119 cfa37a7b 2004-04-10 devnull permitting a function that expects a
120 cfa37a7b 2004-04-10 devnull .B Memimage
121 cfa37a7b 2004-04-10 devnull to be passed a
122 cfa37a7b 2004-04-10 devnull .BR Memlayer ,
123 cfa37a7b 2004-04-10 devnull and vice versa.
124 cfa37a7b 2004-04-10 devnull Both structures have a
125 cfa37a7b 2004-04-10 devnull .B save
126 cfa37a7b 2004-04-10 devnull field, which is nil in a
127 cfa37a7b 2004-04-10 devnull .B Memimage
128 cfa37a7b 2004-04-10 devnull and points to `backing store' in a
129 cfa37a7b 2004-04-10 devnull .BR Memlayer .
130 cfa37a7b 2004-04-10 devnull The layer routines accept
131 cfa37a7b 2004-04-10 devnull .B Memimages
132 cfa37a7b 2004-04-10 devnull or
133 cfa37a7b 2004-04-10 devnull .BR Memlayers ;
134 cfa37a7b 2004-04-10 devnull if the image is a
135 cfa37a7b 2004-04-10 devnull .B Memimage
136 cfa37a7b 2004-04-10 devnull the underlying
137 cfa37a7b 2004-04-10 devnull .B Memimage
138 cfa37a7b 2004-04-10 devnull routine is called; otherwise the layer routines recursively
139 cfa37a7b 2004-04-10 devnull subdivide the geometry, reducing the operation into a smaller
140 cfa37a7b 2004-04-10 devnull component that ultimately can be performed on a
141 cfa37a7b 2004-04-10 devnull .BR Memimage ,
142 cfa37a7b 2004-04-10 devnull either the display on which the window appears, or the backing store.
143 cfa37a7b 2004-04-10 devnull .PP
144 cfa37a7b 2004-04-10 devnull .B Memlayers
145 cfa37a7b 2004-04-10 devnull are associated with a
146 cfa37a7b 2004-04-10 devnull .B Memscreen
147 cfa37a7b 2004-04-10 devnull that holds the data structures to maintain the windows and connects
148 cfa37a7b 2004-04-10 devnull them to the associated
149 cfa37a7b 2004-04-10 devnull .BR image .
150 cfa37a7b 2004-04-10 devnull The
151 cfa37a7b 2004-04-10 devnull .B fill
152 cfa37a7b 2004-04-10 devnull color is used to paint the background when a window is deleted.
153 cfa37a7b 2004-04-10 devnull There is no function to establish a
154 cfa37a7b 2004-04-10 devnull .BR Memscreen ;
155 cfa37a7b 2004-04-10 devnull to create one, allocate the memory, zero
156 cfa37a7b 2004-04-10 devnull .B frontmost
157 cfa37a7b 2004-04-10 devnull and
158 cfa37a7b 2004-04-10 devnull .BR rearmost ,
159 cfa37a7b 2004-04-10 devnull set
160 cfa37a7b 2004-04-10 devnull .B fill
161 cfa37a7b 2004-04-10 devnull to a valid fill color or image, and set
162 cfa37a7b 2004-04-10 devnull .B image
163 cfa37a7b 2004-04-10 devnull to the
164 cfa37a7b 2004-04-10 devnull .B Memimage
165 cfa37a7b 2004-04-10 devnull (or
166 cfa37a7b 2004-04-10 devnull .BR Memlayer )
167 cfa37a7b 2004-04-10 devnull on which the windows will be displayed.
168 cfa37a7b 2004-04-10 devnull .PP
169 cfa37a7b 2004-04-10 devnull .I Memlalloc
170 cfa37a7b 2004-04-10 devnull allocates a
171 cfa37a7b 2004-04-10 devnull .B Memlayer
172 cfa37a7b 2004-04-10 devnull of size
173 cfa37a7b 2004-04-10 devnull .I r
174 cfa37a7b 2004-04-10 devnull on
175 cfa37a7b 2004-04-10 devnull .B Memscreen
176 cfa37a7b 2004-04-10 devnull .IR s .
177 cfa37a7b 2004-04-10 devnull If
178 cfa37a7b 2004-04-10 devnull .I col
179 cfa37a7b 2004-04-10 devnull is not
180 cfa37a7b 2004-04-10 devnull .BR DNofill ,
181 cfa37a7b 2004-04-10 devnull the new window will be initialized by painting it that color.
182 cfa37a7b 2004-04-10 devnull .PP
183 cfa37a7b 2004-04-10 devnull The refresh function
184 cfa37a7b 2004-04-10 devnull .I fn
185 cfa37a7b 2004-04-10 devnull and associated argument
186 cfa37a7b 2004-04-10 devnull .I arg
187 cfa37a7b 2004-04-10 devnull will be called by routines in the library to restore portions of the window
188 cfa37a7b 2004-04-10 devnull uncovered due to another window being deleted or this window being pulled to the front of the stack.
189 cfa37a7b 2004-04-10 devnull The function, when called,
190 cfa37a7b 2004-04-10 devnull receives a pointer to the image (window) being refreshed, the rectangle that has been uncovered,
191 cfa37a7b 2004-04-10 devnull and the
192 cfa37a7b 2004-04-10 devnull .I arg
193 cfa37a7b 2004-04-10 devnull recorded when the window was created.
194 cfa37a7b 2004-04-10 devnull A couple of predefined functions provide built-in management methods:
195 cfa37a7b 2004-04-10 devnull .I memlnorefresh
196 cfa37a7b 2004-04-10 devnull does no backup at all, useful for making efficient temporary windows;
197 cfa37a7b 2004-04-10 devnull while a
198 cfa37a7b 2004-04-10 devnull .I nil
199 cfa37a7b 2004-04-10 devnull function specifies that the backing store
200 cfa37a7b 2004-04-10 devnull .RB ( Memlayer.save )
201 cfa37a7b 2004-04-10 devnull will be used to keep the obscured data.
202 cfa37a7b 2004-04-10 devnull Other functions may be provided by the client.
203 cfa37a7b 2004-04-10 devnull .I Memlsetrefresh
204 cfa37a7b 2004-04-10 devnull allows one to change the function associated with the window.
205 cfa37a7b 2004-04-10 devnull .PP
206 cfa37a7b 2004-04-10 devnull .I Memldelete
207 cfa37a7b 2004-04-10 devnull deletes the window
208 cfa37a7b 2004-04-10 devnull .IR i ,
209 cfa37a7b 2004-04-10 devnull restoring the underlying display.
210 cfa37a7b 2004-04-10 devnull .I Memlfree
211 cfa37a7b 2004-04-10 devnull frees the data structures without unlinking the window from the associated
212 cfa37a7b 2004-04-10 devnull .B Memscreen
213 cfa37a7b 2004-04-10 devnull or doing any graphics.
214 cfa37a7b 2004-04-10 devnull .PP
215 cfa37a7b 2004-04-10 devnull .I Memlexpose
216 cfa37a7b 2004-04-10 devnull restores rectangle
217 cfa37a7b 2004-04-10 devnull .I r
218 cfa37a7b 2004-04-10 devnull within the window, using the backing store or appropriate refresh method.
219 cfa37a7b 2004-04-10 devnull .I Memlhide
220 cfa37a7b 2004-04-10 devnull goes the other way, backing up
221 cfa37a7b 2004-04-10 devnull .I r
222 cfa37a7b 2004-04-10 devnull so that that portion of the screen may be modified without losing the data in this window.
223 cfa37a7b 2004-04-10 devnull .PP
224 cfa37a7b 2004-04-10 devnull .I Memltofront
225 cfa37a7b 2004-04-10 devnull pulls
226 cfa37a7b 2004-04-10 devnull .I i
227 cfa37a7b 2004-04-10 devnull to the front of the stack of windows, making it fully visible.
228 cfa37a7b 2004-04-10 devnull .I Memltofrontn
229 cfa37a7b 2004-04-10 devnull pulls the
230 cfa37a7b 2004-04-10 devnull .I n
231 cfa37a7b 2004-04-10 devnull windows in the array
232 cfa37a7b 2004-04-10 devnull .I ia
233 cfa37a7b 2004-04-10 devnull to the front as a group, leaving their internal order unaffected.
234 cfa37a7b 2004-04-10 devnull .I Memltorear
235 cfa37a7b 2004-04-10 devnull and
236 cfa37a7b 2004-04-10 devnull .I memltorearn
237 cfa37a7b 2004-04-10 devnull push the windows to the rear.
238 cfa37a7b 2004-04-10 devnull .PP
239 cfa37a7b 2004-04-10 devnull .I Memlorigin
240 cfa37a7b 2004-04-10 devnull changes the coordinate systems associated with the window
241 cfa37a7b 2004-04-10 devnull .IR i .
242 cfa37a7b 2004-04-10 devnull The points
243 cfa37a7b 2004-04-10 devnull .I log
244 cfa37a7b 2004-04-10 devnull and
245 cfa37a7b 2004-04-10 devnull .I phys
246 cfa37a7b 2004-04-10 devnull represent the upper left corner
247 cfa37a7b 2004-04-10 devnull .RB ( min )
248 cfa37a7b 2004-04-10 devnull of the window's internal coordinate system and its physical location on the screen.
249 cfa37a7b 2004-04-10 devnull Changing
250 cfa37a7b 2004-04-10 devnull .I log
251 cfa37a7b 2004-04-10 devnull changes the interpretation of coordinates within the window; for example, setting it to
252 cfa37a7b 2004-04-10 devnull (0,\ 0) makes the upper left corner of the window appear to be the origin of the coordinate
253 cfa37a7b 2004-04-10 devnull system, regardless of its position on the screen.
254 cfa37a7b 2004-04-10 devnull Changing
255 cfa37a7b 2004-04-10 devnull .I phys
256 cfa37a7b 2004-04-10 devnull changes the physical location of the window on the screen.
257 cfa37a7b 2004-04-10 devnull When a window is created, its logical and physical coordinates are the same, so
258 cfa37a7b 2004-04-10 devnull .EX
259 cfa37a7b 2004-04-10 devnull memlorigin(i, i->r.min, i->r.min)
260 cfa37a7b 2004-04-10 devnull .EE
261 cfa37a7b 2004-04-10 devnull would be a no-op.
262 cfa37a7b 2004-04-10 devnull .PP
263 cfa37a7b 2004-04-10 devnull .I Memdraw
264 cfa37a7b 2004-04-10 devnull and
265 cfa37a7b 2004-04-10 devnull .I memline
266 cfa37a7b 2004-04-10 devnull are implemented in the layer library but provide the main entry points for drawing on
267 cfa37a7b 2004-04-10 devnull memory-resident windows.
268 cfa37a7b 2004-04-10 devnull They have the signatures of
269 cfa37a7b 2004-04-10 devnull .I memimagedraw
270 cfa37a7b 2004-04-10 devnull and
271 cfa37a7b 2004-04-10 devnull .I memimageline
272 cfa37a7b 2004-04-10 devnull (see
273 d32deab1 2020-08-16 rsc .MR memdraw (3) )
274 cfa37a7b 2004-04-10 devnull but accept
275 cfa37a7b 2004-04-10 devnull .B Memlayer
276 cfa37a7b 2004-04-10 devnull or
277 cfa37a7b 2004-04-10 devnull .B Memimage
278 cfa37a7b 2004-04-10 devnull arguments both.
279 cfa37a7b 2004-04-10 devnull .PP
280 cfa37a7b 2004-04-10 devnull .I Memload
281 cfa37a7b 2004-04-10 devnull and
282 cfa37a7b 2004-04-10 devnull .I memunload
283 cfa37a7b 2004-04-10 devnull are similarly layer-savvy versions of
284 cfa37a7b 2004-04-10 devnull .I loadmemimage
285 cfa37a7b 2004-04-10 devnull and
286 cfa37a7b 2004-04-10 devnull .IR unloadmemimage .
287 cfa37a7b 2004-04-10 devnull The
288 cfa37a7b 2004-04-10 devnull .I iscompressed
289 cfa37a7b 2004-04-10 devnull flag to
290 cfa37a7b 2004-04-10 devnull .I memload
291 cfa37a7b 2004-04-10 devnull specifies whether the
292 cfa37a7b 2004-04-10 devnull .I n
293 cfa37a7b 2004-04-10 devnull bytes of data in
294 cfa37a7b 2004-04-10 devnull .I buf
295 cfa37a7b 2004-04-10 devnull are in compressed image format
296 cfa37a7b 2004-04-10 devnull (see
297 d32deab1 2020-08-16 rsc .MR image (7) ).
298 cfa37a7b 2004-04-10 devnull .SH SOURCE
299 57a2289b 2006-06-25 devnull .B \*9/src/libmemlayer
300 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
301 d32deab1 2020-08-16 rsc .MR graphics (3) ,
302 d32deab1 2020-08-16 rsc .MR memdraw (3) ,
303 d32deab1 2020-08-16 rsc .MR stringsize (3) ,
304 d32deab1 2020-08-16 rsc .MR window (3) ,
305 d32deab1 2020-08-16 rsc .MR draw (3)