|  | @@ -57,7 +57,6 @@ laWidget _LA_WIDGET_MENU_ROOT={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_ALIGN={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_3D_VIEW={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_2D_VIEW={0};
 | 
	
		
			
				|  |  | -laWidget _LA_WIDGET_SYMBOL={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_NODE_SOCKET={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_HEIGHT_ADJUSTER={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_RAW={0};
 | 
	
	
		
			
				|  | @@ -103,7 +102,6 @@ laWidget *LA_WIDGET_MENU_ROOT=&_LA_WIDGET_MENU_ROOT;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_ALIGN=&_LA_WIDGET_ALIGN;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_3D_VIEW=&_LA_WIDGET_3D_VIEW;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_2D_VIEW=&_LA_WIDGET_2D_VIEW;
 | 
	
		
			
				|  |  | -laWidget *LA_WIDGET_SYMBOL=&_LA_WIDGET_SYMBOL;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_NODE_SOCKET=&_LA_WIDGET_NODE_SOCKET;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_HEIGHT_ADJUSTER=&_LA_WIDGET_HEIGHT_ADJUSTER;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_RAW=&_LA_WIDGET_RAW;
 | 
	
	
		
			
				|  | @@ -119,16 +117,16 @@ int la_ArrayGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |      return laGetArrayLength(&ui->PP);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int la_ValueGetHeight(laUiItem*ui){
 | 
	
		
			
				|  |  | -    int rows = ui->Extra->HeightCoeff; TNS_CLAMP(rows,1,4);
 | 
	
		
			
				|  |  | +    int rows = ui->Extent; if(!rows){ rows=1; }
 | 
	
		
			
				|  |  |      if(ui->Flags&LA_UI_FLAGS_TRANSPOSE){ return la_ArrayGetHeight(ui)*rows; }
 | 
	
		
			
				|  |  |      return rows;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int la_ValueMeterGetHeight(laUiItem*ui){
 | 
	
		
			
				|  |  | -    if(ui->Flags&LA_UI_FLAGS_TRANSPOSE){ return ui->Extra->HeightCoeff?ui->Extra->HeightCoeff:6; }
 | 
	
		
			
				|  |  | +    if(ui->Flags&LA_UI_FLAGS_TRANSPOSE){ return ui->Extent?ui->Extent:6; }
 | 
	
		
			
				|  |  |      return laGetArrayLength(&ui->PP);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int la_ValueMeter2DGetHeight(laUiItem*ui){
 | 
	
		
			
				|  |  | -    return ui->Extra->HeightCoeff?ui->Extra->HeightCoeff:(ui->Extra->HeightCoeff=(ui->TR-ui->TL)/LA_RH);
 | 
	
		
			
				|  |  | +    return ui->Extent?ui->Extent:(ui->Extent=(ui->TR-ui->TL)/LA_RH);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int la_CanvasGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |      return ui->Expand;
 | 
	
	
		
			
				|  | @@ -157,15 +155,8 @@ int la_EnumGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int la_ColorPickerGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  | -    if(!ui->Extra->HeightCoeff) ui->Extra->HeightCoeff=7;
 | 
	
		
			
				|  |  | -    return ui->Extra->HeightCoeff;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -int la_SymbolGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  | -    //if (!ui->State)
 | 
	
		
			
				|  |  | -    //{
 | 
	
		
			
				|  |  | -    //    ui->State = (int)_ICON_SYMBOL_SIZE[ui->SymbolID - ICON_SYMBOL_START] * 1.4 + 1;
 | 
	
		
			
				|  |  | -    //}
 | 
	
		
			
				|  |  | -    return ui->State;
 | 
	
		
			
				|  |  | +    if(!ui->Extent) ui->Extent=7;
 | 
	
		
			
				|  |  | +    return ui->Extent;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int la_GroupGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |      if (ui->State == LA_UI_ACTIVE) return 0;
 | 
	
	
		
			
				|  | @@ -179,10 +170,6 @@ int la_StringPropGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |      int strw=tnsStringGetDimension(buf, 0, 0, ui->TR-ui->TL, &rows, ui->Flags&LA_TEXT_MONO);
 | 
	
		
			
				|  |  |      return rows;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -int la_MultiStringHeight(laUiItem *ui){
 | 
	
		
			
				|  |  | -    laGeneralUiExtraData *e = ui->Extra;
 | 
	
		
			
				|  |  | -    return e->HeightCoeff;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  int la_LabelHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |      int Wrap=ui->Flags&(LA_TEXT_USE_NEWLINE|LA_TEXT_LINE_WRAP);
 | 
	
		
			
				|  |  |      if(!Wrap) return 1;
 | 
	
	
		
			
				|  | @@ -205,9 +192,12 @@ int la_ImageGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |          W/=ra; H/=ra;
 | 
	
		
			
				|  |  |          return H/LA_RH+1;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    if(ui->SymbolID) return ui->SymbolID;
 | 
	
		
			
				|  |  | +    if(ui->Extent) return ui->Extent;
 | 
	
		
			
				|  |  |      return 1;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +int la_VariedGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  | +    return ui->Extent;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int la_ColorSelectorGetMinWidth(laUiItem *ui){
 | 
	
		
			
				|  |  |      if(ui->Flags&LA_UI_FLAGS_ICON) return LA_RH;
 | 
	
	
		
			
				|  | @@ -216,7 +206,7 @@ int la_ColorSelectorGetMinWidth(laUiItem *ui){
 | 
	
		
			
				|  |  |  int la_ValueGetMinWidth(laUiItem *ui){
 | 
	
		
			
				|  |  |      int ExtraW=0;
 | 
	
		
			
				|  |  |      if(ui->Flags&LA_UI_FLAGS_NO_LABEL){ return LA_RH; }
 | 
	
		
			
				|  |  | -    if(ui->Flags&LA_UI_FLAGS_KNOB){ return LA_RH*TNS_MAX2(1,ui->Extra->HeightCoeff); }
 | 
	
		
			
				|  |  | +    if(ui->Flags&LA_UI_FLAGS_KNOB){ return LA_RH*TNS_MAX2(1,ui->Extent); }
 | 
	
		
			
				|  |  |      if((ui->Flags&LA_UI_FLAGS_EXPAND)&&(!(ui->Flags&LA_UI_FLAGS_NO_LABEL))){
 | 
	
		
			
				|  |  |          ExtraW+=tnsStringGetWidth(transLate(ui->PP.LastPs->p->Name),0,0);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -350,7 +340,7 @@ int la_ImageGetMinWidth(laUiItem *ui){
 | 
	
		
			
				|  |  |      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);
 | 
	
		
			
				|  |  | +    else UseW=(int)((real)LA_RH*ui->Extent/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); }
 | 
	
	
		
			
				|  | @@ -647,57 +637,6 @@ void la_TabDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      tnsFlush();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -void la_SymbolDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  | -    return;
 | 
	
		
			
				|  |  | -    //char temp[128] = {0};
 | 
	
		
			
				|  |  | -    //laBoxedTheme *bt = (*ui->Type->Theme);
 | 
	
		
			
				|  |  | -    //tnsFontSingleCharacter *fsc = tfntFetchVectorGraphTextureIDW(ui->SymbolID);
 | 
	
		
			
				|  |  | -    //int VOffset = (ui->B - ui->U - (fsc->height)) / 2;
 | 
	
		
			
				|  |  | -    //int HOffset = (ui->R - ui->L - (fsc->width)) / 2;
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -    //if (strArgumentMatch(ui->Instructions, "mode", "invert"))
 | 
	
		
			
				|  |  | -    //{
 | 
	
		
			
				|  |  | -    //    tnsUseNoTexture();
 | 
	
		
			
				|  |  | -    //    //tnsColor4dv(laThemeColor(bt, ui->State));
 | 
	
		
			
				|  |  | -    //    //tnsVertex2d(ui->L, ui->U);
 | 
	
		
			
				|  |  | -    //    //tnsVertex2d(ui->R, ui->U);
 | 
	
		
			
				|  |  | -    //    //tnsVertex2d(ui->R, ui->B);
 | 
	
		
			
				|  |  | -    //    //tnsVertex2d(ui->L, ui->B);
 | 
	
		
			
				|  |  | -    //    //tnsPackAs(GL_TRIANGLE_FAN);
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -    //    tnsUseNoTexture();
 | 
	
		
			
				|  |  | -    //    tnsColor4dv(LA_THEME_GET(bt, LA_UI_NORMAL)->BorderColor->RGBA);
 | 
	
		
			
				|  |  | -    //    tnsVertex2d(ui->L, ui->U);
 | 
	
		
			
				|  |  | -    //    tnsVertex2d(ui->R, ui->U);
 | 
	
		
			
				|  |  | -    //    tnsVertex2d(ui->R, ui->B);
 | 
	
		
			
				|  |  | -    //    tnsVertex2d(ui->L, ui->B);
 | 
	
		
			
				|  |  | -    //    tnsPackAs(GL_TRIANGLE_FAN);
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -    //    //    tnsDrawVectorGraphPackage(ui->SymbolID, LA_THEME_GET(bt, LA_THEME_INTERPOLATING), ui->L + HOffset, ui->R, ui->U + VOffset, ui->B, 0, 0);
 | 
	
		
			
				|  |  | -    //}
 | 
	
		
			
				|  |  | -    //else
 | 
	
		
			
				|  |  | -    //{
 | 
	
		
			
				|  |  | -    //    //if (!ui->State) ui->State = LA_UI_NORMAL;
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -    //    /*tnsUseNoTexture();
 | 
	
		
			
				|  |  | -    //    tnsColor4dv(laThemeColor(bt, ui->State));
 | 
	
		
			
				|  |  | -    //    tnsVertex2d(ui->L, ui->U);
 | 
	
		
			
				|  |  | -    //    tnsVertex2d(ui->R, ui->U);
 | 
	
		
			
				|  |  | -    //    tnsVertex2d(ui->R, ui->B);
 | 
	
		
			
				|  |  | -    //    tnsVertex2d(ui->L, ui->B);
 | 
	
		
			
				|  |  | -    //    tnsPackAs(GL_TRIANGLE_FAN);*/
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -    //    //tnsUseNoTexture();
 | 
	
		
			
				|  |  | -        //tnsColor4dv(LA_THEME_GET(bt, LA_UI_NORMAL)->BorderColor->RGBA);
 | 
	
		
			
				|  |  | -        //tnsVertex2d(ui->L, ui->U);
 | 
	
		
			
				|  |  | -        //tnsVertex2d(ui->R, ui->U);
 | 
	
		
			
				|  |  | -        //tnsVertex2d(ui->R, ui->B);
 | 
	
		
			
				|  |  | -        //tnsVertex2d(ui->L, ui->B);
 | 
	
		
			
				|  |  | -        //tnsPackAs(GL_LINE_LOOP);
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -    //    //    tnsDrawVectorGraphPackage(ui->SymbolID, LA_THEME_GET(bt, LA_UI_NORMAL), ui->L + HOffset, ui->R, ui->U + VOffset, ui->B, 0, 0);
 | 
	
		
			
				|  |  | -    //}
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void la_IntDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |      laBoxedTheme *bt = (*ui->Type->Theme);
 | 
	
	
		
			
				|  | @@ -715,8 +654,8 @@ void la_IntDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |      int NoDecal=ui->Flags&LA_UI_FLAGS_NO_DECAL;
 | 
	
		
			
				|  |  |      int NoLabel=ui->Flags&LA_UI_FLAGS_NO_LABEL;
 | 
	
		
			
				|  |  |      int IsKnob = ui->Flags&LA_UI_FLAGS_NODE_CONTAINER;
 | 
	
		
			
				|  |  | -    int SliderVertical = ui->Flags&LA_UI_FLAGS_VALUE_METER;
 | 
	
		
			
				|  |  | -    int sf=bt->TextShadow?LA_TEXT_SHADOW:0;
 | 
	
		
			
				|  |  | +    int SliderVertical = ui->Flags&LA_UI_FLAGS_VERTICAL_SLIDER;
 | 
	
		
			
				|  |  | +    uint64_t sf=(SliderVertical?LA_TEXT_ROTATE_N:0) | ( bt->TextShadow?LA_TEXT_SHADOW:0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (laIsPropertyReadOnly(&ui->PP) && !NoDecal) ui->State = LA_BT_DISABLED;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -761,10 +700,10 @@ void la_IntDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |              if(radius*2>(_R-_L)-LA_RH/5){ dgy = radius/1.5; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              tnsColor4dv(laThemeColor(bt,LA_BT_BORDER));
 | 
	
		
			
				|  |  | -            tnsVertex2d(_L, ctry-dgy); tnsVertex2d(_L, _U); tnsVertex2d(ctrx-dgx, _U); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | -            tnsVertex2d(_R, ctry-dgy); tnsVertex2d(_R, _U); tnsVertex2d(ctrx+dgx, _U); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | -            tnsVertex2d(_R, ctry+dgy); tnsVertex2d(_R, _B); tnsVertex2d(ctrx+dgx, _B); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | -            tnsVertex2d(_L, ctry+dgy); tnsVertex2d(_L, _B); tnsVertex2d(ctrx-dgx, _B); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | +            tnsVertex2d(_L+0.5f, (int)ctry-dgy+0.5f); tnsVertex2d(_L+0.5f, _U+0.5f); tnsVertex2d(ctrx-(int)dgx+0.5f, _U+0.5f); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | +            tnsVertex2d(_R-0.5f, (int)ctry-dgy+0.5f); tnsVertex2d(_R-0.5f, _U+0.5f); tnsVertex2d(ctrx+(int)dgx-0.5f, _U+0.5f); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | +            tnsVertex2d(_R-0.5f, (int)ctry+dgy-0.5f); tnsVertex2d(_R-0.5f, _B-0.5f); tnsVertex2d(ctrx+(int)dgx-0.5f, _B-0.5f); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | +            tnsVertex2d(_L+0.5f, (int)ctry+dgy-0.5f); tnsVertex2d(_L+0.5f, _B-0.5f); tnsVertex2d(ctrx-(int)dgx+0.5f, _B-0.5f); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  |                  
 | 
	
		
			
				|  |  |              real verts[52];//24*2+ctr+overlap
 | 
	
		
			
				|  |  |              tnsMakeCircle2d(&verts[2],24,ctrx,ctry,radius,0);
 | 
	
	
		
			
				|  | @@ -778,14 +717,17 @@ void la_IntDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |              if(Ranged){
 | 
	
		
			
				|  |  |                  real arc[52];  int arcindex[26]; // 12 slices 13 ends
 | 
	
		
			
				|  |  |                  real range = (real)(Data[i] - min) / (real)(max - min) * TNS_PI * 1.5;
 | 
	
		
			
				|  |  | +                real radius2=radius-0.2*LA_RH; if(radius2<LA_RH*0.1){ radius2=LA_RH*0.1; }
 | 
	
		
			
				|  |  |                  tnsMakeArc2d(arc,12,ctrx,ctry,radius,TNS_PI*2.75, TNS_PI*2.75 + range);
 | 
	
		
			
				|  |  | -                tnsMakeArc2d(&arc[26],12,ctrx,ctry,radius*0.6,TNS_PI*2.75, TNS_PI*2.75 + range);
 | 
	
		
			
				|  |  | +                tnsMakeArc2d(&arc[26],12,ctrx,ctry,radius2,TNS_PI*2.75, TNS_PI*2.75 + range);
 | 
	
		
			
				|  |  |                  tnsMakeBridgedIndex(arcindex, 13, 0, 0);
 | 
	
		
			
				|  |  |                  real *color = laThemeColor(bt,LA_BT_TEXT|ui->State); //tnsColor4d(LA_COLOR3(color),0.3);
 | 
	
		
			
				|  |  |                  tnsColor4dv(color);
 | 
	
		
			
				|  |  |                  tnsVertexArray2d(arc,26); tnsIndexArray(arcindex,26); tnsPackAs(GL_TRIANGLE_STRIP);
 | 
	
		
			
				|  |  | -                tnsMakeArc2d(&arc[2],12,ctrx,ctry,radius*0.6,TNS_PI*2.75, TNS_PI*4.25);
 | 
	
		
			
				|  |  | -                tnsVertexArray2d(&arc[2],13);
 | 
	
		
			
				|  |  | +                tnsMakeArc2d(&arc[2],12,ctrx,ctry,radius2,TNS_PI*2.75, TNS_PI*4.25);
 | 
	
		
			
				|  |  | +                arc[0]=ctrx+cos(TNS_PI*2.75)*radius; arc[1]=ctry+sin(TNS_PI*2.75)*radius;
 | 
	
		
			
				|  |  | +                arc[28]=ctrx+cos(TNS_PI*0.25)*radius; arc[29]=ctry+sin(TNS_PI*0.25)*radius;
 | 
	
		
			
				|  |  | +                tnsVertexArray2d(arc,15);
 | 
	
		
			
				|  |  |                  tnsColor4dv(laThemeColor(bt,LA_BT_BORDER));
 | 
	
		
			
				|  |  |                  tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -807,15 +749,19 @@ void la_IntDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  la_DrawBoxAutoBorderArray(_L,_R,_U,_B,bt,ui->State,IsVertical,i==0);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            int TL, TR, TU;
 | 
	
		
			
				|  |  | +            if(!SliderVertical){ TL=_L+LA_M; TR=_R-LA_M; TU=_U; }
 | 
	
		
			
				|  |  | +            else{ TL=_L; TR=TL+(_B-_U)-LA_M*2; TU=_B-LA_M-LA_RH; }
 | 
	
		
			
				|  |  | +            TL-=sw; TR-=sw; TU-=sw;
 | 
	
		
			
				|  |  |              if (ui->Extra->On == i + 1 && ui->Extra->Edit){
 | 
	
		
			
				|  |  |                  uint32_t *buf = strGetCursorLine(ui->Extra->Edit, 0)->Buf;
 | 
	
		
			
				|  |  |                  int LL = _L + (Seg - tnsStringGetWidthU(buf, 0, ui->Flags&LA_TEXT_MONO)) / 2;
 | 
	
		
			
				|  |  |                  tnsColor4dv(laThemeColor(bt, LA_BT_TEXT));
 | 
	
		
			
				|  |  | -                la_SingleLineStringDrawSelection(ui, _L-sw, _U-sw, bt, buf, ui->Extra->Edit);
 | 
	
		
			
				|  |  | +                la_SingleLineStringDrawSelection(ui, TL,TU, bt, buf, ui->Extra->Edit);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                tnsDrawStringM(0, buf, laThemeColor(bt, LA_BT_TEXT_ACTIVE), _L+LA_M-sw, _R-LA_M-sw, _U-sw, ui->Flags|sf);
 | 
	
		
			
				|  |  | +                tnsDrawStringM(0, buf, laThemeColor(bt, LA_BT_TEXT_ACTIVE), TL,TR,TU, ui->Flags|sf);
 | 
	
		
			
				|  |  |              }else{
 | 
	
		
			
				|  |  | -                tnsDrawStringWithPriority(NoLabel?0:buf2, buf, la_UiTextColor(bt,ui), 0, _L+LA_M-sw, _R-LA_M-sw, _U-sw, ui->Flags|sf);//, ui->ExtraInstructions);
 | 
	
		
			
				|  |  | +                tnsDrawStringWithPriority(NoLabel?0:buf2, buf, la_UiTextColor(bt,ui), 0, TL,TR,TU, ui->Flags|sf);//, ui->ExtraInstructions);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -840,8 +786,8 @@ void la_FloatDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |      int IsRad=ui->PP.LastPs->p->IsRadAngle;
 | 
	
		
			
				|  |  |      int NoLabel=ui->Flags&LA_UI_FLAGS_NO_LABEL;
 | 
	
		
			
				|  |  |      int IsKnob = ui->Flags&LA_UI_FLAGS_NODE_CONTAINER;
 | 
	
		
			
				|  |  | -    int SliderVertical = ui->Flags&LA_UI_FLAGS_VALUE_METER;
 | 
	
		
			
				|  |  | -    int sf=bt->TextShadow?LA_TEXT_SHADOW:0;
 | 
	
		
			
				|  |  | +    int SliderVertical = ui->Flags&LA_UI_FLAGS_VERTICAL_SLIDER;
 | 
	
		
			
				|  |  | +    uint64_t sf=(SliderVertical?LA_TEXT_ROTATE_N:0) | ( bt->TextShadow?LA_TEXT_SHADOW:0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (laIsPropertyReadOnly(&ui->PP) && !NoDecal) ui->State = LA_BT_DISABLED;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -882,10 +828,10 @@ void la_FloatDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |              if(radius*2>(_R-_L)-LA_RH/5){ dgy = radius/1.5; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              tnsColor4dv(laThemeColor(bt,LA_BT_BORDER));
 | 
	
		
			
				|  |  | -            tnsVertex2d(_L, ctry-dgy); tnsVertex2d(_L, _U); tnsVertex2d(ctrx-dgx, _U); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | -            tnsVertex2d(_R, ctry-dgy); tnsVertex2d(_R, _U); tnsVertex2d(ctrx+dgx, _U); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | -            tnsVertex2d(_R, ctry+dgy); tnsVertex2d(_R, _B); tnsVertex2d(ctrx+dgx, _B); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | -            tnsVertex2d(_L, ctry+dgy); tnsVertex2d(_L, _B); tnsVertex2d(ctrx-dgx, _B); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | +            tnsVertex2d(_L+0.5f, (int)ctry-dgy+0.5f); tnsVertex2d(_L+0.5f, _U+0.5f); tnsVertex2d(ctrx-(int)dgx+0.5f, _U+0.5f); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | +            tnsVertex2d(_R-0.5f, (int)ctry-dgy+0.5f); tnsVertex2d(_R-0.5f, _U+0.5f); tnsVertex2d(ctrx+(int)dgx-0.5f, _U+0.5f); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | +            tnsVertex2d(_R-0.5f, (int)ctry+dgy-0.5f); tnsVertex2d(_R-0.5f, _B-0.5f); tnsVertex2d(ctrx+(int)dgx-0.5f, _B-0.5f); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  | +            tnsVertex2d(_L+0.5f, (int)ctry+dgy-0.5f); tnsVertex2d(_L+0.5f, _B-0.5f); tnsVertex2d(ctrx-(int)dgx+0.5f, _B-0.5f); tnsPackAs(GL_LINE_STRIP);
 | 
	
		
			
				|  |  |              
 | 
	
		
			
				|  |  |              real verts[52];//24*2+ctr+overlap
 | 
	
		
			
				|  |  |              tnsMakeCircle2d(&verts[2],24,ctrx,ctry,radius,0);
 | 
	
	
		
			
				|  | @@ -899,17 +845,18 @@ void la_FloatDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |              if(Ranged){
 | 
	
		
			
				|  |  |                  real arc[52];  int arcindex[26]; // 12 slices 13 ends
 | 
	
		
			
				|  |  |                  real range,rstart;
 | 
	
		
			
				|  |  | +                real radius2=radius-0.2*LA_RH; if(radius2<LA_RH*0.1){ radius2=LA_RH*0.1; }
 | 
	
		
			
				|  |  |                  if(min<0&&max>0){ rstart=TNS_PI*3.5; range = (real)(Data[i]) / (real)(max) * TNS_PI * 1.5 * max/(max-min);}
 | 
	
		
			
				|  |  |                  else{ rstart=TNS_PI*2.75; range = (real)(Data[i] - min) / (real)(max - min) * TNS_PI * 1.5; }
 | 
	
		
			
				|  |  |                  tnsMakeArc2d(arc,12,ctrx,ctry,radius,rstart, rstart + range);
 | 
	
		
			
				|  |  | -                tnsMakeArc2d(&arc[26],12,ctrx,ctry,radius*0.6,rstart, rstart + range);
 | 
	
		
			
				|  |  | +                tnsMakeArc2d(&arc[26],12,ctrx,ctry,radius2,rstart, rstart + range);
 | 
	
		
			
				|  |  |                  tnsMakeBridgedIndex(arcindex, 13, 0, 0);
 | 
	
		
			
				|  |  |                  real *color = laThemeColor(bt,LA_BT_TEXT|ui->State); //tnsColor4d(LA_COLOR3(color),0.3);
 | 
	
		
			
				|  |  |                  tnsColor4dv(color);
 | 
	
		
			
				|  |  |                  tnsVertexArray2d(arc,26); tnsIndexArray(arcindex,26); tnsPackAs(GL_TRIANGLE_STRIP);
 | 
	
		
			
				|  |  | -                tnsMakeArc2d(&arc[2],12,ctrx,ctry,radius*0.6,TNS_PI*2.75, TNS_PI*4.25);
 | 
	
		
			
				|  |  | -                arc[0] = ctrx + cos(TNS_PI*2.75) * radius; arc[1] = ctry + sin(TNS_PI*2.75) * radius;
 | 
	
		
			
				|  |  | -                arc[28] =ctrx + cos(TNS_PI*4.25) * radius; arc[29] =ctry + sin(TNS_PI*4.25) * radius;
 | 
	
		
			
				|  |  | +                tnsMakeArc2d(&arc[2],12,ctrx,ctry,radius2,TNS_PI*2.75, TNS_PI*4.25);
 | 
	
		
			
				|  |  | +                arc[0]=ctrx+cos(TNS_PI*2.75)*radius; arc[1]=ctry+sin(TNS_PI*2.75)*radius;
 | 
	
		
			
				|  |  | +                arc[28]=ctrx+cos(TNS_PI*0.25)*radius; arc[29]=ctry+sin(TNS_PI*0.25)*radius;
 | 
	
		
			
				|  |  |                  tnsVertexArray2d(arc,15);
 | 
	
		
			
				|  |  |                  tnsColor4dv(laThemeColor(bt,LA_BT_BORDER));
 | 
	
		
			
				|  |  |                  tnsPackAs(GL_LINE_STRIP);
 | 
	
	
		
			
				|  | @@ -933,15 +880,19 @@ void la_FloatDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  la_DrawBoxAutoBorderArray(_L,_R,_U,_B,bt,ui->State,IsVertical,i==0);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            int TL, TR, TU;
 | 
	
		
			
				|  |  | +            if(!SliderVertical){ TL=_L+LA_M; TR=_R-LA_M; TU=_U; }
 | 
	
		
			
				|  |  | +            else{ TL=_L; TR=TL+(_B-_U)-LA_M*2; TU=_B-LA_M-LA_RH; }
 | 
	
		
			
				|  |  | +            TL-=sw; TR-=sw; TU-=sw;
 | 
	
		
			
				|  |  |              if (ui->Extra->On == i + 1 && ui->Extra->Edit){
 | 
	
		
			
				|  |  |                  uint32_t *buf = strGetCursorLine(ui->Extra->Edit,0)->Buf;
 | 
	
		
			
				|  |  |                  int LL = _L + (Seg - tnsStringGetWidthU(buf, 0, ui->Flags&LA_TEXT_MONO)) / 2;
 | 
	
		
			
				|  |  |                  tnsColor4dv(laThemeColor(bt, LA_BT_TEXT));
 | 
	
		
			
				|  |  | -                la_SingleLineStringDrawSelection(ui, _L-sw, _U-sw, bt, buf, ui->Extra->Edit);
 | 
	
		
			
				|  |  | +                la_SingleLineStringDrawSelection(ui, TL,TU, bt, buf, ui->Extra->Edit);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                tnsDrawStringM(0, buf, laThemeColor(bt, LA_BT_TEXT_ACTIVE), _L + LA_M, _R - LA_M, _U, ui->Flags|sf);
 | 
	
		
			
				|  |  | +                tnsDrawStringM(0, buf, laThemeColor(bt, LA_BT_TEXT_ACTIVE), TL,TR,TU, ui->Flags|sf);
 | 
	
		
			
				|  |  |              }else{
 | 
	
		
			
				|  |  | -                tnsDrawStringWithPriority(NoLabel?0:buf2, buf,la_UiTextColor(bt,ui), 0, _L+LA_M-sw, _R-LA_M-sw, _U-sw, ui->Flags|sf);//, ui->ExtraInstructions);
 | 
	
		
			
				|  |  | +                tnsDrawStringWithPriority(NoLabel?0:buf2, buf,la_UiTextColor(bt,ui), 0, TL,TR,TU, ui->Flags|sf);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (ui->Extra && ui->Extra->On == i + 1) ui->State = Original;
 | 
	
	
		
			
				|  | @@ -1221,7 +1172,7 @@ void la_MultiStringDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (ui->State!=LA_UI_ACTIVE){
 | 
	
		
			
				|  |  |          strSetEditViewRange(ui->Extra->Edit,
 | 
	
		
			
				|  |  | -            ui->Extra->HeightCoeff>0?ui->Extra->HeightCoeff:((ui->B-ui->U)/LA_RH),(ui->R-ui->L-NumberWidth-LA_M*2-LA_M)/MonoWidth);
 | 
	
		
			
				|  |  | +            ui->Extent>0?ui->Extent:((ui->B-ui->U)/LA_RH),(ui->R-ui->L-NumberWidth-LA_M*2-LA_M)/MonoWidth);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      int sw=0;
 | 
	
	
		
			
				|  | @@ -1286,7 +1237,7 @@ void la_MultiStringDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |          tnsFlush();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if(ui->Extra->HeightCoeff>=0)
 | 
	
		
			
				|  |  | +    if(ui->Extent>=0)
 | 
	
		
			
				|  |  |          tnsDrawStringAuto("◿",laThemeColor(bt,LA_BT_BORDER),ui->R-LA_RH-sw, ui->R-sw, ui->B-LA_M-LA_RH-sw, LA_TEXT_ALIGN_CENTER|sf);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if(!NoDecal){
 | 
	
	
		
			
				|  | @@ -1437,7 +1388,7 @@ void la_ColorCircleDrawHCY(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |      tnsPackAs(GL_LINE_LOOP);
 | 
	
		
			
				|  |  |      tnsLineWidth(1);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if(ui->Extra->HeightCoeff>=0) tnsDrawStringAuto("◿",laThemeColor(bt,LA_BT_BORDER),ui->R-LA_RH, ui->R, ui->B-LA_M-LA_RH, LA_TEXT_ALIGN_CENTER);
 | 
	
		
			
				|  |  | +    if(ui->Extent>=0) tnsDrawStringAuto("◿",laThemeColor(bt,LA_BT_BORDER),ui->R-LA_RH, ui->R, ui->B-LA_M-LA_RH, LA_TEXT_ALIGN_CENTER);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if(IsClay) tnsDrawStringAuto("Clay",laThemeColor(bt,LA_BT_TEXT),ui->L, c-r+LA_RH, ui->U+LA_M, LA_TEXT_ALIGN_RIGHT|LA_TEXT_MONO);
 | 
	
		
			
				|  |  |      if(IsP3) tnsDrawStringAuto("D65 P3",laThemeColor(bt,LA_BT_TEXT),ui->L, c-r+LA_RH, ui->U+LA_M, LA_TEXT_ALIGN_RIGHT|LA_TEXT_MONO);
 | 
	
	
		
			
				|  | @@ -1617,7 +1568,7 @@ void la_ImageDraw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |      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 UseW=Full?(W):((real)LA_RH*ui->Extent/H*W);
 | 
	
		
			
				|  |  |      real L=(ui->R-ui->L-UseW)/2,U=0,UseH=Full?H:(ui->B-ui->U);
 | 
	
		
			
				|  |  |      if(Full){ U=(ui->B-ui->U-H)/2; }
 | 
	
		
			
				|  |  |      if(ui->Flags&LA_TEXT_ALIGN_CENTER){ L=0; }
 | 
	
	
		
			
				|  | @@ -1768,9 +1719,9 @@ void la_ValueMeterType2Draw(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |          sprintf(limits[0],"%lf",min); sprintf(limits[1],"%lf",max);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    int sl = TNS_MAX2(abs(ui->SymbolID),5);
 | 
	
		
			
				|  |  | +    int sl = TNS_MAX2(abs(ui->Extent),5);
 | 
	
		
			
				|  |  |      int ScaleLen = sl * LA_RH;
 | 
	
		
			
				|  |  | -    real seg = abs(ui->TemplateContext)/100;
 | 
	
		
			
				|  |  | +    real seg = 1;
 | 
	
		
			
				|  |  |      int times=1,times10=0;
 | 
	
		
			
				|  |  |      while((max-min)/seg > ScaleLen/10){
 | 
	
		
			
				|  |  |          seg*=10;
 | 
	
	
		
			
				|  | @@ -2112,8 +2063,7 @@ void la_MultiStringInit(laUiItem *ui){
 | 
	
		
			
				|  |  |      laGeneralUiExtraData *e = ui->Extra;
 | 
	
		
			
				|  |  |      if (!e) e = memAcquireSimple(sizeof(laGeneralUiExtraData));
 | 
	
		
			
				|  |  |      ui->Extra = e;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    e->HeightCoeff = 10;
 | 
	
		
			
				|  |  | +    ui->Extent = 10;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void la_ImageUiInit(laUiItem *ui){
 | 
	
		
			
				|  |  |      tnsImage* im=ui->Extra;
 | 
	
	
		
			
				|  | @@ -2129,7 +2079,7 @@ void la_ImageUiDestroy(laUiItem *ui){
 | 
	
		
			
				|  |  |      //memAssignRef(ui, &ui->Extra, 0);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void la_MeterUiInit(laUiItem *ui){
 | 
	
		
			
				|  |  | -    la_GeneralUiInit(ui); ui->SymbolID = 20; ui->TemplateContext = 1000;
 | 
	
		
			
				|  |  | +    la_GeneralUiInit(ui); ui->Extent = 20;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void la_RegisterUiTypesBasic(){
 | 
	
	
		
			
				|  | @@ -2229,7 +2179,7 @@ void la_RegisterUiTypesBasic(){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      LA_WIDGET_STRING_MULTI->Type=
 | 
	
		
			
				|  |  |      _LA_UI_STRING_MULTI = la_RegisterUiType("LA_string_multiline", LA_PROP_STRING, "LA_string_multi",
 | 
	
		
			
				|  |  | -                        &_LA_THEME_STRING, la_MultiStringDraw, la_MultiStringHeight, la_MultiStringInit, la_GeneralUiDestroy);
 | 
	
		
			
				|  |  | +                        &_LA_THEME_STRING, la_MultiStringDraw, la_VariedGetHeight, la_MultiStringInit, la_GeneralUiDestroy);
 | 
	
		
			
				|  |  |      _LA_UI_STRING_MULTI->GetMinWidth = la_StringPropGetMinWidth;
 | 
	
		
			
				|  |  |      km=&_LA_UI_STRING_MULTI->KeyMapper;
 | 
	
		
			
				|  |  |      laAssignNewKey(km, 0, "LA_edit_string_copy", LA_KM_SEL_UI_EXTRA, LA_KEY_CTRL, LA_KEY_DOWN, 'c', 0);
 | 
	
	
		
			
				|  | @@ -2262,9 +2212,6 @@ void la_RegisterUiTypesBasic(){
 | 
	
		
			
				|  |  |      _LA_UI_CONDITION_END.Theme = &_LA_THEME_BUTTON;
 | 
	
		
			
				|  |  |      la_UDFAppendSharedTypePointer("LA_condition_end", &_LA_UI_CONDITION_END);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    LA_WIDGET_SYMBOL->Type=
 | 
	
		
			
				|  |  | -    _LA_UI_SYMBOL = la_RegisterUiType("LA_symbol_default", 0, 0, &_LA_THEME_BUTTON, la_SymbolDraw, la_SymbolGetHeight, 0, 0);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      LA_WIDGET_NODE_SOCKET->Type=
 | 
	
		
			
				|  |  |      _LA_UI_NODE_SOCKET = la_RegisterUiType("LA_node_socket_default", 0, "LA_node_socket", &_LA_THEME_SOCKET, la_NodeSocketDraw, la_SocketGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 | 
	
		
			
				|  |  |      _LA_UI_NODE_SOCKET->GetMinWidth=la_SocketGetMinWidth;
 | 
	
	
		
			
				|  | @@ -2288,7 +2235,7 @@ void la_RegisterUiTypesBasic(){
 | 
	
		
			
				|  |  |      _LA_UI_SCOPE = la_RegisterUiType("LA_scope_default", 0, "LA_synth_scope", &_LA_THEME_BUTTON, la_ScopeDraw, la_ColorPickerGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      LA_WIDGET_MOUSE_ACTION_REPORTER->Type=
 | 
	
		
			
				|  |  | -    _LA_UI_MOUSE_ACTION_REPORTER = la_RegisterUiType("LA_mouse_action_reporter_default",0,"LA_mouse_action_reporter", &_LA_THEME_STRING,la_MouseActionReporterDraw,la_SymbolGetHeight,0,0);
 | 
	
		
			
				|  |  | +    _LA_UI_MOUSE_ACTION_REPORTER = la_RegisterUiType("LA_mouse_action_reporter_default",0,"LA_mouse_action_reporter", &_LA_THEME_STRING,la_MouseActionReporterDraw,la_VariedGetHeight,0,0);
 | 
	
		
			
				|  |  |      _LA_UI_MOUSE_ACTION_REPORTER->GetMinWidth = la_MouseActionReporterMinWidth;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      _LA_UI_INVISIBLE.Theme=&_LA_THEME_BUTTON;
 | 
	
	
		
			
				|  | @@ -2445,7 +2392,7 @@ int OPMOD_IntArrayHorizon(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |      int IsVertical=(ui->Flags&LA_UI_FLAGS_TRANSPOSE)!=0;
 | 
	
		
			
				|  |  |      int NoEvent = ui->Flags&LA_UI_FLAGS_NO_EVENT;
 | 
	
		
			
				|  |  |      int NoTooltip=ui->Flags&LA_UI_FLAGS_NO_TOOLTIP;
 | 
	
		
			
				|  |  | -    int IsKnob = ui->Flags&LA_UI_FLAGS_NODE_CONTAINER || ui->Flags&LA_UI_FLAGS_VALUE_METER;
 | 
	
		
			
				|  |  | +    int IsKnob = ui->Flags&LA_UI_FLAGS_NODE_CONTAINER || ui->Flags&LA_UI_FLAGS_VERTICAL_SLIDER;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (!laIsInUiItem(ui, a, e->x, e->y) && !ui->Extra->On){
 | 
	
		
			
				|  |  |          ui->State = LA_UI_NORMAL;
 | 
	
	
		
			
				|  | @@ -2573,7 +2520,7 @@ int OPMOD_FloatArrayHorizon(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |      int NoEvent = ui->Flags&LA_UI_FLAGS_NO_EVENT;
 | 
	
		
			
				|  |  |      int IsRad=ui->PP.LastPs->p->IsRadAngle;
 | 
	
		
			
				|  |  |      int NoTooltip=ui->Flags&LA_UI_FLAGS_NO_TOOLTIP;
 | 
	
		
			
				|  |  | -    int IsKnob = ui->Flags&LA_UI_FLAGS_NODE_CONTAINER || ui->Flags&LA_UI_FLAGS_VALUE_METER;
 | 
	
		
			
				|  |  | +    int IsKnob = ui->Flags&LA_UI_FLAGS_NODE_CONTAINER || ui->Flags&LA_UI_FLAGS_VERTICAL_SLIDER;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (!laIsInUiItem(ui, a, e->x, e->y) && !ui->Extra->On && !NoTooltip){
 | 
	
		
			
				|  |  |          ui->State = LA_UI_NORMAL;
 | 
	
	
		
			
				|  | @@ -2752,15 +2699,15 @@ int OPMOD_ColorHCY(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |          return LA_FINISHED_PASS;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if(e->type == LA_L_MOUSE_DOWN && es->HeightCoeff>=0 && e->x>ui->R-LA_M-LA_RH && e->y>ui->B-LA_M-LA_RH){
 | 
	
		
			
				|  |  | -        es->Dragging=3; es->LastX=e->x; es->LastY=e->y; es->TargetIndexVali=es->HeightCoeff; return LA_RUNNING;
 | 
	
		
			
				|  |  | +    if(e->type == LA_L_MOUSE_DOWN && ui->Extent>=0 && e->x>ui->R-LA_M-LA_RH && e->y>ui->B-LA_M-LA_RH){
 | 
	
		
			
				|  |  | +        es->Dragging=3; es->LastX=e->x; es->LastY=e->y; es->TargetIndexVali=ui->Extent; return LA_RUNNING;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      if(es->Dragging==3){
 | 
	
		
			
				|  |  | -        if(e->type==LA_MOUSEMOVE){ es->HeightCoeff=es->TargetIndexVali+((real)e->y-es->LastY+0.5)/LA_RH;
 | 
	
		
			
				|  |  | -            if(es->HeightCoeff<1)es->HeightCoeff=1; laRecalcCurrentPanel();}
 | 
	
		
			
				|  |  | +        if(e->type==LA_MOUSEMOVE){ ui->Extent=es->TargetIndexVali+((real)e->y-es->LastY+0.5)/LA_RH;
 | 
	
		
			
				|  |  | +            if(ui->Extent<1)ui->Extent=1; laRecalcCurrentPanel();}
 | 
	
		
			
				|  |  |          elif(e->type==LA_L_MOUSE_UP){ es->Dragging=0; }
 | 
	
		
			
				|  |  |          elif(e->type==LA_R_MOUSE_DOWN){
 | 
	
		
			
				|  |  | -            es->Dragging=0; es->HeightCoeff=es->TargetIndexVali; laRecalcCurrentPanel(); }
 | 
	
		
			
				|  |  | +            es->Dragging=0; ui->Extent=es->TargetIndexVali; laRecalcCurrentPanel(); }
 | 
	
		
			
				|  |  |          return LA_RUNNING;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3165,7 +3112,7 @@ void la_SetMultistringViewRange(laUiItem* ui, laStringEdit* se, laBoxedTheme* bt
 | 
	
		
			
				|  |  |      int NumberWidth=0; int MonoWidth=tnsGetMonoFontAdvance(); int Count=se->TotalLines;
 | 
	
		
			
				|  |  |      while(Count){ Count/=10; NumberWidth+=MonoWidth; }
 | 
	
		
			
				|  |  |      strSetEditViewRange(ui->Extra->Edit,
 | 
	
		
			
				|  |  | -        ui->Extra->HeightCoeff>0?ui->Extra->HeightCoeff:((ui->B-ui->U)/LA_RH),(ui->R-ui->L-NumberWidth-LA_M*2-LA_M)/MonoWidth);
 | 
	
		
			
				|  |  | +        ui->Extent>0?ui->Extent:((ui->B-ui->U)/LA_RH),(ui->R-ui->L-NumberWidth-LA_M*2-LA_M)/MonoWidth);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int OPMOD_MultiString(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |      laUiItem *ui = a->Instance;
 | 
	
	
		
			
				|  | @@ -3203,23 +3150,23 @@ int OPMOD_MultiString(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |                  laRecordAndPushProp(&ui->PP,0); laMarkPropChanged(&ui->PP);
 | 
	
		
			
				|  |  |                  ui->State = LA_UI_NORMAL; laRedrawCurrentPanel(); la_SetMultistringViewRange(ui,es->Edit,bt); la_DisplayKeyboard(0);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            if(es->Dragging){ es->Dragging=0; es->HeightCoeff=es->TargetIndexVali; laRecalcCurrentPanel();la_SetMultistringViewRange(ui,es->Edit,bt); }
 | 
	
		
			
				|  |  | +            if(es->Dragging){ es->Dragging=0; ui->Extent=es->TargetIndexVali; laRecalcCurrentPanel();la_SetMultistringViewRange(ui,es->Edit,bt); }
 | 
	
		
			
				|  |  |              return LA_FINISHED;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if(laKeyMapExecuteEventEx(a, &ui->ExtraPP, &ui->Type->KeyMapper, e)) return LA_RUNNING;
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -    if(e->type == LA_L_MOUSE_DOWN && es->HeightCoeff>=0 && e->x>ui->R-LA_M-LA_RH && e->y>ui->B-LA_M-LA_RH){
 | 
	
		
			
				|  |  | -        es->Dragging=1; es->LastX=e->x; es->LastY=e->y; es->TargetIndexVali=es->HeightCoeff;
 | 
	
		
			
				|  |  | +    if(e->type == LA_L_MOUSE_DOWN && ui->Extent>=0 && e->x>ui->R-LA_M-LA_RH && e->y>ui->B-LA_M-LA_RH){
 | 
	
		
			
				|  |  | +        es->Dragging=1; es->LastX=e->x; es->LastY=e->y; es->TargetIndexVali=ui->Extent;
 | 
	
		
			
				|  |  |          return LA_RUNNING;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      if(es->Dragging){
 | 
	
		
			
				|  |  | -        if(e->type==LA_MOUSEMOVE){ es->HeightCoeff=es->TargetIndexVali+((real)e->y-es->LastY+0.5)/LA_RH;
 | 
	
		
			
				|  |  | -            if(es->HeightCoeff<1)es->HeightCoeff=1; laRecalcCurrentPanel(); la_SetMultistringViewRange(ui,es->Edit,bt);}
 | 
	
		
			
				|  |  | +        if(e->type==LA_MOUSEMOVE){ ui->Extent=es->TargetIndexVali+((real)e->y-es->LastY+0.5)/LA_RH;
 | 
	
		
			
				|  |  | +            if(ui->Extent<1)ui->Extent=1; laRecalcCurrentPanel(); la_SetMultistringViewRange(ui,es->Edit,bt);}
 | 
	
		
			
				|  |  |          elif(e->type==LA_L_MOUSE_UP){ es->Dragging=0; }
 | 
	
		
			
				|  |  |          elif(e->type==LA_R_MOUSE_DOWN){
 | 
	
		
			
				|  |  | -            es->Dragging=0; es->HeightCoeff=es->TargetIndexVali; laRecalcCurrentPanel();la_SetMultistringViewRange(ui,se,bt); }
 | 
	
		
			
				|  |  | +            es->Dragging=0; ui->Extent=es->TargetIndexVali; laRecalcCurrentPanel();la_SetMultistringViewRange(ui,se,bt); }
 | 
	
		
			
				|  |  |          return LA_RUNNING;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      
 | 
	
	
		
			
				|  | @@ -3442,7 +3389,7 @@ int OPMOD_CollectionSelector(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |              int MinWidth;
 | 
	
		
			
				|  |  |              uil = &p->UI;
 | 
	
		
			
				|  |  |              col = laFirstColumn(uil);
 | 
	
		
			
				|  |  | -            laShowItemFull(uil, col, &ui->PP, 0, LA_WIDGET_COLLECTION, 0, ui->Template, 0)->SymbolID = ui->SymbolID;
 | 
	
		
			
				|  |  | +            laShowItemFull(uil, col, &ui->PP, 0, LA_WIDGET_COLLECTION, 0, ui->Template, 0)->Extent = ui->Extent;
 | 
	
		
			
				|  |  |              laEnclosePanelContent(p, &p->UI);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return LA_RUNNING;
 | 
	
	
		
			
				|  | @@ -3581,13 +3528,13 @@ int OPMOD_HeightAdjuster(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |      if ((!uit->Dragging) && (!laIsInUiItem(ui, a, e->x, e->y))){ return LA_FINISHED_PASS; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (e->type == LA_L_MOUSE_DOWN || e->type==LA_R_MOUSE_DOWN){
 | 
	
		
			
				|  |  | -        uit->Dragging=1; uit->LastY=e->y; uit->On=0; uit->TargetIndexVali=e->type==LA_L_MOUSE_DOWN?(ui->State==LA_BT_ACTIVE?2:1):2; uit->HeightCoeff=1;
 | 
	
		
			
				|  |  | +        uit->Dragging=1; uit->LastY=e->y; uit->On=0; uit->TargetIndexVali=e->type==LA_L_MOUSE_DOWN?(ui->State==LA_BT_ACTIVE?2:1):2; ui->Extent=1;
 | 
	
		
			
				|  |  |          return LA_RUNNING;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    if(e->type==LA_L_MOUSE_UP && uit->HeightCoeff){ ui->State=(ui->State==LA_BT_ACTIVE)?LA_BT_NORMAL:LA_BT_ACTIVE; laRedrawCurrentPanel(); }
 | 
	
		
			
				|  |  | +    if(e->type==LA_L_MOUSE_UP && ui->Extent){ ui->State=(ui->State==LA_BT_ACTIVE)?LA_BT_NORMAL:LA_BT_ACTIVE; laRedrawCurrentPanel(); }
 | 
	
		
			
				|  |  |      if (uit->Dragging && e->type == LA_MOUSEMOVE){
 | 
	
		
			
				|  |  |          int diff=e->y-uit->LastY; diff=((real)diff+0.5)/(ui->B-ui->U); int delta=uit->TargetIndexVali;
 | 
	
		
			
				|  |  | -        if(diff!=uit->On){ uit->HeightCoeff=0; int d=diff-uit->On; uit->On=diff; while(d){ laSetInt(&ui->PP, d>0?delta:-delta); d-=(d>0?1:-1); }; laRecalcCurrentPanel(); }
 | 
	
		
			
				|  |  | +        if(diff!=uit->On){ ui->Extent=0; int d=diff-uit->On; uit->On=diff; while(d){ laSetInt(&ui->PP, d>0?delta:-delta); d-=(d>0?1:-1); }; laRecalcCurrentPanel(); }
 | 
	
		
			
				|  |  |          return LA_RUNNING;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      if (uit->Dragging && (e->type == LA_L_MOUSE_UP || e->type == LA_R_MOUSE_UP || e->key == LA_KEY_ESCAPE)){
 |