rofi/include/theme.h

338 lines
7.2 KiB
C
Raw Normal View History

2016-12-09 18:49:49 +00:00
#ifndef THEME_H
#define THEME_H
#include <glib.h>
2016-12-11 11:19:46 +00:00
#include <cairo.h>
2017-01-04 21:27:27 +00:00
#include <widgets/widget.h>
#include <settings.h>
2017-01-08 15:23:17 +00:00
/** Style of line */
2017-01-04 21:27:27 +00:00
typedef enum {
2017-01-08 15:23:17 +00:00
/** Solid line */
2017-01-04 21:27:27 +00:00
SOLID,
2017-01-08 15:23:17 +00:00
/** Dashed line */
2017-01-04 21:27:27 +00:00
DASH
} LineStyle;
2017-01-08 15:23:17 +00:00
/**
* Distance unit type.
*/
2016-12-31 21:47:22 +00:00
typedef enum {
/** PixelWidth in pixels. */
2016-12-31 21:47:22 +00:00
PW_PX,
/** PixelWidth in EM. */
2016-12-31 21:47:22 +00:00
PW_EM,
/** PixelWidget in percentage */
PW_PERCENT,
2016-12-31 21:47:22 +00:00
} PixelWidth;
/**
* Structure representing a distance.
*/
2016-12-31 21:47:22 +00:00
typedef struct {
/** Distance */
2016-12-31 22:27:17 +00:00
double distance;
/** Unit type of the distance */
2016-12-31 21:47:22 +00:00
PixelWidth type;
2017-01-04 21:27:27 +00:00
/** Style of the line */
LineStyle style;
2016-12-31 21:47:22 +00:00
} Distance;
/**
* Type of orientation.
*/
typedef enum {
ORIENTATION_VERTICAL,
ORIENTATION_HORIZONTAL
} Orientation;
/**
* Type of property
*/
2016-12-09 18:49:49 +00:00
typedef enum {
/** Integer */
2016-12-09 18:49:49 +00:00
P_INTEGER,
/** Double */
2016-12-09 21:16:31 +00:00
P_DOUBLE,
/** String */
2016-12-09 18:49:49 +00:00
P_STRING,
/** Boolean */
2016-12-09 18:49:49 +00:00
P_BOOLEAN,
/** Color */
P_COLOR,
/** Padding */
P_PADDING,
2017-01-05 17:22:34 +00:00
/** Link to global setting */
P_LINK,
/** Position */
P_POSITION,
2016-12-09 18:49:49 +00:00
} PropertyType;
/**
* Represent the color in theme.
*/
2016-12-10 18:48:44 +00:00
typedef struct
{
/** red channel */
double red;
/** green channel */
double green;
/** blue channel */
double blue;
/** alpha channel */
double alpha;
} ThemeColor;
/**
* Padding
*/
2016-12-27 21:19:15 +00:00
typedef struct
2017-01-05 17:22:34 +00:00
{
2016-12-31 21:47:22 +00:00
Distance top;
Distance right;
2016-12-31 21:47:22 +00:00
Distance bottom;
Distance left;
2016-12-27 21:19:15 +00:00
} Padding;
2017-01-08 15:23:17 +00:00
/**
* Property structure.
*/
2017-01-05 17:22:34 +00:00
typedef struct Property {
2017-01-08 15:23:17 +00:00
/** Name of property */
2016-12-09 18:49:49 +00:00
char *name;
2017-01-08 15:23:17 +00:00
/** Type of property. */
2016-12-09 18:49:49 +00:00
PropertyType type;
2017-01-08 15:23:17 +00:00
/** Value */
2016-12-09 18:49:49 +00:00
union {
2017-01-08 15:23:17 +00:00
/** integer */
2016-12-09 18:49:49 +00:00
int i;
2017-01-08 15:23:17 +00:00
/** Double */
2016-12-09 18:49:49 +00:00
double f;
2017-01-08 15:23:17 +00:00
/** String */
2016-12-09 18:49:49 +00:00
char *s;
2017-01-08 15:23:17 +00:00
/** boolean */
gboolean b;
/** Color */
2016-12-10 18:48:44 +00:00
ThemeColor color;
2017-01-08 15:23:17 +00:00
/** Padding */
Padding padding;
2017-01-08 15:23:17 +00:00
/** Reference */
2017-01-05 17:22:34 +00:00
struct {
2017-01-08 15:23:17 +00:00
/** Name */
2017-01-05 17:22:34 +00:00
char *name;
2017-01-08 15:23:17 +00:00
/** Cached looked up ref */
2017-01-05 17:22:34 +00:00
struct Property *ref;
} link;
2016-12-09 18:49:49 +00:00
} value;
} Property;
/**
* ThemeWidget.
*/
typedef struct ThemeWidget {
int set;
2016-12-09 18:49:49 +00:00
char *name;
unsigned int num_widgets;
struct ThemeWidget **widgets;
2016-12-09 18:49:49 +00:00
GHashTable *properties;
struct ThemeWidget *parent;
} ThemeWidget;
2016-12-10 18:48:44 +00:00
2016-12-09 18:49:49 +00:00
/**
* Global pointer to the current active theme.
*/
extern ThemeWidget *rofi_theme;
2016-12-09 18:49:49 +00:00
/**
* @param base Handle to the current level in the theme.
* @param name Name of the new element.
*
* Create a new element in the theme structure.
*
* @returns handle to the new entry.
*/
2017-01-04 14:49:05 +00:00
ThemeWidget *rofi_theme_find_or_create_name ( ThemeWidget *base, const char *name );
2016-12-09 18:49:49 +00:00
/**
* @param widget The widget handle.
*
* Print out the widget to the commandline.
*/
void rofi_theme_print ( ThemeWidget *widget );
2016-12-09 18:49:49 +00:00
/**
* @param type The type of the property to create.
*
* Create a theme property of type.
*
* @returns a new property.
*/
2016-12-09 18:49:49 +00:00
Property *rofi_theme_property_create ( PropertyType type );
/**
* @param p The property to free.
*
* Free the content of the property.
*/
2016-12-09 18:49:49 +00:00
void rofi_theme_property_free ( Property *p );
/**
* @param wid
*
* Free the widget and alll children.
*/
2017-01-01 17:40:49 +00:00
void rofi_theme_free ( ThemeWidget *wid );
/**
2017-01-04 21:27:27 +00:00
* @param file filename to parse.
*
* Parse the input theme file.
*
* @returns returns TRUE when error.
*/
gboolean rofi_theme_parse_file ( const char *file );
/**
* @param string to parse.
*
* Parse the input string in addition to theme file.
*
* @returns returns TRUE when error.
*/
gboolean rofi_theme_parse_string ( const char *file );
/**
* @param widget The widget handle.
* @param table HashTable containing properties set.
*
* Merge properties with widgets current property.
*/
void rofi_theme_widget_add_properties ( ThemeWidget *widget, GHashTable *table );
2016-12-09 21:16:31 +00:00
/**
* Public API
*/
/**
2017-01-04 21:27:27 +00:00
* @param widget The widget to query
* @param property The property to query.
* @param def The default value.
*
* Obtain the distance of the widget.
*
2017-01-04 21:27:27 +00:00
* @returns The distance value of this property for this widget.
*/
2017-01-04 21:27:27 +00:00
Distance rofi_theme_get_distance ( const widget *widget, const char *property, int def );
/**
2017-01-04 21:27:27 +00:00
* @param widget The widget to query
* @param property The property to query.
* @param def The default value.
*
* Obtain the integer of the widget.
*
2017-01-04 21:27:27 +00:00
* @returns The integer value of this property for this widget.
*/
2017-01-04 21:27:27 +00:00
int rofi_theme_get_integer ( const widget *widget, const char *property, int def );
/**
* @param widget The widget to query
* @param property The property to query.
* @param def The default value.
*
* Obtain the position of the widget.
*
* @returns The position value of this property for this widget.
*/
int rofi_theme_get_position ( const widget *widget, const char *property, int def );
/**
* @param widget The widget to query
* @param property The property to query.
* @param def The default value.
*
* Obtain the integer of the widget.
*
* @returns The integer value of this property for this widget.
*/
int rofi_theme_get_integer_exact ( const widget *widget, const char *property, int def );
/**
2017-01-04 21:27:27 +00:00
* @param widget The widget to query
* @param property The property to query.
* @param def The default value.
*
* Obtain the boolean of the widget.
*
2017-01-04 21:27:27 +00:00
* @returns The boolean value of this property for this widget.
*/
2017-01-04 21:27:27 +00:00
int rofi_theme_get_boolean ( const widget *widget, const char *property, int def );
/**
2017-01-04 21:27:27 +00:00
* @param widget The widget to query
* @param property The property to query.
* @param def The default value.
*
* Obtain the string of the widget.
*
2017-01-04 21:27:27 +00:00
* @returns The string value of this property for this widget.
*/
2017-01-04 21:27:27 +00:00
char *rofi_theme_get_string ( const widget *widget, const char *property, char *def );
/**
2017-01-04 21:27:27 +00:00
* @param widget The widget to query
* @param property The property to query.
* @param def The default value.
*
* Obtain the padding of the widget.
*
2017-01-04 21:27:27 +00:00
* @returns The double value of this property for this widget.
*/
2017-01-04 21:27:27 +00:00
double rofi_theme_get_double ( const widget *widget, const char *property, double def );
/**
2017-01-04 21:27:27 +00:00
* @param widget The widget to query
* @param property The property to query.
2017-01-04 21:27:27 +00:00
* @param d The drawable to apply color.
*
2017-01-01 17:40:49 +00:00
* Obtain the color of the widget and applies this to the drawable d.
*
*/
2017-01-04 21:27:27 +00:00
void rofi_theme_get_color ( const widget *widget, const char *property, cairo_t *d);
/**
2017-01-04 21:27:27 +00:00
* @param widget The widget to query
* @param property The property to query.
2017-01-01 17:40:49 +00:00
* @param pad The default value.
*
* Obtain the padding of the widget.
*
2017-01-04 21:27:27 +00:00
* @returns The padding of this property for this widget.
*/
2017-01-04 21:27:27 +00:00
Padding rofi_theme_get_padding ( const widget *widget, const char *property, Padding pad );
2016-12-31 22:27:17 +00:00
/**
* @param d The distance handle.
* @param ori The orientation.
*
* Convert Distance into pixels.
* @returns the number of pixels this distance represents.
*/
int distance_get_pixel ( Distance d, Orientation ori );
2017-01-04 21:27:27 +00:00
/**
* @param d The distance handle.
* @param draw The cairo drawable.
*
* Set linestyle.
*/
void distance_get_linestyle ( Distance d, cairo_t *draw );
#ifdef THEME_CONVERTER
/**
* Function to convert old theme into new theme format.
*/
void rofi_theme_convert_old_theme ( void );
2016-12-09 18:49:49 +00:00
#endif
#endif