*/
#pragma once
+#include <config.h>
+
#include <stdbool.h>
#include <stdarg.h>
#include <stdio.h>
#include <xcb/xproto.h>
#include <xcb/xcb_keysyms.h>
-#if PANGO_SUPPORT
#include <pango/pango.h>
-#endif
-#ifdef CAIRO_SUPPORT
#include <cairo/cairo-xcb.h>
-#endif
#define DEFAULT_DIR_MODE (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)
+/**
+ * XCB connection and root screen
+ *
+ */
+extern xcb_connection_t *conn;
+extern xcb_screen_t *root_screen;
+
/**
* Opaque data structure for storing strings.
*
xcb_charinfo_t *table;
} xcb;
-#if PANGO_SUPPORT
/** The pango font description */
PangoFontDescription *pango_desc;
-#endif
} specific;
};
#if !defined(DLOG)
void debuglog(char *fmt, ...)
__attribute__((format(printf, 1, 2)));
-#define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, I3__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
+#define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, STRIPPED__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#endif
/**
*/
xcb_char2b_t *convert_utf8_to_ucs2(char *input, size_t *real_strlen);
+/* Represents a color split by color channel. */
+typedef struct color_t {
+ double red;
+ double green;
+ double blue;
+ double alpha;
+
+ /* The colorpixel we use for direct XCB calls. */
+ uint32_t colorpixel;
+} color_t;
+
+#define COLOR_TRANSPARENT ((color_t){.red = 0.0, .green = 0.0, .blue = 0.0, .colorpixel = 0})
+
/**
* Defines the colors to be used for the forthcoming draw_text calls.
*
*/
-void set_font_colors(xcb_gcontext_t gc, uint32_t foreground, uint32_t background);
+void set_font_colors(xcb_gcontext_t gc, color_t foreground, color_t background);
/**
* Returns true if and only if the current font is a pango font.
*/
char *get_exe_path(const char *argv0);
+/**
+ * Initialize the DPI setting.
+ * This will use the 'Xft.dpi' X resource if available and fall back to
+ * guessing the correct value otherwise.
+ */
+void init_dpi(void);
+
+/**
+ * This function returns the value of the DPI setting.
+ *
+ */
+long get_dpi_value(void);
+
/**
* Convert a logical amount of pixels (e.g. 2 pixels on a “standard” 96 DPI
* screen) to a corresponding amount of physical pixels on a standard or retina
int mkdirp(const char *path, mode_t mode);
#endif
-#ifdef CAIRO_SUPPORT
+/** Helper structure for usage in format_placeholders(). */
+typedef struct placeholder_t {
+ /* The placeholder to be replaced, e.g., "%title". */
+ char *name;
+ /* The value this placeholder should be replaced with. */
+ char *value;
+} placeholder_t;
+
+/**
+ * Replaces occurrences of the defined placeholders in the format string.
+ *
+ */
+char *format_placeholders(char *format, placeholder_t *placeholders, int num);
+
/* We need to flush cairo surfaces twice to avoid an assertion bug. See #1989
* and https://bugs.freedesktop.org/show_bug.cgi?id=92455. */
#define CAIRO_SURFACE_FLUSH(surface) \
cairo_surface_flush(surface); \
cairo_surface_flush(surface); \
} while (0)
-#endif
-
-/* Represents a color split by color channel. */
-typedef struct color_t {
- double red;
- double green;
- double blue;
- double alpha;
-
- /* The colorpixel we use for direct XCB calls. */
- uint32_t colorpixel;
-} color_t;
-
-#define COLOR_TRANSPARENT ((color_t){.red = 0.0, .green = 0.0, .blue = 0.0, .colorpixel = 0})
/* A wrapper grouping an XCB drawable and both a graphics context
* and the corresponding cairo objects representing it. */
int width;
int height;
-#ifdef CAIRO_SUPPORT
/* A cairo surface representing the drawable. */
cairo_surface_t *surface;
/* The cairo object representing the drawable. In general,
* this is what one should use for any drawing operation. */
cairo_t *cr;
-#endif
} surface_t;
/**