2017-04-15 06:32:05 -04:00
|
|
|
/*
|
|
|
|
* rofi
|
|
|
|
*
|
|
|
|
* MIT/X11 License
|
2023-01-14 07:02:35 -05:00
|
|
|
* Copyright © 2013-2023 Qball Cow <qball@gmpclient.org>
|
2017-04-15 06:32:05 -04:00
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
* a copy of this software and associated documentation files (the
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
* the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be
|
|
|
|
* included in all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
|
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
|
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
|
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
|
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2016-12-09 13:49:49 -05:00
|
|
|
#ifndef THEME_H
|
|
|
|
#define THEME_H
|
2021-08-19 07:34:01 -04:00
|
|
|
#include "rofi-types.h"
|
2016-12-11 06:19:46 -05:00
|
|
|
#include <cairo.h>
|
2021-08-19 07:34:01 -04:00
|
|
|
#include <glib.h>
|
2017-01-04 16:27:27 -05:00
|
|
|
#include <widgets/widget.h>
|
2017-01-01 12:08:49 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Global pointer to the current active theme.
|
|
|
|
*/
|
|
|
|
extern ThemeWidget *rofi_theme;
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2021-06-14 13:29:05 -04:00
|
|
|
/**
|
2021-08-20 05:36:31 -04:00
|
|
|
* Used to store theme.
|
2021-06-14 13:29:05 -04:00
|
|
|
*/
|
|
|
|
extern ThemeWidget *rofi_theme;
|
|
|
|
|
2021-08-20 05:36:31 -04:00
|
|
|
/**
|
|
|
|
* Used to store config options.
|
|
|
|
*/
|
2021-06-14 13:29:05 -04:00
|
|
|
extern ThemeWidget *rofi_configuration;
|
|
|
|
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
|
|
|
* @param base Handle to the current level in the theme.
|
2017-01-04 09:05:39 -05:00
|
|
|
* @param name Name of the new element.
|
2017-01-01 12:08:49 -05:00
|
|
|
*
|
|
|
|
* Create a new element in the theme structure.
|
|
|
|
*
|
|
|
|
* @returns handle to the new entry.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
ThemeWidget *rofi_theme_find_or_create_name(ThemeWidget *base,
|
|
|
|
const char *name);
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
|
|
|
* @param widget The widget handle.
|
|
|
|
*
|
|
|
|
* Print out the widget to the commandline.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_print(ThemeWidget *widget);
|
2021-08-20 05:36:31 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param widget The widget handle.
|
|
|
|
* @param index The indenting index.
|
|
|
|
*
|
|
|
|
* Print out the widget to the commandline indented by index.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_print_index(ThemeWidget *widget, int index);
|
2016-12-09 13:49:49 -05:00
|
|
|
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
|
|
|
* @param type The type of the property to create.
|
|
|
|
*
|
|
|
|
* Create a theme property of type.
|
|
|
|
*
|
|
|
|
* @returns a new property.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
Property *rofi_theme_property_create(PropertyType type);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param p The property to free.
|
|
|
|
*
|
|
|
|
* Free the content of the property.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_property_free(Property *p);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
2017-09-06 17:11:03 -04:00
|
|
|
/**
|
|
|
|
* @param p The property to free.
|
2022-11-19 15:56:12 -05:00
|
|
|
* @param data User data (unused)
|
2017-09-06 17:11:03 -04:00
|
|
|
*
|
2022-11-19 15:50:34 -05:00
|
|
|
* Make a newly allocted copy of the property.
|
|
|
|
*
|
2017-09-06 17:11:03 -04:00
|
|
|
* @returns a copy of p
|
|
|
|
*/
|
2022-11-19 15:50:34 -05:00
|
|
|
Property *rofi_theme_property_copy(const Property *p, G_GNUC_UNUSED void *);
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
2017-04-23 09:17:15 -04:00
|
|
|
* @param widget
|
2017-01-01 12:08:49 -05:00
|
|
|
*
|
|
|
|
* Free the widget and alll children.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_free(ThemeWidget *widget);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
|
|
|
/**
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param file filename to parse.
|
2017-01-01 12:08:49 -05:00
|
|
|
*
|
|
|
|
* Parse the input theme file.
|
2017-01-08 10:09:24 -05:00
|
|
|
*
|
|
|
|
* @returns returns TRUE when error.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
gboolean rofi_theme_parse_file(const char *file);
|
2017-01-08 10:09:24 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string to parse.
|
|
|
|
*
|
|
|
|
* Parse the input string in addition to theme file.
|
|
|
|
*
|
|
|
|
* @returns returns TRUE when error.
|
2017-01-01 12:08:49 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
gboolean rofi_theme_parse_string(const char *string);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param widget The widget handle.
|
|
|
|
* @param table HashTable containing properties set.
|
|
|
|
*
|
|
|
|
* Merge properties with widgets current property.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_widget_add_properties(ThemeWidget *widget, GHashTable *table);
|
2016-12-09 16:16:31 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Public API
|
|
|
|
*/
|
|
|
|
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param widget The widget to query
|
2017-01-01 12:08:49 -05:00
|
|
|
* @param property The property to query.
|
|
|
|
* @param def The default value.
|
|
|
|
*
|
|
|
|
* Obtain the distance of the widget.
|
|
|
|
*
|
2017-01-04 16:27:27 -05:00
|
|
|
* @returns The distance value of this property for this widget.
|
2017-01-01 12:08:49 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
RofiDistance rofi_theme_get_distance(const widget *widget, const char *property,
|
|
|
|
int def);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
|
|
|
/**
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param widget The widget to query
|
2017-01-01 12:08:49 -05:00
|
|
|
* @param property The property to query.
|
|
|
|
* @param def The default value.
|
|
|
|
*
|
|
|
|
* Obtain the integer of the widget.
|
|
|
|
*
|
2017-01-04 16:27:27 -05:00
|
|
|
* @returns The integer value of this property for this widget.
|
2017-01-01 12:08:49 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
int rofi_theme_get_integer(const widget *widget, const char *property, int def);
|
2017-01-06 13:04:25 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @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.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
int rofi_theme_get_position(const widget *widget, const char *property,
|
|
|
|
int def);
|
2017-01-06 13:04:25 -05:00
|
|
|
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param widget The widget to query
|
2017-01-01 12:08:49 -05:00
|
|
|
* @param property The property to query.
|
|
|
|
* @param def The default value.
|
|
|
|
*
|
|
|
|
* Obtain the boolean of the widget.
|
|
|
|
*
|
2017-01-04 16:27:27 -05:00
|
|
|
* @returns The boolean value of this property for this widget.
|
2017-01-01 12:08:49 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
int rofi_theme_get_boolean(const widget *widget, const char *property, int def);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
2017-06-02 08:05:19 -04:00
|
|
|
/**
|
|
|
|
* @param widget The widget to query
|
|
|
|
* @param property The property to query.
|
|
|
|
* @param def The default value.
|
|
|
|
*
|
|
|
|
* Obtain the orientation indicated by %property of the widget.
|
|
|
|
*
|
|
|
|
* @returns The orientation of this property for this widget or %def not found.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
RofiOrientation rofi_theme_get_orientation(const widget *widget,
|
|
|
|
const char *property,
|
|
|
|
RofiOrientation def);
|
2021-05-22 18:17:27 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param widget The widget to query
|
|
|
|
* @param property The property to query.
|
|
|
|
* @param def The default value.
|
|
|
|
*
|
|
|
|
* Obtain the cursor indicated by %property of the widget.
|
|
|
|
*
|
|
|
|
* @returns The cursor for this widget or %def if not found.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
RofiCursorType rofi_theme_get_cursor_type(const widget *widget,
|
|
|
|
const char *property,
|
|
|
|
RofiCursorType def);
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param widget The widget to query
|
2017-01-01 12:08:49 -05:00
|
|
|
* @param property The property to query.
|
|
|
|
* @param def The default value.
|
|
|
|
*
|
|
|
|
* Obtain the string of the widget.
|
|
|
|
*
|
2017-01-04 16:27:27 -05:00
|
|
|
* @returns The string value of this property for this widget.
|
2017-01-01 12:08:49 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
const char *rofi_theme_get_string(const widget *widget, const char *property,
|
|
|
|
const char *def);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
|
|
|
/**
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param widget The widget to query
|
2017-01-01 12:08:49 -05:00
|
|
|
* @param property The property to query.
|
|
|
|
* @param def The default value.
|
|
|
|
*
|
2017-05-24 02:50:45 -04:00
|
|
|
* Obtain the double of the widget.
|
2017-01-01 12:08:49 -05:00
|
|
|
*
|
2017-01-04 16:27:27 -05:00
|
|
|
* @returns The double value of this property for this widget.
|
2017-01-01 12:08:49 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
double rofi_theme_get_double(const widget *widget, const char *property,
|
|
|
|
double def);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
|
|
|
/**
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param widget The widget to query
|
2017-01-01 12:08:49 -05:00
|
|
|
* @param property The property to query.
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param d The drawable to apply color.
|
2017-01-01 12:08:49 -05:00
|
|
|
*
|
2017-01-01 12:40:49 -05:00
|
|
|
* Obtain the color of the widget and applies this to the drawable d.
|
2017-01-01 12:08:49 -05:00
|
|
|
*
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_get_color(const widget *widget, const char *property,
|
|
|
|
cairo_t *d);
|
2021-06-13 15:41:31 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param widget The widget to query
|
|
|
|
* @param property The property to query.
|
|
|
|
* @param d The drawable to apply color.
|
|
|
|
*
|
|
|
|
* Obtain the image of the widget and applies this to the drawable d.
|
|
|
|
*
|
|
|
|
* @return true if image is set.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
gboolean rofi_theme_get_image(const widget *widget, const char *property,
|
|
|
|
cairo_t *d);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
2020-04-06 17:26:07 -04:00
|
|
|
/**
|
|
|
|
* @param widget The widget to query
|
|
|
|
* @param property The property to query.
|
|
|
|
*
|
|
|
|
* Check if a rofi theme has a property set.
|
|
|
|
*
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
gboolean rofi_theme_has_property(const widget *widget, const char *property);
|
2020-04-06 17:26:07 -04:00
|
|
|
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
2017-01-04 16:27:27 -05:00
|
|
|
* @param widget The widget to query
|
2017-01-01 12:08:49 -05:00
|
|
|
* @param property The property to query.
|
2017-01-01 12:40:49 -05:00
|
|
|
* @param pad The default value.
|
2017-01-01 12:08:49 -05:00
|
|
|
*
|
|
|
|
* Obtain the padding of the widget.
|
|
|
|
*
|
2017-01-04 16:27:27 -05:00
|
|
|
* @returns The padding of this property for this widget.
|
2017-01-01 12:08:49 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
RofiPadding rofi_theme_get_padding(const widget *widget, const char *property,
|
|
|
|
RofiPadding pad);
|
2016-12-31 17:27:17 -05:00
|
|
|
|
2017-01-08 18:09:02 -05:00
|
|
|
/**
|
|
|
|
* @param widget The widget to query
|
|
|
|
* @param property The property to query.
|
|
|
|
* @param th The default value.
|
|
|
|
*
|
|
|
|
* Obtain the highlight .
|
|
|
|
*
|
|
|
|
* @returns The highlight of this property for this widget.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
RofiHighlightColorStyle rofi_theme_get_highlight(widget *widget,
|
|
|
|
const char *property,
|
|
|
|
RofiHighlightColorStyle th);
|
2017-01-08 18:09:02 -05:00
|
|
|
|
2017-01-01 12:08:49 -05:00
|
|
|
/**
|
|
|
|
* @param d The distance handle.
|
2017-01-03 13:23:09 -05:00
|
|
|
* @param ori The orientation.
|
2017-01-01 12:08:49 -05:00
|
|
|
*
|
2017-06-02 10:25:47 -04:00
|
|
|
* Convert RofiDistance into pixels.
|
2017-01-01 12:08:49 -05:00
|
|
|
* @returns the number of pixels this distance represents.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
int distance_get_pixel(RofiDistance d, RofiOrientation ori);
|
2017-01-04 16:27:27 -05:00
|
|
|
/**
|
|
|
|
* @param d The distance handle.
|
|
|
|
* @param draw The cairo drawable.
|
|
|
|
*
|
|
|
|
* Set linestyle.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void distance_get_linestyle(RofiDistance d, cairo_t *draw);
|
2017-01-01 12:08:49 -05:00
|
|
|
|
2017-03-10 17:39:29 -05:00
|
|
|
/**
|
|
|
|
* Low-level functions.
|
|
|
|
* These can be used by non-widgets to obtain values.
|
|
|
|
*/
|
|
|
|
/**
|
|
|
|
* @param name The name of the element to find.
|
|
|
|
* @param state The state of the element.
|
|
|
|
* @param exact If the match should be exact, or parent can be included.
|
|
|
|
*
|
2021-08-19 07:34:01 -04:00
|
|
|
* Find the theme element. If not exact, the closest specified element is
|
|
|
|
* returned.
|
2017-03-10 17:39:29 -05:00
|
|
|
*
|
|
|
|
* @returns the ThemeWidget if found, otherwise NULL.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
ThemeWidget *rofi_theme_find_widget(const char *name, const char *state,
|
|
|
|
gboolean exact);
|
2021-08-20 05:36:31 -04:00
|
|
|
|
2017-09-18 11:48:13 -04:00
|
|
|
/**
|
|
|
|
* Reset the current theme.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_reset(void);
|
2017-06-14 10:19:17 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param file File name to prepare.
|
|
|
|
*
|
|
|
|
* Tries to find full path relative to parent file.
|
|
|
|
*
|
|
|
|
* @returns full path to file.
|
|
|
|
*/
|
2023-08-15 13:12:14 -04:00
|
|
|
char *rofi_theme_parse_prepare_file(const char *file);
|
2019-09-20 09:05:36 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Process conditionals.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_parse_process_conditionals(void);
|
2019-09-30 04:35:12 -04:00
|
|
|
|
2022-01-31 17:19:51 -05:00
|
|
|
/**
|
|
|
|
* Process links.
|
|
|
|
*/
|
|
|
|
void rofi_theme_parse_process_links(void);
|
|
|
|
|
2019-09-30 04:35:12 -04:00
|
|
|
/**
|
2019-09-30 04:57:23 -04:00
|
|
|
* @param parent target theme tree
|
|
|
|
* @param child source theme three
|
2019-09-30 04:35:12 -04:00
|
|
|
*
|
|
|
|
* Merge all the settings from child into parent.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void rofi_theme_parse_merge_widgets(ThemeWidget *parent, ThemeWidget *child);
|
2019-09-30 04:57:23 -04:00
|
|
|
|
2019-09-30 04:35:12 -04:00
|
|
|
/**
|
2019-09-30 04:57:23 -04:00
|
|
|
* @param type the media type to parse.
|
2019-09-30 04:35:12 -04:00
|
|
|
*
|
|
|
|
* Returns the media type described by type.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
ThemeMediaType rofi_theme_parse_media_type(const char *type);
|
2021-05-05 15:53:29 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param distance The distance object to copy.
|
|
|
|
*
|
|
|
|
* @returns a copy of the distance.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
RofiDistance rofi_theme_property_copy_distance(RofiDistance const distance);
|
2021-01-26 11:27:32 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param filename The file to validate.
|
|
|
|
*
|
|
|
|
* @returns the program exit code.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
int rofi_theme_rasi_validate(const char *filename);
|
2021-01-26 11:27:32 -05:00
|
|
|
|
2021-12-12 14:56:32 -05:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* Free memory.
|
|
|
|
*/
|
|
|
|
void rofi_theme_free_parsed_files(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param is_term Indicate if printed to terminal.
|
|
|
|
*
|
|
|
|
* Print the list of parsed config files.
|
|
|
|
*/
|
|
|
|
void rofi_theme_print_parsed_files(int is_term);
|
|
|
|
|
2022-01-24 13:43:08 -05:00
|
|
|
/**
|
2022-11-19 15:50:34 -05:00
|
|
|
* @param widget The widget handle.
|
|
|
|
* @param property The property to query.
|
|
|
|
*
|
2022-01-24 13:43:08 -05:00
|
|
|
* Returns a list of allocated RofiDistance objects that should be
|
|
|
|
* freed.
|
2022-11-19 15:50:34 -05:00
|
|
|
*
|
|
|
|
* @returns a GList of RofiDistance objects.
|
2022-01-24 13:43:08 -05:00
|
|
|
*/
|
2022-01-25 03:57:59 -05:00
|
|
|
GList *rofi_theme_get_list_distance(const widget *widget, const char *property);
|
2022-11-19 15:50:34 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param widget The widget handle.
|
|
|
|
* @param property The property to query.
|
|
|
|
*
|
|
|
|
* Returns a list of allocated strings othat should be
|
|
|
|
* freed.
|
|
|
|
*
|
|
|
|
* @returns a GList of strings.
|
|
|
|
*/
|
2022-01-25 03:57:59 -05:00
|
|
|
GList *rofi_theme_get_list_strings(const widget *widget, const char *property);
|
2017-01-01 12:08:49 -05:00
|
|
|
#endif
|