]> git.mdlowis.com Git - proto/labwc.git/commitdiff
Refactor header files
authorJohan Malm <jgm323@gmail.com>
Fri, 25 Sep 2020 19:25:45 +0000 (20:25 +0100)
committerJohan Malm <jgm323@gmail.com>
Fri, 25 Sep 2020 19:25:45 +0000 (20:25 +0100)
include/labwc.h
src/deco.c
src/desktop.c
src/graphics/text.c [new file with mode: 0644]
src/view.c
src/xdg.c
src/xwayland.c

index e869f6732d984d99adcd34019475d55b7b7f8109..caee158357b7fd3cffc74556dca4e5828bb16db3 100644 (file)
@@ -28,6 +28,8 @@
 #include <wlr/xwayland.h>
 #include <xkbcommon/xkbcommon.h>
 
+#include "common/bug-on.h"
+#include "common/log.h"
 #include "config/rcxml.h"
 #include "config/keybind.h"
 
index 8bba5d6510d465c98fc4c83589641e75ba6a4686..8997168bca63e75356440c936834735a44e03644 100644 (file)
@@ -7,8 +7,6 @@
 #include "labwc.h"
 #include "theme/theme.h"
 #include "config/rcxml.h"
-#include "common/bug-on.h"
-#include "common/log.h"
 
 #define BORDER_WIDTH (2)
 
index 8729aaf5ef308b0be0d022d52ca8cd80168bc5d8..177902d6c1b760bcb97103dffa7e93feaf239cd1 100644 (file)
@@ -1,5 +1,4 @@
 #include "labwc.h"
-#include "common/bug-on.h"
 
 static void move_to_front(struct view *view)
 {
diff --git a/src/graphics/text.c b/src/graphics/text.c
new file mode 100644 (file)
index 0000000..43fc053
--- /dev/null
@@ -0,0 +1,94 @@
+#include <cairo/cairo.h>
+#include <pango/pangocairo.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void print(cairo_t *cairo, const char *text, const char *font)
+       PangoLayout *layout = pango_cairo_create_layout(cairo);
+PangoAttrList *attrs = pango_attr_list_new();
+pango_layout_set_text(layout, text, -1);
+pango_attr_list_insert(attrs, pango_attr_scale_new(1.0));
+PangoFontDescription *desc = pango_font_description_from_string(font);
+pango_layout_set_font_description(layout, desc);
+pango_layout_set_single_paragraph_mode(layout, 1);
+pango_layout_set_attributes(layout, attrs);
+pango_attr_list_unref(attrs);
+pango_font_description_free(desc);
+cairo_font_options_t *fo = cairo_font_options_create();
+cairo_get_font_options(cairo, fo);
+pango_cairo_context_set_font_options(pango_layout_get_context(layout), fo);
+cairo_font_options_destroy(fo);
+pango_cairo_update_layout(cairo, layout);
+pango_cairo_show_layout(cairo, layout);
+g_object_unref(layout);
+}
+
+void update_title_texture(struct wlr_texture **texture, const char *text)
+{
+       if (*texture) {
+               wlr_texture_destroy(*texture);
+               *texture = NULL;
+       }
+       if (!text)
+               return;
+
+       double scale = output->wlr_output->scale;
+       int width = 0;
+       int height = 0;
+
+       cairo_surface_t *dummy_surface =
+               cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 0, 0);
+       cairo_t *c = cairo_create(dummy_surface);
+       cairo_set_antialias(c, CAIRO_ANTIALIAS_BEST);
+       cairo_font_options_t *fo = cairo_font_options_create();
+       cairo_font_options_set_hint_style(fo, CAIRO_HINT_STYLE_FULL);
+       if (output->wlr_output->subpixel == WL_OUTPUT_SUBPIXEL_NONE)
+               cairo_font_options_set_antialias(fo, CAIRO_ANTIALIAS_GRAY);
+       else
+               cairo_font_options_set_antialias(fo, CAIRO_ANTIALIAS_SUBPIXEL);
+       cairo_set_font_options(c, fo);
+       get_text_size(c, config->font, &width, NULL, NULL, scale,
+                     config->pango_markup, "%s", text);
+       cairo_surface_destroy(dummy_surface);
+       cairo_destroy(c);
+
+       cairo_surface_t *surface =
+               cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+       cairo_t *cairo = cairo_create(surface);
+       cairo_set_antialias(cairo, CAIRO_ANTIALIAS_BEST);
+       cairo_set_font_options(cairo, fo);
+       cairo_font_options_destroy(fo);
+       cairo_set_source_rgba(cairo, class->background[0], class->background[1],
+                             class->background[2], class->background[3]);
+       cairo_paint(cairo);
+       PangoContext *pango = pango_cairo_create_context(cairo);
+       cairo_set_source_rgba(cairo, class->text[0], class->text[1],
+                             class->text[2], class->text[3]);
+       cairo_move_to(cairo, 0, 0);
+
+       pango_printf(cairo, config->font, scale, config->pango_markup, "%s",
+                    text);
+
+       cairo_surface_flush(surface);
+       unsigned char *data = cairo_image_surface_get_data(surface);
+       int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width);
+       struct wlr_renderer *renderer =
+               wlr_backend_get_renderer(output->wlr_output->backend);
+       *texture = wlr_texture_from_pixels(renderer, WL_SHM_FORMAT_ARGB8888,
+                                          stride, width, height, data);
+       cairo_surface_destroy(surface);
+       g_object_unref(pango);
+       cairo_destroy(cairo);
+}
+
+// void container_calculate_title_height(struct sway_container *container)
+//{
+//     cairo_t *cairo = cairo_create(NULL);
+//     int height;
+//     int baseline;
+//     get_text_size(cairo, config->font, NULL, &height, &baseline, 1,
+//                     config->pango_markup, "%s", text);
+//     cairo_destroy(cairo);
+//     container->title_height = height;
+///    container->title_baseline = baseline;
+//}
index ee7a4dcef78a66b6a2ffc8261471b72986d7cad8..14f15d42373ad9b6903caf9b02dbe053813c1913 100644 (file)
@@ -1,5 +1,4 @@
 #include "labwc.h"
-#include "common/bug-on.h"
 
 void view_resize(struct view *view, struct wlr_box geo)
 {
index 5123bc0d52b3d31c55d06fb3a23a48995b66dadc..b8354f192ff8bae84bac0b324122b35cb0234021 100644 (file)
--- a/src/xdg.c
+++ b/src/xdg.c
@@ -1,6 +1,4 @@
 #include "labwc.h"
-#include "common/log.h"
-#include "common/bug-on.h"
 
 struct xdg_deco {
        struct wlr_xdg_toplevel_decoration_v1 *wlr_decoration;
index 836b9c6dcbaf76baee50a9b5216be6ed0519bfed..970236fb733df9ce7b32b56d6736187e4d3cea8d 100644 (file)
@@ -1,6 +1,4 @@
 #include "labwc.h"
-#include "common/log.h"
-#include "common/bug-on.h"
 
 static void handle_commit(struct wl_listener *listener, void *data)
 {