📄 graph.c
字号:
MapDrawCirclePart(SX + DX - 1 - R, SY + R, R, 1);
MapDrawCirclePart(SX + DX - 1 - R, SY + DY - 1 - R, R, 2);
MapDrawCirclePart(SX + R, SY + DY - 1 - R, R, 3);
MapDrawCirclePart(SX + R, SY + R, R, 4);
}
void MapFillCircleRect(INT16 SX, INT16 SY, INT16 DX, INT16 DY, INT16 R)
{
UINT16 i;
if (R) {
MapDrawRound(SX + R, SY + R, R);
MapDrawRound(SX + DX - 1 - R, SY + R, R);
for (i = 0; i < R; i++) {
MapDrawLine(SX + (R - i), SY + i,
SX + DX - 1 - (R - i), SY + i);
}
}
for (i = 0; i < DY - (R << 1); i++)
MapDrawLine(SX, SY + R + i, SX + DX - 1, SY + R + i);
if (R) {
MapDrawRound(SX + DX - 1 - R, SY + DY - 1 - R, R);
MapDrawRound(SX + R, SY + DY - 1 - R, R);
for (i = 0; i < R; i++) {
MapDrawLine(SX + i, SY + DY - 1 - (R - i),
SX + DX - 1 - i, SY + DY - 1 - (R - i));
}
}
}
#if 0
#define LINE_FILL_COLOR 0xB08080
#define LINE_DARK_COLOR 0x408080
#define LINE_BRIGHT_COLOR 0xE08080
#define BTM_BOX_X 24
#define BTM_BOX_Y 520
#define BTM_BOX_W (704 - 24 - 24)
#define BTM_BOX_H 44
#define BTM_FRAME 2
#ifdef SUPPORT_GPS_TR2000
#define BTM_TOTAL 2
#define BTM_COL_1 (BTM_BOX_W - BTM_COL_2)
#define BTM_COL_2 (200)
#elif defined(SUPPORT_BUS_DEVICE)
#define BTM_TOTAL 2
#define BTM_COL_1 (BTM_BOX_W - BTM_COL_2)
#define BTM_COL_2 (128 + 8)
#else
#define BTM_TOTAL 2
#define BTM_COL_1 (BTM_BOX_W - BTM_COL_2)
#define BTM_COL_2 ( 80)
#endif
#define BTM_CHR_1 (BTM_COL_1 / 12 - 2)
const MAP_ZONE MapBottomZone[BTM_TOTAL] = {
{ BTM_BOX_X + BTM_FRAME,
BTM_BOX_Y + BTM_FRAME,
BTM_COL_1 - BTM_FRAME * 2,
BTM_BOX_H - BTM_FRAME * 2 },
#if BTM_TOTAL > 1
{ BTM_BOX_X + BTM_FRAME + BTM_COL_1,
BTM_BOX_Y + BTM_FRAME,
BTM_COL_2 - BTM_FRAME * 2,
BTM_BOX_H - BTM_FRAME * 2 },
#endif
#if BTM_TOTAL > 2
{ BTM_BOX_X + BTM_FRAME + BTM_COL_1 + BTM_COL_2,
BTM_BOX_Y + BTM_FRAME,
BTM_COL_2 - BTM_FRAME * 2,
BTM_BOX_H - BTM_FRAME * 2 },
#endif
};
void MapDrawBottom()
{
BYTE i;
MapSetColor(LINE_FILL_COLOR);
MapFillRectangle(0, BTM_BOX_Y,
// MAP_SIZE_X, BTM_BOX_Y + BTM_BOX_H);
MAP_SIZE_X, MAP_SIZE_Y);
MapSetColor(LINE_DARK_COLOR);
for (i = 0; i < BTM_TOTAL; i++) {
MapFillRectangle(MapBottomZone[i].x,
MapBottomZone[i].y,
MapBottomZone[i].x + MapBottomZone[i].w,
MapBottomZone[i].y + BTM_FRAME);
MapFillRectangle(MapBottomZone[i].x,
MapBottomZone[i].y,
MapBottomZone[i].x + BTM_FRAME,
MapBottomZone[i].y + MapBottomZone[i].h);
}
MapSetColor(LINE_BRIGHT_COLOR);
for (i = 0; i < BTM_TOTAL; i++) {
MapFillRectangle(MapBottomZone[i].x + BTM_FRAME,
MapBottomZone[i].y + MapBottomZone[i].h - BTM_FRAME,
MapBottomZone[i].x + MapBottomZone[i].w,
MapBottomZone[i].y + MapBottomZone[i].h);
MapFillRectangle(MapBottomZone[i].x + MapBottomZone[i].w,
MapBottomZone[i].y,
MapBottomZone[i].x + MapBottomZone[i].w + BTM_FRAME,
MapBottomZone[i].y + MapBottomZone[i].h);
}
MapBottomHoldFlag = 0;
}
void MapDrawBottomIcon(BYTE *Str, BYTE State, BYTE Pos)
{
UINT16 x, y;
x = MapBottomZone[1].x + 64 * Pos + BTM_FRAME * 4;
y = MapBottomZone[1].y + BTM_FRAME * 2;
MapSaveColor();
MapSaveFontSize();
MapSetFontSize(24);
if (State) MapSetColor(MAP_COLOR_GREEN);
else MapSetColor(MAP_COLOR_RED);
MapFillCircleRect(x, y, 64 - BTM_FRAME * 4, MapBottomZone[1].h - BTM_FRAME * 4, 4);
MapSetColor(MAP_COLOR_WHITE);
x += (64 - BTM_FRAME * 4 - strlen(Str) * 12) / 2;
y += (MapBottomZone[1].h - BTM_FRAME * 4 - 24) / 2;
MapDrawString(x, y, Str);
MapRestoreFontSize();
MapRestoreColor();
}
void MapDrawBottomString(BYTE *Data, BYTE Level)
{
UINT32 FontColor;
if (MapBottomHoldFlag && !(Level & STR_LEVEL_HOLD)) return;
switch (Level & (~STR_LEVEL_HOLD)) {
case STR_LEVEL_BORDER:
FontColor = MAP_COLOR_BLUE;
break;
case STR_LEVEL_WARNING:
FontColor = MAP_COLOR_MAGENTA;
break;
case STR_LEVEL_ERROR:
FontColor = MAP_COLOR_RED;
break;
default:
FontColor = MAP_COLOR_BLACK;
break;
}
#if 1
strcpychn(MapRollText, Data, BTM_CHR_1);
#else
if (strlen(Data) > BTM_CHR_1) {
MapSetColor(LINE_FILL_COLOR);
MapFillRectangle(MapBottomZone[0].x + 12,
MapBottomZone[0].y + BTM_FRAME,
MapBottomZone[0].x + MapBottomZone[0].w - BTM_FRAME,
MapBottomZone[0].y + MapBottomZone[0].h - BTM_FRAME);
MapRollFontColor = FontColor;
MapRollBackColor = LINE_FILL_COLOR;
strcpy(MapRollText, Data);
MapRollSize = strlen(MapRollText);
MapRollAddr = 0;
MapRollStep = 0;
MapRollFlag = TRUE;
}
else
#endif
{
MapSaveColor();
MapSaveFontSize();
MapSetColor(FontColor);
MapSetBackColor(LINE_FILL_COLOR);
MapSetFontSize(24);
MapFillString(MapBottomZone[0].x + 12,
MapBottomZone[0].y + (MapBottomZone[0].h - 24) / 2, Data);
MapSetColor(LINE_FILL_COLOR);
MapFillRectangle(MapBottomZone[0].x + 12 + strlen(Data) * 12,
MapBottomZone[0].y + BTM_FRAME,
MapBottomZone[0].x + MapBottomZone[0].w - BTM_FRAME,
MapBottomZone[0].y + MapBottomZone[0].h - BTM_FRAME);
MapRestoreFontSize();
MapRestoreColor();
MapRollFlag = FALSE;
}
if (Level & STR_LEVEL_HOLD) {
MapBottomHoldFlag = 1;
MapBottomHoldTimer = 50; // * 100mS
}
}
#define ROLL_START_X (BTM_BOX_X + 12)
#define ROLL_START_Y (BTM_BOX_Y + (BTM_BOX_H - 24) / 2)
#define ROLL_FONT_WIDTH (BTM_CHR_1 / 2)
#define ROLL_WIDTH (BTM_CHR_1 * 12)
#define ROLL_HEIGHT (24)
#define ROLL_STEP (12)
#define ROLL_CHAR (24)
#define ROLL_FONT_X (ROLL_START_X + ROLL_WIDTH - ROLL_STEP)
#define ROLL_FONT_Y (ROLL_START_Y)
void PollingMapRoll()
{
if (!MapRollFlag) return;
MapMoveWindowLeft(ROLL_START_X, ROLL_START_Y, ROLL_WIDTH, ROLL_HEIGHT, ROLL_STEP);
if (MapRollAddr >= MapRollSize + ROLL_FONT_WIDTH) {
MapRollAddr = 0;
}
else if (MapRollAddr >= MapRollSize) {
MapSaveColor();
MapSetColor(MapRollBackColor);
MapFillRectangle(ROLL_FONT_X, ROLL_FONT_Y,
ROLL_FONT_X + ROLL_STEP, ROLL_FONT_Y + ROLL_HEIGHT);
MapRestoreColor();
MapRollStep += ROLL_STEP;
if (MapRollStep >= ROLL_CHAR / 2) {
MapRollAddr++;
MapRollStep = 0;
}
}
else {
MapSaveColor();
MapSetColor(MapRollBackColor);
MapFillRectangle(ROLL_FONT_X, ROLL_FONT_Y,
ROLL_FONT_X + ROLL_STEP, ROLL_FONT_Y + ROLL_HEIGHT);
MapSaveFontSize();
MapSetFontSize(ROLL_CHAR);
MapSetColor(MapRollFontColor);
MapDrawFontPart(ROLL_FONT_X, ROLL_FONT_Y,
MapRollText + MapRollAddr, MapRollStep, ROLL_STEP);
MapRestoreColor();
MapRestoreFontSize();
MapRollStep += ROLL_STEP;
if (MapRollText[MapRollAddr] < 161 || MapRollText[MapRollAddr + 1] < 161) {
if (MapRollStep >= ROLL_CHAR / 2) {
MapRollStep = 0;
MapRollAddr++;
}
}
else {
if (MapRollStep >= ROLL_CHAR) {
MapRollStep = 0;
MapRollAddr += 2;
}
}
}
}
#define BOOK_BOX_X 100
#define BOOK_BOX_Y 124
#define BOOK_BOX_C 42
#define BOOK_BOX_R (BOOK_ZONE_0_R + BOOK_ZONE_1_R + BOOK_ZONE_2_R)
#define BOOK_BOX_W (BOOK_BOX_C * BOOK_COL_W)
#define BOOK_BOX_H (BOOK_BOX_R * BOOK_ROW_H + BOOK_FRAME * (BOOK_ZONE_V - 1))
#define BOOK_COL_W (12)
#define BOOK_ROW_H (24 + BOOK_FRAME * 2)
#define BOOK_FRAME 8
#define BOOK_ZONE_V 3
#define BOOK_ZONE_0_R 1
#define BOOK_ZONE_1_R 6
#define BOOK_ZONE_2_R 1
#define BOOK_ZONE_0_C 3
#define BOOK_ZONE_1_C 1
#define BOOK_ZONE_2_C 4
#define BOOK_ZONE_ALL (BOOK_ZONE_0_C + BOOK_ZONE_1_C + BOOK_ZONE_2_C)
const MENU_BASE BookMenuZone[BOOK_ZONE_ALL] = {
{ BOOK_BOX_X,
BOOK_BOX_Y,
(BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
BOOK_ZONE_0_R * BOOK_ROW_H,
MAP_COLOR_BLUE,
MAP_COLOR_WHITE,
24,
'C',
"", },
{ BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) / BOOK_ZONE_2_C,
BOOK_BOX_Y,
(BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C * 2 + BOOK_FRAME,
BOOK_ZONE_0_R * BOOK_ROW_H,
MAP_COLOR_BLUE,
MAP_COLOR_WHITE,
24,
'C',
"", },
{ BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) * 3 / BOOK_ZONE_2_C,
BOOK_BOX_Y,
(BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
BOOK_ZONE_0_R * BOOK_ROW_H,
MAP_COLOR_BLUE,
MAP_COLOR_WHITE,
24,
'C',
"", },
{ BOOK_BOX_X,
BOOK_BOX_Y + BOOK_ZONE_0_R * BOOK_ROW_H + BOOK_FRAME,
BOOK_BOX_W,
BOOK_ZONE_1_R * BOOK_ROW_H,
0xB08080,
MAP_COLOR_BLACK,
24,
'C',
"", },
{ BOOK_BOX_X,
BOOK_BOX_Y + (BOOK_ZONE_0_R + BOOK_ZONE_1_R) * BOOK_ROW_H + BOOK_FRAME * 2,
(BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
BOOK_ZONE_2_R * BOOK_ROW_H,
MAP_COLOR_CYAN,
MAP_COLOR_BLACK,
24,
'C',
"", },
{ BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) / BOOK_ZONE_2_C,
BOOK_BOX_Y + (BOOK_ZONE_0_R + BOOK_ZONE_1_R) * BOOK_ROW_H + BOOK_FRAME * 2,
(BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
BOOK_ZONE_2_R * BOOK_ROW_H,
MAP_COLOR_CYAN,
MAP_COLOR_BLACK,
24,
'C',
"", },
{ BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) * 2 / BOOK_ZONE_2_C,
BOOK_BOX_Y + (BOOK_ZONE_0_R + BOOK_ZONE_1_R) * BOOK_ROW_H + BOOK_FRAME * 2,
(BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
BOOK_ZONE_2_R * BOOK_ROW_H,
MAP_COLOR_CYAN,
MAP_COLOR_BLACK,
24,
'C',
"", },
{ BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) * 3 / BOOK_ZONE_2_C,
BOOK_BOX_Y + (BOOK_ZONE_0_R + BOOK_ZONE_1_R) * BOOK_ROW_H + BOOK_FRAME * 2,
(BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
BOOK_ZONE_2_R * BOOK_ROW_H,
MAP_COLOR_CYAN,
MAP_COLOR_BLACK,
24,
'C',
"返回", },
};
void MapDrawBook()
{
BYTE i;
MapSaveWindow(BOOK_BOX_Y - BOOK_FRAME, BOOK_BOX_H + BOOK_FRAME * 2);
MapSetColor(MAP_COLOR_GRAY);
MapFillRectangle(BOOK_BOX_X - BOOK_FRAME,
BOOK_BOX_Y - BOOK_FRAME,
BOOK_BOX_X + BOOK_BOX_W + BOOK_FRAME,
BOOK_BOX_Y + BOOK_BOX_H + BOOK_FRAME);
for (i = 0; i < BOOK_ZONE_ALL; i++) {
MapSetColor(BookMenuZone[i].BackColor);
MapFillCircleRect(BookMenuZone[i].x, BookMenuZone[i].y,
BookMenuZone[i].w, BookMenuZone[i].h, 4);
MapDrawBookZone((BYTE *)BookMenuZone[i].Text, i);
}
}
void MapHideBook()
{
MapLoadWindow(BOOK_BOX_Y - BOOK_FRAME, BOOK_BOX_H + BOOK_FRAME * 2);
}
void MapDrawBookZone(BYTE *Str, BYTE Zone)
{
UINT16 i, j;
UINT16 x, y;
UINT16 n, c;
MapSaveFontSize();
MapSetFontSize(24);
MapSetColor(BookMenuZone[Zone].FontColor);
MapSetBackColor(BookMenuZone[Zone].BackColor);
if (Zone == 3) {
x = BookMenuZone[Zone].x + BOOK_COL_W;
y = BookMenuZone[Zone].y + (BOOK_ROW_H - 12) / 2;
for (n = 0, i = 0; i < BOOK_ZONE_1_R; i++) {
if (n >= strlen(Str)) {
LineBuffer[0] = 0;
}
else
if (strlen(Str + n) > BOOK_BOX_C - 2) {
strcpylen(LineBuffer, Str + n, BOOK_BOX_C - 2);
n += BOOK_BOX_C - 2;
for (c = 0, j = 0; j < BOOK_BOX_C - 2; j++) {
if (LineBuffer[j] > 0x7F) c ^= 0x01;
}
if (LineBuffer[BOOK_BOX_C - 2 - 1] > 0x7F && c) {
LineBuffer[BOOK_BOX_C - 2 - 1] = 0;
n--;
}
}
else {
strcpy(LineBuffer, Str + n);
n += strlen(LineBuffer);
}
for (j = strlen(LineBuffer); j < BOOK_BOX_C - 2; j++) {
LineBuffer[j] = ' ';
}
LineBuffer[BOOK_BOX_C - 2] = 0;
MapFillString(x, y, LineBuffer);
y += BOOK_ROW_H;
}
}
else {
MapFillString(BookMenuZone[Zone].x + (BookMenuZone[Zone].w - (strlen(Str) * 12)) / 2,
BookMenuZone[Zone].y + (BookMenuZone[Zone].h - 24) / 2, Str);
}
MapRestoreFontSize();
}
#define PHONE_BOX_X 188
#define PHONE_BOX_Y 124
#define PHONE_BOX_C 26
#define PHONE_BOX_R (PHONE_ZONE_0_R + PHONE_ZONE_1_R + PHONE_ZONE_2_R + PHONE_ZONE_3_R + PHONE_ZONE_4_R + PHONE_ZONE_5_R)
#define PHONE_BOX_W (PHONE_BOX_C * PHONE_COL_W)
#define PHONE_BOX_H (PHONE_BOX_R * PHONE_ROW_H + PHONE_FRAME * (PHONE_ZONE_V - 1))
#define PHONE_COL_W (12)
#define PHONE_ROW_H (24 + PHONE_FRAME * 2)
#define PHONE_FRAME 8
#define PHONE_ZONE_V 6
#define PHONE_ZONE_0_R 1
#define PHONE_ZONE_1_R 1
#define PHONE_ZONE_2_R 1
#define PHONE_ZONE_3_R 1
#define PHONE_ZONE_4_R 1
#define PHONE_ZONE_5_R 1
#define PHONE_ZONE_0_C 1
#define PHONE_ZONE_1_C 2
#define PHONE_ZONE_2_C 4
#define PHONE_ZONE_3_C 4
#define PHONE_ZONE_4_C 4
#define PHONE_ZONE_5_C 4
#define PHONE_ZONE_ALL (PHONE_ZONE_0_C + PHONE_ZONE_1_C + PHONE_ZONE_2_C + PHONE_ZONE_3_C + PHONE_ZONE_4_C + PHONE_ZONE_5_C)
#define PHONE_SHOW_MAX (18)
const MENU_BASE PhoneMenuZone[PHONE_ZONE_ALL] = {
{ PHONE_BOX_X,
PHONE_BOX_Y,
PHONE_BOX_W,
PHONE_ZONE_0_R * PHONE_ROW_H,
MAP_COLOR_BLUE,
MAP_COLOR_WHITE,
24,
'C',
"拨打电话", },
{ PHONE_BOX_X,
PHONE_BOX_Y + PHONE_ZONE_0_R * PHONE_ROW_H + PHONE_FRAME + 1,
(PHONE_BOX_W + PHONE_FRAME) * 3 / PHONE_ZONE_2_C - PHONE_FRAME,
PHONE_ZONE_1_R * PHONE_ROW_H,
0xB08080,
MAP_COLOR_BLACK,
24,
'C',
"", },
{ PHONE_BOX_X + (PHONE_BOX_W + PHONE_FRAME) * 3 / PHONE_ZONE_2_C,
PHONE_BOX_Y + PHONE_ZONE_0_R * PHONE_ROW_H + PHONE_FRAME,
(PHONE_BOX_W - (PHONE_ZONE_2_C - 1) * PHONE_FRAME) / PHONE_ZONE_2_C,
PHONE_ZONE_1_R * PHONE_ROW_H,
MAP_COLOR_CYAN,
MAP_COLOR_BLACK,
24,
'C',
"删除", },
{ PHONE_BOX_X,
PHONE_BOX_Y + (PHONE_ZONE_0_R + PHONE_ZONE_1_R) * PHONE_ROW_H + PHONE_FRAME * 2,
(PHONE_BOX_W - (PHONE_ZONE_2_C - 1) * PHONE_FRAME) / PHONE_ZONE_2_C,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -