forked from KolibriOS/kolibrios
183 lines
4.5 KiB
PHP
183 lines
4.5 KiB
PHP
|
/*
|
||
|
control Text
|
||
|
*/
|
||
|
|
||
|
|
||
|
gui_text_size_t GetStringSize(font_t *font,char *s)
|
||
|
{
|
||
|
long len;
|
||
|
gui_text_size_t size;
|
||
|
|
||
|
len=strlen(s);
|
||
|
if (font->size==FONT_CONSTANT_SIZE)
|
||
|
{
|
||
|
if (font->flags & FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON)
|
||
|
{
|
||
|
size.sizex=len*font->sizex;
|
||
|
size.sizey=font->sizey;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return(size);
|
||
|
}
|
||
|
|
||
|
void TextBackgroundOn(gui_text_t *Text)
|
||
|
{
|
||
|
Text->txt_flags |=TEXT_BACKGROUND_ON;
|
||
|
}
|
||
|
|
||
|
void TextBackgroundOff(gui_text_t *Text)
|
||
|
{
|
||
|
Text->txt_flags &=TEXT_BACKGROUND_ON;
|
||
|
}
|
||
|
|
||
|
void DisplayText(gui_text_t *Text)
|
||
|
{
|
||
|
int x;
|
||
|
int y;
|
||
|
int sizex;
|
||
|
int sizey;
|
||
|
char v;
|
||
|
font_t *font;
|
||
|
gui_text_size_t size;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=Text->ctrl_x;
|
||
|
y=Text->ctrl_y;
|
||
|
fin=(struct FINITION*)Text->finition;
|
||
|
font=(font_t*)Text->font;
|
||
|
|
||
|
v=Text->txt_flags & TEXT_BACKGROUND_ON;
|
||
|
if (v) font->flags|=FONT_FLAG_DRAW_BACKGROUND_ON;
|
||
|
else font->flags&=FONT_FLAG_DRAW_BACKGROUND_OFF;
|
||
|
|
||
|
v=Text->txt_flags & TEXT_ORIENTATION_FROM_LEFT_TO_RIGHT_ON;
|
||
|
if (v) font->flags|=FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON;
|
||
|
else font->flags&=FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_OFF;
|
||
|
|
||
|
//recalculate size of control text befor draw
|
||
|
size=GetStringSize((font_t*)Text->font,Text->text);
|
||
|
Text->ctrl_sizex=(DWORD)size.sizex;
|
||
|
Text->ctrl_sizey=(DWORD)size.sizey;
|
||
|
|
||
|
DrawFont=(void(*)(finition_t *fin,int fx,int fy,DWORD color,
|
||
|
DWORD background_color,font_t *font,BYTE *s))font->fnt_draw;
|
||
|
DrawFont(fin,x,y,Text->color,Text->background_color,font,Text->text);
|
||
|
}
|
||
|
|
||
|
//---------------------------------------------------------------------------------
|
||
|
// control Text
|
||
|
//---------------------------------------------------------------------------------
|
||
|
void TextProc(gui_text_t *Text,gui_message_t *message)
|
||
|
{
|
||
|
finition_t *fin;
|
||
|
|
||
|
switch(message->type)
|
||
|
{
|
||
|
case MESSAGE_FULL_REDRAW_ALL:
|
||
|
{
|
||
|
//draw Text
|
||
|
if (Text->flags & FLAG_SHOW_CONTROL) DisplayText(Text);
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
|
||
|
{
|
||
|
fin=(struct FINITION*)Text->finition;
|
||
|
fin->flags=fin->flags | FINITION_ON;
|
||
|
fin->x=message->arg1;
|
||
|
fin->y=message->arg2;
|
||
|
fin->sizex=message->arg3;
|
||
|
fin->sizey=message->arg4;
|
||
|
DisplayText(Text);
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_SPECIALIZED:
|
||
|
{
|
||
|
if (Text->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
|
||
|
{
|
||
|
if (Text->flags & FLAG_SHOW_CONTROL) DisplayText(Text);
|
||
|
Text->flags=Text->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_CHANGE_POSITION_EVENT:
|
||
|
{
|
||
|
Text->ctrl_x=Text->ctrl_x+message->arg1;
|
||
|
Text->ctrl_y=Text->ctrl_y+message->arg2;
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_DESTROY_CONTROL:
|
||
|
{
|
||
|
free(Text->finition);
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_SET_MAIN_PARENT:
|
||
|
{
|
||
|
SendMessage((struct HEADER*)Text,message);
|
||
|
Text->main_parent=(DWORD*)message->arg1;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
default: break;
|
||
|
}
|
||
|
//send message to child controls(if there is)
|
||
|
SendMessage((struct HEADER*)Text,message);
|
||
|
}
|
||
|
|
||
|
//---------------------------------------------------------------------------------
|
||
|
// create control Text
|
||
|
//---------------------------------------------------------------------------------
|
||
|
void* CreateText(gui_text_data_t *info_for_control)
|
||
|
{
|
||
|
gui_text_t *Text;
|
||
|
finition_t *fin;
|
||
|
gui_text_size_t size;
|
||
|
|
||
|
Text=malloc(sizeof(struct ControlText));
|
||
|
Text->finition=malloc(sizeof(struct FINITION));
|
||
|
fin=(struct FINITION*)Text->finition;
|
||
|
fin->flags=0;
|
||
|
|
||
|
if (info_for_control->font==(DWORD*)NULL) Text->font=FontsMeneger.default_font;
|
||
|
else Text->font=info_for_control->font;
|
||
|
|
||
|
size=GetStringSize((font_t*)Text->font,info_for_control->text);
|
||
|
|
||
|
ID++;
|
||
|
#ifdef DEBUG
|
||
|
printf("\ncreated text with ID=%d",(int)ID);
|
||
|
#endif
|
||
|
Text->child_bk=(DWORD*)NULL;
|
||
|
Text->child_fd=(DWORD*)NULL;
|
||
|
Text->active_control_for_keys=(DWORD*)NULL;
|
||
|
Text->active_control_for_mouse=(DWORD*)NULL;
|
||
|
Text->callback=(DWORD*)NULL;
|
||
|
Text->timer=(DWORD*)NULL;
|
||
|
|
||
|
Text->ctrl_proc=(DWORD*)&TextProc;
|
||
|
Text->ctrl_x=(DWORD)info_for_control->x;
|
||
|
Text->ctrl_y=(DWORD)info_for_control->y;
|
||
|
Text->ctrl_sizex=(DWORD)size.sizex;
|
||
|
Text->ctrl_sizey=(DWORD)size.sizey;
|
||
|
Text->ctrl_ID=ID;
|
||
|
Text->color=info_for_control->color;
|
||
|
Text->background_color=info_for_control->background_color;
|
||
|
Text->text=info_for_control->text;
|
||
|
Text->txt_flags=0;
|
||
|
Text->txt_flags|=TEXT_ORIENTATION_FROM_LEFT_TO_RIGHT_ON;
|
||
|
|
||
|
if (info_for_control->background)
|
||
|
{
|
||
|
Text->txt_flags|=TEXT_BACKGROUND_ON;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Text->txt_flags&=TEXT_BACKGROUND_OFF;
|
||
|
}
|
||
|
|
||
|
Text->flags=0;
|
||
|
Text->flags=Text->flags | FLAG_SHOW_CONTROL;
|
||
|
|
||
|
return(Text);
|
||
|
}
|