demo_view_ttf.c 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * 程序清单:TTF字体显示演示
  3. *
  4. * 这个例子会在创建出的container上进行TTF字体显示的演示
  5. */
  6. #include "demo_view.h"
  7. #include <rtgui/dc.h>
  8. #include <rtgui/font.h>
  9. #include <rtgui/rtgui_system.h>
  10. #ifdef RTGUI_USING_TTF
  11. static rtgui_font_t *font_16, *font_24, *font_36, *font_48;
  12. /*
  13. * container的事件处理函数
  14. */
  15. rt_bool_t ttf_event_handler(struct rtgui_object *object, rtgui_event_t *event)
  16. {
  17. struct rtgui_widget *widget = RTGUI_WIDGET(object);
  18. /* 仅对PAINT事件进行处理 */
  19. if (event->type == RTGUI_EVENT_PAINT)
  20. {
  21. struct rtgui_dc *dc;
  22. rtgui_rect_t rect;
  23. rtgui_font_t *saved;
  24. /*
  25. * 因为用的是demo container,上面本身有一部分控件,所以在绘图时先要让demo container
  26. * 先绘图
  27. */
  28. rtgui_container_event_handler(widget, event);
  29. /************************************************************************/
  30. /* 下面的是DC的操作 */
  31. /************************************************************************/
  32. /* 获得控件所属的DC */
  33. dc = rtgui_dc_begin_drawing(widget);
  34. /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */
  35. if (dc == RT_NULL)
  36. return RT_FALSE;
  37. /* 获得demo container允许绘图的区域 */
  38. demo_view_get_rect(RTGUI_CONTAINER(widget), &rect);
  39. saved = RTGUI_WIDGET_FONT(widget);
  40. RTGUI_WIDGET_FONT(widget) = font_16;
  41. rtgui_dc_draw_text(dc, "ABCD中文", &rect);
  42. rect.y1 += 18;
  43. RTGUI_WIDGET_FONT(widget) = font_24;
  44. rtgui_dc_draw_text(dc, "ABCD中文", &rect);
  45. rect.y1 += 26;
  46. RTGUI_WIDGET_FONT(widget) = font_36;
  47. rtgui_dc_draw_text(dc, "ABCD中文", &rect);
  48. rect.y1 += 38;
  49. RTGUI_WIDGET_FONT(widget) = font_48;
  50. rtgui_dc_draw_text(dc, "ABCD中文", &rect);
  51. RTGUI_WIDGET_FONT(widget) = saved;
  52. /* 绘图完成 */
  53. rtgui_dc_end_drawing(dc);
  54. }
  55. else
  56. {
  57. /* 其他事件,调用默认的事件处理函数 */
  58. return rtgui_container_event_handler(widget, event);
  59. }
  60. return RT_FALSE;
  61. }
  62. /* 创建用于TTF字体显示演示用的视图 */
  63. rtgui_container_t *demo_view_ttf()
  64. {
  65. rtgui_container_t *container;
  66. font_16 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 16);
  67. font_24 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 24);
  68. font_36 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 36);
  69. font_48 = rtgui_freetype_font_create("d:/simsun.TTF", 0, 0, 72);
  70. container = demo_view("TTF 演示");
  71. if (container != RT_NULL)
  72. {
  73. RTGUI_WIDGET_BACKGROUND(container) = white;
  74. /* 设置成自己的事件处理函数 */
  75. rtgui_object_set_event_handler(RTGUI_OBJECT(container), ttf_event_handler);
  76. }
  77. return container;
  78. }
  79. #endif