URI:
       tConvert button to use new text renderer - ltkx - GUI toolkit for X11 (WIP)
  HTML git clone git://lumidify.org/ltkx.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 7b5498e387d5d8d05ffaf404e665a32f2de32e75
   DIR parent c990c56e3031b2973a251347dc2f8935b957cd79
  HTML Author: lumidify <nobody@lumidify.org>
       Date:   Thu, 21 May 2020 17:53:49 +0200
       
       Convert button to use new text renderer
       
       Diffstat:
         M Makefile                            |       2 +-
         M button.c                            |      18 ++++++++++++++----
         M button.h                            |       4 ++--
         M ltkx.h                              |       1 -
       
       4 files changed, 17 insertions(+), 8 deletions(-)
       ---
   DIR diff --git a/Makefile b/Makefile
       t@@ -1,7 +1,7 @@
        LIBS = -lm `pkg-config --libs x11 harfbuzz fontconfig fribidi`
        STD = -std=c99
        CFLAGS = -g -w -fcommon -Wall -Werror -Wextra `pkg-config --cflags x11 harfbuzz fontconfig fribidi` -pedantic
       -OBJ = stb_truetype.o text_edit.o text-common.o text_buffer.o text-hb.o ltk.o ini.o grid.o button.o test1.o
       +OBJ = stb_truetype.o text_edit.o text-common.o text_buffer.o ltk.o ini.o grid.o button.o test1.o
        
        test1: $(OBJ)
                gcc $(STD) -o $@ $(OBJ) $(LIBS)
   DIR diff --git a/button.c b/button.c
       t@@ -22,6 +22,7 @@
         */
        
        #include <stdio.h>
       +#include <stdint.h>
        #include <X11/Xlib.h>
        #include <X11/Xutil.h>
        #include "khash.h"
       t@@ -31,7 +32,8 @@
        #include <harfbuzz/hb.h>
        #include <fontconfig/fontconfig.h>
        #include "text-common.h"
       -#include "text-hb.h"
       +#include "array.h"
       +#include "text_buffer.h"
        #include "button.h"
        
        extern Ltk *ltk_global;
       t@@ -122,7 +124,12 @@ void ltk_draw_button(LtkButton *button)
                XSetLineAttributes(ltk_global->display, window->gc, bw, LineSolid, CapButt, JoinMiter);
                XDrawRectangle(ltk_global->display, window->xwindow, window->gc, rect.x + bw / 2, rect.y + bw / 2, rect.w - bw, rect.h - bw);
                if (!img) {
       -                img = ltk_render_text_line(button->tl, ltk_global->display, window->xwindow, window->gc, ltk_global->colormap, theme->text_color, fill);
       +                /* FIXME: make this a bit nicer - text_line is made for text_buffer, but
       +                   it really doesn't make much sense here to store the image in text_line */
       +                ltk_text_line_render(button->tl, ltk_global->display, window->xwindow, window->gc, ltk_global->colormap, theme->text_color, fill);
       +                img = button->tl->img;
       +                /* set to NULL so it isn't freed on next call to render */
       +                button->tl->img = NULL;
                        /* FIXME: any nicer way to do this? */
                        switch (button->widget.state) {
                                case LTK_NORMAL:
       t@@ -162,7 +169,10 @@ LtkButton *ltk_create_button(LtkWindow *window, const char *text, void (*callbac
                button->callback = callback;
                button->data = data;
                LtkTheme *theme = ltk_global->theme;
       -        button->tl = ltk_create_text_line(ltk_global->tm, text, ltk_global->tm->default_font, theme->button->font_size);
       +        button->tl = ltk_text_line_create();
       +        /* FIXME: support font size */
       +        ltk_text_line_insert_utf8(button->tl, 0, text);
       +        ltk_text_line_wrap(button->tl, -1);
                button->widget.rect.w = button->tl->w + (theme->button->border_width + theme->button->pad) * 2;
                button->widget.rect.h = button->tl->h + (theme->button->border_width + theme->button->pad) * 2;
                button->text = NULL;
       t@@ -184,7 +194,7 @@ void ltk_destroy_button(LtkButton *button)
                if (button->text_pressed) XDestroyImage(button->text_pressed);
                if (button->text_active) XDestroyImage(button->text_active);
                if (button->text_disabled) XDestroyImage(button->text_disabled);
       -        ltk_destroy_text_line(button->tl);
       +        ltk_text_line_destroy(button->tl);
                free(button);
        }
        
   DIR diff --git a/button.h b/button.h
       t@@ -24,13 +24,13 @@
        #ifndef _LTK_BUTTON_H_
        #define _LTK_BUTTON_H_
        
       -/* Requires the following includes: <X11/Xlib.h>, "ltk.h", "text-hb.h" */
       +/* Requires the following includes: <X11/Xlib.h>, "ltk.h", "text_buffer.h" */
        
        typedef struct {
                LtkWidget widget;
                void (*callback) (void *, XEvent, void *);
                void *data;
       -        LtkTextLine *tl;
       +        struct ltk_text_line *tl;
                XImage *text;
                XImage *text_hover;
                XImage *text_pressed;
   DIR diff --git a/ltkx.h b/ltkx.h
       t@@ -9,7 +9,6 @@
        #include <harfbuzz/hb.h>
        #include <harfbuzz/hb-ot.h>
        #include "text-common.h"
       -#include "text-hb.h"
        #include "button.h"
        #include "grid.h"
        #include "array.h"