assets.inc 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "awtk.h"
  2. #include "base/assets_manager.h"
  3. #include "assets/__assets_default.inc"
  4. #ifndef APP_THEME
  5. #define APP_THEME "default"
  6. #endif /*APP_THEME*/
  7. bool_t assets_has_theme(const char* name) {
  8. return_value_if_fail(name != NULL, FALSE);
  9. if (tk_str_eq(name, "default")) {
  10. return TRUE;
  11. } else {
  12. return FALSE;
  13. }
  14. }
  15. static ret_t assets_init_internal(const char* theme) {
  16. assets_manager_t* am = assets_manager();
  17. return_value_if_fail(theme != NULL && am != NULL, RET_BAD_PARAMS);
  18. assets_manager_set_theme(am, theme);
  19. if (tk_str_eq(theme, "default")) {
  20. return assets_init_default();
  21. } else {
  22. log_debug("%s not support.\n", theme);
  23. return RET_NOT_IMPL;
  24. }
  25. }
  26. #ifndef WITH_FS_RES
  27. static ret_t widget_set_theme_without_file_system(widget_t* widget, const char* name) {
  28. const asset_info_t* info = NULL;
  29. event_t e = event_init(EVT_THEME_CHANGED, NULL);
  30. widget_t* wm = widget_get_window_manager(widget);
  31. font_manager_t* fm = widget_get_font_manager(widget);
  32. image_manager_t* imm = widget_get_image_manager(widget);
  33. assets_manager_t* am = widget_get_assets_manager(widget);
  34. locale_info_t* locale_info = widget_get_locale_info(widget);
  35. return_value_if_fail(am != NULL && name != NULL, RET_BAD_PARAMS);
  36. return_value_if_fail(assets_has_theme(name), RET_BAD_PARAMS);
  37. font_manager_unload_all(fm);
  38. image_manager_unload_all(imm);
  39. assets_manager_clear_all(am);
  40. widget_reset_canvas(widget);
  41. assets_init_internal(name);
  42. locale_info_reload(locale_info);
  43. info = assets_manager_ref(am, ASSET_TYPE_STYLE, "default");
  44. theme_set_theme_data(theme(), info->data);
  45. assets_manager_unref(assets_manager(), info);
  46. widget_dispatch(wm, &e);
  47. widget_invalidate_force(wm, NULL);
  48. log_debug("theme changed: %s\n", name);
  49. return RET_OK;
  50. }
  51. static ret_t on_set_theme_without_file_system(void* ctx, event_t* e) {
  52. theme_change_event_t* evt = theme_change_event_cast(e);
  53. widget_set_theme_without_file_system(window_manager(), evt->name);
  54. return RET_OK;
  55. }
  56. #endif /*WITH_FS_RES*/
  57. ret_t assets_init(void) {
  58. #ifndef WITH_FS_RES
  59. widget_on(window_manager(), EVT_THEME_WILL_CHANGE, on_set_theme_without_file_system, NULL);
  60. #endif /*WITH_FS_RES*/
  61. return assets_init_internal(APP_THEME);
  62. }
  63. ret_t assets_set_global_theme(const char* name) {
  64. return widget_set_theme(window_manager(), name);
  65. }