--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __LABWC_SSD_INTERNAL_H
+#define __LABWC_SSD_INTERNAL_H
+
+#include "ssd.h"
+
+#define FOR_EACH(tmp, ...) \
+{ \
+ __typeof__(tmp) _x[] = { __VA_ARGS__, NULL }; \
+ size_t _i = 0; \
+ for ((tmp) = _x[_i]; _i < sizeof(_x) / sizeof(_x[0]) - 1; (tmp) = _x[++_i])
+
+#define FOR_EACH_END }
+
+struct ssd_button {
+ struct view *view;
+ enum ssd_part_type type;
+ struct wlr_scene_node *hover;
+
+ struct wl_listener destroy;
+};
+
+struct ssd_sub_tree {
+ struct wlr_scene_tree *tree;
+ struct wl_list parts; /* ssd_part::link */
+};
+
+struct ssd_state_title_width {
+ int width;
+ bool truncated;
+};
+
+struct ssd {
+ struct view *view;
+ struct wlr_scene_tree *tree;
+
+ /*
+ * Cache for current values.
+ * Used to detect actual changes so we
+ * don't update things we don't have to.
+ */
+ struct {
+ int x;
+ int y;
+ int width;
+ int height;
+ struct ssd_state_title {
+ char *text;
+ struct ssd_state_title_width active;
+ struct ssd_state_title_width inactive;
+ } title;
+ } state;
+
+ /* An invisble area around the view which allows resizing */
+ struct ssd_sub_tree extents;
+
+ /* The top of the view, containing buttons, title, .. */
+ struct {
+ /* struct wlr_scene_tree *tree; unused for now */
+ struct ssd_sub_tree active;
+ struct ssd_sub_tree inactive;
+ } titlebar;
+
+ /* Borders allow resizing as well */
+ struct {
+ /* struct wlr_scene_tree *tree; unused for now */
+ struct ssd_sub_tree active;
+ struct ssd_sub_tree inactive;
+ } border;
+
+ /*
+ * Space between the extremities of the view's wlr_surface
+ * and the max extents of the server-side decorations.
+ * For xdg-shell views with CSD, this margin is zero.
+ */
+ struct border margin;
+};
+
+struct ssd_part {
+ enum ssd_part_type type;
+
+ /* Buffer pointer. May be NULL */
+ struct scaled_font_buffer *buffer;
+
+ /* This part represented in scene graph */
+ struct wlr_scene_node *node;
+
+ /* Targeted geometry. May be NULL */
+ struct wlr_box *geometry;
+
+ struct wl_list link;
+};
+
+struct ssd_hover_state {
+ struct view *view;
+ struct wlr_scene_node *node;
+};
+
+struct wlr_buffer;
+struct wlr_scene_tree;
+
+/* SSD internal helpers to create various SSD elements */
+/* TODO: Replace some common args with a struct */
+struct ssd_part *add_scene_part(
+ struct wl_list *part_list, enum ssd_part_type type);
+struct ssd_part *add_scene_rect(
+ struct wl_list *list, enum ssd_part_type type,
+ struct wlr_scene_tree *parent, int width, int height, int x, int y,
+ float color[4]);
+struct ssd_part *add_scene_buffer(
+ struct wl_list *list, enum ssd_part_type type,
+ struct wlr_scene_tree *parent, struct wlr_buffer *buffer, int x, int y);
+struct ssd_part *add_scene_button(
+ struct wl_list *part_list, enum ssd_part_type type,
+ struct wlr_scene_tree *parent, float *bg_color,
+ struct wlr_buffer *icon_buffer, int x, struct view *view);
+struct ssd_part *add_scene_button_corner(
+ struct wl_list *part_list, enum ssd_part_type type,
+ enum ssd_part_type corner_type, struct wlr_scene_tree *parent,
+ struct wlr_buffer *corner_buffer, struct wlr_buffer *icon_buffer,
+ int x, struct view *view);
+
+/* SSD internal helpers */
+struct ssd_part *ssd_get_part(
+ struct wl_list *part_list, enum ssd_part_type type);
+void ssd_destroy_parts(struct wl_list *list);
+
+/* SSD internal */
+void ssd_titlebar_create(struct ssd *ssd);
+void ssd_titlebar_update(struct ssd *ssd);
+void ssd_titlebar_destroy(struct ssd *ssd);
+
+void ssd_border_create(struct ssd *ssd);
+void ssd_border_update(struct ssd *ssd);
+void ssd_border_destroy(struct ssd *ssd);
+
+void ssd_extents_create(struct ssd *ssd);
+void ssd_extents_update(struct ssd *ssd);
+void ssd_extents_destroy(struct ssd *ssd);
+
+#endif /* __LABWC_SSD_INTERNAL_H */
#define BUTTON_WIDTH 26
#define EXTENDED_AREA 8
-#define FOR_EACH(tmp, ...) \
-{ \
- __typeof__(tmp) _x[] = { __VA_ARGS__, NULL }; \
- size_t _i = 0; \
- for ((tmp) = _x[_i]; _i < sizeof(_x) / sizeof(_x[0]) - 1; (tmp) = _x[++_i])
-
-#define FOR_EACH_END }
-
/*
* Sequence these according to the order they should be processed for
* press and hover events. Bear in mind that some of their respective
};
/* Forward declare arguments */
+struct ssd;
+struct ssd_button;
+struct ssd_hover_state;
struct view;
-struct wlr_buffer;
struct wlr_scene;
struct wlr_scene_node;
-struct wlr_scene_tree;
struct border {
int top;
int left;
};
-struct ssd_button {
- struct view *view;
- enum ssd_part_type type;
- struct wlr_scene_node *hover;
-
- struct wl_listener destroy;
-};
-
-struct ssd_sub_tree {
- struct wlr_scene_tree *tree;
- struct wl_list parts; /* ssd_part::link */
-};
-
-struct ssd_state_title_width {
- int width;
- bool truncated;
-};
-
-struct ssd {
- struct view *view;
- struct wlr_scene_tree *tree;
-
- /*
- * Cache for current values.
- * Used to detect actual changes so we
- * don't update things we don't have to.
- */
- struct {
- int x;
- int y;
- int width;
- int height;
- struct ssd_state_title {
- char *text;
- struct ssd_state_title_width active;
- struct ssd_state_title_width inactive;
- } title;
- } state;
-
- /* An invisble area around the view which allows resizing */
- struct ssd_sub_tree extents;
-
- /* The top of the view, containing buttons, title, .. */
- struct {
- /* struct wlr_scene_tree *tree; unused for now */
- struct ssd_sub_tree active;
- struct ssd_sub_tree inactive;
- } titlebar;
-
- /* Borders allow resizing as well */
- struct {
- /* struct wlr_scene_tree *tree; unused for now */
- struct ssd_sub_tree active;
- struct ssd_sub_tree inactive;
- } border;
-
- /*
- * Space between the extremities of the view's wlr_surface
- * and the max extents of the server-side decorations.
- * For xdg-shell views with CSD, this margin is zero.
- */
- struct border margin;
-};
-
-struct ssd_part {
- enum ssd_part_type type;
-
- /* Buffer pointer. May be NULL */
- struct scaled_font_buffer *buffer;
-
- /* This part represented in scene graph */
- struct wlr_scene_node *node;
-
- /* Targeted geometry. May be NULL */
- struct wlr_box *geometry;
-
- struct wl_list link;
-};
-
-struct ssd_hover_state {
- struct view *view;
- struct wlr_scene_node *node;
-};
-
/*
* Public SSD API
*
void ssd_update_button_hover(struct wlr_scene_node *node,
struct ssd_hover_state *hover_state);
+enum ssd_part_type ssd_button_get_type(const struct ssd_button *button);
+struct view *ssd_button_get_view(const struct ssd_button *button);
+
/* Public SSD helpers */
enum ssd_part_type ssd_at(const struct ssd *ssd,
struct wlr_scene *scene, double lx, double ly);
bool ssd_is_button(enum ssd_part_type type);
bool ssd_part_contains(enum ssd_part_type whole, enum ssd_part_type candidate);
-/* SSD internal helpers to create various SSD elements */
-/* TODO: Replace some common args with a struct */
-struct ssd_part *add_scene_part(
- struct wl_list *part_list, enum ssd_part_type type);
-struct ssd_part *add_scene_rect(
- struct wl_list *list, enum ssd_part_type type,
- struct wlr_scene_tree *parent, int width, int height, int x, int y,
- float color[4]);
-struct ssd_part *add_scene_buffer(
- struct wl_list *list, enum ssd_part_type type,
- struct wlr_scene_tree *parent, struct wlr_buffer *buffer, int x, int y);
-struct ssd_part *add_scene_button(
- struct wl_list *part_list, enum ssd_part_type type,
- struct wlr_scene_tree *parent, float *bg_color,
- struct wlr_buffer *icon_buffer, int x, struct view *view);
-struct ssd_part *add_scene_button_corner(
- struct wl_list *part_list, enum ssd_part_type type,
- enum ssd_part_type corner_type, struct wlr_scene_tree *parent,
- struct wlr_buffer *corner_buffer, struct wlr_buffer *icon_buffer,
- int x, struct view *view);
-
-/* SSD internal helpers */
-struct ssd_part *ssd_get_part(
- struct wl_list *part_list, enum ssd_part_type type);
-void ssd_destroy_parts(struct wl_list *list);
-
-/* SSD internal */
-void ssd_titlebar_create(struct ssd *ssd);
-void ssd_titlebar_update(struct ssd *ssd);
-void ssd_titlebar_destroy(struct ssd *ssd);
-
-void ssd_border_create(struct ssd *ssd);
-void ssd_border_update(struct ssd *ssd);
-void ssd_border_destroy(struct ssd *ssd);
-
-void ssd_extents_create(struct ssd *ssd);
-void ssd_extents_update(struct ssd *ssd);
-void ssd_extents_destroy(struct ssd *ssd);
-
/* TODO: clean up / update */
struct border ssd_thickness(struct view *view);
struct wlr_box ssd_max_extents(struct view *view);
struct ssd_button *button =
node_ssd_button_from_node(node);
ret.node = node;
- ret.type = button->type;
- ret.view = button->view;
+ ret.type = ssd_button_get_type(button);
+ ret.view = ssd_button_get_view(button);
return ret;
}
case LAB_NODE_DESC_LAYER_SURFACE:
#include "common/mem.h"
#include "common/scene-helpers.h"
#include "labwc.h"
-#include "ssd.h"
+#include "ssd-internal.h"
#include "theme.h"
#include "view.h"
return znew(struct ssd_hover_state);
}
+enum ssd_part_type
+ssd_button_get_type(const struct ssd_button *button)
+{
+ return button ? button->type : LAB_SSD_NONE;
+}
+
+struct view *
+ssd_button_get_view(const struct ssd_button *button)
+{
+ return button ? button->view : NULL;
+}
+
bool
ssd_debug_is_root_node(const struct ssd *ssd, struct wlr_scene_node *node)
{
#include "common/scene-helpers.h"
#include "labwc.h"
-#include "ssd.h"
+#include "ssd-internal.h"
#include "theme.h"
#include "view.h"
#include "common/mem.h"
#include "common/scene-helpers.h"
#include "labwc.h"
-#include "ssd.h"
+#include "ssd-internal.h"
#include "theme.h"
#include "view.h"
#include "common/mem.h"
#include "labwc.h"
#include "node.h"
-#include "ssd.h"
+#include "ssd-internal.h"
/* Internal helpers */
static void
#include "common/scene-helpers.h"
#include "labwc.h"
#include "node.h"
-#include "ssd.h"
+#include "ssd-internal.h"
#include "theme.h"
#include "view.h"