SDK Multiplataforma en C logo

SDK Multiplataforma en C

Colores

❮ Anterior
Siguiente ❯

Funciones

color_tcolor_rgb (...)
color_tcolor_rgba (...)
color_tcolor_rgbaf (...)
color_tcolor_hsbf (...)
color_tcolor_red (...)
color_tcolor_green (...)
color_tcolor_blue (...)
color_tcolor_gray (...)
color_tcolor_bgr (...)
color_tcolor_html (...)
color_tcolor_alt (...)
voidcolor_to_hsbf (...)
voidcolor_to_html (...)
voidcolor_get_rgb (...)
voidcolor_get_rgbf (...)
voidcolor_get_rgba (...)
voidcolor_get_rgbaf (...)
uint8_tcolor_get_alpha (...)
color_tcolor_set_alpha (...)
bool_tcolor_dark_mode (void)

Tipos y Constantes

color_tkCOLOR_TRANSPARENT
color_tkCOLOR_DEFAULT
color_tkCOLOR_LABEL
color_tkCOLOR_VIEW
color_tkCOLOR_LINE
color_tkCOLOR_BORDER
color_tkCOLOR_LINK
color_tkCOLOR_TEXT
color_tkCOLOR_SELTEXT
color_tkCOLOR_HOTTEXT
color_tkCOLOR_BGTEXT
color_tkCOLOR_BGSELTEXT
color_tkCOLOR_BGHOTTEXT
color_tkCOLOR_HEADER
color_tkCOLOR_ROW1
color_tkCOLOR_ROW2
color_tkCOLOR_BLACK
color_tkCOLOR_WHITE
color_tkCOLOR_RED
color_tkCOLOR_GREEN
color_tkCOLOR_BLUE
color_tkCOLOR_YELLOW
color_tkCOLOR_CYAN
color_tkCOLOR_MAGENTA

Los colores en NAppGUI se codifican mediante un entero de 32 bits con los cuatro canales RGBA en Little-Endian: El rojo en el byte 0, verde en el 1, azul en el 2 y alfa (o transparencia) en el 3 (Figura 1). En el caso particular de que el byte 3 sea igual a 0 (totalmente transparente), los tres primeros bytes no contendrán información RGB, sino un índice a un color especial.

Entero de 32bits representando un valor RGBA.
Figura 1: Estructura del tipo color_t.

Puedes establecer los valores RGBA manipulando directamente los bits de una variable color_t o utilizar la función color_rgb. No obstante debes tener en cuenta, a la hora de utilizar colores en interfaces de usuario, que los valores RGB no suelen ser del todo "portables". Nuestro software debe estar preparado para correr en plataformas con diferentes temas de escritorio. Por ejemplo, en (Listado 1) hemos cambiado el color de fondo de algunos componentes Label. El resultado se ve bien con temas claros, pero con temas oscuros se confunde con el color de texto predeterminado (Figura 2).

Listado 1: Cambio del color de fondo en Label.
1
2
3
4
5
6
7
8
9
Label *label1 = label_create();
Label *label2 = label_create();
Label *label3 = label_create();
label_text(label1, i_LABEL_01);
label_text(label2, i_LABEL_02);
label_text(label3, i_LABEL_03);
label_bgcolor(label1, color_rgb(192, 255, 255));
label_bgcolor(label2, color_rgb(255, 192, 255));
label_bgcolor(label3, color_rgb(255, 255, 192));
Comparativa de establecer colores RGB en temas de escritorio claros y oscuros.
Figura 2: Portabilidad de interfaces con colores RGB fijos.

Para paliar este efecto, podemos establecer dos versiones alternativas de un mismo color: Una para temas claros y otra para temas oscuros (Listado 2). El valor RGB se hará efectivo en tiempo de ejecución en función del estilo de la ventana (Figura 3).

Listado 2: Colores alternativos para temas oscuros.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Label *label1 = label_create();
Label *label2 = label_create();
Label *label3 = label_create();
color_t c1 = color_alt(color_rgb(192, 255, 255), color_rgb(48, 112, 112));
color_t c2 = color_alt(color_rgb(255, 192, 255), color_rgb(128, 48, 112));
color_t c3 = color_alt(color_rgb(255, 255, 192), color_rgb(112, 112, 48));
label_text(label1, i_LABEL_01);
label_text(label2, i_LABEL_02);
label_text(label3, i_LABEL_03);
label_bgcolor(label1, c1);
label_bgcolor(label2, c2);
label_bgcolor(label3, c3);
Ventana de interfaz en un tema de escritorio oscuro.
Figura 3: Adaptación de colores alternativos para entornos de ventanas oscuros.

NAppGUI también proveé acceso a una serie de colores predeterminados del sistema. Por ejemplo, kCOLOR_LABEL indica el color de las etiquetas de texto en función del tema activo. El uso de estos colores nos será muy útil a la hora de crear controles personalizados que se integren perfectamente en la estética del sistema sin preocuparnos por cuestiones de portabilidad. En Tabla de colores tienes una aplicación de ejemplo que muestra estos colores en función de la plataforma donde se ejecute el programa (Figura 4) (Figura 5).

Captura de una aplicación que muestra los colores del sistema en un tema de escritorio claro.
Figura 4: Vista de colores en temas claros.
Captura de una aplicación que muestra los colores del sistema en un tema de escritorio oscuro.
Figura 5: Vista de colores en temas oscuros.

kCOLOR_TRANSPARENT

const color_t kCOLOR_TRANSPARENT;

Color totalmente transparente o ausencia de color.


kCOLOR_DEFAULT

const color_t kCOLOR_DEFAULT;

Color por defecto.


kCOLOR_LABEL

const color_t kCOLOR_LABEL;

Color por defecto de las etiquetas de texto Label.


kCOLOR_VIEW

const color_t kCOLOR_VIEW;

Color de fondo en controles View.


kCOLOR_LINE

const color_t kCOLOR_LINE;

Color de líneas en tablas o elementos separadores de ventanas.


kCOLOR_BORDER

const color_t kCOLOR_BORDER;

Color del borde en controles tipo botón, popups, etc.


kCOLOR_LINK

const color_t kCOLOR_LINK;

Color del texto en hiperenlaces.


kCOLOR_TEXT

const color_t kCOLOR_TEXT;

Color del texto en tablas o controles.


kCOLOR_SELTEXT

const color_t kCOLOR_SELTEXT;

Color del texto seleccionado en tablas o controles.


kCOLOR_HOTTEXT

const color_t kCOLOR_HOTTEXT;

Color del texto resaltado en tablas o controles.


kCOLOR_BGTEXT

const color_t kCOLOR_BGTEXT;

Color del fondo de texto en tablas o controles.


kCOLOR_BGSELTEXT

const color_t kCOLOR_BGSELTEXT;

Color del fondo del texto seleccionado en tablas o controles.


kCOLOR_BGHOTTEXT

const color_t kCOLOR_BGHOTTEXT;

Color del fondo del texto resaltado en tablas o controles.


kCOLOR_HEADER

const color_t kCOLOR_HEADER;

Color del texto en cabeceras de tablas.


kCOLOR_ROW1

const color_t kCOLOR_ROW1;

Color del fondo de las filas impares en tablas o componentes similares.


kCOLOR_ROW2

const color_t kCOLOR_ROW2;

Color del fondo de las filas pares en tablas o componentes similares.


kCOLOR_BLACK

const color_t kCOLOR_BLACK;

Color NEGRO rgb(0,0,0).


kCOLOR_WHITE

const color_t kCOLOR_WHITE;

Color BLANCO rgb(255,255,255).


kCOLOR_RED

const color_t kCOLOR_RED;

Color ROJO rgb(255,0,0).


kCOLOR_GREEN

const color_t kCOLOR_GREEN;

Color VERDE rgb(0,255,0).


kCOLOR_BLUE

const color_t kCOLOR_BLUE;

Color AZUL rgb(0,0,255).


kCOLOR_YELLOW

const color_t kCOLOR_YELLOW;

Color AMARILLO rgb(255,255,0).


kCOLOR_CYAN

const color_t kCOLOR_CYAN;

Color CIANO rgb(0,255,255).


kCOLOR_MAGENTA

const color_t kCOLOR_MAGENTA;

Color MAGENTA rgb(255,0,255).


color_rgb ()

Crea un color a partir de los canales R (red), G (green) y B (blue).

color_t
color_rgb(const uint8_t r,
          const uint8_t g,
          const uint8_t b);
r

El canal rojo.

g

El canal verde.

b

El canal azul.

Retorna

Color.

Observaciones

El canal alpha se establece a 255 (totalmente opaco).


color_rgba ()

Crea un color a partir de los canales R (red), G (green), B (blue) y A (alpha).

color_t
color_rgba(const uint8_t r,
           const uint8_t g,
           const uint8_t b,
           const uint8_t a);
r

El canal rojo.

g

El canal verde.

b

El canal azul.

a

El canal alpha (transparencia).

Retorna

Color.

Observaciones

No se admite a=0, utilizar kCOLOR_TRANSPARENT en esos casos.


color_rgbaf ()

Crea un color a partir de los canales RGBA normalizados de 0 a 1.

color_t
color_rgbaf(const real32_t r,
            const real32_t g,
            const real32_t b,
            const real32_t a);
r

El canal rojo.

g

El canal verde.

b

El canal azul.

a

El canal alpha (transparencia).

Retorna

Color.

Observaciones

No se admite a=0, utilizar kCOLOR_TRANSPARENT en esos casos.


color_hsbf ()

Crea un color (rgb) a partir de sus componentes Hue-Saturation-Brightness (Tono-Saturación-Brillo).

color_t
color_hsbf(const real32_t hue,
           const real32_t sat,
           const real32_t bright);
hue

Componente Hue (brillo).

sat

Componente Saturation (saturación).

bright

Componente Brightness (brillo).

Retorna

Color.


color_red ()

Crea un color RGB utilizando solo el canal rojo.

color_t
color_red(const uint8_t r);
r

Canal rojo.

Retorna

Color.

Observaciones

Equivalente a color_rgb(r, 0, 0).


color_green ()

Crea un color RGB utilizando solo el canal verde.

color_t
color_green(const uint8_t g);
g

Canal verde.

Retorna

Color.

Observaciones

Equivalente a color_rgb(0, g, 0).


color_blue ()

Crea un color RGB utilizando solo el canal azul.

color_t
color_blue(const uint8_t b);
b

Canal azul.

Retorna

Color.

Observaciones

Equivalente a color_rgb(0, 0, b).


color_gray ()

Crea un color RGB gris a partir del valor de intensidad.

color_t
color_gray(const uint8_t l);
l

Intensidad (luminancia).

Retorna

Color.

Observaciones

Equivalente a color_rgb(l, l, l).


color_bgr ()

Crea un color a partir de un valor de 32 bits BGR. El byte 0 corresponde al canal B, el 1 al G y el 2 al R. El byte de mayor orden se ignora (se fija a 255).

color_t
color_bgr(const uint32_t bgr);
bgr

El valor bgr de 32bits.

Retorna

Color.

Observaciones

Este orden de bytes es el típico en colores Web.


color_html ()

Crea un color a partir de una cadena en formato HTML o CSS.

color_t
color_html(const char_t *html);
1
2
color_t c1 = color_html("#FF0000"); // Red
color_t c2 = color_html("#000080"); // Navy
html

La cadena de texto con el color HTML.

Retorna

El color transformado a RGB.


color_alt ()

Crea un color con dos versiones alternativas.

color_t
color_alt(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

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.


color_to_hsbf ()

Convierte un color (rgb) al espacio HSB (hue, saturation, brightness).

void
color_to_hsbf(const color_t color,
              real32_t *hue,
              real32_t *sat,
              real32_t *sat);
color

Color.

hue

Componente Hue (tono).

sat

Componente Saturación.

sat

Componente Brightness (brillo).


color_to_html ()

Convierte un color al formato HTML o CSS (#RRGGBB).

void
color_to_html(const color_t color,
              char_t *html,
              const uint32_t size);
color

El color a convertir.

html

Búfer donde escribir el resultado.

size

Tamaño del búfer resultado.


color_get_rgb ()

Devuelve los valores RGB del color.

void
color_get_rgb(const color_t color,
              uint8_t *r,
              uint8_t *g,
              uint8_t *b);
color

Color.

r

El canal rojo.

g

El canal verde.

b

El canal azul.

Observaciones

En colores de sistema o indexados, hace efectivo el valor RGB.


color_get_rgbf ()

Devuelve los valores RGB del color, normalizados de 0 a 1.

void
color_get_rgbf(const color_t color,
               real32_t *r,
               real32_t *g,
               real32_t *b);
color

Color.

r

El canal rojo.

g

El canal verde.

b

El canal azul.

Observaciones

En colores de sistema o indexados, hace efectivo el valor RGB.


color_get_rgba ()

Devuelve los valores RGBA del color.

void
color_get_rgba(const color_t color,
               uint8_t *r,
               uint8_t *g,
               uint8_t *b,
               uint8_t *a);
color

Color.

r

El canal rojo.

g

El canal verde.

b

El canal azul.

a

El canal alfa (transparencia).

Observaciones

En colores de sistema o indexados, hace efectivo el valor RGBA.


color_get_rgbaf ()

Devuelve los valores RGBA del color, normalizados de 0 a 1.

void
color_get_rgbaf(const color_t color,
                real32_t *r,
                real32_t *g,
                real32_t *b,
                real32_t *a);
color

Color.

r

El canal rojo.

g

El canal verde.

b

El canal azul.

a

El canal alfa (transparencia).

Observaciones

En colores de sistema o indexados, hace efectivo el valor RGBA.


color_get_alpha ()

Extrae el componente alfa (transparencia) del color.

uint8_t
color_get_alpha(const color_t color);
color

Color.

Retorna

El componente alfa. Si es igual 0 significa que el color es indexado (no contiene valores RGB).


color_set_alpha ()

Cambia el valor alfa (transparencia) de un color.

color_t
color_set_alpha(const color_t color,
                const uint8_t alpha);
color

Color.

alpha

Componente alfa.

Retorna

El nuevo color, con la componente alfa alterada.


color_dark_mode ()

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

bool_t
color_dark_mode(void);

Retorna

TRUE para Dark mode, FALSE para light mode.

Observaciones

Se calcula en función del color del fondo de las ventanas.

❮ Anterior
Siguiente ❯