El sistema LE-LISP proporciona una utilidad de gráficos denominada Virtual Bitmap Display o abreviadamente VBD con la que consigue gestionar una pantalla de mapa de puntos y un dispositivo apuntador de modo independiente al hardware subyacente. La portabilidad del VBD ha permitido su migración a diferentes sistemas de ventanas, servidores y gestores.
Una pantalla (screen) es una estructura LE-LISP que permite manipular el dispositivo físico de la pantalla. Las funciones del VBD permiten construir simultáneamente pantallas sobre diferentes dispositivos. Esto es útil, por ejemplo, cuando queremos mostar ventanas en más de un terminal gráfico. La función bitprologue crea, inicializa y devuelve como resultado una pantalla. Con current-display podemos hacer que una de las pantallas previamente creadas se convierta en la actual. Todas las funciones del VBD actúan sobre la pantalla actual excepto aquellas que permiten especificar explícitamente un nombre de pantalla. Mediante bitepilogue se cierra una pantalla. Con bitmap-save se puede guardar para ser restaurada posteriormente con bitmap-restore. La función bitmap-flush se utiliza en sistemas con buffer, como X Window System, para indicar explícitamente que se realicen las operaciones almacenadas en el buffer. Mediante funciones VBD se puede obtener información concerniente a la resolución, los colores disponibles, las texturas (patterns), las fuentes, el cursor, etc.
Las ventanas son estructuras que tienen asociadas representaciones gráficas en la pantalla. Cada ventana tiene asociada un entorno gráfico que almacena información concerniente al cursor, los colores, la fuente, la textura, el estilo de línea, el modo de dibujo y la zona de clipping actualmente utilizados en esa ventana. Los eventos asociados a las ventanas pueden estar causados por movimientos o clicks del ratón o por operaciones realizadas por el gestor de ventanas. Una ventana puede contener subventanas, las cuales a su vez pueden contener más subventanas, lo cual permite establecer una jerarquía. Todas las operaciones que se pueden realizar sobre ventanas son aplicables también a las subventanas.
Indican cómo se van a representar los caracteres en pantalla. EN VBD, una fuente se referencia mediante un entero pequeño. Mediante llamadas a load-font se pueden cargar fuentes disponibles en el sitema, teniendo en cuenta que el string que se le pasa como argumento varía según el sistema usado y por tanto no es portable. En X11 tendría un aspecto así:
-adobe-helvetica-bold-r-normal--12-120-75-75-p-82-iso8859-1
Mediante font-max se puede conocer el número máximo de fuentes disponibles y mediante current-font se puede establecer la fuente actual.
El color de primer plano o foreground se establece mediante current-foreground y se utiliza para dibujar las líneas y los caracteres y para el relleno de zonas cuando la textura de relleno es standard-foreground-pattern. El color de fondo o background se establece mediante current-background y se utiliza como color de fondo en los caracteres y para el relleno de zonas cuando la textura actual es standard-background-pattern.
Mediante make-color se puede crear un nuevo color indicando los componentes RGB. La función make-named-color devuelve un color cuyos componentes RGB están especificados en la base de datos de color del sistema. Mediante make-mutable-color podemos crear colores cuyos componentes RGB se pueden cambiar dinámicamente, lo cual es útil para conseguir efectos de parpadeo y animación. Cuando un color no se va a utilizar más, es conveniente llamar a kill-color.
El cursor es la imagen del ratón sobre la pantalla. En LE-LISP se referencian mediante un entero pequeño. Mediante current-cursor se cambia el cursor actual. Utilizando make-cursor es posible crear un cursor a partir de un bitmap. Existe un conjunto de cursores definidos en el sistema a los que se puede acceder llamando a make-named-cursor.
Para rellenar áreas se usan texturas (patterns) de uno o de dos colores. Se pueden crear texturas a partir un icono. El relleno se efectuará repitiendo regularmente la imagen del icono. Funciones que tratan con texturas son current-pattern, pattern-max y make-pattern.
El modo en que se combinan los puntos en la pantalla cuando se realizan dibujos se puede establecer mediante la función current-mode. Hay 16 modos disponibles para combinar un pixel de la imagen a dibujar con los pixels ya presentes en la pantalla.
Las funciones draw-polyline, draw-polymarker, fill-area
y draw-substring implementan las cuatro primitivas de menor nivel
definidas en el estándar GKS [Hopgood et al. 83]. Las primitivas para dibujar objetos
elipsoidales se implementan mediante
draw-ellipse y full-ellipse. Por razones de eficiencia, LE-LISP
proporciona funciones adicionales de más alto nivel que incluyen
el dibujo de puntos, línea, rectángulos, círculos y arcos circulares, así
como el relleno de zonas rectangulares y circulares,incluyendo sectores
circulares. También se proporcionan funciones adicionales para el manejo de
texto.
Un mapa de bits es un array bidimensional de bits que se implementa mediante la estructura bitmap. Actualmente el VBD tan sólo es capaz de manipular bitmaps de dos colores. La modificación y consulta de las características de un bitmap se realiza por medio de métodos asociados a la estructura. Una característica interesante es la posibilidad de comprimir un bitmap hasta en un factor de 5 a 1. La compresión se realiza siempre que la variable #:system:compressed-icon es distinta de (), con la facilidad de que la lectura de los bitmaps siempre se realiza correctamente ya que se determina dinámicamente si la fuente está comprimida o no.
Los bitmap se crean mediante create-bitmap y se puede liberar la
memoria que ocupan cuando no se utilizan llamando a kill-bitmap.
Se pueden examinar y modificar bits individuales mediante bmref y bmset,
respectivamente. Mediante bitblit se pueden copiar zonas rectangulares
de un bitmap fuente a otro destino.
Un mapa de bytes es un subtipo de bitmap sin campos adicionales que permite manipular hasta 256 colores. Se crean mediante create-bytemap y se manipulan mediante funciones similares a las utilizadas con los bitmaps así como otras que manipulan los colores.