xref: /dragonfly/lib/libvgl/vgl.3 (revision c9f721c2)
1.\" Copyright (c) 1997 S�ren Schmidt
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer,
9.\"    in this position and unchanged.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\" 3. The name of the author may not be used to endorse or promote products
14.\"    derived from this software without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26.\"
27.\" $FreeBSD: src/lib/libvgl/vgl.3,v 1.12.2.8 2001/12/17 10:08:35 ru Exp $
28.\" $DragonFly: src/lib/libvgl/vgl.3,v 1.3 2004/03/11 12:28:53 hmp Exp $
29.Dd November 7, 1999
30.Dt VGL 3
31.Os
32.Sh NAME
33.Nm VGLBitmapAllocateBits ,
34.Nm VGLBitmapCopy ,
35.Nm VGLBitmapCreate ,
36.Nm VGLBitmapDestroy ,
37.Nm VGLBitmapPutChar ,
38.Nm VGLBitmapString ,
39.Nm VGLBlankDisplay ,
40.Nm VGLBox ,
41.Nm VGLCheckSwitch ,
42.Nm VGLClear ,
43.Nm VGLEllipse ,
44.Nm VGLEnd ,
45.Nm VGLFilledBox ,
46.Nm VGLFilledEllipse ,
47.Nm VGLGetXY ,
48.Nm VGLInit ,
49.Nm VGLLine ,
50.Nm VGLKeyboardInit ,
51.Nm VGLKeyboardEnd ,
52.Nm VGLKeyboardGetCh ,
53.Nm VGLMouseInit ,
54.Nm VGLMouseMode ,
55.Nm VGLMouseSetImage ,
56.Nm VGLMouseSetStdImage ,
57.Nm VGLMouseStatus ,
58.Nm VGLPanScreen ,
59.Nm VGLSetBorder ,
60.Nm VGLSetPalette ,
61.Nm VGLSetPaletteIndex ,
62.Nm VGLSetVScreenSize ,
63.Nm VGLSetXY ,
64.Nm VGLTextSetFontFile
65.Nd Video Graphics Library functions
66.Sh LIBRARY
67.Lb libvgl
68.Sh SYNOPSIS
69.In machine/console.h
70.In vgl.h
71.Ft int
72.Fn VGLInit "int mode"
73.Ft void
74.Fn VGLEnd "void"
75.Ft void
76.Fn VGLCheckSwitch "void"
77.Ft int
78.Fn VGLTextSetFontFile "char *filename"
79.Ft int
80.Fn VGLKeyboardInit "int code"
81.Ft void
82.Fn VGLKeyboardEnd "void"
83.Ft int
84.Fn VGLKeyboardGetCh "void"
85.Ft int
86.Fn VGLMouseInit "int mode"
87.Ft void
88.Fn VGLMouseMode "int mode"
89.Ft int
90.Fn VGLMouseStatus "int *x" "int *y" "char *buttons"
91.Ft void
92.Fn VGLMouseSetImage "VGLBitmap *AndMask" "VGLBitmap *OrMask"
93.Ft void
94.Fn VGLMouseSetStdImage "void"
95.Ft byte
96.Fn VGLGetXY "VGLBitmap *object" "int x" "int y"
97.Ft void
98.Fn VGLSetXY "VGLBitmap *object" "int x" "int y" "byte color"
99.Ft void
100.Fn VGLLine "VGLBitmap *object" "int x1" "int y1" "int x2" "int y2" "byte color"
101.Ft void
102.Fn VGLBox "VGLBitmap *object" "int x1" "int y1" "int x2" "int y2" "byte color"
103.Ft void
104.Fn VGLFilledBox "VGLBitmap *object" "int x1" "int y1" "int x2" "int y2" "byte color"
105.Ft void
106.Fn VGLEllipse "VGLBitmap *object" "int xc" "int yc" "int a" "int b" "byte color"
107.Ft void
108.Fn VGLFilledEllipse "VGLBitmap *object" "int xc" "int yc" "int a" "int b" "byte color"
109.Ft VGLBitmap *
110.Fn VGLBitmapCreate "int type" "int xsize" "int ysize" "byte *bits"
111.Ft void
112.Fn VGLBitmapDestroy "VGLBitmap *object"
113.Ft int
114.Fn VGLBitmapAllocateBits "VGLBitmap *object"
115.Ft int
116.Fn VGLBitmapCopy "VGLBitmap *src" "int srcx" "int srcy" "VGLBitmap *dst" "int dstx" "int dsty" "int width" "int hight"
117.Ft void
118.Fn VGLBitmapPutChar "VGLBitmap *Object" "int x" "int y" "byte ch" "byte fgcol" "byte bgcol" "int fill" "int dir"
119.Ft void
120.Fn VGLBitmapString "VGLBitmap *Object" "int x" "int y" "char *str" "byte fgcol" "byte bgcol" "int fill" "int dir"
121.Ft void
122.Fn VGLClear "VGLBitmap *object" "byte color"
123.Ft void
124.Fn VGLSetPalette "byte *red" "byte *green" "byte *blue"
125.Ft void
126.Fn VGLSetPaletteIndex "byte color" "byte red" "byte green" "byte blue"
127.Ft void
128.Fn VGLSetBorder "byte color"
129.Ft int
130.Fn VGLSetVScreenSize "VGLBitmap *object" "int vxsize" "int vysize"
131.Ft int
132.Fn VGLPanScreen "VGLBitmap *object" "int x" "int y"
133.Ft void
134.Fn VGLBlankDisplay "int blank"
135.Sh DESCRIPTION
136.Nm Libvgl
137is a library that enables the programmer access to the graphics
138modes supported by the console driver (syscons). The library takes care of
139programming the actual video hardware, and provides a number of simple
140functions to do various graphic operations.
141There is also support for a
142mouse via the standard mouse system in
143.Dx ,
144see
145.Xr mouse 4 ,
146including the ability to transparently have a mouse pointer superimposed on
147the graphic image currently being worked on.
148The library takes care of screen switching by storing the current image in
149memory before switching to another virtual console, and restoring when the
150user switches back.
151This allows several graphic applications at once, but
152on different virtual consoles.
153.Pp
154Below is a short description of the various functions:
155.Pp
156.Fn VGLInit
157initialize the library and set up the graphic mode
158.Va mode .
159.Pp
160.Fn VGLEnd
161terminate graphic mode, and restore the screenmode that was active before
162.Fn VGLInit
163was called.
164.Pp
165.Fn VGLCheckSwitch
166if the program goes into longer periods of processing without doing
167any graphics output, calling this function occasionally will allow
168the system to switch screens.
169.Pp
170.Fn VGLTextSetFontFile
171instruct the char/string functions to use the font in file
172.Pa filename
173instead of the builtin font.
174.Pp
175.Fn VGLKeyboardInit
176set up the keyboard in the
177.Dq raw
178I/O mode and
179specify the key code to be used.
180.Va code
181must be
182.Dv VGL_XLATEKEYS ,
183.Dv VGL_CODEKEYS ,
184or
185.Dv VGL_RAWKEYS .
186When
187.Dv VGL_XLATEKEYS
188is specified, the keyboard translate the raw keyboard scan code into
189a character code.
190If
191.Dv VGL_RAWKEYS
192is used, the raw keyboard scan code is read as is.
193.Dv VGL_CODEKEYS
194is the intermediate key code; each key is assigned a unique code whereas
195more than one raw scan code may be generated when a key is pressed.
196.Pp
197.Fn VGLKeyboardEnd
198when you have finished using the keyboard, call this function.
199.Pp
200.Fn VGLKeyboardGetCh
201read one byte from the keyboard.  As the keyboard I/O is in the
202.Dq raw
203input mode, the function will not block even if there is no input data,
204and returns 0.
205.Pp
206.Fn VGLMouseInit
207initialize the mouse.
208The optional on-screen mouse pointer is shown if the
209argument is
210.Dv VGL_MOUSESHOW .
211.Pp
212.Fn VGLMouseMode
213either shows the mouse pointer if the argument is
214.Dv VGL_MOUSESHOW ,
215or hides the mouse pointer if the argument is
216.Dv VGL_MOUSEHIDE .
217.Pp
218.Fn VGLMouseStatus
219returns the current mouse pointer coordinates and button state in
220.Va x , y ,
221buttons.
222The return value reflects if the mouse pointer
223is currently shown on screen or not.
224.Pp
225.Fn VGLMouseSetImage
226with this function it is possible to change the image of the mouse pointer
227on screen.
228.Pp
229.Fn VGLMouseSetStdImage
230this function restores the mouse pointer to the standard arrow.
231.Pp
232.Fn VGLGetXY
233retrieves the color of the pixel located at
234.Va x , y ,
235coordinates of the
236.Va object
237argument, and returns it as a byte value.
238.Pp
239.Fn VGLSetXY
240sets the color of the pixel located at
241.Va x , y ,
242coordinates of the
243.Va object
244argument to
245.Va color
246byte value.
247.Pp
248.Fn VGLLine
249draw a line from
250.Va x1 , y1
251to
252.Va x2 , y2
253in color
254.Va color .
255.Pp
256.Fn VGLBox
257draw a box with upper left hand corner at
258.Va x1 , y1
259and lower right hand corner at
260.Va x2 , y2
261in color
262.Va color .
263.Pp
264.Fn VGLFilledBox
265draw a filled (solid) box with upper left hand corner at
266.Va x1 , y1
267and lower right hand corner at
268.Va x2 , y2
269in color
270.Va color .
271.Pp
272.Fn VGLEllipse
273draw an ellipse centered at
274.Va xc , yc
275make it
276.Va a
277pixels wide, and
278.Va b
279pixels high in color
280.Va color .
281.Pp
282.Fn VGLFilledEllipse
283draw a filled (solid) ellipse centered at
284.Va xc , yc
285make it
286.Va a
287pixels wide, and
288.Va b
289pixels high in color
290.Va color .
291.Pp
292.Fn VGLBitmapCreate
293create a bitmap object and initialize it with the specified
294values and bit data.
295.Va type
296must be
297.Dv MEMBUF
298for the in-memory bitmap.
299.Va bits
300may be NULL so that bitmap data may be associated later.
301.Pp
302There also is a macro,
303.Fn VGLBITMAP_INITIALIZER "type" "xsize" "ysize" "bits"
304to initialize a statically declared bitmap object.
305.Pp
306.Fn VGLBitmapDestroy
307free the bitmap data and the bitmap object.
308.Pp
309.Fn VGLBitmapAllocateBits
310allocate a bit data buffer for the specified object.
311.Pp
312.Fn VGLBitmapCopy
313copy a rectangle of pixels from bitmap
314.Va src
315upper left hand corner at
316.Va srcx , srcy
317to bitmap
318.Va dst
319at
320.Va dstx , dsty
321of the size
322.Va width , height .
323.Pp
324.Fn VGLBitmapPutChar
325write the character
326.Va ch
327at position
328.Va x , y
329in foreground color
330.Va fgcol .
331If
332.Va fill
333is != 0, use the color
334.Va bgcol
335as background otherwise the background is transparent.
336The character is drawn in the direction specified by the argument
337.Va dir .
338.Pp
339.Fn VGLBitmapString
340write the string
341.Va str
342at position
343.Va x , y
344in foreground color
345.Va fgcol .
346If
347.Va fill
348is != 0, use the color
349.Va bgcol
350as background otherwise the background is transparent.
351The string is drawn in the direction specified by the argument
352.Va dir .
353.Pp
354.Fn VGLClear
355clears the entire bitmap to color
356.Va color .
357.Pp
358.Fn VGLSetPalette
359this function sets the palette used, the arguments
360.Va red , green , blue
361should point to byte arrays of 256 positions each.
362.Pp
363.Fn VGLSetPaletteIndex
364set the palette index
365.Va color
366to the specified RGB value.
367.Pp
368.Fn VGLSetBorder
369set the border color to color
370.Va color .
371.Pp
372.Fn VGLSetVScreenSize
373change the virtual screen size of the display.  Note that this
374function must be called when our vty is in the foreground.
375And
376.Va object
377must be
378.Va VGLDisplay .
379Passing a in-memory bitmap to this function results in error.
380.Pp
381The desired virtual screen width may not be achievable because
382of the video card hardware.  In such case the video driver (and
383underlaying video BIOS) may choose the next largest values.
384Always examine
385.Va object->VXsize
386and
387.Va VYsize
388after calling this function, in order to see how the virtual screen
389is actually set up.
390.Pp
391In order to set up the largest possible virtual screen, you may
392call this function with arbitrary large values.
393.Pp
394.Dl VGLSetVScreenSize(10000, 10000);
395.Pp
396.Fn VGLPanSreen
397change the origin of the displayed screen in the virtual screen.
398Note that this function must be called when our vty is in the
399foreground.
400.Va object
401must be
402.Va VGLDisplay .
403Passing a in-memory bitmap to this function results in error.
404.Pp
405.Fn VGLBlankDisplay
406blank the display if the argument
407.Va blank
408\*(Ne 0.
409This can be done to shut off the screen during display updates that
410the user should first see when it's done.
411.Ss Program termination and signal processing
412It is important to call
413.Fn VGLEnd
414before terminating the program.
415Care must be taken if you install signal handlers and try to call
416.Fn VGLEnd
417and
418.Xr exit 3
419to end the program.
420If a signal is caught while the program is inside
421.Nm libvgl
422functions,
423.Fn VGLEnd
424may not be able to properly restore the graphics hardware.
425.Pp
426The recommended way to handle signals and program termination is to
427have a flag to indicate signal's delivery.
428Your signal handlers set this flag but do not terminate
429the program immediately.
430The main part of the program checks the flag to see if it is
431supposed to terminate, and calls
432.Fn VGLEnd
433and
434.Xr exit 3
435if the flag is set.
436.Pp
437Note that
438.Fn VGLInit
439installs its internal signal handlers for
440.Dv SIGINT , SIGTERM , SIGSEGV ,
441and
442.Dv SIGBUS ,
443and terminates the program at appropriate time,
444after one of these signals is caught.
445If you want to have your own signal handlers for these signals,
446install handlers
447.Em after
448.Fn VGLInit .
449.Pp
450.Dv SIGUSR1
451and
452.Dv SIGUSR2
453are internally used by
454.Nm libvgl
455to control screen switching and the mouse pointer,
456and are not available to
457.Nm libvgl
458client programs.
459.Sh AUTHORS
460.An S\(/oren Schmidt Aq sos@FreeBSD.org
461.Sh HISTORY
462The
463.Nm vgl
464library appeared in
465.Fx 3.0 .
466