ui/gtk/display.c

changeset 60
ee4e4742391e
parent 45
ab71409644b0
equal deleted inserted replaced
59:6bd37fe6d905 60:ee4e4742391e
33 #include "container.h" 33 #include "container.h"
34 #include "../common/context.h" 34 #include "../common/context.h"
35 #include "../common/object.h" 35 #include "../common/object.h"
36 #include "../ui/display.h" 36 #include "../ui/display.h"
37 37
38 #include <cx/printf.h>
39
38 static void set_alignment(GtkWidget *widget, float xalign, float yalign) { 40 static void set_alignment(GtkWidget *widget, float xalign, float yalign) {
39 #if GTK_MAJOR_VERSION >= 4 || (GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 16) 41 #if GTK_MAJOR_VERSION >= 4 || (GTK_MAJOR_VERSION >= 3 && GTK_MINOR_VERSION >= 16)
40 gtk_label_set_xalign(GTK_LABEL(widget), xalign); 42 gtk_label_set_xalign(GTK_LABEL(widget), xalign);
41 gtk_label_set_yalign(GTK_LABEL(widget), yalign); 43 gtk_label_set_yalign(GTK_LABEL(widget), yalign);
42 #else 44 #else
45 } 47 }
46 48
47 UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) { 49 UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) {
48 UiObject* current = uic_current_obj(obj); 50 UiObject* current = uic_current_obj(obj);
49 51
52 const char *css_class = NULL;
53 char *markup = NULL;
54 if(args.label) {
55 #if GTK_MAJOR_VERSION < 3
56 switch(args.style) {
57 case UI_LABEL_STYLE_DEFAULT: break;
58 case UI_LABEL_STYLE_TITLE: {
59 cxmutstr m = cx_asprintf("<b>%s</b>", args.label);
60 markup = m.ptr;
61 args.label = NULL;
62 }
63 case UI_LABEL_STYLE_SUBTITLE: {
64 break;
65 }
66 case UI_LABEL_STYLE_DIM: {
67 break;
68 }
69 }
70 # else
71 switch(args.style) {
72 case UI_LABEL_STYLE_DEFAULT: break;
73 case UI_LABEL_STYLE_TITLE: {
74 css_class = "ui_label_title";
75 break;
76 }
77 case UI_LABEL_STYLE_SUBTITLE: {
78 css_class = "subtitle";
79 break;
80 }
81 case UI_LABEL_STYLE_DIM: {
82 css_class = "dim-label";
83 break;
84 }
85 }
86 # endif
87 }
88
89
50 GtkWidget *widget = gtk_label_new(args.label); 90 GtkWidget *widget = gtk_label_new(args.label);
91 if(markup) {
92 gtk_label_set_markup(GTK_LABEL(widget), markup);
93 free(markup);
94 }
95
96 if(css_class) {
97 WIDGET_ADD_CSS_CLASS(widget, css_class);
98 }
99
51 switch(args.align) { 100 switch(args.align) {
52 case UI_ALIGN_DEFAULT: break; 101 case UI_ALIGN_DEFAULT: break;
53 case UI_ALIGN_LEFT: set_alignment(widget, 0, .5); break; 102 case UI_ALIGN_LEFT: set_alignment(widget, 0, .5); break;
54 case UI_ALIGN_RIGHT: set_alignment(widget, 1, .5); break; 103 case UI_ALIGN_RIGHT: set_alignment(widget, 1, .5); break;
55 case UI_ALIGN_CENTER: break; // TODO 104 case UI_ALIGN_CENTER: break; // TODO
56 } 105 }
57 106
107
58 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); 108 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING);
59 if(var) { 109 if(var) {
60 UiString* value = (UiString*)var->value; 110 UiString* value = (UiString*)var->value;
61 value->obj = widget; 111 value->obj = widget;
62 value->get = ui_label_get; 112 value->get = ui_label_get;

mercurial