mirror of
https://github.com/lbonn/rofi
synced 2024-11-10 14:24:27 +00:00
Update comments, rename Widget to ThemeWidget.
This commit is contained in:
parent
62bfeafb1a
commit
ccf3f23d9b
13 changed files with 370 additions and 67 deletions
198
include/theme.h
198
include/theme.h
|
@ -2,27 +2,48 @@
|
|||
#define THEME_H
|
||||
#include <glib.h>
|
||||
#include <cairo.h>
|
||||
typedef enum {
|
||||
PW_PX,
|
||||
PW_EM,
|
||||
|
||||
/**
|
||||
* Distance unit type.
|
||||
*/
|
||||
typedef enum {
|
||||
/** PixelWidth in pixels. */
|
||||
PW_PX,
|
||||
/** PixelWidth in EM. */
|
||||
PW_EM,
|
||||
} PixelWidth;
|
||||
|
||||
/**
|
||||
* Structure representing a distance.
|
||||
*/
|
||||
typedef struct {
|
||||
/** Distance */
|
||||
double distance;
|
||||
/** Unit type of the distance */
|
||||
PixelWidth type;
|
||||
} Distance;
|
||||
|
||||
/**
|
||||
* Type of property
|
||||
*/
|
||||
typedef enum {
|
||||
/** Integer */
|
||||
P_INTEGER,
|
||||
/** Double */
|
||||
P_DOUBLE,
|
||||
/** String */
|
||||
P_STRING,
|
||||
/** Boolean */
|
||||
P_BOOLEAN,
|
||||
/** Color */
|
||||
P_COLOR,
|
||||
// Used in padding.
|
||||
/** Padding */
|
||||
P_PADDING,
|
||||
} PropertyType;
|
||||
|
||||
/**
|
||||
* Represent the color in theme.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
/** red channel */
|
||||
|
@ -35,6 +56,9 @@ typedef struct
|
|||
double alpha;
|
||||
} ThemeColor;
|
||||
|
||||
/**
|
||||
* Padding
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
Distance top;
|
||||
|
@ -55,45 +79,189 @@ typedef struct {
|
|||
Padding padding;
|
||||
} value;
|
||||
} Property;
|
||||
|
||||
typedef struct _Widget {
|
||||
/**
|
||||
* ThemeWidget.
|
||||
*/
|
||||
typedef struct ThemeWidget {
|
||||
int set;
|
||||
char *name;
|
||||
|
||||
unsigned int num_widgets;
|
||||
struct _Widget **widgets;
|
||||
struct ThemeWidget **widgets;
|
||||
|
||||
GHashTable *properties;
|
||||
|
||||
struct _Widget *parent;
|
||||
} Widget;
|
||||
struct ThemeWidget *parent;
|
||||
} ThemeWidget;
|
||||
|
||||
|
||||
extern Widget *rofi_theme;
|
||||
/**
|
||||
* Global pointer to the current active theme.
|
||||
*/
|
||||
extern ThemeWidget *rofi_theme;
|
||||
|
||||
Widget *rofi_theme_find_or_create_class ( Widget *base, const char *class );
|
||||
/**
|
||||
* @param base Handle to the current level in the theme.
|
||||
* @param class 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_class ( ThemeWidget *base, const char *class );
|
||||
|
||||
/**
|
||||
* @param widget The widget handle.
|
||||
*
|
||||
* Print out the widget to the commandline.
|
||||
*/
|
||||
void rofi_theme_print ( ThemeWidget *widget );
|
||||
|
||||
void rofi_theme_print ( Widget *widget );
|
||||
|
||||
/**
|
||||
* @param type The type of the property to create.
|
||||
*
|
||||
* Create a theme property of type.
|
||||
*
|
||||
* @returns a new property.
|
||||
*/
|
||||
Property *rofi_theme_property_create ( PropertyType type );
|
||||
|
||||
/**
|
||||
* @param p The property to free.
|
||||
*
|
||||
* Free the content of the property.
|
||||
*/
|
||||
void rofi_theme_property_free ( Property *p );
|
||||
void rofi_theme_free ( Widget * );
|
||||
|
||||
/**
|
||||
* @param wid
|
||||
*
|
||||
* Free the widget and alll children.
|
||||
*/
|
||||
void rofi_theme_free ( ThemeWidget * );
|
||||
|
||||
/**
|
||||
* @param file filename to parse.
|
||||
*
|
||||
* Parse the input theme file.
|
||||
*/
|
||||
void rofi_theme_parse_file ( const char *file );
|
||||
void rofi_theme_widget_add_properties ( Widget *widget, GHashTable *table );
|
||||
|
||||
/**
|
||||
* @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 );
|
||||
|
||||
/**
|
||||
* Public API
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param wclass The widget class
|
||||
* @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 *wclass, const char *name, const char *state, const char *property, int def );
|
||||
|
||||
/**
|
||||
* @param wclass The widget class
|
||||
* @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 *wclass, const char *name, const char *state, const char *property, int def );
|
||||
|
||||
/**
|
||||
* @param wclass The widget class
|
||||
* @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 *wclass, const char *name, const char *state, const char *property, int def );
|
||||
|
||||
/**
|
||||
* @param wclass The widget class
|
||||
* @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 *wclass, const char *name, const char *state, const char *property, char *def );
|
||||
|
||||
/**
|
||||
* @param wclass The widget class
|
||||
* @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 *wclass, const char *name, const char *state, const char *property, double def );
|
||||
|
||||
/**
|
||||
* @param wclass The widget class
|
||||
* @param name The name class
|
||||
* @param state The widget current state
|
||||
* @param property The property to query.
|
||||
* @param def The default value.
|
||||
*
|
||||
* Obtain the color of the widget.
|
||||
*
|
||||
* @returns The color value of this property for this widget.
|
||||
*/
|
||||
void rofi_theme_get_color ( const char *wclass, const char *name, const char *state, const char *property, cairo_t *d);
|
||||
|
||||
/**
|
||||
* @param wclass The widget class
|
||||
* @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 padding of this property for this widget.
|
||||
*/
|
||||
Padding rofi_theme_get_padding ( const char *wclass, const char *name, const char *state, const char *property, Padding pad );
|
||||
|
||||
/**
|
||||
* @param d The distance handle.
|
||||
*
|
||||
* Convert Distance into pixels.
|
||||
* @returns the number of pixels this distance represents.
|
||||
*/
|
||||
int distance_get_pixel ( Distance d );
|
||||
|
||||
#ifdef THEME_CONVERTER
|
||||
/**
|
||||
* Function to convert old theme into new theme format.
|
||||
*/
|
||||
void rofi_theme_convert_old_theme ( void );
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -24,7 +24,7 @@ struct RofiViewState
|
|||
|
||||
/** Flag indicating if view needs to be refiltered. */
|
||||
int refilter;
|
||||
|
||||
/** Widget representing the main window. */
|
||||
window *main_window;
|
||||
/** Main #box widget holding different elements. */
|
||||
box *main_box;
|
||||
|
|
|
@ -63,6 +63,12 @@ void scrollbar_set_max_value ( scrollbar *sb, unsigned int max );
|
|||
*/
|
||||
unsigned int scrollbar_clicked ( const scrollbar *sb, int y );
|
||||
|
||||
/**
|
||||
* @param sb scrollbar object
|
||||
* @param width width of the scrollbar
|
||||
*
|
||||
* Set the width of the scrollbar handle.
|
||||
*/
|
||||
void scrollbar_set_width ( scrollbar *sb, int width );
|
||||
/*@}*/
|
||||
#endif // ROFI_SCROLLBAR_H
|
||||
|
|
|
@ -196,6 +196,12 @@ int textbox_get_font_width ( const textbox *tb );
|
|||
* @returns the width of a character in pixels.
|
||||
*/
|
||||
double textbox_get_estimated_char_width ( void );
|
||||
|
||||
/**
|
||||
* Estimate the height of a character.
|
||||
*
|
||||
* @returns the height of a character in pixels.
|
||||
*/
|
||||
double textbox_get_estimated_char_height ( void );
|
||||
|
||||
/**
|
||||
|
@ -255,6 +261,5 @@ PangoAttrList *textbox_get_pango_attributes ( textbox *tb );
|
|||
* @returns the visible text.
|
||||
*/
|
||||
const char *textbox_get_visible_text ( const textbox *tb );
|
||||
int distance_get_pixel ( Distance d );
|
||||
/*@}*/
|
||||
#endif //ROFI_TEXTBOX_H
|
||||
|
|
|
@ -57,15 +57,90 @@ struct _widget
|
|||
const char *state;
|
||||
};
|
||||
|
||||
/**
|
||||
* @param widget The widget to initialize.
|
||||
* @param name The name of the widget.
|
||||
* @param class The class of the widget.
|
||||
*
|
||||
* Initializes the @widget structure.
|
||||
*
|
||||
*/
|
||||
void widget_init ( widget *widget , const char *name, const char *class_name );
|
||||
|
||||
/**
|
||||
* @param widget The widget handle.
|
||||
* @param state The state of the widget.
|
||||
*
|
||||
* Set the state of the widget.
|
||||
*/
|
||||
void widget_set_state ( widget *widget, const char *state );
|
||||
|
||||
/**
|
||||
* @param wid The widget handle.
|
||||
*
|
||||
* Get the left padding of the widget.
|
||||
*
|
||||
* @returns the left padding in pixels.
|
||||
*/
|
||||
int widget_padding_get_left ( const widget *wid );
|
||||
|
||||
/**
|
||||
* @param wid The widget handle.
|
||||
*
|
||||
* Get the right padding of the widget.
|
||||
*
|
||||
* @returns the right padding in pixels.
|
||||
*/
|
||||
int widget_padding_get_right ( const widget *wid );
|
||||
|
||||
/**
|
||||
* @param wid The widget handle.
|
||||
*
|
||||
* Get the top padding of the widget.
|
||||
*
|
||||
* @returns the top padding in pixels.
|
||||
*/
|
||||
int widget_padding_get_top ( const widget *wid );
|
||||
|
||||
/**
|
||||
* @param wid The widget handle.
|
||||
*
|
||||
* Get the bottom padding of the widget.
|
||||
*
|
||||
* @returns the bottom padding in pixels.
|
||||
*/
|
||||
int widget_padding_get_bottom ( const widget *wid );
|
||||
|
||||
/**
|
||||
* @param wid The widget handle.
|
||||
*
|
||||
* Get width of the content of the widget
|
||||
*
|
||||
* @returns the widget width, excluding padding.
|
||||
*/
|
||||
int widget_padding_get_remaining_width ( const widget *wid );
|
||||
/**
|
||||
* @param wid The widget handle.
|
||||
*
|
||||
* Get height of the content of the widget
|
||||
*
|
||||
* @returns the widget height, excluding padding.
|
||||
*/
|
||||
int widget_padding_get_remaining_height ( const widget *wid );
|
||||
/**
|
||||
* @param wid The widget handle.
|
||||
*
|
||||
* Get the combined top and bottom padding.
|
||||
*
|
||||
* @returns the top and bottom padding of the widget in pixels.
|
||||
*/
|
||||
int widget_padding_get_padding_height ( const widget *wid );
|
||||
/**
|
||||
* @param wid The widget handle.
|
||||
*
|
||||
* Get the combined left and right padding.
|
||||
*
|
||||
* @returns the left and right padding of the widget in pixels.
|
||||
*/
|
||||
int widget_padding_get_padding_width ( const widget *wid );
|
||||
#endif // WIDGET_INTERNAL_H
|
||||
|
|
|
@ -175,7 +175,22 @@ void widget_set_clicked_handler ( widget *wid, widget_clicked_cb cb, void *udata
|
|||
gboolean widget_motion_notify ( widget *wid, xcb_motion_notify_event_t *xme );
|
||||
|
||||
|
||||
/**
|
||||
* @param wid The widget handle
|
||||
* @param name The name of the widget.
|
||||
*
|
||||
* Set name on widget.
|
||||
*/
|
||||
void widget_set_name ( widget *wid, const char *name );
|
||||
|
||||
/**
|
||||
* @param wid The widget handle
|
||||
*
|
||||
* Get the desired height of this widget recursively.
|
||||
*
|
||||
* @returns the desired height of the widget in pixels.
|
||||
*/
|
||||
int widget_get_desired_height ( widget *wid );
|
||||
|
||||
/*@}*/
|
||||
#endif // ROFI_WIDGET_H
|
||||
|
|
|
@ -32,6 +32,13 @@ window * window_create ( const char *name );
|
|||
*/
|
||||
void window_add ( window *window, widget *child );
|
||||
|
||||
/**
|
||||
* @param window Handle to the window widget.
|
||||
*
|
||||
* Get the border width of the widget.
|
||||
*
|
||||
* @returns the border width (times 2) of the widget.
|
||||
*/
|
||||
int window_get_border_width ( const window *window );
|
||||
/*@}*/
|
||||
#endif // ROFI_WINDOW_H
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
#include "theme.h"
|
||||
#include "lexer/theme-parser.h"
|
||||
Widget *rofi_theme = NULL;
|
||||
ThemeWidget *rofi_theme = NULL;
|
||||
void yyerror(YYLTYPE *yylloc, const char* s);
|
||||
int yylex (YYSTYPE *, YYLTYPE *);
|
||||
%}
|
||||
|
@ -27,7 +27,7 @@ int yylex (YYSTYPE *, YYLTYPE *);
|
|||
char *sval;
|
||||
int bval;
|
||||
ThemeColor colorval;
|
||||
Widget *theme;
|
||||
ThemeWidget *theme;
|
||||
GList *name_path;
|
||||
Property *property;
|
||||
GHashTable *property_list;
|
||||
|
@ -79,7 +79,7 @@ start:
|
|||
entries:
|
||||
%empty {
|
||||
// There is always a base widget.
|
||||
$$ = rofi_theme = (Widget*)g_malloc0 (sizeof(Widget));
|
||||
$$ = rofi_theme = (ThemeWidget*)g_malloc0 (sizeof(ThemeWidget));
|
||||
rofi_theme->name = g_strdup ( "Root" );
|
||||
}
|
||||
| entries
|
||||
|
@ -94,7 +94,7 @@ entry:
|
|||
CLASS_PREFIX class_name state_path BOPEN optional_properties BCLOSE
|
||||
{
|
||||
gchar *classn = g_strconcat ( "@", $2, NULL);
|
||||
Widget *widget = rofi_theme_find_or_create_class ( rofi_theme , classn );
|
||||
ThemeWidget *widget = rofi_theme_find_or_create_class ( rofi_theme , classn );
|
||||
g_free(classn);
|
||||
widget->set = TRUE;
|
||||
for ( GList *iter = g_list_first ( $3 ); iter ; iter = g_list_next ( iter ) ) {
|
||||
|
@ -107,7 +107,7 @@ CLASS_PREFIX class_name state_path BOPEN optional_properties BCLOSE
|
|||
}
|
||||
| NAME_PREFIX name_path state_path BOPEN optional_properties BCLOSE
|
||||
{
|
||||
Widget *widget = rofi_theme;
|
||||
ThemeWidget *widget = rofi_theme;
|
||||
for ( GList *iter = g_list_first ( $2 ); iter ; iter = g_list_next ( iter ) ) {
|
||||
widget = rofi_theme_find_or_create_class ( widget, iter->data );
|
||||
}
|
||||
|
|
102
source/theme.c
102
source/theme.c
|
@ -10,7 +10,7 @@
|
|||
|
||||
void yyerror ( YYLTYPE *ylloc, const char *);
|
||||
|
||||
Widget *rofi_theme_find_or_create_class ( Widget *base, const char *class )
|
||||
ThemeWidget *rofi_theme_find_or_create_class ( ThemeWidget *base, const char *class )
|
||||
{
|
||||
for ( unsigned int i = 0; i < base->num_widgets;i++){
|
||||
if ( g_strcmp0(base->widgets[i]->name, class) == 0 ){
|
||||
|
@ -18,9 +18,9 @@ Widget *rofi_theme_find_or_create_class ( Widget *base, const char *class )
|
|||
}
|
||||
}
|
||||
|
||||
base->widgets = g_realloc ( base->widgets, sizeof(Widget*)*(base->num_widgets+1));
|
||||
base->widgets[base->num_widgets] = g_malloc0(sizeof(Widget));
|
||||
Widget *retv = base->widgets[base->num_widgets];
|
||||
base->widgets = g_realloc ( base->widgets, sizeof(ThemeWidget*)*(base->num_widgets+1));
|
||||
base->widgets[base->num_widgets] = g_malloc0(sizeof(ThemeWidget));
|
||||
ThemeWidget *retv = base->widgets[base->num_widgets];
|
||||
retv->parent = base;
|
||||
retv->name = g_strdup(class);
|
||||
base->num_widgets++;
|
||||
|
@ -47,7 +47,7 @@ void rofi_theme_property_free ( Property *p )
|
|||
g_free(p);
|
||||
}
|
||||
|
||||
void rofi_theme_free ( Widget *widget )
|
||||
void rofi_theme_free ( ThemeWidget *widget )
|
||||
{
|
||||
if ( widget == NULL ){
|
||||
return;
|
||||
|
@ -116,14 +116,14 @@ static void rofi_theme_print_property_index ( int depth, Property *p )
|
|||
putchar ( '\n' );
|
||||
}
|
||||
|
||||
static void rofi_theme_print_index ( Widget *widget )
|
||||
static void rofi_theme_print_index ( ThemeWidget *widget )
|
||||
{
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
if ( widget->properties ){
|
||||
int index = 0;
|
||||
GList *list = NULL;
|
||||
Widget *w = widget;
|
||||
ThemeWidget *w = widget;
|
||||
while ( w){
|
||||
if ( g_strcmp0(w->name,"Root") == 0 ) {
|
||||
break;
|
||||
|
@ -164,16 +164,32 @@ static void rofi_theme_print_index ( Widget *widget )
|
|||
rofi_theme_print_index ( widget->widgets[i] );
|
||||
}
|
||||
}
|
||||
void rofi_theme_print ( Widget *widget )
|
||||
void rofi_theme_print ( ThemeWidget *widget )
|
||||
{
|
||||
rofi_theme_print_index ( widget );
|
||||
}
|
||||
|
||||
/**
|
||||
* Main lex parser.
|
||||
*/
|
||||
int yyparse();
|
||||
void yylex_destroy( void );
|
||||
extern FILE* yyin;
|
||||
extern Widget *rofi_theme;
|
||||
|
||||
/**
|
||||
* Destroy the internal of lex parser.
|
||||
*/
|
||||
void yylex_destroy( void );
|
||||
|
||||
/**
|
||||
* Global handle input file to flex parser.
|
||||
*/
|
||||
extern FILE* yyin;
|
||||
|
||||
/**
|
||||
* @param yylloc The file location.
|
||||
* @param s Error message string.
|
||||
*
|
||||
* Error handler for the lex parser.
|
||||
*/
|
||||
void yyerror(YYLTYPE *yylloc, const char* s) {
|
||||
fprintf(stderr, "Parse error: %s\n", s);
|
||||
fprintf(stderr, "From line %d column %d to line %d column %d\n", yylloc->first_line, yylloc->first_column, yylloc->last_line, yylloc->last_column);
|
||||
|
@ -186,7 +202,7 @@ static gboolean rofi_theme_steal_property_int ( gpointer key, gpointer value, gp
|
|||
g_hash_table_replace ( table, key, value);
|
||||
return TRUE;
|
||||
}
|
||||
void rofi_theme_widget_add_properties ( Widget *widget, GHashTable *table )
|
||||
void rofi_theme_widget_add_properties ( ThemeWidget *widget, GHashTable *table )
|
||||
{
|
||||
if ( table == NULL ) {
|
||||
return;
|
||||
|
@ -204,7 +220,7 @@ void rofi_theme_widget_add_properties ( Widget *widget, GHashTable *table )
|
|||
* Public API
|
||||
*/
|
||||
|
||||
static Widget *rofi_theme_find_single ( Widget *widget, const char *name)
|
||||
static ThemeWidget *rofi_theme_find_single ( ThemeWidget *widget, const char *name)
|
||||
{
|
||||
for ( unsigned int j = 0; j < widget->num_widgets;j++){
|
||||
if ( g_strcmp0(widget->widgets[j]->name, name ) == 0 ){
|
||||
|
@ -214,7 +230,7 @@ static Widget *rofi_theme_find_single ( Widget *widget, const char *name)
|
|||
return widget;
|
||||
}
|
||||
|
||||
static Widget *rofi_theme_find ( Widget *widget , const char *name, const gboolean exact )
|
||||
static ThemeWidget *rofi_theme_find ( ThemeWidget *widget , const char *name, const gboolean exact )
|
||||
{
|
||||
if ( widget == NULL || name == NULL ) {
|
||||
return widget;
|
||||
|
@ -223,7 +239,7 @@ static Widget *rofi_theme_find ( Widget *widget , const char *name, const gboole
|
|||
int found = TRUE;
|
||||
for ( unsigned int i = 0; found && names && names[i]; i++ ){
|
||||
found = FALSE;
|
||||
Widget *f = rofi_theme_find_single ( widget, names[i]);
|
||||
ThemeWidget *f = rofi_theme_find_single ( widget, names[i]);
|
||||
if ( f != widget ){
|
||||
widget = f;
|
||||
found = TRUE;
|
||||
|
@ -237,7 +253,7 @@ static Widget *rofi_theme_find ( Widget *widget , const char *name, const gboole
|
|||
}
|
||||
}
|
||||
|
||||
static Property *rofi_theme_find_property ( Widget *widget, PropertyType type, const char *property )
|
||||
static Property *rofi_theme_find_property ( ThemeWidget *widget, PropertyType type, const char *property )
|
||||
{
|
||||
while ( widget ) {
|
||||
if ( widget->properties && g_hash_table_contains ( widget->properties, property) ) {
|
||||
|
@ -250,10 +266,10 @@ static Property *rofi_theme_find_property ( Widget *widget, PropertyType type, c
|
|||
}
|
||||
return NULL;
|
||||
}
|
||||
static Widget *rofi_theme_find_widget ( const char *wclass, const char *name, const char *state )
|
||||
static ThemeWidget *rofi_theme_find_widget ( const char *wclass, const char *name, const char *state )
|
||||
{
|
||||
// First find exact match based on name.
|
||||
Widget *widget = rofi_theme_find ( rofi_theme, name, TRUE );
|
||||
ThemeWidget *widget = rofi_theme_find ( rofi_theme, name, TRUE );
|
||||
widget = rofi_theme_find ( widget, state, TRUE );
|
||||
|
||||
if ( widget == NULL ){
|
||||
|
@ -274,7 +290,7 @@ static Widget *rofi_theme_find_widget ( const char *wclass, const char *name, co
|
|||
|
||||
int rofi_theme_get_integer ( const char *wclass, const char *name, const char *state, const char *property, int def )
|
||||
{
|
||||
Widget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
ThemeWidget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
Property *p = rofi_theme_find_property ( widget, P_INTEGER, property );
|
||||
if ( p ){
|
||||
return p->value.i;
|
||||
|
@ -283,7 +299,7 @@ int rofi_theme_get_integer ( const char *wclass, const char *name, const char *
|
|||
}
|
||||
Distance rofi_theme_get_distance ( const char *wclass, const char *name, const char *state, const char *property, int def )
|
||||
{
|
||||
Widget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
ThemeWidget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
Property *p = rofi_theme_find_property ( widget, P_PADDING, property );
|
||||
if ( p ){
|
||||
return p->value.padding.left;
|
||||
|
@ -298,7 +314,7 @@ Distance rofi_theme_get_distance ( const char *wclass, const char *name, const
|
|||
|
||||
int rofi_theme_get_boolean ( const char *wclass, const char *name, const char *state, const char *property, int def )
|
||||
{
|
||||
Widget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
ThemeWidget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
Property *p = rofi_theme_find_property ( widget, P_BOOLEAN, property );
|
||||
if ( p ){
|
||||
return p->value.b;
|
||||
|
@ -308,7 +324,7 @@ int rofi_theme_get_boolean ( const char *wclass, const char *name, const char *
|
|||
|
||||
char *rofi_theme_get_string ( const char *wclass, const char *name, const char *state, const char *property, char *def )
|
||||
{
|
||||
Widget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
ThemeWidget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
Property *p = rofi_theme_find_property ( widget, P_STRING, property );
|
||||
if ( p ){
|
||||
return p->value.s;
|
||||
|
@ -317,7 +333,7 @@ char *rofi_theme_get_string ( const char *wclass, const char *name, const char
|
|||
}
|
||||
double rofi_theme_get_double ( const char *wclass, const char *name, const char *state, const char *property, double def )
|
||||
{
|
||||
Widget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
ThemeWidget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
Property *p = rofi_theme_find_property ( widget, P_DOUBLE, property );
|
||||
if ( p ){
|
||||
return p->value.b;
|
||||
|
@ -326,7 +342,7 @@ double rofi_theme_get_double ( const char *wclass, const char *name, const char
|
|||
}
|
||||
void rofi_theme_get_color ( const char *wclass, const char *name, const char *state, const char *property, cairo_t *d)
|
||||
{
|
||||
Widget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
ThemeWidget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
Property *p = rofi_theme_find_property ( widget, P_COLOR, property );
|
||||
if ( p ){
|
||||
cairo_set_source_rgba ( d,
|
||||
|
@ -340,7 +356,7 @@ void rofi_theme_get_color ( const char *wclass, const char *name, const char *s
|
|||
}
|
||||
Padding rofi_theme_get_padding ( const char *wclass, const char *name, const char *state, const char *property, Padding pad )
|
||||
{
|
||||
Widget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
ThemeWidget *widget = rofi_theme_find_widget ( wclass, name, state );
|
||||
Property *p = rofi_theme_find_property ( widget, P_PADDING, property );
|
||||
if ( p ){
|
||||
pad = p->value.padding;
|
||||
|
@ -385,12 +401,12 @@ void rofi_theme_convert_old_theme ( void )
|
|||
if ( rofi_theme != NULL ){
|
||||
return;
|
||||
}
|
||||
rofi_theme = (Widget*)g_malloc0 ( sizeof ( Widget ) );
|
||||
rofi_theme = (ThemeWidget*)g_malloc0 ( sizeof ( ThemeWidget ) );
|
||||
rofi_theme->name = g_strdup ( "Root" );
|
||||
rofi_theme->properties = rofi_theme_convert_create_property_ht ( );
|
||||
{
|
||||
// Spacing
|
||||
Widget *box_widget = rofi_theme_find_or_create_class ( rofi_theme , "@box" );
|
||||
ThemeWidget *box_widget = rofi_theme_find_or_create_class ( rofi_theme , "@box" );
|
||||
box_widget->properties = rofi_theme_convert_create_property_ht ( );
|
||||
Property *p = rofi_theme_property_create ( P_INTEGER );
|
||||
p->name = g_strdup("spacing");
|
||||
|
@ -399,7 +415,7 @@ void rofi_theme_convert_old_theme ( void )
|
|||
}
|
||||
{
|
||||
// Spacing
|
||||
Widget *listview_widget = rofi_theme_find_or_create_class ( rofi_theme , "@listview" );
|
||||
ThemeWidget *listview_widget = rofi_theme_find_or_create_class ( rofi_theme , "@listview" );
|
||||
listview_widget->properties = rofi_theme_convert_create_property_ht ( );
|
||||
Property *p = rofi_theme_property_create ( P_INTEGER );
|
||||
p->name = g_strdup("spacing");
|
||||
|
@ -408,7 +424,7 @@ void rofi_theme_convert_old_theme ( void )
|
|||
}
|
||||
{
|
||||
// Border width.
|
||||
Widget *window_widget = rofi_theme_find_or_create_class ( rofi_theme , "@window" );
|
||||
ThemeWidget *window_widget = rofi_theme_find_or_create_class ( rofi_theme , "@window" );
|
||||
window_widget->properties = rofi_theme_convert_create_property_ht ( );
|
||||
Property *p = rofi_theme_property_create ( P_INTEGER );
|
||||
p->name = g_strdup("border-width");
|
||||
|
@ -432,7 +448,7 @@ void rofi_theme_convert_old_theme ( void )
|
|||
g_hash_table_replace ( rofi_theme->properties, p->name, p );
|
||||
|
||||
if ( vals[2] != NULL ) {
|
||||
Widget *widget = rofi_theme_find_or_create_class ( rofi_theme , "@separator" );
|
||||
ThemeWidget *widget = rofi_theme_find_or_create_class ( rofi_theme , "@separator" );
|
||||
widget->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[1], "foreground" );
|
||||
g_hash_table_replace ( widget->properties, p->name, p );
|
||||
|
@ -444,30 +460,30 @@ void rofi_theme_convert_old_theme ( void )
|
|||
g_strfreev ( vals );
|
||||
{
|
||||
Property *p = NULL;
|
||||
Widget *widget = rofi_theme_find_or_create_class ( rofi_theme , "@textbox" );
|
||||
ThemeWidget *widget = rofi_theme_find_or_create_class ( rofi_theme , "@textbox" );
|
||||
|
||||
Widget *wnormal = rofi_theme_find_or_create_class ( widget, "normal" );
|
||||
Widget *wselected = rofi_theme_find_or_create_class ( widget, "selected" );
|
||||
Widget *walternate = rofi_theme_find_or_create_class ( widget, "alternate" );
|
||||
ThemeWidget *wnormal = rofi_theme_find_or_create_class ( widget, "normal" );
|
||||
ThemeWidget *wselected = rofi_theme_find_or_create_class ( widget, "selected" );
|
||||
ThemeWidget *walternate = rofi_theme_find_or_create_class ( widget, "alternate" );
|
||||
|
||||
|
||||
gchar **vals = g_strsplit ( config.color_normal, ",", 5 );
|
||||
if ( g_strv_length (vals) == 5 ) {
|
||||
Widget *wnn = rofi_theme_find_or_create_class ( wnormal, "normal" );
|
||||
ThemeWidget *wnn = rofi_theme_find_or_create_class ( wnormal, "normal" );
|
||||
wnn->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[0], "background" );
|
||||
g_hash_table_replace ( wnn->properties, p->name, p );
|
||||
p = rofi_theme_convert_get_color ( vals[1], "foreground" );
|
||||
g_hash_table_replace ( wnn->properties, p->name, p );
|
||||
|
||||
Widget *wsl = rofi_theme_find_or_create_class ( wselected, "normal" );
|
||||
ThemeWidget *wsl = rofi_theme_find_or_create_class ( wselected, "normal" );
|
||||
wsl->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[3], "background" );
|
||||
g_hash_table_replace ( wsl->properties, p->name, p );
|
||||
p = rofi_theme_convert_get_color ( vals[4], "foreground" );
|
||||
g_hash_table_replace ( wsl->properties, p->name, p );
|
||||
|
||||
Widget *wal = rofi_theme_find_or_create_class ( walternate, "normal" );
|
||||
ThemeWidget *wal = rofi_theme_find_or_create_class ( walternate, "normal" );
|
||||
wal->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[2], "background" );
|
||||
g_hash_table_replace ( wal->properties, p->name, p );
|
||||
|
@ -478,21 +494,21 @@ void rofi_theme_convert_old_theme ( void )
|
|||
|
||||
vals = g_strsplit ( config.color_urgent, ",", 5 );
|
||||
if ( g_strv_length (vals) == 5 ) {
|
||||
Widget *wnn = rofi_theme_find_or_create_class ( wnormal, "urgent" );
|
||||
ThemeWidget *wnn = rofi_theme_find_or_create_class ( wnormal, "urgent" );
|
||||
wnn->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[0], "background" );
|
||||
g_hash_table_replace ( wnn->properties, p->name, p );
|
||||
p = rofi_theme_convert_get_color ( vals[1], "foreground" );
|
||||
g_hash_table_replace ( wnn->properties, p->name, p );
|
||||
|
||||
Widget *wsl = rofi_theme_find_or_create_class ( wselected, "urgent" );
|
||||
ThemeWidget *wsl = rofi_theme_find_or_create_class ( wselected, "urgent" );
|
||||
wsl->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[3], "background" );
|
||||
g_hash_table_replace ( wsl->properties, p->name, p );
|
||||
p = rofi_theme_convert_get_color ( vals[4], "foreground" );
|
||||
g_hash_table_replace ( wsl->properties, p->name, p );
|
||||
|
||||
Widget *wal = rofi_theme_find_or_create_class ( walternate, "urgent" );
|
||||
ThemeWidget *wal = rofi_theme_find_or_create_class ( walternate, "urgent" );
|
||||
wal->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[2], "background" );
|
||||
g_hash_table_replace ( wal->properties, p->name, p );
|
||||
|
@ -503,21 +519,21 @@ void rofi_theme_convert_old_theme ( void )
|
|||
|
||||
vals = g_strsplit ( config.color_active, ",", 5 );
|
||||
if ( g_strv_length (vals) == 5 ) {
|
||||
Widget *wnn = rofi_theme_find_or_create_class ( wnormal, "active" );
|
||||
ThemeWidget *wnn = rofi_theme_find_or_create_class ( wnormal, "active" );
|
||||
wnn->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[0], "background" );
|
||||
g_hash_table_replace ( wnn->properties, p->name, p );
|
||||
p = rofi_theme_convert_get_color ( vals[1], "foreground" );
|
||||
g_hash_table_replace ( wnn->properties, p->name, p );
|
||||
|
||||
Widget *wsl = rofi_theme_find_or_create_class ( wselected, "active" );
|
||||
ThemeWidget *wsl = rofi_theme_find_or_create_class ( wselected, "active" );
|
||||
wsl->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[3], "background" );
|
||||
g_hash_table_replace ( wsl->properties, p->name, p );
|
||||
p = rofi_theme_convert_get_color ( vals[4], "foreground" );
|
||||
g_hash_table_replace ( wsl->properties, p->name, p );
|
||||
|
||||
Widget *wal = rofi_theme_find_or_create_class ( walternate, "active" );
|
||||
ThemeWidget *wal = rofi_theme_find_or_create_class ( walternate, "active" );
|
||||
wal->properties = rofi_theme_convert_create_property_ht ();
|
||||
p = rofi_theme_convert_get_color ( vals[2], "background" );
|
||||
g_hash_table_replace ( wal->properties, p->name, p );
|
||||
|
|
|
@ -32,8 +32,11 @@
|
|||
#include "theme.h"
|
||||
|
||||
#define LOG_DOMAIN "Widgets.Box"
|
||||
|
||||
/** Class name of box widget */
|
||||
const char *BOX_CLASS_NAME = "@box";
|
||||
|
||||
/** Default spacing used in the box*/
|
||||
#define DEFAULT_SPACING 2
|
||||
|
||||
/**
|
||||
|
|
|
@ -127,9 +127,15 @@ textbox* textbox_create ( const char *name, TextboxFlags flags, TextBoxFontType
|
|||
return tb;
|
||||
}
|
||||
|
||||
/**
|
||||
* State names used for theming.
|
||||
*/
|
||||
const char const *const theme_prop_names[][3] = {
|
||||
/** Normal row */
|
||||
{"normal.normal", "selected.normal", "alternate.normal"},
|
||||
/** Urgent row */
|
||||
{"normal.urgent", "selected.urgent", "alternate.urgent"},
|
||||
/** Active row */
|
||||
{"normal.active", "selected.active", "alternate.active"},
|
||||
};
|
||||
|
||||
|
@ -758,6 +764,7 @@ int textbox_get_font_width ( const textbox *tb )
|
|||
return width;
|
||||
}
|
||||
|
||||
/** Caching for the expected character height. */
|
||||
static double char_height = -1;
|
||||
double textbox_get_estimated_char_height ( void )
|
||||
{
|
||||
|
@ -768,6 +775,7 @@ double textbox_get_estimated_char_height ( void )
|
|||
return char_height;
|
||||
}
|
||||
|
||||
/** Caching for the expected character width. */
|
||||
static double char_width = -1;
|
||||
double textbox_get_estimated_char_width ( void )
|
||||
{
|
||||
|
|
|
@ -213,8 +213,6 @@ void widget_set_name ( widget *wid, const char *name )
|
|||
wid->name = g_strdup ( name );
|
||||
}
|
||||
|
||||
// External
|
||||
double textbox_get_estimated_char_height ( void );
|
||||
int widget_padding_get_left ( const widget *wid )
|
||||
{
|
||||
return distance_get_pixel ( wid->pad.left );
|
||||
|
|
|
@ -33,7 +33,9 @@
|
|||
|
||||
#define LOG_DOMAIN "Widgets.Window"
|
||||
|
||||
/** The default border width of the window */
|
||||
#define DEFAULT_BORDER_WIDTH 2
|
||||
/** The class name of the window */
|
||||
const char *WINDOW_CLASS_NAME = "@window";
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue