|  | @@ -36,7 +36,8 @@ laWidget _LA_WIDGET_LABEL={0};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_INT={0};
 |  |  laWidget _LA_WIDGET_INT={0};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_INT_PLAIN={0, LA_UI_FLAGS_PLAIN};
 |  |  laWidget _LA_WIDGET_INT_PLAIN={0, LA_UI_FLAGS_PLAIN};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_INT_PLAIN_ICON={0, LA_UI_FLAGS_INT_ICON};
 |  |  laWidget _LA_WIDGET_INT_PLAIN_ICON={0, LA_UI_FLAGS_INT_ICON};
 | 
											
												
													
														|  | -laWidget _LA_WIDGET_VALUE_METER={0,LA_TEXT_ALIGN_CENTER};
 |  | 
 | 
											
												
													
														|  | 
 |  | +laWidget _LA_WIDGET_METER_TYPE1={0,LA_TEXT_ALIGN_CENTER};
 | 
											
												
													
														|  | 
 |  | +laWidget _LA_WIDGET_METER_TYPE2={0,LA_TEXT_ALIGN_CENTER};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_VALUE_METER_2D={0,LA_TEXT_ALIGN_CENTER};
 |  |  laWidget _LA_WIDGET_VALUE_METER_2D={0,LA_TEXT_ALIGN_CENTER};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_FLOAT={0};
 |  |  laWidget _LA_WIDGET_FLOAT={0};
 | 
											
												
													
														|  |  laWidget _LA_WIDGET_FLOAT_PLAIN={0, LA_UI_FLAGS_PLAIN};
 |  |  laWidget _LA_WIDGET_FLOAT_PLAIN={0, LA_UI_FLAGS_PLAIN};
 | 
											
										
											
												
													
														|  | @@ -79,7 +80,8 @@ laWidget *LA_WIDGET_LABEL=&_LA_WIDGET_LABEL;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_INT=&_LA_WIDGET_INT;
 |  |  laWidget *LA_WIDGET_INT=&_LA_WIDGET_INT;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_INT_PLAIN=&_LA_WIDGET_INT_PLAIN;
 |  |  laWidget *LA_WIDGET_INT_PLAIN=&_LA_WIDGET_INT_PLAIN;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_INT_PLAIN_ICON=&_LA_WIDGET_INT_PLAIN_ICON;
 |  |  laWidget *LA_WIDGET_INT_PLAIN_ICON=&_LA_WIDGET_INT_PLAIN_ICON;
 | 
											
												
													
														|  | -laWidget *LA_WIDGET_VALUE_METER=&_LA_WIDGET_VALUE_METER;
 |  | 
 | 
											
												
													
														|  | 
 |  | +laWidget *LA_WIDGET_METER_TYPE1=&_LA_WIDGET_METER_TYPE1;
 | 
											
												
													
														|  | 
 |  | +laWidget *LA_WIDGET_METER_TYPE2=&_LA_WIDGET_METER_TYPE2;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_VALUE_METER_2D=&_LA_WIDGET_VALUE_METER_2D;
 |  |  laWidget *LA_WIDGET_VALUE_METER_2D=&_LA_WIDGET_VALUE_METER_2D;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_FLOAT=&_LA_WIDGET_FLOAT;
 |  |  laWidget *LA_WIDGET_FLOAT=&_LA_WIDGET_FLOAT;
 | 
											
												
													
														|  |  laWidget *LA_WIDGET_FLOAT_PLAIN=&_LA_WIDGET_FLOAT_PLAIN;
 |  |  laWidget *LA_WIDGET_FLOAT_PLAIN=&_LA_WIDGET_FLOAT_PLAIN;
 | 
											
										
											
												
													
														|  | @@ -1482,7 +1484,7 @@ void la_ImageDraw(laUiItem *ui, int h){
 | 
											
												
													
														|  |      tnsFlush();
 |  |      tnsFlush();
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -void la_ValueMeterDraw(laUiItem *ui, int h){
 |  | 
 | 
											
												
													
														|  | 
 |  | +void la_ValueMeterType1Draw(laUiItem *ui, int h){
 | 
											
												
													
														|  |      laBoxedTheme *bt = (*ui->Type->Theme);
 |  |      laBoxedTheme *bt = (*ui->Type->Theme);
 | 
											
												
													
														|  |      int DataI[8]; real Data[8];
 |  |      int DataI[8]; real Data[8];
 | 
											
												
													
														|  |      int Len, i, W; real Seg;
 |  |      int Len, i, W; real Seg;
 | 
											
										
											
												
													
														|  | @@ -1599,6 +1601,185 @@ void la_ValueMeterDraw(laUiItem *ui, int h){
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      tnsFlush();
 |  |      tnsFlush();
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +void la_ValueMeterType2Draw(laUiItem *ui, int h){
 | 
											
												
													
														|  | 
 |  | +    laBoxedTheme *bt = (*ui->Type->Theme);
 | 
											
												
													
														|  | 
 |  | +    int DataI[8]; real Data[8]; int SDataI[8]; real SData[8]; int Len, i, W; real Seg;
 | 
											
												
													
														|  | 
 |  | +    char buf[48] = {0}; char buf2[48] = {0};char prefix[16][64] = {0};char limits[2][64]={0};
 | 
											
												
													
														|  | 
 |  | +    int Original;
 | 
											
												
													
														|  | 
 |  | +    int Imin=-100, Imax=100; real min=-100, max=100;
 | 
											
												
													
														|  | 
 |  | +    int s, State; int IsVertical=ui->Flags&LA_UI_FLAGS_TRANSPOSE;
 | 
											
												
													
														|  | 
 |  | +    int NoLabel=ui->Flags&LA_UI_FLAGS_NO_LABEL;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    int IsInt=(ui->PP.LastPs->p->PropertyType&LA_PROP_INT)?1:0;
 | 
											
												
													
														|  | 
 |  | +    Len = laGetArrayLength(&ui->PP);
 | 
											
												
													
														|  | 
 |  | +    laGetPrefixP(&ui->PP, prefix);
 | 
											
												
													
														|  | 
 |  | +    if(IsInt){
 | 
											
												
													
														|  | 
 |  | +        laGetIntArray(&ui->PP, DataI); for(int i=0;i<Len;i++){ Data[i]=DataI[i]; }
 | 
											
												
													
														|  | 
 |  | +        laGetIntRange(&ui->PP, &Imin, &Imax); min=Imin; max=Imax;
 | 
											
												
													
														|  | 
 |  | +        sprintf(limits[0],"%d",Imin); sprintf(limits[1],"%d",Imax);
 | 
											
												
													
														|  | 
 |  | +    }else{
 | 
											
												
													
														|  | 
 |  | +        laGetFloatArray(&ui->PP, Data);
 | 
											
												
													
														|  | 
 |  | +        laGetFloatRange(&ui->PP,&min,&max);
 | 
											
												
													
														|  | 
 |  | +        sprintf(limits[0],"%lf",min); sprintf(limits[1],"%lf",max);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    int sl = TNS_MAX2(abs(ui->SymbolID),5);
 | 
											
												
													
														|  | 
 |  | +    int ScaleLen = sl * LA_RH;
 | 
											
												
													
														|  | 
 |  | +    real seg = abs(ui->TemplateContext)/100;
 | 
											
												
													
														|  | 
 |  | +    int times=1,times10=0;
 | 
											
												
													
														|  | 
 |  | +    while((max-min)/seg > ScaleLen/10){
 | 
											
												
													
														|  | 
 |  | +        seg*=10;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +    if(seg>100){ int sseg=seg; while(sseg>=100){ sseg/=10; times*=10; times10++; } }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    for (i = 0; i < Len; i++){
 | 
											
												
													
														|  | 
 |  | +        int _L=ui->L, _R=ui->R, _U=ui->U, _B=ui->B;
 | 
											
												
													
														|  | 
 |  | +        if(IsVertical){
 | 
											
												
													
														|  | 
 |  | +            Seg = (real)(ui->R-ui->L)/Len;
 | 
											
												
													
														|  | 
 |  | +            _L = ui->L + i * Seg; _R=ui->L + (i+1) * Seg;
 | 
											
												
													
														|  | 
 |  | +        }else{
 | 
											
												
													
														|  | 
 |  | +            Seg = (real)(ui->B-ui->U)/Len;
 | 
											
												
													
														|  | 
 |  | +            _U = ui->U + i * Seg; _B=_U+Seg;
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        real cx=(_L+_R)/2,cy=(_U+_B)/2,cw=(_R-_L),ch=(_B-_U);
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        tnsPushStringClip(_L,_R,_U,_B);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        tnsUseNoTexture();
 | 
											
												
													
														|  | 
 |  | +        tnsColor4dv(laThemeColor(bt,ui->State));
 | 
											
												
													
														|  | 
 |  | +        tnsVertex2d(_L, _U); tnsVertex2d(_R, _U);
 | 
											
												
													
														|  | 
 |  | +        tnsVertex2d(_R, _B); tnsVertex2d(_L, _B);
 | 
											
												
													
														|  | 
 |  | +        tnsPackAs(GL_TRIANGLE_FAN);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        int oflow=0,ofhigh=0;
 | 
											
												
													
														|  | 
 |  | +        if(Data[i]<min){ oflow=1; Data[i]=min; }
 | 
											
												
													
														|  | 
 |  | +        if(Data[i]>max){ ofhigh=1; Data[i]=max; }
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        real fac = (real)(Data[i]-min) / (real)(max - min);
 | 
											
												
													
														|  | 
 |  | +        int SL,SR,SU,SB,_SL,_SR,_SU,_SB,Move = fac*ScaleLen;
 | 
											
												
													
														|  | 
 |  | +        if(IsVertical){ SL=_L; SR=_R; SB=_SB=cy+Move; SU=_SU=SB-ScaleLen; TNS_CLAMP(SB,_U,_B); TNS_CLAMP(SU,_U,_B); }
 | 
											
												
													
														|  | 
 |  | +        else{ SL=_SL=cx-Move; SR=_SR=SL+ScaleLen; SB=_B; SU=_U; TNS_CLAMP(SL,_L,_R); TNS_CLAMP(SR,_L,_R); }
 | 
											
												
													
														|  | 
 |  | +        tnsUseNoTexture(); real* color=laThemeColor(bt,LA_BT_TEXT);
 | 
											
												
													
														|  | 
 |  | +        tnsColor4d(LA_COLOR3(color),0.3);
 | 
											
												
													
														|  | 
 |  | +        tnsVertex2d(SL, SU); tnsVertex2d(SR, SU);
 | 
											
												
													
														|  | 
 |  | +        tnsVertex2d(SR, SB); tnsVertex2d(SL, SB);
 | 
											
												
													
														|  | 
 |  | +        tnsPackAs(GL_TRIANGLE_FAN);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        tnsColor4d(LA_COLOR3(color),0.7);
 | 
											
												
													
														|  | 
 |  | +        int scalelow=min/seg-1, scalehigh=max/seg+1;
 | 
											
												
													
														|  | 
 |  | +        for(int si=scalelow;si<=scalehigh;si++){
 | 
											
												
													
														|  | 
 |  | +            for(int ssi=0;ssi<10;ssi++){
 | 
											
												
													
														|  | 
 |  | +                real val=si*seg + ssi*0.1*seg; if(val<min) continue; if(val>max) break;
 | 
											
												
													
														|  | 
 |  | +                real sfac = (real)(val-min) / (max - min); int smove=Move-sfac*ScaleLen;
 | 
											
												
													
														|  | 
 |  | +                real lfac = ssi==0?(si==ssi?0.5:0.3):(ssi==5?0.2:0.1);
 | 
											
												
													
														|  | 
 |  | +                if(IsVertical){ int scaleb=cy+smove; if(scaleb>_B || scaleb<_U) continue;
 | 
											
												
													
														|  | 
 |  | +                    tnsVertex2d(cx-cw*lfac,scaleb); tnsVertex2d(cx+cw*lfac,scaleb);
 | 
											
												
													
														|  | 
 |  | +                }else{ int scalel=cx-smove; if(scalel<_L || scalel>_R) continue;
 | 
											
												
													
														|  | 
 |  | +                    tnsVertex2d(scalel,cy+ch*lfac); tnsVertex2d(scalel,cy-ch*lfac);
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        tnsPackAs(GL_LINES);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        if(!NoLabel){
 | 
											
												
													
														|  | 
 |  | +            for(int si=scalelow;si<=scalehigh;si++){
 | 
											
												
													
														|  | 
 |  | +                real val=si*seg; if(val<min) continue; if(val>max) break;
 | 
											
												
													
														|  | 
 |  | +                real sfac = (real)(val-min) / (max - min); int smove=Move-sfac*ScaleLen;
 | 
											
												
													
														|  | 
 |  | +                    if(IsInt) sprintf(buf,"%.0lf",val/times); else sprintf(buf,"%.2lf",val/times);
 | 
											
												
													
														|  | 
 |  | +                if(IsVertical){ int scaleb=cy+smove; if(scaleb>_B+LA_RH2 || scaleb<_U-LA_RH2) continue;
 | 
											
												
													
														|  | 
 |  | +                    tnsDrawStringAuto(buf,laThemeColor(bt,LA_BT_TEXT),_L+bt->LM,_R-bt->RM,scaleb-LA_RH2,ui->Flags);
 | 
											
												
													
														|  | 
 |  | +                }else{ int scalel=cx-smove; if(scalel<_L-100 || scalel>_R+100) continue;
 | 
											
												
													
														|  | 
 |  | +                    tnsDrawStringAuto(buf,laThemeColor(bt,LA_BT_TEXT),scalel-100,scalel+100,_U,ui->Flags);
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +            if(IsVertical){
 | 
											
												
													
														|  | 
 |  | +                tnsDrawStringAuto(limits[0],laThemeColor(bt,LA_BT_TEXT|ui->State),_L+bt->LM,_R-bt->RM,_SB,ui->Flags);
 | 
											
												
													
														|  | 
 |  | +                tnsDrawStringAuto(limits[1],laThemeColor(bt,LA_BT_TEXT|ui->State),_L+bt->LM,_R-bt->RM,_SU-LA_RH,ui->Flags);
 | 
											
												
													
														|  | 
 |  | +            }else{
 | 
											
												
													
														|  | 
 |  | +                tnsDrawStringAuto(limits[0],laThemeColor(bt,LA_BT_TEXT|ui->State),_SL-100,_SL-bt->LM,_B-LA_RH,LA_TEXT_ALIGN_RIGHT);
 | 
											
												
													
														|  | 
 |  | +                tnsDrawStringAuto(limits[1],laThemeColor(bt,LA_BT_TEXT|ui->State),_SR+bt->RM,_SR+100,_B-LA_RH,LA_TEXT_ALIGN_LEFT);
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        tnsUseNoTexture();
 | 
											
												
													
														|  | 
 |  | +        tnsColor4dv(laAccentColor(LA_BT_BORDER));
 | 
											
												
													
														|  | 
 |  | +        if(IsVertical){tnsVertex2d(_L,cy); tnsVertex2d(_R,cy);}
 | 
											
												
													
														|  | 
 |  | +        else{tnsVertex2d(cx,_U); tnsVertex2d(cx,_B);}
 | 
											
												
													
														|  | 
 |  | +        tnsPackAs(GL_LINES);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        if(times!=1){ sprintf(buf,"%d",times10);
 | 
											
												
													
														|  | 
 |  | +            if(IsVertical && cw>LA_RH) tnsDrawStringAuto(buf,laAccentColor(LA_BT_BORDER),_L+bt->LM,_R-bt->RM,cy,LA_TEXT_MONO|LA_TEXT_ALIGN_RIGHT);
 | 
											
												
													
														|  | 
 |  | +            elif(ch>LA_RH) tnsDrawStringAuto(buf,laAccentColor(LA_BT_BORDER),cx+bt->LM,cx+100,_U,LA_TEXT_MONO|LA_TEXT_ALIGN_LEFT);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        tnsUseNoTexture();
 | 
											
												
													
														|  | 
 |  | +        tnsColor4dv(laThemeColor(bt,LA_BT_BORDER));
 | 
											
												
													
														|  | 
 |  | +        tnsVertex2d(_L, _U); tnsVertex2d(_R, _U);
 | 
											
												
													
														|  | 
 |  | +        tnsVertex2d(_R, _B); tnsVertex2d(_L, _B);
 | 
											
												
													
														|  | 
 |  | +        tnsPackAs(GL_LINE_LOOP);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        //if(IsVertical){
 | 
											
												
													
														|  | 
 |  | +        //    if(oflow){ tnsDrawStringAuto("⯆",laThemeColor(bt, LA_BT_TEXT), _L+bt->LM,_R-bt->RM, _U, LA_TEXT_ALIGN_CENTER); }
 | 
											
												
													
														|  | 
 |  | +        //    elif(ofhigh){ tnsDrawStringAuto("⯅",laThemeColor(bt, LA_BT_TEXT), _L+bt->LM,_R-bt->RM, _B-LA_RH, LA_TEXT_ALIGN_CENTER); }
 | 
											
												
													
														|  | 
 |  | +        //}else{
 | 
											
												
													
														|  | 
 |  | +        //    if(oflow){ tnsDrawStringAuto("⯇",laThemeColor(bt, LA_BT_TEXT), _L+bt->LM,_R-bt->RM, _U, LA_TEXT_ALIGN_LEFT); }
 | 
											
												
													
														|  | 
 |  | +        //    elif(ofhigh){ tnsDrawStringAuto("⯈",laThemeColor(bt, LA_BT_TEXT), _L+bt->LM,_R-bt->RM, _U, LA_TEXT_ALIGN_RIGHT); }
 | 
											
												
													
														|  | 
 |  | +        //}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        tnsPopStringClip();
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    int trisize=LA_RH/3.0f;
 | 
											
												
													
														|  | 
 |  | +    for(laCompoundPP* CPP=ui->CompoundPPs.pFirst;CPP;CPP=CPP->Item.pNext){
 | 
											
												
													
														|  | 
 |  | +        IsInt=(CPP->PP.LastPs->p->PropertyType&LA_PROP_INT)?1:0;
 | 
											
												
													
														|  | 
 |  | +        Len = laGetArrayLength(&CPP->PP);
 | 
											
												
													
														|  | 
 |  | +        laGetPrefixP(&CPP->PP, prefix);
 | 
											
												
													
														|  | 
 |  | +        if(IsInt){
 | 
											
												
													
														|  | 
 |  | +            laGetIntArray(&CPP->PP, SDataI); for(int i=0;i<Len;i++){ SData[i]=SDataI[i]; }
 | 
											
												
													
														|  | 
 |  | +            //laGetIntRange(&CPP->PP, &Imin, &Imax); min=Imin; max=Imax;
 | 
											
												
													
														|  | 
 |  | +        }else{
 | 
											
												
													
														|  | 
 |  | +            laGetFloatArray(&CPP->PP, SData);
 | 
											
												
													
														|  | 
 |  | +            //laGetFloatRange(&CPP->PP,&min,&max);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        if(CPP->Slot <= LA_SLOT_MARKER_4){
 | 
											
												
													
														|  | 
 |  | +            for (i = 0; i < Len; i++){
 | 
											
												
													
														|  | 
 |  | +                int _L=ui->L, _R=ui->R, _U=ui->U, _B=ui->B;
 | 
											
												
													
														|  | 
 |  | +                if(IsVertical){
 | 
											
												
													
														|  | 
 |  | +                    Seg = (real)(ui->R-ui->L)/Len;
 | 
											
												
													
														|  | 
 |  | +                    _L = ui->L + i * Seg; _R=ui->L + (i+1) * Seg;
 | 
											
												
													
														|  | 
 |  | +                }else{
 | 
											
												
													
														|  | 
 |  | +                    Seg = (real)(ui->B-ui->U)/Len;
 | 
											
												
													
														|  | 
 |  | +                    _U = ui->U + i * Seg; _B=_U+Seg;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                real cx=(_L+_R)/2,cy=(_U+_B)/2,cw=(_R-_L),ch=(_B-_U);
 | 
											
												
													
														|  | 
 |  | +                real sfac = (real)(SData[i]-min) / (real)(max - min);
 | 
											
												
													
														|  | 
 |  | +                real fac = (real)(Data[i]-min) / (real)(max - min);
 | 
											
												
													
														|  | 
 |  | +                int SL,SR,SU,SB,_SL,_SR,_SU,_SB, Move = fac*ScaleLen,SMove=sfac*ScaleLen;
 | 
											
												
													
														|  | 
 |  | +                if(IsVertical){ _SB=SB=cy+Move-SMove; TNS_CLAMP(SB,_U,_B); }
 | 
											
												
													
														|  | 
 |  | +                else{ SL=_SL=cx-Move+SMove; TNS_CLAMP(SL,_L,_R); }
 | 
											
												
													
														|  | 
 |  | +                
 | 
											
												
													
														|  | 
 |  | +                tnsUseNoTexture();
 | 
											
												
													
														|  | 
 |  | +                tnsColor4dv(laThemeColor(bt,LA_BT_TEXT|LA_BT_ACTIVE));
 | 
											
												
													
														|  | 
 |  | +                if(IsVertical){ tnsVertex2d(_L, SB); tnsVertex2d(_R, SB); }
 | 
											
												
													
														|  | 
 |  | +                else{ tnsVertex2d(SL, _U); tnsVertex2d(SL, _B); }
 | 
											
												
													
														|  | 
 |  | +                tnsPackAs(GL_LINES);
 | 
											
												
													
														|  | 
 |  | +                if(IsVertical){
 | 
											
												
													
														|  | 
 |  | +                    if(! CPP->Slot % 2){ tnsVertex2d(_L, SB); tnsVertex2d(_L+trisize, SB); tnsVertex2d(_L, SB-trisize); }
 | 
											
												
													
														|  | 
 |  | +                    else{ tnsVertex2d(_R, SB+trisize); tnsVertex2d(_R-trisize, SB); tnsVertex2d(_R, SB); }
 | 
											
												
													
														|  | 
 |  | +                    if(SB==_SB){ tnsPackAs(GL_TRIANGLES); }else{ tnsPackAs(GL_LINE_LOOP); }
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +                else{
 | 
											
												
													
														|  | 
 |  | +                    if(! CPP->Slot % 2){ tnsVertex2d(SL, _B); tnsVertex2d(SL, _B-trisize); tnsVertex2d(SL+trisize, _B); }
 | 
											
												
													
														|  | 
 |  | +                    else{ tnsVertex2d(SL-trisize, _U); tnsVertex2d(SL, _U+trisize); tnsVertex2d(SL, _U); }
 | 
											
												
													
														|  | 
 |  | +                    if(SL==_SL){ tnsPackAs(GL_TRIANGLES); }else{ tnsPackAs(GL_LINE_LOOP); }
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    tnsFlush();
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  void la_ValueMeter2DDraw(laUiItem *ui, int h){
 |  |  void la_ValueMeter2DDraw(laUiItem *ui, int h){
 | 
											
												
													
														|  |      laBoxedTheme *bt = (*ui->Type->Theme);
 |  |      laBoxedTheme *bt = (*ui->Type->Theme);
 | 
											
												
													
														|  |      int DataI[8]; real Data[8];
 |  |      int DataI[8]; real Data[8];
 | 
											
										
											
												
													
														|  | @@ -1770,6 +1951,9 @@ void la_ImageUiDestroy(laUiItem *ui){
 | 
											
												
													
														|  |      tnsStopUsingImage(im);
 |  |      tnsStopUsingImage(im);
 | 
											
												
													
														|  |  #endif
 |  |  #endif
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +void la_MeterUiInit(laUiItem *ui){
 | 
											
												
													
														|  | 
 |  | +    la_GeneralUiInit(ui); ui->SymbolID = 20; ui->TemplateContext = 1000;
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  void la_RegisterUiTypesBasic(){
 |  |  void la_RegisterUiTypesBasic(){
 | 
											
												
													
														|  |      laKeyMapper* km;
 |  |      laKeyMapper* km;
 | 
											
										
											
												
													
														|  | @@ -1780,12 +1964,16 @@ void la_RegisterUiTypesBasic(){
 | 
											
												
													
														|  |                          &_LA_THEME_VALUATOR, la_IntDraw, la_ValueGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 |  |                          &_LA_THEME_VALUATOR, la_IntDraw, la_ValueGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 | 
											
												
													
														|  |      _LA_UI_INT->GetMinWidth=la_ValueGetMinWidth;
 |  |      _LA_UI_INT->GetMinWidth=la_ValueGetMinWidth;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    LA_WIDGET_VALUE_METER->Type=
 |  | 
 | 
											
												
													
														|  | -    _LA_UI_VALUE_METER = la_RegisterUiType("LA_value_meter", 0, 0, &_LA_THEME_VALUATOR, la_ValueMeterDraw, la_ValueMeterGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 |  | 
 | 
											
												
													
														|  | -    _LA_UI_VALUE_METER->GetMinWidth=la_ValueGetMinWidth;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    LA_WIDGET_METER_TYPE1->Type=
 | 
											
												
													
														|  | 
 |  | +    _LA_UI_METER_TYPE1 = la_RegisterUiType("LA_meter_type1", 0, 0, &_LA_THEME_VALUATOR, la_ValueMeterType1Draw, la_ValueMeterGetHeight, la_MeterUiInit, la_GeneralUiDestroy);
 | 
											
												
													
														|  | 
 |  | +    _LA_UI_METER_TYPE1->GetMinWidth=la_ValueGetMinWidth;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    LA_WIDGET_METER_TYPE2->Type=
 | 
											
												
													
														|  | 
 |  | +    _LA_UI_METER_TYPE2 = la_RegisterUiType("LA_meter_type2", 0, 0, &_LA_THEME_VALUATOR, la_ValueMeterType2Draw, la_ValueMeterGetHeight, la_MeterUiInit, la_GeneralUiDestroy);
 | 
											
												
													
														|  | 
 |  | +    _LA_UI_METER_TYPE2->GetMinWidth=la_ValueGetMinWidth;
 | 
											
												
													
														|  |      
 |  |      
 | 
											
												
													
														|  |      LA_WIDGET_VALUE_METER_2D->Type=
 |  |      LA_WIDGET_VALUE_METER_2D->Type=
 | 
											
												
													
														|  | -    _LA_UI_VALUE_METER_2D = la_RegisterUiType("LA_value_meter_2d", 0, 0, &_LA_THEME_VALUATOR, la_ValueMeter2DDraw, la_ValueMeter2DGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 |  | 
 | 
											
												
													
														|  | 
 |  | +    _LA_UI_VALUE_METER_2D = la_RegisterUiType("LA_value_meter_2d", 0, 0, &_LA_THEME_VALUATOR, la_ValueMeter2DDraw, la_ValueMeter2DGetHeight, la_MeterUiInit, la_GeneralUiDestroy);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      LA_WIDGET_FLOAT->Type=LA_WIDGET_FLOAT_PLAIN->Type=
 |  |      LA_WIDGET_FLOAT->Type=LA_WIDGET_FLOAT_PLAIN->Type=
 | 
											
												
													
														|  |      _LA_UI_FLOAT = la_RegisterUiType("LA_real_array_horizon", LA_PROP_FLOAT | LA_PROP_ARRAY, "LA_real_array_h_operator",
 |  |      _LA_UI_FLOAT = la_RegisterUiType("LA_real_array_horizon", LA_PROP_FLOAT | LA_PROP_ARRAY, "LA_real_array_h_operator",
 |