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 GTK_MAJOR_VERSION < 3 |
|
55 switch(args.type && args.label) { |
|
56 case UI_LABEL_STYLE_DEFAULT: break; |
|
57 case UI_LABEL_STYLE_HEADING: { |
|
58 cxmutstr m = cx_asprintf("<b>%s</b>", args.label); |
|
59 markup = m.ptr; |
|
60 args.label = NULL; |
|
61 } |
|
62 } |
|
63 #else |
|
64 switch(args.type && args.label) { |
|
65 case UI_LABEL_STYLE_DEFAULT: break; |
|
66 case UI_LABEL_STYLE_HEADING: { |
|
67 css_class = "ui_label_heading"; |
|
68 break; |
|
69 } |
|
70 } |
|
71 #endif |
|
72 |
50 GtkWidget *widget = gtk_label_new(args.label); |
73 GtkWidget *widget = gtk_label_new(args.label); |
|
74 if(markup) { |
|
75 gtk_label_set_markup(GTK_LABEL(widget), markup); |
|
76 free(markup); |
|
77 } |
|
78 |
|
79 if(css_class) { |
|
80 WIDGET_ADD_CSS_CLASS(widget, css_class); |
|
81 } |
|
82 |
51 switch(args.align) { |
83 switch(args.align) { |
52 case UI_ALIGN_DEFAULT: break; |
84 case UI_ALIGN_DEFAULT: break; |
53 case UI_ALIGN_LEFT: set_alignment(widget, 0, .5); break; |
85 case UI_ALIGN_LEFT: set_alignment(widget, 0, .5); break; |
54 case UI_ALIGN_RIGHT: set_alignment(widget, 1, .5); break; |
86 case UI_ALIGN_RIGHT: set_alignment(widget, 1, .5); break; |
55 case UI_ALIGN_CENTER: break; // TODO |
87 case UI_ALIGN_CENTER: break; // TODO |
56 } |
88 } |
57 |
89 |
|
90 |
58 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); |
91 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); |
59 if(var) { |
92 if(var) { |
60 UiString* value = (UiString*)var->value; |
93 UiString* value = (UiString*)var->value; |
61 value->obj = widget; |
94 value->obj = widget; |
62 value->get = ui_label_get; |
95 value->get = ui_label_get; |