/* * rofi * * MIT/X11 License * Copyright © 2013-2017 Qball Cow * * 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. * */ #ifndef WIDGET_INTERNAL_H #define WIDGET_INTERNAL_H #include "theme.h" /** * Data structure holding the internal state of the Widget */ struct _widget { /** The type of the widget */ WidgetType type; /** X position relative to parent */ short x; /** Y position relative to parent */ short y; /** Width of the widget */ short w; /** Height of the widget */ short h; /** RofiPadding */ RofiPadding def_margin; RofiPadding def_padding; RofiPadding def_border; RofiPadding def_border_radius; RofiPadding margin; RofiPadding padding; RofiPadding border; RofiPadding border_radius; /** Cursor that is set when the widget is hovered */ RofiCursorType cursor_type; /** enabled or not */ gboolean enabled; /** Expand the widget when packed */ gboolean expand; /** Place widget at end of parent */ gboolean end; /** Parent widget */ struct _widget *parent; /** Internal */ gboolean need_redraw; /** get width of widget implementation function */ int ( *get_width )( struct _widget * ); /** get height of widget implementation function */ int ( *get_height )( struct _widget * ); /** draw widget implementation function */ void ( *draw )( struct _widget *widget, cairo_t *draw ); /** resize widget implementation function */ void ( *resize )( struct _widget *, short, short ); /** update widget implementation function */ void ( *update )( struct _widget * ); /** Handle mouse motion, used for dragging */ gboolean ( *motion_notify )( struct _widget *, gint x, gint y ); int ( *get_desired_height )( struct _widget * ); int ( *get_desired_width )( struct _widget * ); void ( *set_state ) ( struct _widget *, const char * ); /** widget find_mouse_target callback */ widget_find_mouse_target_cb find_mouse_target; /** widget trigger_action callback */ widget_trigger_action_cb trigger_action; /** user data for find_mouse_target and trigger_action callback */ void *trigger_action_cb_data; /** Free widget callback */ void ( *free )( struct _widget *widget ); /** Name of widget (used for theming) */ char *name; const char *state; }; /** * @param wid The widget to initialize. * @param parent The widget's parent. * @param type The type of the widget. * @param name The name of the widget. * * Initializes the widget structure. * */ void widget_init ( widget *wid, widget *parent, WidgetType type, const char *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