|  | @@ -61,6 +61,7 @@ laWidget _LA_WIDGET_NODE_SOCKET={0};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_HEIGHT_ADJUSTER={0};
 |  |  laWidget _LA_WIDGET_HEIGHT_ADJUSTER={0};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_RAW={0};
 |  |  laWidget _LA_WIDGET_RAW={0};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_MAPPER={0};
 |  |  laWidget _LA_WIDGET_MAPPER={0};
 | 
											
												
													
														|  | 
 |  | +laWidget _LA_WIDGET_IMAGE={0};
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_FIXED_GROUP=&_LA_WIDGET_FIXED_GROUP;
 |  |  laWidget *LA_WIDGET_FIXED_GROUP=&_LA_WIDGET_FIXED_GROUP;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_TAB=&_LA_WIDGET_TAB;
 |  |  laWidget *LA_WIDGET_TAB=&_LA_WIDGET_TAB;
 | 
											
										
											
												
													
														|  | @@ -102,6 +103,7 @@ laWidget *LA_WIDGET_NODE_SOCKET=&_LA_WIDGET_NODE_SOCKET;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_HEIGHT_ADJUSTER=&_LA_WIDGET_HEIGHT_ADJUSTER;
 |  |  laWidget *LA_WIDGET_HEIGHT_ADJUSTER=&_LA_WIDGET_HEIGHT_ADJUSTER;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_RAW=&_LA_WIDGET_RAW;
 |  |  laWidget *LA_WIDGET_RAW=&_LA_WIDGET_RAW;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_MAPPER=&_LA_WIDGET_MAPPER;
 |  |  laWidget *LA_WIDGET_MAPPER=&_LA_WIDGET_MAPPER;
 | 
											
												
													
														|  | 
 |  | +laWidget *LA_WIDGET_IMAGE=&_LA_WIDGET_IMAGE;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  //============================================== [Draw]
 |  |  //============================================== [Draw]
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -182,6 +184,20 @@ int la_LabelHeight(laUiItem *ui){
 | 
											
												
													
														|  |  int la_SocketGetHeight(laUiItem *ui){
 |  |  int la_SocketGetHeight(laUiItem *ui){
 | 
											
												
													
														|  |      if(ui->Flags&(LA_UI_SOCKET_LABEL_N|LA_UI_SOCKET_LABEL_S))return 2; return 1;
 |  |      if(ui->Flags&(LA_UI_SOCKET_LABEL_N|LA_UI_SOCKET_LABEL_S))return 2; return 1;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +int la_ImageGetHeight(laUiItem *ui){
 | 
											
												
													
														|  | 
 |  | +    if(ui->Flags&LA_UI_IMAGE_FULL_W){
 | 
											
												
													
														|  | 
 |  | +        tnsImage* im=ui->Extra;
 | 
											
												
													
														|  | 
 |  | +        int W=im->Texture->Width, H=im->Texture->Height;
 | 
											
												
													
														|  | 
 |  | +        real CW=MAIN.CurrentWindow->CW-LA_RH*4, CH=MAIN.CurrentWindow->CH-LA_RH*4;
 | 
											
												
													
														|  | 
 |  | +        real ra=1;
 | 
											
												
													
														|  | 
 |  | +        if(W>CW){ real r=W/CW; ra=TNS_MAX2(r,ra); }
 | 
											
												
													
														|  | 
 |  | +        if(H>CH){ real r=H/CH; ra=TNS_MAX2(r,ra); }
 | 
											
												
													
														|  | 
 |  | +        W/=ra; H/=ra;
 | 
											
												
													
														|  | 
 |  | +        return H/LA_RH+1;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +    if(!ui->SymbolID) ui->SymbolID=3;
 | 
											
												
													
														|  | 
 |  | +    return ui->SymbolID;
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  int la_ColorSelectorGetMinWidth(laUiItem *ui){
 |  |  int la_ColorSelectorGetMinWidth(laUiItem *ui){
 | 
											
												
													
														|  |      return 5*LA_RH;
 |  |      return 5*LA_RH;
 | 
											
										
											
												
													
														|  | @@ -193,12 +209,14 @@ int la_ValueGetMinWidth(laUiItem *ui){
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  int la_LabelGetMinWidth(laUiItem *ui){
 |  |  int la_LabelGetMinWidth(laUiItem *ui){
 | 
											
												
													
														|  |      laBoxedTheme *bt = *ui->Type->Theme;
 |  |      laBoxedTheme *bt = *ui->Type->Theme;
 | 
											
												
													
														|  | 
 |  | +    if(ui->Flags&LA_UI_MIN_WIDTH){ return LA_RH; }
 | 
											
												
													
														|  |      int strw=tnsStringGetWidth(transLate(ui->Display->Ptr), 0, ui->Flags&LA_TEXT_MONO);
 |  |      int strw=tnsStringGetWidth(transLate(ui->Display->Ptr), 0, ui->Flags&LA_TEXT_MONO);
 | 
											
												
													
														|  |      if(ui->Type==_LA_UI_MENU_ROOT && strw<LA_RH)strw=LA_RH;
 |  |      if(ui->Type==_LA_UI_MENU_ROOT && strw<LA_RH)strw=LA_RH;
 | 
											
												
													
														|  |      return (strw + bt->LM + bt->RM);
 |  |      return (strw + bt->LM + bt->RM);
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  int la_StringPropGetMinWidth(laUiItem *ui){
 |  |  int la_StringPropGetMinWidth(laUiItem *ui){
 | 
											
												
													
														|  |      laBoxedTheme *bt = *ui->Type->Theme;
 |  |      laBoxedTheme *bt = *ui->Type->Theme;
 | 
											
												
													
														|  | 
 |  | +    if(ui->Flags&LA_UI_MIN_WIDTH){ return LA_RH; }
 | 
											
												
													
														|  |      char _buf[LA_RAW_CSTR_MAX_LEN]={0}; int ExtraW=0; char* buf=_buf;
 |  |      char _buf[LA_RAW_CSTR_MAX_LEN]={0}; int ExtraW=0; char* buf=_buf;
 | 
											
												
													
														|  |      if(ui->Type == _LA_UI_STRING_MULTI){ExtraW=2*LA_RH+bt->LM;}
 |  |      if(ui->Type == _LA_UI_STRING_MULTI){ExtraW=2*LA_RH+bt->LM;}
 | 
											
												
													
														|  |      laGetString(&ui->PP, _buf, &buf); int rows=0;
 |  |      laGetString(&ui->PP, _buf, &buf); int rows=0;
 | 
											
										
											
												
													
														|  | @@ -303,6 +321,20 @@ int la_SocketGetMinWidth(laUiItem *ui){
 | 
											
												
													
														|  |      if(ui->Flags&(LA_UI_SOCKET_LABEL_S|LA_UI_SOCKET_LABEL_N))return LA_RH*2;
 |  |      if(ui->Flags&(LA_UI_SOCKET_LABEL_S|LA_UI_SOCKET_LABEL_N))return LA_RH*2;
 | 
											
												
													
														|  |      return LA_RH;
 |  |      return LA_RH;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +int la_ImageGetMinWidth(laUiItem *ui){
 | 
											
												
													
														|  | 
 |  | +    tnsImage* im=ui->Extra;
 | 
											
												
													
														|  | 
 |  | +    if(!im->Texture) return LA_RH;
 | 
											
												
													
														|  | 
 |  | +    int W=im->Texture->Width, H=im->Texture->Height;
 | 
											
												
													
														|  | 
 |  | +    int UseW=LA_RH;
 | 
											
												
													
														|  | 
 |  | +    if(ui->Flags&LA_UI_IMAGE_FULL_W) UseW=W;
 | 
											
												
													
														|  | 
 |  | +    else UseW=(int)((real)LA_RH*ui->SymbolID/H*W);
 | 
											
												
													
														|  | 
 |  | +    real CW=MAIN.CurrentWindow->CW-LA_RH*4, CH=MAIN.CurrentWindow->CH-LA_RH*4;
 | 
											
												
													
														|  | 
 |  | +    real ra=1;
 | 
											
												
													
														|  | 
 |  | +    if(UseW>CW){ real r=UseW/CW; ra=TNS_MAX2(r,ra); }
 | 
											
												
													
														|  | 
 |  | +    if(H>CH){ real r=H/CH; ra=TNS_MAX2(r,ra); }
 | 
											
												
													
														|  | 
 |  | +    UseW/=ra; H/=ra;
 | 
											
												
													
														|  | 
 |  | +    return UseW;
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  void la_SingleLineStringDrawSelection(laUiItem *ui, int Begin, int U, laBoxedTheme *bt, uint32_t *str, laStringEdit *se);
 |  |  void la_SingleLineStringDrawSelection(laUiItem *ui, int Begin, int U, laBoxedTheme *bt, uint32_t *str, laStringEdit *se);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -1347,6 +1379,21 @@ void la_MapperDraw(laUiItem *ui, int h){
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      if(any){ glLineWidth(2); glPointSize(5); tnsFlush(); glPointSize(1); glLineWidth(1); }
 |  |      if(any){ glLineWidth(2); glPointSize(5); tnsFlush(); glPointSize(1); glLineWidth(1); }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +void la_ImageDraw(laUiItem *ui, int h){
 | 
											
												
													
														|  | 
 |  | +    laBoxedTheme *bt = (*ui->Type->Theme);
 | 
											
												
													
														|  | 
 |  | +    tnsImage* im=ui->Extra;
 | 
											
												
													
														|  | 
 |  | +    if(!im->Texture) return;
 | 
											
												
													
														|  | 
 |  | +    int W=im->Texture->Width, H=im->Texture->Height;
 | 
											
												
													
														|  | 
 |  | +    int Full=ui->Flags&LA_UI_IMAGE_FULL_W;
 | 
											
												
													
														|  | 
 |  | +    real r=(real)(ui->R-ui->L)/W; if(r<1){W*=r;H*=r;}
 | 
											
												
													
														|  | 
 |  | +    real UseW=Full?(W):((real)LA_RH*ui->SymbolID/H*W);
 | 
											
												
													
														|  | 
 |  | +    real L=0,U=0,UseH=Full?H:(ui->B-ui->U);
 | 
											
												
													
														|  | 
 |  | +    if(Full){ U=(ui->B-ui->U-H)/2; }
 | 
											
												
													
														|  | 
 |  | +    if(ui->Flags&LA_TEXT_ALIGN_LEFT){ L=(ui->R-ui->L-UseW)/2; }
 | 
											
												
													
														|  | 
 |  | +    elif(ui->Flags&LA_TEXT_ALIGN_RIGHT){ L=ui->R-ui->L-UseW; }
 | 
											
												
													
														|  | 
 |  | +    tnsDraw2DTextureDirectly(im->Texture,ui->L+L,ui->U+U,UseW,UseH);
 | 
											
												
													
														|  | 
 |  | +    tnsFlush();
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  void la_ValueMeterDraw(laUiItem *ui, int h){
 |  |  void la_ValueMeterDraw(laUiItem *ui, int h){
 | 
											
												
													
														|  |      laBoxedTheme *bt = (*ui->Type->Theme);
 |  |      laBoxedTheme *bt = (*ui->Type->Theme);
 | 
											
										
											
												
													
														|  | @@ -1497,6 +1544,12 @@ void la_MultiStringInit(laUiItem *ui){
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      e->HeightCoeff = 10;
 |  |      e->HeightCoeff = 10;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +void la_ImageUiInit(laUiItem *ui){
 | 
											
												
													
														|  | 
 |  | +    tnsImage* im=ui->Extra; tnsUseImage(im);
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +void la_ImageUiDestroy(laUiItem *ui){
 | 
											
												
													
														|  | 
 |  | +    tnsImage* im=ui->Extra; tnsStopUsingImage(im);
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  void la_RegisterUiTypesBasic(){
 |  |  void la_RegisterUiTypesBasic(){
 | 
											
												
													
														|  |      laKeyMapper* km;
 |  |      laKeyMapper* km;
 | 
											
										
											
												
													
														|  | @@ -1638,6 +1691,10 @@ void la_RegisterUiTypesBasic(){
 | 
											
												
													
														|  |      LA_WIDGET_MAPPER->Type=
 |  |      LA_WIDGET_MAPPER->Type=
 | 
											
												
													
														|  |      _LA_UI_MAPPER = la_RegisterUiType("LA_mapper_default", 0, "LA_value_mapper", &_LA_THEME_COLLECTION_GROUP, la_MapperDraw, la_ColorPickerGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 |  |      _LA_UI_MAPPER = la_RegisterUiType("LA_mapper_default", 0, "LA_value_mapper", &_LA_THEME_COLLECTION_GROUP, la_MapperDraw, la_ColorPickerGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    LA_WIDGET_IMAGE->Type=
 | 
											
												
													
														|  | 
 |  | +    _LA_UI_IMAGE = la_RegisterUiType("LA_image_default", 0, 0, &_LA_THEME_COLLECTION_GROUP, la_ImageDraw, la_ImageGetHeight, la_ImageUiInit, la_ImageUiDestroy);
 | 
											
												
													
														|  | 
 |  | +    _LA_UI_IMAGE->GetMinWidth=la_ImageGetMinWidth;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      _LA_UI_ROW_BEGIN.Theme=&_LA_THEME_BUTTON;
 |  |      _LA_UI_ROW_BEGIN.Theme=&_LA_THEME_BUTTON;
 | 
											
												
													
														|  |      _LA_UI_ROW_END.Theme=&_LA_THEME_BUTTON;
 |  |      _LA_UI_ROW_END.Theme=&_LA_THEME_BUTTON;
 | 
											
												
													
														|  |  }
 |  |  }
 |