175 lines
5.0 KiB
C
175 lines
5.0 KiB
C
|
|
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD> GUI <20><>
|
|||
|
|
|
|||
|
|
#include "sys.h"
|
|||
|
|
#include "key.h"
|
|||
|
|
#include "lcd.h"
|
|||
|
|
|
|||
|
|
#include "GameEngine.h"
|
|||
|
|
|
|||
|
|
#include "GE_GUI.h"
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD> GE_GUI
|
|||
|
|
*/
|
|||
|
|
void GE_GUI_Init(void)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ƴ־<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param x
|
|||
|
|
* @param y
|
|||
|
|
* @param width: <EFBFBD><EFBFBD><EFBFBD>εĿ<EFBFBD>
|
|||
|
|
* @param height: <EFBFBD><EFBFBD><EFBFBD>εĸ<EFBFBD>
|
|||
|
|
* @param color: <EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>ɫ
|
|||
|
|
* @param thickness: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void GE_GUI_ThickRectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color, uint16_t thickness)
|
|||
|
|
{
|
|||
|
|
for (uint16_t i = 0; i < thickness; i++)
|
|||
|
|
GE_Draw_Rectangle(x + i, y + i, width - 2 * i, height - 2 * i, color);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param x
|
|||
|
|
* @param y
|
|||
|
|
* @param width: <EFBFBD><EFBFBD><EFBFBD>εĿ<EFBFBD>
|
|||
|
|
* @param height: <EFBFBD><EFBFBD><EFBFBD>εĸ<EFBFBD>
|
|||
|
|
* @param font_color: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|||
|
|
* @param fill_color: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|||
|
|
* @param rectangle_color: <EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD>ɫ
|
|||
|
|
* @param thickness: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param str: <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void GE_GUI_TextBox(
|
|||
|
|
uint16_t x,
|
|||
|
|
uint16_t y,
|
|||
|
|
uint16_t width,
|
|||
|
|
uint16_t height,
|
|||
|
|
uint16_t font_color,
|
|||
|
|
uint16_t fill_color,
|
|||
|
|
uint16_t rectangle_color,
|
|||
|
|
uint16_t thickness,
|
|||
|
|
uint8_t *str)
|
|||
|
|
{
|
|||
|
|
GE_GUI_ThickRectangle(x, y, width, height, rectangle_color, thickness);
|
|||
|
|
GE_Draw_Fill(x + thickness, y + thickness, width - 2 * thickness, height - 2 * thickness, fill_color);
|
|||
|
|
GE_Font_Print(x + thickness + 1, y + thickness + 1, width - 2 * (thickness + 1), height - 2 * (thickness + 1), FONT_16, font_color, WHITE, TRUE, str);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫Ȧ<EFBFBD>־<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param x: <EFBFBD><EFBFBD>Ȧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param y: <EFBFBD><EFBFBD>Ȧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param width: <EFBFBD><EFBFBD><EFBFBD>εĿ<EFBFBD>
|
|||
|
|
* @param height: <EFBFBD><EFBFBD><EFBFBD>εĸ<EFBFBD>
|
|||
|
|
* @param color: <EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>ɫ
|
|||
|
|
* @param thickness: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void GE_GUI_DoubleThickRectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color, uint16_t thickness)
|
|||
|
|
{
|
|||
|
|
GE_GUI_ThickRectangle(x, y, width, height, color, thickness);
|
|||
|
|
GE_GUI_ThickRectangle(x + thickness + 1, y + thickness + 1, width - (thickness + 1) * 2, height - (thickness + 1) * 2, color, thickness);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param x
|
|||
|
|
* @param y
|
|||
|
|
* @param width: <EFBFBD><EFBFBD><EFBFBD>ڵĿ<EFBFBD>
|
|||
|
|
* @param height: <EFBFBD><EFBFBD><EFBFBD>ڵĸ<EFBFBD>
|
|||
|
|
* @param head: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param content: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param handler_func: <EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ NULL <EFBFBD><EFBFBD>ִ<EFBFBD>лص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void GE_GUI_MsgBox(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t *head, uint8_t *content, MsgBoxHandler handler_func)
|
|||
|
|
{
|
|||
|
|
//<2F>߿<EFBFBD>
|
|||
|
|
GE_GUI_DoubleThickRectangle(x, y, width, height, BLACK, 2);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
|
|||
|
|
GE_Draw_Rectangle(x + 5, y + FONT_16 + 7, width - 10, 2, BLACK);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
GE_Font_Print(x + 6, y + 6, BORDER_MAX, FONT_16, FONT_16, BLACK, WHITE, FALSE, head);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
GE_Font_Print(x + 6, y + FONT_16 + 10, width - 12, BORDER_MAX, FONT_16, BLACK, WHITE, FALSE, content);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (handler_func != NULL)
|
|||
|
|
handler_func();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief <EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param x
|
|||
|
|
* @param y
|
|||
|
|
* @param width: <EFBFBD><EFBFBD><EFBFBD>ڵĿ<EFBFBD>
|
|||
|
|
* @param height: <EFBFBD><EFBFBD><EFBFBD>ڵĸ<EFBFBD>
|
|||
|
|
* @param head: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param content_amount: <EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param content: <EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* @param handler_func: <EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ NULL <EFBFBD><EFBFBD>ִ<EFBFBD>лص<EFBFBD>
|
|||
|
|
* @retval <EFBFBD><EFBFBD>ѡ<EFBFBD>е<EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD>ʼ
|
|||
|
|
*/
|
|||
|
|
uint8_t GE_GUI_MenuBox(
|
|||
|
|
uint16_t x,
|
|||
|
|
uint16_t y,
|
|||
|
|
uint16_t width,
|
|||
|
|
uint16_t height,
|
|||
|
|
uint8_t *head,
|
|||
|
|
uint8_t content_amount,
|
|||
|
|
uint8_t content[][GE_GUI_MENUBOX_CONTENT_LEN],
|
|||
|
|
MenuBoxHandler handler_func)
|
|||
|
|
{
|
|||
|
|
uint8_t choice_num = 1;
|
|||
|
|
|
|||
|
|
//<2F>߿<EFBFBD>
|
|||
|
|
GE_GUI_DoubleThickRectangle(x, y, width, height, BLACK, 2);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
|
|||
|
|
GE_Draw_Rectangle(x + 5, y + FONT_16 + 7, width - 10, 2, BLACK);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
GE_Font_Print(x + 6, y + 6, BORDER_MAX, FONT_16, FONT_16, BLACK, WHITE, FALSE, head);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|||
|
|
for (uint8_t i = 0; i < content_amount; i++)
|
|||
|
|
{
|
|||
|
|
if (i + 1 == choice_num)
|
|||
|
|
GE_GUI_TextBox(x + 4, y + FONT_16 + 8 + i * (FONT_16 + 3), width - 8, FONT_16 + 4, WHITE, BLUE, BLACK, 1, content[i]);
|
|||
|
|
else
|
|||
|
|
GE_GUI_TextBox(x + 4, y + FONT_16 + 8 + i * (FONT_16 + 3), width - 8, FONT_16 + 4, BLACK, WHITE, BLACK, 1, content[i]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
while (1)
|
|||
|
|
{
|
|||
|
|
uint8_t key = KEY_GetKeyWait();
|
|||
|
|
|
|||
|
|
if (key == KEY2)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else if (key == KEY3 && choice_num > 1)
|
|||
|
|
{
|
|||
|
|
GE_GUI_TextBox(x + 4, y + FONT_16 + 8 + (choice_num - 1) * (FONT_16 + 3), width - 8, FONT_16 + 4, BLACK, WHITE, BLACK, 1, content[choice_num - 1]);
|
|||
|
|
choice_num--;
|
|||
|
|
GE_GUI_TextBox(x + 4, y + FONT_16 + 8 + (choice_num - 1) * (FONT_16 + 3), width - 8, FONT_16 + 4, WHITE, BLUE, BLACK, 1, content[choice_num - 1]);
|
|||
|
|
}
|
|||
|
|
else if (key == KEY1 && choice_num < content_amount)
|
|||
|
|
{
|
|||
|
|
GE_GUI_TextBox(x + 4, y + FONT_16 + 8 + (choice_num - 1) * (FONT_16 + 3), width - 8, FONT_16 + 4, BLACK, WHITE, BLACK, 1, content[choice_num - 1]);
|
|||
|
|
choice_num++;
|
|||
|
|
GE_GUI_TextBox(x + 4, y + FONT_16 + 8 + (choice_num - 1) * (FONT_16 + 3), width - 8, FONT_16 + 4, WHITE, BLUE, BLACK, 1, content[choice_num - 1]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (handler_func != NULL)
|
|||
|
|
handler_func(choice_num);
|
|||
|
|
|
|||
|
|
return choice_num;
|
|||
|
|
}
|