На накопителе лишь иконки. Если накопитель (DataFlash) отформатировать все останется как есть, лишь без пиктограмм... кнопки все градиентные - рисуется силами дисплея.
Сделал что-то типа объектов ф'ля делфи: TButton, TLabel, TEdit, TGradientButton - передаю на вход параметры, а оно само рисуется. Передачей коротких команд стороннего API.
void AddButtonGrad(TButton *btn, bit enabled, bit visible)
{
TRDCompact *res;
BYTE *buf = SharedBuffer;
WORD l = (*btn).Left,
t = (*btn).Top,
w = (*btn).Width,
h = (*btn).Height,
abris = (*btn).AbrisWidth;
WORD a4, a8;
DWORD rgb0, rgb1;
bit pressed;
if ((*btn).AbrisWidth == ABRIS_MINIMAL)
{
a4 = 0;
a8 = 0;
abris = 1;
}
else
{
a4 = 4*abris;
a8 = 8*abris;
}
if (!v)
{
PassBitmap((*btn).Bitmap);
return;
}
if ((*btn).Group != -1)
{
// çàïîëíÿåì ñïèñîê êíîïîê â ãðóïïå
Groups[(*btn).Group].Buttons[Groups[(*btn).Group].Number] = (*btn).Tag;
Groups[(*btn).Group].Number++;
if ((*btn).AllowUp)
{ // êíîïêó ìîæíî "îòæàòü", îíà îäíà â ãðóïïå
if ((*btn).Tag == TagPressed) Groups[(*btn).Group].Pressed = !Groups[(*btn).Group].Pressed;
pressed = Groups[(*btn).Group].Pressed;
}
else
{ // îäíà èç êíîïîê ãðóïïû âñåãäà íàæàòà
pressed = (Groups[(*btn).Group].Pressed == (*btn).Tag);
}
}
else
{ // ïðîñòàÿ íîïêà áåç óäåðæèâàíèÿ
pressed = ((*btn).Tag == TagPressed);
}
if (pressed)
{
rgb0 = (*btn).ClLeftPressed;
rgb1 = (*btn).ClRightPressed;
}
else
{
rgb0 = (*btn).ClLeft;
rgb1 = (*btn).ClRight;
}
if (en)
Ft_App_WrCoCmd_Buffer(phost,COLOR_A(255));
else
Ft_App_WrCoCmd_Buffer(phost,COLOR_A(100));
if (en && v)
Ft_App_WrCoCmd_Buffer(phost,TAG((*btn).Tag));
else
Ft_App_WrCoCmd_Buffer(phost,TAG(1));
Ft_App_WrCoCmd_Buffer(phost,SCISSOR_XY(l+a4, t+a4));
Ft_App_WrCoCmd_Buffer(phost,SCISSOR_SIZE(w-a8, h-a8));
Ft_Gpu_CoCmd_Gradient(phost,l+a4, t, rgb0, l+w-a4, t, rgb1);
Ft_App_WrCoCmd_Buffer(phost,SCISSOR_XY(0, 0));
Ft_App_WrCoCmd_Buffer(phost,SCISSOR_SIZE(FT_DispWidth, FT_DispHeight));
if (abris > 0)
{
abris *= 16;
Ft_App_WrCoCmd_Buffer(phost,LINE_WIDTH(abris));
Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV(rgb1));
l *= 16;
t *= 16;
w *= 16;
h *= 16;
Ft_App_WrCoCmd_Buffer(phost,BEGIN(LINE_STRIP));
Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+abris, t+abris));
Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+abris, t+h-abris));
Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+w-abris, t+h-abris));
Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+w-abris, t+abris));
Ft_App_WrCoCmd_Buffer(phost,VERTEX2F(l+abris, t+abris));
Ft_App_WrCoCmd_Buffer(phost,END());
l /= 16;
t /= 16;
w /= 16;
h /= 16;
}
if (fs_ReadFileInfo((*btn).Bitmap, buf))
{
// spi_SetMode(DISPLAY_BITRATE, 0x40);
res = (TRDCompact*)buf;
if ((*res).RCType == RC_TYPE_IMAGE)
{
l += ((int)w - (*res).Width)/2;
t += ((int)h - (*res).Height)/2;
if (pressed && (*btn).ClRepaintPressed != BITMAP_NOT_REPAINT)
Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV((*btn).ClRepaintPressed));
else if (!pressed && (*btn).ClRepaint != BITMAP_NOT_REPAINT)
Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV((*btn).ClRepaint));
else
Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV(CL_WHITE));
AddBitmap((*btn).Bitmap, l, t, 0, true);
}
}
if (strlen((*btn).Text > 0))
{
if (pressed)
Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV((*btn).ClLeft));
else
Ft_App_WrCoCmd_Buffer(phost,COLOR_RGB_POV((*btn).ClLeftPressed));
if (pressed)
{
Ft_Gpu_CoCmd_Text(phost,l+w/2-1, t+h/2, (*btn).TextSize, OPT_CENTER, (*btn).Text);
Ft_Gpu_CoCmd_Text(phost,l+w/2+1, t+h/2, (*btn).TextSize, OPT_CENTER, (*btn).Text);
}
else
Ft_Gpu_CoCmd_Text(phost,l+w/2, t+h/2, (*btn).TextSize, OPT_CENTER, (*btn).Text);
}
}
typedef struct
{
WORD Left, Top;
WORD Width, Height;
WORD AbrisWidth;
DWORD ClLeft, ClRight;
DWORD ClLeftPressed, ClRightPressed;
BYTE Tag;
BYTE Bitmap[16];
DWORD ClRepaint, ClRepaintPressed;
BYTE Group;
BYTE AllowUp;
BYTE Text[16];
BYTE TextSize;
} TButton;
-
- Кириллица на дисплее есть? - max(03.05.2018 18:34)
- Нет. Но утилиты от производителя на базе стандартных виндовых шрифтов сделают в пару кликов. Правда, я не проверял как они справляются с кириллицей. - POV_(03.05.2018 21:02, )
- Попробовал... POV_(226 знак., 03.05.2018 21:09, )
- Ок - max(04.05.2018 12:38)
- Попробовал... POV_(226 знак., 03.05.2018 21:09, )
- Нет. Но утилиты от производителя на базе стандартных виндовых шрифтов сделают в пару кликов. Правда, я не проверял как они справляются с кириллицей. - POV_(03.05.2018 21:02, )
- Ага, понятно, спасибо! - 0men(03.05.2018 15:33)
- Кириллица на дисплее есть? - max(03.05.2018 18:34)