From 7355ce847e9e9ea52cc85a407d2c985c5f490ad8 Mon Sep 17 00:00:00 2001 From: lixianjing Date: Sat, 20 Feb 2021 15:08:37 +0800 Subject: [PATCH] improve dialog --- design/default/styles/dialog_confirm.xml | 2 +- src/widgets/dialog_helper.c | 38 ++++++++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/design/default/styles/dialog_confirm.xml b/design/default/styles/dialog_confirm.xml index cac4152c5..8397f368c 100644 --- a/design/default/styles/dialog_confirm.xml +++ b/design/default/styles/dialog_confirm.xml @@ -1,6 +1,6 @@ diff --git a/src/widgets/dialog_helper.c b/src/widgets/dialog_helper.c index 57c12b661..90b61014c 100644 --- a/src/widgets/dialog_helper.c +++ b/src/widgets/dialog_helper.c @@ -22,6 +22,7 @@ #include "widgets/label.h" #include "base/dialog.h" #include "widgets/button.h" +#include "base/style_factory.h" #include "widgets/dialog_title.h" #include "widgets/dialog_client.h" @@ -83,7 +84,29 @@ static ret_t dialog_get_size_limits(rect_t* r) { return RET_OK; } -static widget_t* dialog_create_label(const char* text) { +static ret_t dialog_create_label_load_style(widget_t* widget, const char* theme_name) { + assets_manager_t* am = assets_manager(); + const asset_info_t* res_theme = assets_manager_ref(am, ASSET_TYPE_STYLE, theme_name); + return_value_if_fail(widget != NULL, RET_BAD_PARAMS); + + if (res_theme != NULL) { + theme_t* theme = theme_default_create(res_theme->data); + widget->astyle = style_factory_create_style(style_factory(), theme_get_style_type(theme)); + style_update_state(widget->astyle, theme, widget->vt->type, NULL, WIDGET_STATE_NORMAL); + } + + return RET_OK; +} + +static ret_t dialog_create_label_unload_style(widget_t* widget) { + return_value_if_fail(widget != NULL, RET_BAD_PARAMS); + style_destroy(widget->astyle); + widget->astyle = NULL; + + return RET_OK; +} + +static widget_t* dialog_create_label(const char* text, const char* theme_name) { rect_t r; widget_t* label = NULL; @@ -91,12 +114,14 @@ static widget_t* dialog_create_label(const char* text) { label = label_create(NULL, 0, 0, 0, 0); return_value_if_fail(label != NULL, NULL); - + dialog_create_label_load_style(label, theme_name); if (text != NULL) { widget_set_tr_text(label, text); + label_set_line_wrap(label, TRUE); + label_set_word_wrap(label, TRUE); } label_resize_to_content(label, r.x, r.w, r.y, r.h); - + dialog_create_label_unload_style(label); return label; } @@ -119,7 +144,7 @@ ret_t dialog_info_ex(const char* text, const char* title_text, const char* theme widget_t* client = NULL; return_value_if_fail(text != NULL, RET_BAD_PARAMS); - label = dialog_create_label(text); + label = dialog_create_label(text, theme); return_value_if_fail(label != NULL, RET_OOM); tk_snprintf(params, sizeof(params) - 1, "default(x=10, y=10, w=%d, h=%d)", label->w, label->h); @@ -165,6 +190,7 @@ ret_t dialog_warn(const char* title, const char* text) { return dialog_info_ex(text, title, "dialog_warn"); } +#define DIALOG_CONFIRM_NAME "dialog_confirm" ret_t dialog_confirm(const char* stitle, const char* text) { uint32_t w = 0; uint32_t h = 0; @@ -178,7 +204,7 @@ ret_t dialog_confirm(const char* stitle, const char* text) { return_value_if_fail(text != NULL, RET_BAD_PARAMS); stitle = stitle != NULL ? stitle : "Confirm"; - label = dialog_create_label(text); + label = dialog_create_label(text, DIALOG_CONFIRM_NAME); return_value_if_fail(label != NULL, RET_OOM); tk_snprintf(params, sizeof(params) - 1, "default(x=10, y=10, w=%d, h=%d)", label->w, label->h); @@ -187,7 +213,7 @@ ret_t dialog_confirm(const char* stitle, const char* text) { h = label->h + 90; w = tk_max(label->w, 128) + 40; dialog = dialog_create_simple(NULL, 0, 0, w, h); - widget_set_prop_str(dialog, WIDGET_PROP_THEME, "dialog_confirm"); + widget_set_prop_str(dialog, WIDGET_PROP_THEME, DIALOG_CONFIRM_NAME); widget_set_prop_str(dialog, WIDGET_PROP_HIGHLIGHT, "default(alpha=40)"); client = dialog_get_client(dialog);