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; |