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>
|
2017-01-01 17:08:49 +00:00
|
|
|
|
2017-01-04 21:27:27 +00:00
|
|
|
typedef enum {
|
|
|
|
SOLID,
|
|
|
|
DASH
|
|
|
|
} LineStyle;
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* Distance unit type.
|
|
|
|
*/
|
2016-12-31 21:47:22 +00:00
|
|
|
typedef enum {
|
2017-01-01 17:08:49 +00:00
|
|
|
/** PixelWidth in pixels. */
|
2016-12-31 21:47:22 +00:00
|
|
|
PW_PX,
|
2017-01-01 17:08:49 +00:00
|
|
|
/** PixelWidth in EM. */
|
2016-12-31 21:47:22 +00:00
|
|
|
PW_EM,
|
2017-01-03 18:23:09 +00:00
|
|
|
/** PixelWidget in percentage */
|
|
|
|
PW_PERCENT,
|
2016-12-31 21:47:22 +00:00
|
|
|
} PixelWidth;
|
|
|
|
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* Structure representing a distance.
|
|
|
|
*/
|
2016-12-31 21:47:22 +00:00
|
|
|
typedef struct {
|
2017-01-01 17:08:49 +00:00
|
|
|
/** Distance */
|
2016-12-31 22:27:17 +00:00
|
|
|
double distance;
|
2017-01-01 17:08:49 +00:00
|
|
|
/** 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;
|
|
|
|
|
2017-01-03 18:23:09 +00:00
|
|
|
/**
|
|
|
|
* Type of orientation.
|
|
|
|
*/
|
|
|
|
typedef enum {
|
|
|
|
ORIENTATION_VERTICAL,
|
|
|
|
ORIENTATION_HORIZONTAL
|
|
|
|
} Orientation;
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* Type of property
|
|
|
|
*/
|
2016-12-09 18:49:49 +00:00
|
|
|
typedef enum {
|
2017-01-01 17:08:49 +00:00
|
|
|
/** Integer */
|
2016-12-09 18:49:49 +00:00
|
|
|
P_INTEGER,
|
2017-01-01 17:08:49 +00:00
|
|
|
/** Double */
|
2016-12-09 21:16:31 +00:00
|
|
|
P_DOUBLE,
|
2017-01-01 17:08:49 +00:00
|
|
|
/** String */
|
2016-12-09 18:49:49 +00:00
|
|
|
P_STRING,
|
2017-01-01 17:08:49 +00:00
|
|
|
/** Boolean */
|
2016-12-09 18:49:49 +00:00
|
|
|
P_BOOLEAN,
|
2017-01-01 17:08:49 +00:00
|
|
|
/** Color */
|
2016-12-31 20:37:19 +00:00
|
|
|
P_COLOR,
|
2017-01-01 17:08:49 +00:00
|
|
|
/** Padding */
|
2016-12-31 20:37:19 +00:00
|
|
|
P_PADDING,
|
2017-01-05 17:22:34 +00:00
|
|
|
/** Link to global setting */
|
|
|
|
P_LINK,
|
2016-12-09 18:49:49 +00:00
|
|
|
} PropertyType;
|
|
|
|
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* 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;
|
2017-01-01 00:31:25 +00:00
|
|
|
Distance right;
|
2016-12-31 21:47:22 +00:00
|
|
|
Distance bottom;
|
2017-01-01 00:31:25 +00:00
|
|
|
Distance left;
|
2016-12-27 21:19:15 +00:00
|
|
|
} Padding;
|
|
|
|
|
2017-01-05 17:22:34 +00:00
|
|
|
typedef struct Property {
|
2016-12-09 18:49:49 +00:00
|
|
|
char *name;
|
|
|
|
PropertyType type;
|
|
|
|
union {
|
|
|
|
int i;
|
|
|
|
double f;
|
|
|
|
char *s;
|
|
|
|
int b;
|
2016-12-10 18:48:44 +00:00
|
|
|
ThemeColor color;
|
2016-12-31 20:37:19 +00:00
|
|
|
Padding padding;
|
2017-01-05 17:22:34 +00:00
|
|
|
struct {
|
|
|
|
char *name;
|
|
|
|
struct Property *ref;
|
|
|
|
} link;
|
2016-12-09 18:49:49 +00:00
|
|
|
} value;
|
|
|
|
} Property;
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* ThemeWidget.
|
|
|
|
*/
|
|
|
|
typedef struct ThemeWidget {
|
2016-12-12 22:40:43 +00:00
|
|
|
int set;
|
2016-12-09 18:49:49 +00:00
|
|
|
char *name;
|
|
|
|
|
|
|
|
unsigned int num_widgets;
|
2017-01-01 17:08:49 +00:00
|
|
|
struct ThemeWidget **widgets;
|
2016-12-09 18:49:49 +00:00
|
|
|
|
|
|
|
GHashTable *properties;
|
|
|
|
|
2017-01-01 17:08:49 +00:00
|
|
|
struct ThemeWidget *parent;
|
|
|
|
} ThemeWidget;
|
2016-12-10 18:48:44 +00:00
|
|
|
|
2016-12-09 18:49:49 +00:00
|
|
|
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* Global pointer to the current active theme.
|
|
|
|
*/
|
|
|
|
extern ThemeWidget *rofi_theme;
|
2016-12-09 18:49:49 +00:00
|
|
|
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* @param base Handle to the current level in the theme.
|
2017-01-04 14:05:39 +00:00
|
|
|
* @param name Name of the new element.
|
2017-01-01 17:08:49 +00:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
2017-01-01 17:08: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
|
|
|
|
2017-01-01 17:08: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 );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @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 );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param wid
|
|
|
|
*
|
|
|
|
* Free the widget and alll children.
|
|
|
|
*/
|
2017-01-01 17:40:49 +00:00
|
|
|
void rofi_theme_free ( ThemeWidget *wid );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
2017-01-04 21:27:27 +00:00
|
|
|
* @param file filename to parse.
|
2017-01-01 17:08:49 +00:00
|
|
|
*
|
|
|
|
* Parse the input theme file.
|
|
|
|
*/
|
2016-12-09 18:49:49 +00:00
|
|
|
void rofi_theme_parse_file ( const char *file );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @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-01 17:08:49 +00:00
|
|
|
/**
|
2017-01-04 21:27:27 +00:00
|
|
|
* @param widget The widget to query
|
2017-01-01 17:08:49 +00:00
|
|
|
* @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-01 17:08:49 +00:00
|
|
|
*/
|
2017-01-04 21:27:27 +00:00
|
|
|
Distance rofi_theme_get_distance ( const widget *widget, const char *property, int def );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
2017-01-04 21:27:27 +00:00
|
|
|
* @param widget The widget to query
|
2017-01-01 17:08:49 +00:00
|
|
|
* @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-01 17:08:49 +00:00
|
|
|
*/
|
2017-01-04 21:27:27 +00:00
|
|
|
int rofi_theme_get_integer ( const widget *widget, const char *property, int def );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
2017-01-04 21:27:27 +00:00
|
|
|
* @param widget The widget to query
|
2017-01-01 17:08:49 +00:00
|
|
|
* @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-01 17:08:49 +00:00
|
|
|
*/
|
2017-01-04 21:27:27 +00:00
|
|
|
int rofi_theme_get_boolean ( const widget *widget, const char *property, int def );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
2017-01-04 21:27:27 +00:00
|
|
|
* @param widget The widget to query
|
2017-01-01 17:08:49 +00:00
|
|
|
* @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-01 17:08:49 +00:00
|
|
|
*/
|
2017-01-04 21:27:27 +00:00
|
|
|
char *rofi_theme_get_string ( const widget *widget, const char *property, char *def );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
2017-01-04 21:27:27 +00:00
|
|
|
* @param widget The widget to query
|
2017-01-01 17:08:49 +00:00
|
|
|
* @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-01 17:08:49 +00:00
|
|
|
*/
|
2017-01-04 21:27:27 +00:00
|
|
|
double rofi_theme_get_double ( const widget *widget, const char *property, double def );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
2017-01-04 21:27:27 +00:00
|
|
|
* @param widget The widget to query
|
2017-01-01 17:08:49 +00:00
|
|
|
* @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:08:49 +00:00
|
|
|
*
|
2017-01-01 17:40:49 +00:00
|
|
|
* Obtain the color of the widget and applies this to the drawable d.
|
2017-01-01 17:08:49 +00:00
|
|
|
*
|
|
|
|
*/
|
2017-01-04 21:27:27 +00:00
|
|
|
void rofi_theme_get_color ( const widget *widget, const char *property, cairo_t *d);
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
/**
|
2017-01-04 21:27:27 +00:00
|
|
|
* @param widget The widget to query
|
2017-01-01 17:08:49 +00:00
|
|
|
* @param property The property to query.
|
2017-01-01 17:40:49 +00:00
|
|
|
* @param pad The default value.
|
2017-01-01 17:08:49 +00:00
|
|
|
*
|
|
|
|
* 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-01 17:08:49 +00:00
|
|
|
*/
|
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
|
|
|
|
2017-01-01 17:08:49 +00:00
|
|
|
/**
|
|
|
|
* @param d The distance handle.
|
2017-01-03 18:23:09 +00:00
|
|
|
* @param ori The orientation.
|
2017-01-01 17:08:49 +00:00
|
|
|
*
|
|
|
|
* Convert Distance into pixels.
|
|
|
|
* @returns the number of pixels this distance represents.
|
|
|
|
*/
|
2017-01-03 18:23:09 +00:00
|
|
|
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 );
|
2017-01-01 17:08:49 +00:00
|
|
|
|
|
|
|
#ifdef THEME_CONVERTER
|
|
|
|
/**
|
|
|
|
* Function to convert old theme into new theme format.
|
|
|
|
*/
|
2017-01-01 00:06:38 +00:00
|
|
|
void rofi_theme_convert_old_theme ( void );
|
2016-12-09 18:49:49 +00:00
|
|
|
#endif
|
2017-01-01 17:08:49 +00:00
|
|
|
#endif
|