Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.                 control Text
  3. */
  4.  
  5.  
  6. gui_text_size_t GetStringSize(font_t *font,char *s)
  7. {
  8.         long                    len;
  9.         gui_text_size_t size;
  10.  
  11.         len=strlen(s);
  12.         if (font->size==FONT_CONSTANT_SIZE)
  13.         {
  14.                 if (font->flags & FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON)
  15.                 {
  16.                         size.sizex=len*font->sizex;
  17.                         size.sizey=font->sizey;
  18.                 }
  19.         }
  20.  
  21.         return(size);
  22. }
  23.  
  24. void TextBackgroundOn(gui_text_t *Text)
  25. {
  26.         Text->txt_flags |=TEXT_BACKGROUND_ON;
  27. }
  28.  
  29. void TextBackgroundOff(gui_text_t *Text)
  30. {
  31.         Text->txt_flags &=TEXT_BACKGROUND_ON;
  32. }
  33.  
  34. void DisplayText(gui_text_t *Text)
  35. {
  36.         int                     x;
  37.         int                     y;
  38.         int                     sizex;
  39.         int                     sizey;
  40.         char                    v;
  41.         font_t                  *font;
  42.         gui_text_size_t         size;
  43.         struct FINITION         *fin;
  44.        
  45.         x=Text->ctrl_x;
  46.         y=Text->ctrl_y;
  47.         fin=(struct FINITION*)Text->finition;
  48.         font=(font_t*)Text->font;
  49.  
  50.         v=Text->txt_flags & TEXT_BACKGROUND_ON;
  51.         if (v)  font->flags|=FONT_FLAG_DRAW_BACKGROUND_ON;
  52.         else    font->flags&=FONT_FLAG_DRAW_BACKGROUND_OFF;
  53.  
  54.         v=Text->txt_flags & TEXT_ORIENTATION_FROM_LEFT_TO_RIGHT_ON;
  55.         if (v)  font->flags|=FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON;
  56.         else    font->flags&=FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_OFF;
  57.  
  58.         //recalculate size of control text befor draw
  59.         size=GetStringSize((font_t*)Text->font,Text->text);
  60.         Text->ctrl_sizex=(DWORD)size.sizex;
  61.         Text->ctrl_sizey=(DWORD)size.sizey;
  62.  
  63.         DrawFont=(void(*)(finition_t *fin,int fx,int fy,DWORD color,
  64.                 DWORD background_color,font_t *font,BYTE *s))font->fnt_draw;
  65.         DrawFont(fin,x,y,Text->color,Text->background_color,font,Text->text);
  66. }
  67.  
  68. //---------------------------------------------------------------------------------
  69. //                       control Text
  70. //---------------------------------------------------------------------------------
  71. void TextProc(gui_text_t *Text,gui_message_t *message)
  72. {
  73.         finition_t      *fin;
  74.  
  75.         switch(message->type)
  76.         {
  77.                 case MESSAGE_FULL_REDRAW_ALL:
  78.                 {
  79.                         //draw Text
  80.                         if (Text->flags & FLAG_SHOW_CONTROL)    DisplayText(Text);
  81.                         break;
  82.                 }
  83.                 case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
  84.                 {
  85.                         fin=(struct FINITION*)Text->finition;
  86.                         fin->flags=fin->flags | FINITION_ON;
  87.                         fin->x=message->arg1;
  88.                         fin->y=message->arg2;
  89.                         fin->sizex=message->arg3;
  90.                         fin->sizey=message->arg4;
  91.                         DisplayText(Text);
  92.                         break;
  93.                 }
  94.                 case MESSAGE_SPECIALIZED:
  95.                 {
  96.                         if (Text->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
  97.                         {
  98.                                 if (Text->flags & FLAG_SHOW_CONTROL)    DisplayText(Text);
  99.                                 Text->flags=Text->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
  100.                         }
  101.                         break;
  102.                 }
  103.                 case MESSAGE_CHANGE_POSITION_EVENT:
  104.                 {
  105.                         Text->ctrl_x=Text->ctrl_x+message->arg1;
  106.                         Text->ctrl_y=Text->ctrl_y+message->arg2;
  107.                         break;
  108.                 }
  109.                 case MESSAGE_DESTROY_CONTROL:
  110.                 {
  111.                         free(Text->finition);
  112.                         break;
  113.                 }
  114.                 case MESSAGE_SET_MAIN_PARENT:
  115.                 {
  116.                         SendMessage((struct HEADER*)Text,message);
  117.                         Text->main_parent=(DWORD*)message->arg1;
  118.                         break;
  119.                 }
  120.  
  121.                 default: break;
  122.         }
  123.         //send message to child controls(if there is)
  124.         SendMessage((struct HEADER*)Text,message);
  125. }
  126.  
  127. //---------------------------------------------------------------------------------
  128. //                              create control Text
  129. //---------------------------------------------------------------------------------
  130. void* CreateText(gui_text_data_t *info_for_control)
  131. {
  132.         gui_text_t              *Text;
  133.         finition_t              *fin;
  134.         gui_text_size_t size;
  135.  
  136.         Text=malloc(sizeof(struct ControlText));
  137.         Text->finition=malloc(sizeof(struct FINITION));
  138.         fin=(struct FINITION*)Text->finition;
  139.         fin->flags=0;
  140.  
  141.         if (info_for_control->font==(DWORD*)NULL)       Text->font=FontsMeneger.default_font;
  142.                                                 else            Text->font=info_for_control->font;
  143.  
  144.         size=GetStringSize((font_t*)Text->font,info_for_control->text);
  145.  
  146.         ID++;
  147. #ifdef  DEBUG
  148.         printf("\ncreated text with ID=%d",(int)ID);
  149. #endif
  150.         Text->child_bk=(DWORD*)NULL;
  151.         Text->child_fd=(DWORD*)NULL;
  152.         Text->active_control_for_keys=(DWORD*)NULL;
  153.         Text->active_control_for_mouse=(DWORD*)NULL;
  154.         Text->callback=(DWORD*)NULL;
  155.         Text->timer=(DWORD*)NULL;
  156.  
  157.         Text->ctrl_proc=(DWORD*)&TextProc;
  158.         Text->ctrl_x=(DWORD)info_for_control->x;
  159.         Text->ctrl_y=(DWORD)info_for_control->y;
  160.         Text->ctrl_sizex=(DWORD)size.sizex;
  161.         Text->ctrl_sizey=(DWORD)size.sizey;
  162.         Text->ctrl_ID=ID;
  163.         Text->color=info_for_control->color;
  164.         Text->background_color=info_for_control->background_color;
  165.         Text->text=info_for_control->text;
  166.         Text->txt_flags=0;
  167.         Text->txt_flags|=TEXT_ORIENTATION_FROM_LEFT_TO_RIGHT_ON;
  168.  
  169.         if (info_for_control->background)
  170.         {
  171.                 Text->txt_flags|=TEXT_BACKGROUND_ON;
  172.         }
  173.         else
  174.         {
  175.                 Text->txt_flags&=TEXT_BACKGROUND_OFF;
  176.         }
  177.  
  178.         Text->flags=0;
  179.         Text->flags=Text->flags | FLAG_SHOW_CONTROL;
  180.  
  181.         return(Text);
  182. }
  183.