gtfont_page.lua 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. --[[
  2. @module gtfont_page
  3. @summary U8G2 GTFont演示页面模块 - 128x64屏幕
  4. @version 1.0
  5. @date 2025.12.11
  6. @author 江访
  7. @usage
  8. 本文件为GTFont演示页面模块,核心业务逻辑为:
  9. 1、展示GTFont外置字库的字体大小切换功能;
  10. 2、显示当前选中的字体大小;
  11. 3、提供返回按钮和字体大小切换按钮;
  12. 4、支持BOOT键和PWR键的导航操作;
  13. 本文件的对外接口有4个:
  14. 1、gtfont_page.draw():绘制页面内容;
  15. 2、gtfont_page.handle_key(key_type):处理按键事件;
  16. 3、gtfont_page.on_enter():页面进入回调;
  17. 4、gtfont_page.on_leave():页面离开回调;
  18. ]]
  19. local gtfont_page = {}
  20. -- 当前选中按钮的索引(1:返回, 2:切换)
  21. local selected_index = 1
  22. -- 字体大小选项数组
  23. local size_options = { 12, 14, 16, 18, 20 }
  24. -- 当前字体大小在数组中的索引
  25. local size_index = 1
  26. --[[
  27. @function get_current_size
  28. @summary 获取当前选中的字体大小
  29. @return number 当前字体大小
  30. ]]
  31. local function get_current_size()
  32. return size_options[size_index]
  33. end
  34. --[[
  35. @api draw()
  36. @summary 绘制GTFont演示页面内容
  37. @return 无返回值
  38. @usage
  39. -- 在UI主循环中调用
  40. gtfont_page.draw()
  41. ]]
  42. function gtfont_page.draw()
  43. -- 标题
  44. u8g2.SetFont(u8g2.font_6x10)
  45. u8g2.DrawUTF8("GTFont页", 34, 10)
  46. -- 字体大小显示
  47. u8g2.DrawUTF8("字体:", 5, 28)
  48. local current_size = get_current_size()
  49. -- 使用GTFont绘制字体大小
  50. u8g2.drawGtfontUtf8(tostring(current_size) .. "号", current_size, 40, 16)
  51. -- 示例文本区域
  52. u8g2.DrawUTF8("示例文本:需外置字库", 5, 60)
  53. -- 按钮区域(垂直排列)
  54. if selected_index == 1 then
  55. -- 返回按钮:选中状态
  56. u8g2.DrawButtonUTF8("返回", 5, 10, u8g2.BTN_INV + u8g2.BTN_BW1, 0, 0, 0)
  57. else
  58. -- 返回按钮:未选中状态
  59. u8g2.DrawButtonUTF8("返回", 5, 10, u8g2.BTN_BW1, 0, 0, 0)
  60. end
  61. if selected_index == 2 then
  62. -- 切换按钮:选中状态
  63. u8g2.DrawButtonUTF8("切换", 99, 10, u8g2.BTN_INV + u8g2.BTN_BW1, 0, 0, 0)
  64. else
  65. -- 切换按钮:未选中状态
  66. u8g2.DrawButtonUTF8("切换", 99, 10, u8g2.BTN_BW1, 0, 0, 0)
  67. end
  68. end
  69. --[[
  70. @api handle_key(key_type)
  71. @summary 处理按键事件,实现字体大小切换和页面导航
  72. @param string key_type 按键类型,可选值:
  73. - "confirm":确认键,执行当前选中按钮的功能
  74. - "next":切换到下一个按钮
  75. - "prev":切换到上一个按钮
  76. @return bool 是否已处理该按键,true表示已处理
  77. @usage
  78. -- 在UI主循环中调用
  79. local handled = gtfont_page.handle_key("confirm")
  80. ]]
  81. function gtfont_page.handle_key(key_type)
  82. log.info("gtfont_page.handle_key", "key_type:", key_type)
  83. if key_type == "confirm" then
  84. -- 确认键:执行当前选中按钮的功能
  85. if selected_index == 1 then
  86. -- 返回按钮:返回首页
  87. switch_page("home")
  88. elseif selected_index == 2 then
  89. -- 切换按钮:切换到下一个字体大小
  90. size_index = size_index % #size_options + 1
  91. end
  92. return true
  93. elseif key_type == "next" then
  94. -- 切换到下一个按钮
  95. selected_index = selected_index % 2 + 1
  96. return true
  97. elseif key_type == "prev" then
  98. -- 切换到上一个按钮
  99. selected_index = (selected_index - 2) % 2 + 1
  100. return true
  101. end
  102. return false
  103. end
  104. --[[
  105. @api on_enter()
  106. @summary 页面进入时的初始化操作,重置选中项和字体大小索引
  107. @return 无返回值
  108. @usage
  109. -- 在页面切换时自动调用
  110. gtfont_page.on_enter()
  111. ]]
  112. function gtfont_page.on_enter()
  113. -- 页面进入时初始化
  114. selected_index = 1 -- 默认选中返回按钮
  115. size_index = 1 -- 默认使用第一个字体大小
  116. end
  117. --[[
  118. @api on_leave()
  119. @summary 页面离开时的清理操作
  120. @return 无返回值
  121. @usage
  122. -- 在页面切换时自动调用
  123. gtfont_page.on_leave()
  124. ]]
  125. function gtfont_page.on_leave()
  126. -- 页面离开时的清理操作
  127. -- 当前无需特殊清理
  128. end
  129. return gtfont_page