/* 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); }