rofi/include/theme.h

270 lines
5.8 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>
/**
* 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;
} 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,
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
{
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;
2016-12-09 18:49:49 +00:00
typedef struct {
char *name;
PropertyType type;
union {
int i;
double f;
char *s;
int b;
2016-12-10 18:48:44 +00:00
ThemeColor color;
Padding padding;
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.
*/
ThemeWidget *rofi_theme_find_or_create_name ( ThemeWidget *base, const char *class );
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 );
/**
* @param file filename to parse.
*
* Parse the input theme file.
*/
2016-12-09 18:49:49 +00:00
void rofi_theme_parse_file ( 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
*/
/**
* @param name The name class
* @param state The widget current state
* @param property The property to query.
* @param def The default value.
*
* Obtain the distance of the widget.
*
* @returns The distance value of this property for this widget.
*/
Distance rofi_theme_get_distance ( const char *name, const char *state, const char *property, int def );
/**
* @param name The name class
* @param state The widget current state
* @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 ( const char *name, const char *state, const char *property, int def );
/**
* @param name The name class
* @param state The widget current state
* @param property The property to query.
* @param def The default value.
*
* Obtain the boolean of the widget.
*
* @returns The boolean value of this property for this widget.
*/
int rofi_theme_get_boolean ( const char *name, const char *state, const char *property, int def );
/**
* @param name The name class
* @param state The widget current state
* @param property The property to query.
* @param def The default value.
*
* Obtain the string of the widget.
*
* @returns The string value of this property for this widget.
*/
char *rofi_theme_get_string ( const char *name, const char *state, const char *property, char *def );
/**
* @param name The name class
* @param state The widget current state
* @param property The property to query.
* @param def The default value.
*
* Obtain the padding of the widget.
*
* @returns The double value of this property for this widget.
*/
double rofi_theme_get_double ( const char *name, const char *state, const char *property, double def );
/**
* @param name The name class
* @param state The widget current state
* @param property The property to query.
2017-01-01 17:40:49 +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.
*
*/
void rofi_theme_get_color ( const char *name, const char *state, const char *property, cairo_t *d);
/**
* @param name The name class
* @param state The widget current state
* @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.
*
* @returns The padding of this property for this widget.
*/
Padding rofi_theme_get_padding ( const char *name, const char *state, 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 );
#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