eink_page.lua 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. --[[
  2. @module eink_page
  3. @summary eink核心库演示模块
  4. @version 1.0
  5. @date 2025.12.18
  6. @author 江访
  7. @usage
  8. 本模块为eink核心库演示功能模块,主要功能包括:
  9. 1、展示eink核心库的基本图形绘制功能;
  10. 2、演示线、矩形、圆形等基本图形绘制;
  11. 3、显示文本和二维码生成功能;
  12. 4、提供电池图标显示功能;
  13. 按键功能:
  14. - PWR键:返回主页
  15. - BOOT键:无功能
  16. 对外接口:
  17. 1、eink_page.draw():绘制eink演示页面
  18. 2、eink_page.handle_key():处理eink页面按键事件
  19. 3、eink_page.on_enter():页面进入时重置状态
  20. 4、eink_page.on_leave():页面离开时执行清理操作
  21. ]]
  22. local eink_page = {}
  23. --[[
  24. 绘制eink演示页面;
  25. 绘制eink演示页面的所有图形和UI元素;
  26. @api eink_page.draw()
  27. @summary 绘制eink演示页面的所有图形和UI元素
  28. @return nil
  29. @usage
  30. -- 在UI主循环中调用
  31. eink_page.draw()
  32. ]]
  33. function eink_page.draw()
  34. -- 清除绘图缓冲区(使用白色背景)
  35. eink.clear(1, true)
  36. -- 绘制外边框(水平+垂直线组合)
  37. eink.line(5, 5, 195, 5, 0) -- 上边框水平线
  38. eink.line(5, 195, 195, 195, 0) -- 下边框水平线
  39. eink.line(5, 5, 5, 195, 0) -- 左边框垂直线
  40. eink.line(195, 5, 195, 195, 0) -- 右边框垂直线
  41. -- 标题区域(22号英文字体)
  42. eink.setFont(eink.font_opposansm22)
  43. eink.rect(10, 10, 190, 40, 0, 0) -- 标题背景(无斜线)
  44. eink.print(35, 34, "LuatOS-eink", 0) -- 黑色文字
  45. -- 区域分隔线(水平)
  46. eink.line(10, 50, 190, 50, 0) -- 标题与内容分隔线
  47. eink.line(100, 55, 100, 190, 0) -- 左右区域分隔线(垂直)
  48. -- 左侧区域(左半屏)
  49. -- 1. 文本演示,中文目前仅支持12号中文字体
  50. eink.setFont(eink.font_opposansm12_chinese)
  51. eink.print(15, 65, "1. 12中文字体", 0)
  52. eink.print(20, 85, "按PWR键返回", 0)
  53. -- 2. 矩形与线条演示
  54. eink.print(15, 110, "2. 图形演示", 0)
  55. eink.circle(33, 135, 15, 0, 0) -- 空心圆形
  56. eink.circle(73, 135, 15, 0, 1) -- 实心圆形
  57. eink.rect(20, 160, 60, 185, 0, 0) -- 空心矩形
  58. eink.rect(70, 160, 90, 185, 0, 1) -- 实心矩形
  59. -- 右侧区域(右半屏)
  60. -- 3. 二维码演示
  61. eink.print(110, 65, "3. 二维码", 0)
  62. eink.qrcode(115, 70, "https://docs.openluat.com/osapi/core/eink/", 69)
  63. -- 4. 电池与位图演示
  64. eink.print(110, 160, "4. 状态图标", 0)
  65. eink.bat(120, 170, 3750) -- 电池图标
  66. eink.print(150, 180, "电量", 0)
  67. -- 刷新屏幕(不清屏)
  68. eink.show(0, 0, true)
  69. end
  70. --[[
  71. 处理按键事件;
  72. 根据按键类型执行相应的操作;
  73. @api eink_page.handle_key(key_type, switch_page)
  74. @summary 处理eink页面按键事件
  75. @string key_type 按键类型
  76. @valid_values "pwr_up"
  77. @function switch_page 页面切换回调函数
  78. @return bool 事件处理成功返回true,否则返回false
  79. @usage
  80. -- 在UI主循环中调用
  81. local handled = eink_page.handle_key("pwr_up", switch_page)
  82. ]]
  83. function eink_page.handle_key(key_type, switch_page)
  84. log.info("eink_page.handle_key", "key_type:", key_type)
  85. if key_type == "pwr_up" then
  86. -- PWR键:返回首页
  87. switch_page("home")
  88. return true
  89. end
  90. -- BOOT键无功能
  91. return false
  92. end
  93. --[[
  94. 页面进入时重置状态;
  95. @api eink_page.on_enter()
  96. @summary 页面进入时重置状态
  97. @return nil
  98. @usage
  99. -- 在页面切换时调用
  100. eink_page.on_enter()
  101. ]]
  102. function eink_page.on_enter()
  103. log.info("eink_page", "进入eink演示页面")
  104. end
  105. --[[
  106. 页面离开时执行清理操作;
  107. @api eink_page.on_leave()
  108. @summary 页面离开时执行清理操作
  109. @return nil
  110. @usage
  111. -- 在页面切换时调用
  112. eink_page.on_leave()
  113. ]]
  114. function eink_page.on_leave()
  115. log.info("eink_page", "离开eink演示页面")
  116. end
  117. return eink_page