SDK Multiplataforma en C logo

SDK Multiplataforma en C

Gui

❮ Anterior
Siguiente ❯

Funciones

voidgui_start (void)
voidgui_finish (void)
voidgui_respack (...)
voidgui_language (...)
const char_t*gui_text (...)
const Image*gui_image (...)
const byte_t*gui_file (...)
bool_tgui_dark_mode (void)
color_tgui_alt_color (...)
color_tgui_label_color (void)
color_tgui_view_color (void)
color_tgui_line_color (void)
color_tgui_link_color (void)
color_tgui_border_color (void)
S2Dfgui_resolution (void)
V2Dfgui_mouse_pos (void)
voidgui_update (void)
voidgui_OnThemeChanged (...)
voidgui_update_transitions (...)
voidgui_OnNotification (...)
voidgui_OnIdle (...)
uint32_tgui_info_window (...)
type*evbind_object (...)
bool_tevbind_modify (...)

Tipos y Constantes

enumgui_orient_t
enumgui_state_t
enumgui_mouse_t
enumgui_cursor_t
enumgui_close_t
enumgui_scale_t
enumgui_scroll_t
enumgui_focus_t
enumgui_tab_t
enumgui_event_t
enumwindow_flag_t
enumgui_notif_t
structGuiControl
structLabel
structButton
structPopUp
structEdit
structCombo
structListBox
structUpDown
structSlider
structProgress
structView
structTextView
structImageView
structTableView
structSplitView
structLayout
structCell
structPanel
structWindow
structMenu
structMenuItem
structEvButton
structEvSlider
structEvText
structEvTextFilter
structEvDraw
structEvMouse
structEvWheel
structEvKey
structEvPos
structEvSize
structEvWinClose
structEvMenu
structEvScroll
structEvTbPos
structEvTbRow
structEvTbRect
structEvTbSel
structEvTbCell
structFocusInfo

La librería Gui permite crear interfaces gráficas de usuario de forma sencilla e intuitiva. Es el primer paquete especializado en aplicaciones de escritorio (Figura 1), al contrario de lo que ocurre con el resto de librerías que pueden utilizarse también en aplicaciones por línea de comandos.

Árbol de dependencias de la librería gui.
Figura 1: Dependencias de Gui. Ver NAppGUI API.

Al igual que Draw2D y Osbs Gui se apoya en las APIs de cada sistema operativo. Además de las ventajas ya comentadas en estos dos casos, el acceso nativo provocará que nuestros programas estén totalmente integrados en el entorno de ventanas y acordes al tema visual presente en cada máquina (Figura 2).

Imagen de un mismo programa corriendo en Windows, macOS y Linux.
Figura 2: Las interfaces creadas con Gui se adaptarán al estilo de cada entorno de ventanas.

1. Composición declarativa

La librería Gui se aleja del concepto de tratar las ventanas (o cuadros de diálogo) como un recurso externo del programa. Por el contrario, estas se crean directamente desde el código fuente evitando maquetarlas mediante editores visuales (Figura 3). Debemos tener en cuenta que cada plataforma utiliza diferentes tipografías y skins, por lo que especificar posiciones y tamaños concretos para los controles no será del todo portable (Figura 4). Por el contrario, en Gui los elementos de interfaz se ubican en una rejilla virtual denominada Layout, que los dimensionará en tiempo de ejecución en función de la máquina donde esté corriendo el programa (Figura 5).

Captura del editor de interfaces incluido en Xcode.
Figura 3: Los editores de recursos no son buenos aliados para crear complejas interfaces dinámicas. Menos aún si queremos portarlas entre plataformas.
Controles Label y Button en Windows, macOS y Linux.
Figura 4: Utilizar medidas fijas para los controles no se adaptará bien al migrar el programa.
Controles Label y Button en Windows, macOS y Linux.
Figura 5: El Layout calcula la posición y tamaño de los componentes en tiempo de ejecución.

Además, otro hecho relevante es que las interfaces son objetos vivos sujetos a cambios constantes. Un claro ejemplo son las traducciones, que alteran la ubicación de los elementos debido a la nueva dimensión del texto (Figura 6). Gui se adaptará a estos eventos de forma automática, recalculando posiciones y tamaños para mantener una maquetación coherente.

Traducción de una aplicación en tiempo de ejecución.
Figura 7: Las ventanas se adaptan automáticamente a cambios en tiempo de ejecución

2. Anatomía de una ventana.

En (Figura 8) tenemos las partes principales de una ventana. Los controles son los elementos finales con los que interactúa el usuario para introducir datos o lanzar acciones. Las vistas son regiones rectangulares de tamaño relativamente grande donde se representa información mediante texto y gráficos, pudiendo responder a los eventos de teclado o ratón. Por último, todos estos elementos se agruparán en paneles y se maquetarán mediante layouts.

Ventana de interfaz donde se resaltan las partes más importantes.
Figura 8: Partes destacables en una ventana de interfaz.
  • GuiControl. Diferentes tipos de controles y vistas.
  • Layout. Rejilla virtual e invisible donde se ubicarán los controles.
  • Window. Ventana principal con barra de título y marco.
  • Menu. Lista desplegable con opciones.
  • MenuItem. Cada uno de los elementos del menú.

3. Eventos GUI

Las aplicaciones de escritorio están dirigidas por eventos, lo que significa que están continuamente esperando a que el usuario realice alguna acción sobre la interfaz: Pulsar un botón, arrastrar un slider, escribir un texto, etc. Cuando esto ocurre, el gestor de ventanas detecta el evento y lo notifica a la aplicación (Figura 9), la cual debe proveer un manejador del evento con el código a ejecutar. Por ejemplo, en (Listado 1) definimos un manejador para responder a la pulsación de un botón. Evidentemente, si no hay manejador asociado, la aplicación ignorará el evento.

  • Utiliza event_params para obtener los parámetros asociados al evento. Cada tipo de evento tiene sus propios parámetros. Ver (Tabla 1).
  • Utiliza event_result para escribir la respuesta al evento. Muy pocos eventos requieren enviar una respuesta.
  • Ventana de interfaz donde se resaltan las partes más importantes.
    Figura 9: Notificación de un evento a través del manejador.
    Listado 1: Asignar un manejador para la pulsación de un botón.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    static void i_OnClick(App *app, Event *e)
    {
        const EvButton *p = event_params(e, EvButton);
        if (p->state == ekGUI_ON)
            create_new_file(app);
    }
    
    Button *button = button_check();
    button_OnClick(button, listener(app, i_OnClick, App));
    

En ocasiones puede ser necesario lanzar un evento mientras la aplicación está en "modo de espera", sin procesar ningún otro evento pendiente. Esto ocurre cuando queremos lanzar una ventana secundaria o modal como consecuencia de otro evento, por ejemplo, la pulsación de un botón. Es aconsejable, para evitar bloqueos o artefactos no deseados, dejar concluir el primer evento y programar la respuesta para un momento posterior, donde la aplicación no tenga tareas pendientes.

❮ Anterior
Siguiente ❯

enum gui_orient_t

Orientación.

enum gui_orient_t
{
    ekGUI_HORIZONTAL,
    ekGUI_VERTICAL
};
ekGUI_HORIZONTAL

Horizontal.

ekGUI_VERTICAL

Vertical.


enum gui_state_t

Valores de estado.

enum gui_state_t
{
    ekGUI_OFF,
    ekGUI_ON,
    ekGUI_MIXED
};
ekGUI_OFF

Apagado/desactivado.

ekGUI_ON

Encendido/activado.

ekGUI_MIXED

Medio/indeterminado.


enum gui_mouse_t

Botones del ratón.

enum gui_mouse_t
{
    ekGUI_MOUSE_LEFT,
    ekGUI_MOUSE_RIGHT,
    ekGUI_MOUSE_MIDDLE
};
ekGUI_MOUSE_LEFT

Izquierdo.

ekGUI_MOUSE_RIGHT

Derecho.

ekGUI_MOUSE_MIDDLE

Centro.


enum gui_cursor_t

Cursores. Ver window_cursor.

enum gui_cursor_t
{
    ekGUI_CURSOR_ARROW,
    ekGUI_CURSOR_HAND,
    ekGUI_CURSOR_IBEAM,
    ekGUI_CURSOR_CROSS,
    ekGUI_CURSOR_SIZEWE,
    ekGUI_CURSOR_SIZENS,
    ekGUI_CURSOR_USER
};
ekGUI_CURSOR_ARROW

Flecha (por defecto).

ekGUI_CURSOR_HAND

Mano.

ekGUI_CURSOR_IBEAM

Barra vertical (edición de texto).

ekGUI_CURSOR_CROSS

Cruz.

ekGUI_CURSOR_SIZEWE

Redimensionado horizontal (izquierda-derecha).

ekGUI_CURSOR_SIZENS

Redimensionado vertical (arriba-abajo).

ekGUI_CURSOR_USER

Creado a partir de una imagen.


enum gui_close_t

Motivo del cierre de una ventana.

enum gui_close_t
{
    ekGUI_CLOSE_ESC,
    ekGUI_CLOSE_INTRO,
    ekGUI_CLOSE_BUTTON,
    ekGUI_CLOSE_DEACT
};
ekGUI_CLOSE_ESC

Se ha pulsado la tecla [ESC] (cancelar).

ekGUI_CLOSE_INTRO

Se ha pulsado la tecla [ENTER] (aceptar).

ekGUI_CLOSE_BUTTON

Se ha pulsado el botón de cerrar [X] en la barra de título.

ekGUI_CLOSE_DEACT

Se ha hecho clic sobre la ventana principal (solo recibido por ventanas secundarias).


enum gui_scale_t

Formas de escalado.

enum gui_scale_t
{
    ekGUI_SCALE_AUTO,
    ekGUI_SCALE_NONE,
    ekGUI_SCALE_ASPECT,
    ekGUI_SCALE_ASPECTDW
};
ekGUI_SCALE_AUTO

Escalado automático, la proporción puede cambiar.

ekGUI_SCALE_NONE

Sin escalado.

ekGUI_SCALE_ASPECT

Escalado automático, pero manteniendo la proporción (aspect ratio).

ekGUI_SCALE_ASPECTDW

Igual que el anterior, pero no aumenta el tamaño original, solo lo reduce si procede.


enum gui_scroll_t

Tipos de scroll.

enum gui_scroll_t
{
    ekGUI_SCROLL_BEGIN,
    ekGUI_SCROLL_END,
    ekGUI_SCROLL_STEP_LEFT,
    ekGUI_SCROLL_STEP_RIGHT,
    ekGUI_SCROLL_PAGE_LEFT,
    ekGUI_SCROLL_PAGE_RIGHT,
    ekGUI_SCROLL_THUMB
};
ekGUI_SCROLL_BEGIN

Saltar al inicio.

ekGUI_SCROLL_END

Saltar al final.

ekGUI_SCROLL_STEP_LEFT

Saltar un paso (o línea) a la izquierda o arriba.

ekGUI_SCROLL_STEP_RIGHT

Saltar un paso (o línea) a la derecha o abajo.

ekGUI_SCROLL_PAGE_LEFT

Saltar una página a la izquierda o arriba.

ekGUI_SCROLL_PAGE_RIGHT

Saltar una página a la derecha o abajo.

ekGUI_SCROLL_THUMB

Saltar a la posición del thumb.


enum gui_focus_t

Resultado al cambiar el foco del teclado.

enum gui_focus_t
{
    ekGUI_FOCUS_CHANGED,
    ekGUI_FOCUS_KEEP,
    ekGUI_FOCUS_NO_NEXT,
    ekGUI_FOCUS_NO_RESIGN,
    ekGUI_FOCUS_NO_ACCEPT
};
ekGUI_FOCUS_CHANGED

El foco ha cambiado al control especificado.

ekGUI_FOCUS_KEEP

El foco no se ha movido, permanece en el mismo control.

ekGUI_FOCUS_NO_NEXT

No se ha encontrado el control destino, está oculto o inhabilitado.

ekGUI_FOCUS_NO_RESIGN

El control actual no permite cambiar el foco.

ekGUI_FOCUS_NO_ACCEPT

El nuevo control no acepta el foco.


enum gui_tab_t

Acción que ha motivado el cambio del foco del teclado.

enum gui_tab_t
{
    ekGUI_TAB_KEY,
    ekGUI_TAB_BACKKEY,
    ekGUI_TAB_NEXT,
    ekGUI_TAB_PREV,
    ekGUI_TAB_MOVE,
    ekGUI_TAB_CLICK
};
ekGUI_TAB_KEY

Pulsación de la tecla [TAB].

ekGUI_TAB_BACKKEY

Pulsación de [SHIFT]+[TAB].

ekGUI_TAB_NEXT

Llamada a window_next_tabstop.

ekGUI_TAB_PREV

Llamada a window_previous_tabstop.

ekGUI_TAB_MOVE

Llamada a window_focus.

ekGUI_TAB_CLICK

Clic sobre otro control.


enum gui_event_t

Tipo de evento. Ver Eventos GUI.

enum gui_event_t
{
    ekGUI_EVENT_LABEL,
    ekGUI_EVENT_BUTTON,
    ekGUI_EVENT_POPUP,
    ekGUI_EVENT_LISTBOX,
    ekGUI_EVENT_SLIDER,
    ekGUI_EVENT_UPDOWN,
    ekGUI_EVENT_TXTFILTER,
    ekGUI_EVENT_TXTCHANGE,
    ekGUI_EVENT_FOCUS_RESIGN,
    ekGUI_EVENT_FOCUS_ACCEPT,
    ekGUI_EVENT_FOCUS,
    ekGUI_EVENT_MENU,
    ekGUI_EVENT_DRAW,
    ekGUI_EVENT_OVERLAY,
    ekGUI_EVENT_RESIZE,
    ekGUI_EVENT_ENTER,
    ekGUI_EVENT_EXIT,
    ekGUI_EVENT_MOVED,
    ekGUI_EVENT_DOWN,
    ekGUI_EVENT_UP,
    ekGUI_EVENT_CLICK,
    ekGUI_EVENT_DRAG,
    ekGUI_EVENT_WHEEL,
    ekGUI_EVENT_KEYDOWN,
    ekGUI_EVENT_KEYUP,
    ekGUI_EVENT_SCROLL,
    ekGUI_EVENT_WND_MOVED,
    ekGUI_EVENT_WND_SIZING,
    ekGUI_EVENT_WND_SIZE,
    ekGUI_EVENT_WND_CLOSE,
    ekGUI_EVENT_COLOR,
    ekGUI_EVENT_THEME,
    ekGUI_EVENT_OBJCHANGE,
    ekGUI_EVENT_TBL_NROWS,
    ekGUI_EVENT_TBL_BEGIN,
    ekGUI_EVENT_TBL_END,
    ekGUI_EVENT_TBL_CELL,
    ekGUI_EVENT_TBL_SEL,
    ekGUI_EVENT_TBL_HEADCLICK,
    ekGUI_EVENT_TBL_ROWCLICK
};
ekGUI_EVENT_LABEL

Se ha hecho clic sobre un control Label.

ekGUI_EVENT_BUTTON

Se ha hecho clic sobre un control Button.

ekGUI_EVENT_POPUP

Se ha cambiado la selección de un control PopUp.

ekGUI_EVENT_LISTBOX

Se ha cambiado la selección de un control ListBox.

ekGUI_EVENT_SLIDER

Se está deslizando un control Slider.

ekGUI_EVENT_UPDOWN

Se ha hecho clic sobre un control UpDown.

ekGUI_EVENT_TXTFILTER

Se está editando el texto de un control Edit o Combo.

ekGUI_EVENT_TXTCHANGE

Se ha terminado de editar el texto de un control Edit o Combo.

ekGUI_EVENT_FOCUS_RESIGN

Pregunta a un control si quiere renunciar al foco del teclado.

ekGUI_EVENT_FOCUS_ACCEPT

Pregunta a un control si quiere aceptar el foco del teclado.

ekGUI_EVENT_FOCUS

Un control ha recibido o perdido el foco del teclado.

ekGUI_EVENT_MENU

Se ha hecho clic sobre un menú.

ekGUI_EVENT_DRAW

Hay que volver a dibujar el contenido de la vista.

ekGUI_EVENT_OVERLAY

Hay dibujar la capa overlay.

ekGUI_EVENT_RESIZE

Ha cambiado el tamaño de una vista.

ekGUI_EVENT_ENTER

El ratón ha entrado en el área de la vista.

ekGUI_EVENT_EXIT

El ratón ha salido del área de la vista.

ekGUI_EVENT_MOVED

El ratón se está moviendo sobre la superficie de la vista.

ekGUI_EVENT_DOWN

Se ha pulsado un botón del ratón.

ekGUI_EVENT_UP

Se ha liberado un botón del ratón.

ekGUI_EVENT_CLICK

Se ha hecho clic sobre una vista.

ekGUI_EVENT_DRAG

Se está realizando dragging dentro de la vista.

ekGUI_EVENT_WHEEL

Se ha movido la rueda del ratón.

ekGUI_EVENT_KEYDOWN

Se ha pulsado una tecla.

ekGUI_EVENT_KEYUP

Se ha liberado una tecla.

ekGUI_EVENT_SCROLL

Se están manipulando las barras de scroll.

ekGUI_EVENT_WND_MOVED

Se está moviendo la ventana por el escritorio.

ekGUI_EVENT_WND_SIZING

Se está re-dimensionando la ventana.

ekGUI_EVENT_WND_SIZE

Se ha re-dimensionando la ventana.

ekGUI_EVENT_WND_CLOSE

Se ha cerrado la ventana.

ekGUI_EVENT_COLOR

Se está actualizando un color de comwin_color.

ekGUI_EVENT_THEME

Ha cambiado el tema del escritorio.

ekGUI_EVENT_OBJCHANGE

Se ha editado un objeto vinculado con un layout. Notificaciones y campos calculados.

ekGUI_EVENT_TBL_NROWS

Una tabla necesita saber el número de filas.

ekGUI_EVENT_TBL_BEGIN

Una tabla va a comenzar a dibujar la parte visible de los datos.

ekGUI_EVENT_TBL_END

Una tabla ha terminado de dibujar.

ekGUI_EVENT_TBL_CELL

Una tabla necesita los datos de una celda.

ekGUI_EVENT_TBL_SEL

Han cambiado las filas seleccionadas en una tabla.

ekGUI_EVENT_TBL_HEADCLICK

Se ha hecho clic en una cabecera de la tabla.

ekGUI_EVENT_TBL_ROWCLICK

Se ha hecho clic en una fila de la tabla.


enum window_flag_t

Atributos de creación de una ventana.

enum window_flag_t
{
    ekWINDOW_FLAG,
    ekWINDOW_EDGE,
    ekWINDOW_TITLE,
    ekWINDOW_MAX,
    ekWINDOW_MIN,
    ekWINDOW_CLOSE,
    ekWINDOW_RESIZE,
    ekWINDOW_RETURN,
    ekWINDOW_ESC,
    ekWINDOW_MODAL_NOHIDE,
    ekWINDOW_STD,
    ekWINDOW_STDRES
};
ekWINDOW_FLAG

Atributos por defecto.

ekWINDOW_EDGE

La ventana dibuja un borde exterior.

ekWINDOW_TITLE

La ventana tiene barra de título.

ekWINDOW_MAX

La ventana muestra el botón de maximizar.

ekWINDOW_MIN

La ventana muestra el botón de minimizar.

ekWINDOW_CLOSE

La ventana muestra el botón de cerrar.

ekWINDOW_RESIZE

La ventana tiene bordes redimensionables.

ekWINDOW_RETURN

La ventana procesará la pulsación de la tecla [RETURN] como un posible evento de cierre, enviando el mensaje OnClose.

ekWINDOW_ESC

La ventana procesará la pulsación de la tecla [ESC] como un posible evento de cierre, enviando el mensaje OnClose.

ekWINDOW_MODAL_NOHIDE

Evita ocultar una ventana modal cuando ha acabado el ciclo modal. Ver Ventanas modales.

ekWINDOW_STD

Combinación ekWINDOW_TITLE | ekWINDOW_MIN | ekWINDOW_CLOSE.

ekWINDOW_STDRES

Combinación ekWINDOW_STD | ekWINDOW_MAX | ekWINDOW_RESIZE.


enum gui_notif_t

Notificaciones enviadas por la librería gui.

enum gui_notif_t
{
    ekGUI_NOTIF_LANGUAGE,
    ekGUI_NOTIF_WIN_DESTROY,
    ekGUI_NOTIF_MENU_DESTROY
};
ekGUI_NOTIF_LANGUAGE

Se ha cambiado el idioma de la interfaz.

ekGUI_NOTIF_WIN_DESTROY

Se ha destruido una ventana.

ekGUI_NOTIF_MENU_DESTROY

Se ha destruido un menú.


struct GuiControl

Control de interfaz (abstracto).

struct GuiControl;

struct Label

Control de interfaz que contiene un texto estático, normalmente limitado a una sola línea. Label.

struct Label;

struct Button

Control de interfaz que representa un botón. Button.

struct Button;

struct PopUp

Control botón con lista desplegable. PopUp.

struct PopUp;

struct Edit

Control de edición de texto Edit.

struct Edit;

struct Combo

Control que combina un cuadro de edición con una lista desplegable. Combo.

struct Combo;

struct ListBox

Control de lista. ListBox.

struct ListBox;

struct UpDown

Control que muestra dos pequeños botones de incremento y decremento. UpDown.

struct UpDown;

struct Slider

Control que muestra una barra con un deslizador. Slider.

struct Slider;

struct Progress

Barra de progreso. Progress.

struct Progress;

struct View

Vista personalizada. Permite crear nuestro propios controles, dibujando lo que queramos. View

struct View;

struct TextView

Vista de texto con varios párrafos y diferentes atributos. TextView.

struct TextView;

struct ImageView

Visor de imágenes. ImageView.

struct ImageView;

struct TableView

Vista de tabla con varias filas y columnas. TableView.

struct TableView;

struct SplitView

Vista partida redimensionable en horizontal o vertical. SplitView.

struct SplitView;

struct Layout

Rejilla invisible donde se organizan los controles de un Panel. Layout.

struct Layout;

struct Cell

Cada una de las celdas que forman un Layout. Cell.

struct Cell;

struct Panel

Área interna de una ventana, que permite agrupar diferentes controles. Panel.

struct Panel;

struct Window

Ventana de interfaz. Window.

struct Window;

struct Menu

Menu o submenu. Menu.

struct Menu;

struct MenuItem

Elemento dentro de un menú. MenuItem.

struct MenuItem;

struct EvButton

Parámetros del evento OnClick de un botón o OnSelect de un popup.

struct EvButton
{
    uint32_t index;
    gui_state_t state;
    const char_t* text;
};
index

Índice del botón o del elemento.

state

Estado.

text

Texto.


struct EvSlider

Parámetros del evento OnMoved de un slider.

struct EvSlider
{
    real32_t pos;
    real32_t incr;
    uint32_t step;
};
pos

Posición normalizada del slider (0, 1).

incr

Incremento con respecto a la posición anterior.

step

Índice del intervalo (solo para rangos discretos).


struct EvText

Parámetros del evento OnChange de los cuadros de texto.

struct EvText
{
    const char_t* text;
    uint32_t cpos;
    int32_t len;
};
text

Texto.

cpos

Posición del cursor (caret).

len

Cantidad de caracteres insertados o eliminados.


struct EvTextFilter

Resultado del evento OnFilter de los cuadros de texto.

struct EvTextFilter
{
    bool_t apply;
    char_t* text;
    uint32_t cpos;
};
apply

TRUE si se debe cambiar el texto original del control.

text

Nuevo texto del control, que es una revisión (filtro) del texto original.

cpos

Posición del cursor (caret).


struct EvDraw

Parámetros del evento OnDraw.

struct EvDraw
{
    DCtx* ctx;
    real32_t x;
    real32_t y;
    real32_t width;
    real32_t height;
};
ctx

Contexto de dibujo 2D.

x

Coordenada x del area de dibujo (viewport).

y

Coordenada y del area de dibujo.

width

Ancho del área de dibujo.

height

Alto del área de dibujo.


struct EvMouse

Parámetros de eventos de ratón.

struct EvMouse
{
    real32_t x;
    real32_t y;
    real32_t lx;
    real32_t ly;
    gui_mouse_t button;
    uint32_t count;
    uint32_t modifiers;
    uint32_t tag;
};
x

Coordenada x del puntero en el área de dibujo.

y

Coordenada y del puntero en el área de dibujo.

lx

Coordenada x del puntero en el control. Igual que x si no hay barras de scroll.

ly

Coordenada y del puntero en el control. Igual que y si no hay barras de scroll.

button

Botón activo.

count

Número de clics.

modifiers

Combinación de valores mkey_t.

tag

Valor adicional para controles.


struct EvWheel

Parámetros del evento OnWheel.

struct EvWheel
{
    real32_t x;
    real32_t y;
    real32_t dx;
    real32_t dy;
    real32_t dz;
};
x

Coordenada x del puntero.

y

Coordenada y del puntero.

dx

Incremento en x de la rueda o trackpad.

dy

Incremento en y de la rueda o trackpad.

dz

Incremento en z de la rueda o trackpad.


struct EvKey

Parámetros de eventos de teclado.

struct EvKey
{
    vkey_t key;
    uint32_t modifiers;
};
key

Tecla referenciada.

modifiers

Combinación de valores mkey_t.


struct EvPos

Parámetros de eventos de cambio de posición.

struct EvPos
{
    real32_t x;
    real32_t y;
};
x

Coordenada x.

y

Coordenada y.


struct EvSize

Parámetros de eventos de cambio de tamaño.

struct EvSize
{
    real32_t width;
    real32_t height;
};
width

Anchura (tamaño en x).

height

Altura (tamaño en y).


struct EvWinClose

Parámetros de evento de cierre de ventana.

struct EvWinClose
{
    gui_close_t origin;
};
origin

Origen del cierre.


struct EvMenu

Parámetros de evento de menú.

struct EvMenu
{
    uint32_t index;
    gui_state_t state;
    const char_t* text;
};
index

Índice del item pulsado.

state

Estado del item pulsado.

text

Texto del item pulsado.


struct EvScroll

Parámetros de evento scroll.

struct EvScroll
{
    gui_orient_t orient;
    gui_orient_t scroll;
    real32_t cpos;
};
orient

Orientación de la barra de scroll.

scroll

Tipo de scroll.

cpos

Posición del scroll.


struct EvTbPos

Localización de una celda en una tabla.

struct EvTbPos
{
    uint32_t col;
    uint32_t row;
};
col

Índice de la columna.

row

Índice de la fila.


struct EvTbRow

Localización de una fila en una tabla.

struct EvTbRow
{
    bool_t sel;
    uint32_t row;
};
sel

Seleccionada o no.

row

Índice de la fila.


struct EvTbRect

Grupo de celdas en una tabla.

struct EvTbRect
{
    uint32_t stcol;
    uint32_t edcol;
    uint32_t strow;
    uint32_t edrow;
};
stcol

Índice de la columna inicial.

edcol

Índice de la columna final.

strow

Índice de la fila inicial.

edrow

Índice de la fila final.


struct EvTbSel

Selección en una tabla.

struct EvTbSel
{
    ArrSt(uint32_t)* sel;
};
sel

Índices de fila.


struct EvTbCell

Datos de una celda en una tabla.

struct EvTbCell
{
    const char_t* text;
    align_t align;
};
text

Texto de la celda.

align

Alineación del texto.


struct FocusInfo

Información sobre el cambio del foco del teclado.

struct FocusInfo
{
    gui_tab_t action;
    GuiControl* next;
};
action

Acción que ha motivado el cambio del foco del teclado.

next

Próximo control que recibirá el foco del teclado.


gui_start ()

Inicia la librería Gui, reservando espacio para las estructuras internas globales. Internamente llama a draw2d_start. Es llamada automáticamente por osmain.

void
gui_start(void);

gui_finish ()

Finaliza la librería Gui, liberando el espacio de las estructuras internas globales. Internamente llama a draw2d_finish. Es llamada automáticamente por osmain.

void
gui_finish(void);

gui_respack ()

Registra un paquete de recursos.

void
gui_respack(FPtr_respack func_respack);
func_respack

Constructor de recursos.

Observaciones

Ver Recursos.


gui_language ()

Establece el idioma de los recursos registrados con gui_respack.

void
gui_language(const char_t *lang);
lang

El idioma.

Observaciones

Ver Recursos.


gui_text ()

Obtiene una cadena de texto a través de su identificador de recurso.

const char_t*
gui_text(const ResId id);
id

Identificador del recurso.

Retorna

La cadena de texto o NULL si no se encuentra.

Observaciones

El recurso debe pertenecer a un paquete registrado con gui_respack.


gui_image ()

Obtiene una imagen a través de su identificador de recurso.

const Image*
gui_image(const ResId id);
id

Identificador del recurso.

Retorna

La imagen o NULL si no se encuentra.

Observaciones

El recurso debe pertenecer a un paquete registrado con gui_respack. No hay que destruir la imagen ya que está gestionada por Gui.


gui_file ()

Obtiene el contenido de un archivo a través de su identificador de recurso.

const byte_t*
gui_file(const ResId id,
         uint32_t *size);
id

Identificador del recurso.

size

Tamaño en bytes del búfer.

Retorna

Los datos del archivo o NULL si no se encuentra.

Observaciones

El recurso debe pertenecer a un paquete registrado con gui_respack. Los datos están gestionados por Gui, por lo que no hay que liberar memoria.


gui_dark_mode ()

Determina si el entorno de ventanas tiene un tema claro u oscuro.

bool_t
gui_dark_mode(void);

Retorna

TRUE para Dark mode, FALSE para light mode.


gui_alt_color ()

Crea un color con dos versiones alternativas.

color_t
gui_alt_color(const color_t light_color,
              const color_t dark_color);
light_color

Color para temas CLAROS de escritorio.

dark_color

Color para temas OSCUROS de escritorio.

Retorna

El color.

Observaciones

El sistema establecerá el color final en función de la "claridad" de los colores del gestor de ventanas (Light/Dark). NO SE PERMITEN colores alternativos anidados. Los valores light y dark deben ser colores RGB o de sistema.


gui_label_color ()

Retorna el color por defecto de las etiquetas de texto Label.

color_t
gui_label_color(void);

Retorna

El color.


gui_view_color ()

Retorna el color de fondo en controles View.

color_t
gui_view_color(void);

Retorna

El color.


gui_line_color ()

Retorna el color de líneas en tablas o elementos separadores de ventanas.

color_t
gui_line_color(void);

Retorna

El color.


gui_link_color ()

Retorna el color del texto en hiperenlaces.

color_t
gui_link_color(void);

Retorna

El color.


gui_border_color ()

Retorna el color del borde en controles tipo botón, popups, etc.

color_t
gui_border_color(void);

Retorna

El color.


gui_resolution ()

Retorna la resolución de pantalla.

S2Df
gui_resolution(void);

Retorna

Resolución.


gui_mouse_pos ()

Retorna la posición del cursor del ratón.

V2Df
gui_mouse_pos(void);

Retorna

Posición.


gui_update ()

Actualiza todas las ventanas de la aplicación, después de un cambio de tema.

void
gui_update(void);

Observaciones

Normalmente no es necesario llamar a este método. Se invoca automáticamente desde osapp.


gui_OnThemeChanged ()

Establece un manejador para detectar el cambio del tema visual del entorno de ventanas.

void
gui_OnThemeChanged(Listener *listener);
listener

El manejador del evento.


gui_update_transitions ()

Actualiza las animaciones automáticas de la interfaz.

void
gui_update_transitions(const real64_t prtime,
                       const real64_t crtime);
prtime

Tiempo del instante previo.

crtime

Tiempo del instante actual.

Observaciones

Normalmente no es necesario llamar a este método. Se invoca automáticamente desde osapp.


gui_OnNotification ()

Establece un manejador para recibir notificaciones por parte de gui.

void
gui_OnNotification(Listener *listener);
listener

El manejador del evento.

Observaciones

Ver gui_notif_t.


gui_OnIdle ()

Establece un manejador para lanzar un evento cuando la aplicación esté en "modo de espera".

void
gui_OnIdle(Listener *listener);
listener

El manejador del evento.

Observaciones

El evento se lanzará una sola vez cuando el ciclo de mensajes de la aplicación esté ocioso, es decir, no esté procesando otros eventos pendientes. Ver Eventos GUI.


gui_info_window ()

Muestra una ventana de información sobre la ejecución del programa. Está orientado a mostrar mensajes de anomalías o mensajes de depuración. No utilizar para información al usuario.

uint32_t
gui_info_window(const bool_t fatal,
                const char_t *msg,
                const char_t *caption,
                const char_t *detail,
                const char_t *file,
                const uint32_t line,
                const ArrPt(String) *buttons,
                const uint32_t defindex);
1
2
3
4
5
6
7
8
uint32_t sel = 0;
ArrPt(String) *buttons = arrpt_create(String);
arrpt_append(buttons, str_c("Ok"), String);
arrpt_append(buttons, str_c("Bye"), String);
arrpt_append(buttons, str_c("Forget"), String);
arrpt_append(buttons, str_c("Ask again"), String);
sel = gui_info_window(TRUE, "Here an info window", "Something happens", "You do something wrong\nin the file passed as 'stream' parameter.", "your_file.txt", 43, buttons, 1);
arrpt_destroy(&buttons, str_destroy, String);
fatal

TRUE si corresponde a un error fatal.

msg

Mensaje resumido.

caption

Título,

detail

Mensaje detallado. Admite '\n'.

file

Archivo relacionado con el mensaje.

line

Línea relacionada con el mensaje.

buttons

Botones.

defindex

Botón por defecto.

Retorna

Número de botón pulsado.


evbind_object ()

Obtiene el objeto vinculado a un layout dentro de una función callback.

type*
evbind_object(Event *e,
              type);
e

El evento.

type

El tipo de objeto.

Retorna

El objeto.

Observaciones

Ver Notificaciones y campos calculados.


evbind_modify ()

Comprueba, dentro de una función callback, si el campo del objeto se modificado.

bool_t
evbind_modify(Event *e,
              type,
              mtype,
              mname);
e

El evento.

type

El tipo de objeto.

mtype

El tipo del campo a comprobar.

mname

El nombre del campo a comprobar.

Retorna

TRUE si el campo ha sido modificado.

Observaciones

Ver Notificaciones y campos calculados.

❮ Anterior
Siguiente ❯