demo_label.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "ftk.h"
  2. typedef struct _TimerInfo
  3. {
  4. int times;
  5. FtkWidget* label;
  6. }TimerInfo;
  7. static Ret timeout(void* ctx)
  8. {
  9. TimerInfo* info = ctx;
  10. char buffer[32] = {0};
  11. if(info->times > 0)
  12. {
  13. ftk_snprintf(buffer, sizeof(buffer), "Quit after %d seconds", info->times);
  14. ftk_widget_set_text(info->label, buffer);
  15. info->times--;
  16. return RET_OK;
  17. }
  18. else
  19. {
  20. ftk_widget_unref(ftk_widget_toplevel(info->label));
  21. ftk_logd("%s: timeout and quit.\n", __func__);
  22. FTK_FREE(info);
  23. FTK_QUIT();
  24. return RET_REMOVE;
  25. }
  26. }
  27. #ifdef FTK_AS_PLUGIN
  28. #include "ftk_app_demo.h"
  29. FTK_HIDE int FTK_MAIN(int argc, char* argv[]);
  30. FtkApp* ftk_app_demo_label_create()
  31. {
  32. return ftk_app_demo_create(_("label"), ftk_main);
  33. }
  34. #else
  35. #define FTK_HIDE extern
  36. #endif /*FTK_AS_PLUGIN*/
  37. FTK_HIDE int FTK_MAIN(int argc, char* argv[])
  38. {
  39. int width = 0;
  40. int height = 0;
  41. FtkGc gc = {0};
  42. TimerInfo* info = NULL;
  43. FtkSource* timer = NULL;
  44. FtkWidget* win = NULL;
  45. FtkWidget* label = NULL;
  46. gc.mask = FTK_GC_BG;
  47. FTK_INIT(argc, argv);
  48. info = (TimerInfo*)FTK_ZALLOC(sizeof(TimerInfo));
  49. info->times = 5;
  50. timer = ftk_source_timer_create(1000, timeout, info);
  51. win = ftk_app_window_create();
  52. ftk_window_set_animation_hint(win, "app_main_window");
  53. width = ftk_widget_width(win);
  54. height = ftk_widget_height(win);
  55. #ifdef WIN32
  56. label = ftk_label_create(win, 10, 10, width - 20, 20);
  57. ftk_widget_set_text(label, "中文文本");
  58. #else
  59. #endif
  60. label = ftk_label_create(win, 10, 40, width - 20, 20);
  61. ftk_widget_set_text(label, "English Text(center)");
  62. ftk_label_set_alignment(label, FTK_ALIGN_CENTER);
  63. assert(strcmp(ftk_widget_get_text(label), "English Text(center)") == 0);
  64. label = ftk_label_create(win, 10, 70, width - 20, 20);
  65. ftk_widget_set_text(label, "English Text(right)");
  66. ftk_label_set_alignment(label, FTK_ALIGN_RIGHT);
  67. gc.bg.a = 0xff;
  68. gc.bg.r = 0xF0;
  69. gc.bg.g = 0xF0;
  70. gc.bg.b = 0x80;
  71. label = ftk_label_create(win, 10, height/2, width - 20, 120);
  72. ftk_widget_set_gc(label, FTK_WIDGET_INSENSITIVE, &gc);
  73. ftk_widget_unset_attr(label, FTK_ATTR_TRANSPARENT);
  74. #ifdef WIN32
  75. ftk_widget_set_text(label, "The linux mobile development(with background color)");
  76. #else
  77. ftk_widget_set_text(label, "中英文混合多行文本显示:the linux mobile development.带有背景颜色。");
  78. #endif
  79. label = ftk_label_create(win, 50, height/2-30, width, 20);
  80. info->label = label;
  81. ftk_widget_set_text(win, "label demo");
  82. ftk_widget_show_all(win, 1);
  83. ftk_widget_set_attr(win, FTK_ATTR_IGNORE_CLOSE);
  84. ftk_main_loop_add_source(ftk_default_main_loop(), timer);
  85. FTK_RUN();
  86. return 0;
  87. }