We pass alpha channel information to the current text drawing code
and use it if it is available. The previous behavior of using full
opacity for RGB format colors is preserved.
static double pango_font_red;
static double pango_font_green;
static double pango_font_blue;
static double pango_font_red;
static double pango_font_green;
static double pango_font_blue;
+static double pango_font_alpha;
/* Necessary to track whether the dpi changes and trigger a LOG() message,
* which is more easily visible to users. */
/* Necessary to track whether the dpi changes and trigger a LOG() message,
* which is more easily visible to users. */
pango_layout_set_text(layout, text, text_len);
/* Do the drawing */
pango_layout_set_text(layout, text, text_len);
/* Do the drawing */
- cairo_set_source_rgb(cr, pango_font_red, pango_font_green, pango_font_blue);
+ cairo_set_source_rgba(cr, pango_font_red, pango_font_green, pango_font_blue, pango_font_alpha);
+ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
pango_cairo_update_layout(cr, layout);
pango_layout_get_pixel_size(layout, NULL, &height);
/* Center the piece of text vertically if its height is smaller than the
pango_cairo_update_layout(cr, layout);
pango_layout_get_pixel_size(layout, NULL, &height);
/* Center the piece of text vertically if its height is smaller than the
pango_font_red = ((foreground >> 16) & 0xff) / 255.0;
pango_font_green = ((foreground >> 8) & 0xff) / 255.0;
pango_font_blue = (foreground & 0xff) / 255.0;
pango_font_red = ((foreground >> 16) & 0xff) / 255.0;
pango_font_green = ((foreground >> 8) & 0xff) / 255.0;
pango_font_blue = (foreground & 0xff) / 255.0;
+ pango_font_alpha = ((foreground >> 24) & 0xff) / 255.0;
*/
#include <stdlib.h>
#include <stdint.h>
*/
#include <stdlib.h>
#include <stdint.h>
*
*/
uint32_t get_colorpixel(const char *hex) {
*
*/
uint32_t get_colorpixel(const char *hex) {
- char strgroups[3][3] = {{hex[1], hex[2], '\0'},
- {hex[3], hex[4], '\0'},
- {hex[5], hex[6], '\0'}};
+ char alpha[2];
+ if (strlen(hex) == strlen("#rrggbbaa")) {
+ alpha[0] = hex[7];
+ alpha[1] = hex[8];
+ } else {
+ alpha[0] = alpha[1] = 'F';
+ }
+
+ char strgroups[4][3] = {
+ {hex[1], hex[2], '\0'},
+ {hex[3], hex[4], '\0'},
+ {hex[5], hex[6], '\0'},
+ {alpha[0], alpha[1], '\0'}};
uint8_t r = strtol(strgroups[0], NULL, 16);
uint8_t g = strtol(strgroups[1], NULL, 16);
uint8_t b = strtol(strgroups[2], NULL, 16);
uint8_t r = strtol(strgroups[0], NULL, 16);
uint8_t g = strtol(strgroups[1], NULL, 16);
uint8_t b = strtol(strgroups[2], NULL, 16);
+ uint8_t a = strtol(strgroups[3], NULL, 16);
- /* We set the first 8 bits high to have 100% opacity in case of a 32 bit
- * color depth visual. */
- return (0xFF << 24) | (r << 16 | g << 8 | b);
+ return (a << 24) | (r << 16 | g << 8 | b);