|  | @@ -2340,7 +2340,7 @@ void la_RefreshProofingLut(){
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //I FUCKING HATE THIS STUPID FUNCTION
 | 
	
		
			
				|  |  | -int la_SetUpUiListMatrix(laUiListDraw *uild, laUiList *Target, int _L, int _R, int LimH, int PanelH, int GlobalX, int GlobalY){
 | 
	
		
			
				|  |  | +int la_SetUpUiListMatrix(laUiListDraw *uild, laUiList *Target, int _L, int _R, int LimH, int PanelH){
 | 
	
		
			
				|  |  |      laUiListDrawItem *uildi = memAcquireSimple(sizeof(laUiListDrawItem));
 | 
	
		
			
				|  |  |      laUiListDrawItem *last = uild->Items.pFirst;
 | 
	
		
			
				|  |  |      int LimW=_R-_L;
 | 
	
	
		
			
				|  | @@ -2350,8 +2350,15 @@ int la_SetUpUiListMatrix(laUiListDraw *uild, laUiList *Target, int _L, int _R, i
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      uildi->Target = Target;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    // uildi->
 | 
	
		
			
				|  |  | +    //   XP,YP total pan
 | 
	
		
			
				|  |  | +    //   LRUB border after previous pan
 | 
	
		
			
				|  |  | +    //   SLRUB border after clamping
 | 
	
		
			
				|  |  | +    //   DifXY clamped distance
 | 
	
		
			
				|  |  | +    //   
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      //if (Target__B - Target->U > LimH) Target__B = Target->U + LimH;
 | 
	
		
			
				|  |  | -    if (Target__R - Target->L > LimW) Target__R = Target->L + LimW;
 | 
	
		
			
				|  |  | +    //if (Target__R - Target->L > LimW) Target__R = Target->L + LimW;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      uildi->XP = last ? last->XP + Target->PanX : Target->PanX;
 | 
	
		
			
				|  |  |      uildi->YP = last ? last->YP + Target->PanY : Target->PanY;
 | 
	
	
		
			
				|  | @@ -2363,27 +2370,23 @@ int la_SetUpUiListMatrix(laUiListDraw *uild, laUiList *Target, int _L, int _R, i
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (uildi->B - uildi->U > LimH) uildi->B = Target->U + LimH;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    uildi->L -= GlobalX;
 | 
	
		
			
				|  |  | -    uildi->R -= GlobalX;
 | 
	
		
			
				|  |  | -    uildi->U -= GlobalY;
 | 
	
		
			
				|  |  | -    uildi->B -= GlobalY;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      SL = last ? (uildi->L < last->L ? last->L : uildi->L) : uildi->L;
 | 
	
		
			
				|  |  |      SR = last ? (uildi->R > last->R ? last->R : uildi->R) : uildi->R;
 | 
	
		
			
				|  |  |      SU = last ? (uildi->U < last->U ? last->U : uildi->U) : uildi->U;
 | 
	
		
			
				|  |  |      SB = last ? (uildi->B > last->B ? last->B : uildi->B) : uildi->B;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    if(SL<_L) SL=_L;
 | 
	
		
			
				|  |  | +    if(SR>_R) SR=_R;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      uildi->DifX = SL - uildi->L;
 | 
	
		
			
				|  |  |      uildi->DifY = SU - uildi->U;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      uildi->L = SL;
 | 
	
		
			
				|  |  | -    uildi->R = SR+uildi->DifX;
 | 
	
		
			
				|  |  | +    uildi->R = SR;
 | 
	
		
			
				|  |  |      uildi->U = SU;
 | 
	
		
			
				|  |  | -    uildi->B = SB;//+uildi->DifY;
 | 
	
		
			
				|  |  | -    if(uildi->R>_R){ uildi->R=_R; }
 | 
	
		
			
				|  |  | -    if(uildi->B-SU>LimH){ uildi->B=SU+LimH; }
 | 
	
		
			
				|  |  | +    uildi->B = SB;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    //printf("py %f %d lb %d b %d limh %d sb%d\n",Target->PanY,uildi->U,last?last->B:0,uildi->B,LimH,SB);
 | 
	
		
			
				|  |  | +    if(uildi->B-SU>LimH){ uildi->B=SU+LimH; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if(uildi->R - uildi->L<=0 || uildi->B - uildi->U<=0){
 | 
	
		
			
				|  |  |          memFree(uildi);
 | 
	
	
		
			
				|  | @@ -2503,9 +2506,9 @@ void la_ClearUiListMatrix(laUiListDraw *uild){
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int la_UpdateUiListRecursive(laUiList *uil, int U, int L, int R, int B, int Fast, laPanel *ParentPanel);
 | 
	
		
			
				|  |  | -int la_DrawUiListRecursive(laUiListDraw *uild, laUiList *uil, int L, int R, int U, int B, int LimH, int ConditionStackLevel, int GlobalX, int GlobalY, int RegisterNodes);
 | 
	
		
			
				|  |  | +int la_DrawUiListRecursive(laUiListDraw *uild, laUiList *uil, int L, int R, int U, int B, int LimH, int ConditionStackLevel, int RegisterNodes);
 | 
	
		
			
				|  |  |  void la_DestroyUiList(laUiList *uil, int NoFree, int RemoveUsers, int OnlyRemoveUser);
 | 
	
		
			
				|  |  | -void la_DrawUiListScrollerV(laUiList *uil, int DisplayOffset, int TotalH, int DisplayH, int UiR);
 | 
	
		
			
				|  |  | +void la_DrawUiListScrollerV(laUiList *uil, int DisplayOffset, int TotalH, int DisplayedH, int UiR, int BarTop, int BarBottom);
 | 
	
		
			
				|  |  |  int la_TestUiListMinumWidth(laUiList *uil);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void la_PanelValidateWidth(laPanel *p, laUiList *ui){
 | 
	
	
		
			
				|  | @@ -2781,10 +2784,6 @@ void la_PanelDefDraw(laWindow *w, laPanel *p, laBoxedTheme *bt){
 | 
	
		
			
				|  |  |          la_SetPropMathcerContext(p);
 | 
	
		
			
				|  |  |          MAIN.CurrentPanel = p;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //if(p->Refresh&(LA_TAG_REDRAW|LA_TAG_RECALC)){
 | 
	
		
			
				|  |  | -        //    printf("Draw %0xld (%s)\n", p, p->Title?p->Title->Ptr:0);
 | 
	
		
			
				|  |  | -        //}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          if (p->Refresh & LA_TAG_RECALC){
 | 
	
		
			
				|  |  |              laRecalcPanelImmediate(p);
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -2794,8 +2793,14 @@ void la_PanelDefDraw(laWindow *w, laPanel *p, laBoxedTheme *bt){
 | 
	
		
			
				|  |  |                  la_PanelDrawToOffsceen(p, &p->UI);
 | 
	
		
			
				|  |  |                  la_SetupUiListLimitMatrix(&uild, 0, p->W, 0, p->H, p->H);
 | 
	
		
			
				|  |  |                  la_PanelBackgroundInit(p, bt);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                tnsUseImmShader(); tnsEnableShaderv(T->immShader);
 | 
	
		
			
				|  |  | +                tnsUniformOutputColorSpace(T->immShader,0);
 | 
	
		
			
				|  |  | +                tnsUniformShowColorOverflowStripes(T->immShader,0);
 | 
	
		
			
				|  |  | +                tnsUniformColorComposing(T->immShader,0,0,0,0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  int extrap=(p->Mode && (!p->IsMenuPanel))?p->TitleBar.B:0;
 | 
	
		
			
				|  |  | -                la_DrawUiListScrollerV(&p->UI, p->UI.PanY, p->UI.B-p->UI.U, p->H-LA_M*2-extrap, p->W);
 | 
	
		
			
				|  |  | +                la_DrawUiListScrollerV(&p->UI, p->UI.PanY, p->UI.B-p->UI.U, p->H-extrap, p->W, p->UI.U+LA_M,p->H-LA_M*2);
 | 
	
		
			
				|  |  |                  tnsFlush();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if(((p->UI.B>p->H) && (!p->UI.ScrollerShownV))||
 | 
	
	
		
			
				|  | @@ -2803,8 +2808,8 @@ void la_PanelDefDraw(laWindow *w, laPanel *p, laBoxedTheme *bt){
 | 
	
		
			
				|  |  |                      p->UI.ScrollerShownV=!p->UI.ScrollerShownV;
 | 
	
		
			
				|  |  |                      DrawState_++;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                if(p->UI.PanY && p->UI.B-p->UI.PanY<p->H-LA_M){
 | 
	
		
			
				|  |  | -                    p->UI.PanY = (p->UI.B-p->H/*-bt->BM-bt->TM*/-p->TitleBar.B);
 | 
	
		
			
				|  |  | +                if(p->UI.PanY && p->UI.B-p->UI.PanY < p->H - LA_M){
 | 
	
		
			
				|  |  | +                    p->UI.PanY = (p->UI.B-p->H+LA_M);
 | 
	
		
			
				|  |  |                      if(p->UI.PanY<0){p->UI.PanY=0;}
 | 
	
		
			
				|  |  |                      DrawState_++;
 | 
	
		
			
				|  |  |                  }
 | 
	
	
		
			
				|  | @@ -2815,9 +2820,9 @@ void la_PanelDefDraw(laWindow *w, laPanel *p, laBoxedTheme *bt){
 | 
	
		
			
				|  |  |                  else { p->Refresh = LA_TAG_ANIMATION; laRefreshWindow(); }
 | 
	
		
			
				|  |  |                  if (!la_AnimateUiListRecursive(&p->UI)){ p->Refresh = p->Refresh; if(p->Refresh){ laRefreshWindow(); } }
 | 
	
		
			
				|  |  |                  else { p->Refresh = LA_TAG_ANIMATION; laRefreshWindow(); }
 | 
	
		
			
				|  |  | -                DrawState_ += la_DrawUiListRecursive(&uild, &p->TitleBar, 0, p->W, 0, p->H, 10000, -1, 0, 0, 0);
 | 
	
		
			
				|  |  | +                DrawState_ += la_DrawUiListRecursive(&uild, &p->TitleBar, 0, p->W, 0, p->H, 10000, -1, 0);
 | 
	
		
			
				|  |  |                  if(p!=w->MaximizedUiPanel){
 | 
	
		
			
				|  |  | -                    DrawState_ += la_DrawUiListRecursive(&uild, &p->UI, 0, p->W, 0, p->H, 10000, -1, 0, 0, 0);
 | 
	
		
			
				|  |  | +                    DrawState_ += la_DrawUiListRecursive(&uild, &p->UI, 0, p->W, 0, p->H, 10000, -1, 0);
 | 
	
		
			
				|  |  |                  }else{
 | 
	
		
			
				|  |  |                      tnsViewportWithScissor(0,0,p->W,p->H); tnsOrtho(0,p->W,p->H,0,-100,100);
 | 
	
		
			
				|  |  |                      tnsDrawStringAutoM("Canvas is maximized",0,laThemeColor(bt,LA_BT_TEXT),
 | 
	
	
		
			
				|  | @@ -2832,7 +2837,7 @@ void la_PanelDefDraw(laWindow *w, laPanel *p, laBoxedTheme *bt){
 | 
	
		
			
				|  |  |                  la_SetupUiListLimitMatrix(&uild, 0, p->W, 0, p->H, p->H);
 | 
	
		
			
				|  |  |                  la_PanelBackgroundInit(p, bt);
 | 
	
		
			
				|  |  |                  la_DrawUiListScrollerV(p->MenuRefer, p->MenuRefer->PanY,
 | 
	
		
			
				|  |  | -                    p->MenuRefer->B-p->MenuRefer->U-LA_M*2, p->H-LA_M*3, p->W);
 | 
	
		
			
				|  |  | +                    p->MenuRefer->B-p->MenuRefer->U-LA_M*2, p->H-LA_M*3, p->W, p->MenuRefer->U+LA_M,p->H-LA_M*2);
 | 
	
		
			
				|  |  |                  tnsFlush();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if(((p->MenuRefer->TB>p->H-LA_M) && (!p->MenuRefer->ScrollerShownV))||
 | 
	
	
		
			
				|  | @@ -2850,7 +2855,7 @@ void la_PanelDefDraw(laWindow *w, laPanel *p, laBoxedTheme *bt){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  if (!la_AnimateUiListRecursive(p->MenuRefer)) p->Refresh = 0;
 | 
	
		
			
				|  |  |                  else { p->Refresh = LA_TAG_ANIMATION; laRefreshWindow(); }
 | 
	
		
			
				|  |  | -                DrawState_ += la_DrawUiListRecursive(&uild, p->MenuRefer, 0, p->W, 0, p->H, 10000, -1, 0, 0, 0);
 | 
	
		
			
				|  |  | +                DrawState_ += la_DrawUiListRecursive(&uild, p->MenuRefer, 0, p->W, 0, p->H, 10000, -1, 0);
 | 
	
		
			
				|  |  |                  if (DrawState_){ p->Refresh = LA_TAG_RECALC; laRefreshWindow(); }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -3246,7 +3251,7 @@ void la_WindowDefDraw(laWindow *w, laBoxedTheme *bt){
 | 
	
		
			
				|  |  |          if(!(ui->Flags&LA_UI_FLAGS_NO_OVERLAY)){
 | 
	
		
			
				|  |  |              laUiListDraw uild = {0}; for (laUiList* sub = ui->Subs.pFirst; sub; sub = sub->Item.pNext){
 | 
	
		
			
				|  |  |                  tnsFlush();
 | 
	
		
			
				|  |  | -                DrawState_+=la_DrawUiListRecursive(&uild, sub, ui->L, ui->R, ui->U, ui->B, 10000, 0, 0, 0, 0);
 | 
	
		
			
				|  |  | +                DrawState_+=la_DrawUiListRecursive(&uild, sub, ui->L, ui->R, ui->U, ui->B, 10000, 0, 0);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (DrawState_){ p->Refresh = LA_TAG_RECALC; laRefreshWindow(); }
 | 
	
	
		
			
				|  | @@ -4337,31 +4342,43 @@ int laIsTopPanel(laPanel *p){
 | 
	
		
			
				|  |  |      //}
 | 
	
		
			
				|  |  |      return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -void laWindowToLocal(laOperator *a, laPanel *p, int *x, int *y){
 | 
	
		
			
				|  |  | -    if(!p) return;
 | 
	
		
			
				|  |  | +void laPanelToLocal(laOperator *a, int *x, int *y){
 | 
	
		
			
				|  |  |      int ix = *x, iy = *y;
 | 
	
		
			
				|  |  |      laListItemPointer *lip;
 | 
	
		
			
				|  |  | -    laOperator *ai = a;
 | 
	
		
			
				|  |  | -    (*x) = ix - ((MAIN.CurrentWindow->MaximizedUiPanel==p)?0: p->X);
 | 
	
		
			
				|  |  | -    (*y) = iy - ((MAIN.CurrentWindow->MaximizedUiPanel==p)?0: p->Y);
 | 
	
		
			
				|  |  |      if (a){
 | 
	
		
			
				|  |  | -        for (lip = ai->LocalUiLists.pFirst; lip; lip = lip->pNext){
 | 
	
		
			
				|  |  | +    //printf("\n");
 | 
	
		
			
				|  |  | +        int SL,SR,SU,SB; int PX=0,PY=0;
 | 
	
		
			
				|  |  | +        for (lip = a->LocalUiLists.pLast; lip; lip = lip->pPrev){
 | 
	
		
			
				|  |  |              laUiList *uil = lip->p;
 | 
	
		
			
				|  |  | -            (*x) += uil->PanX;
 | 
	
		
			
				|  |  | -            (*y) += uil->PanY;
 | 
	
		
			
				|  |  | +            if(lip->pNext){
 | 
	
		
			
				|  |  | +                int PadR=(uil->AllowScale && uil->ScrollerShownV)?LA_SCROLL_W+LA_M*4:0;
 | 
	
		
			
				|  |  | +                int PadB=(uil->AllowScale && uil->ScrollerShownH)?LA_SCROLL_W+LA_M*3:0;
 | 
	
		
			
				|  |  | +                int UseB=uil->LimH?uil->U+uil->LimH:uil->B;
 | 
	
		
			
				|  |  | +                SL=TNS_MAX2(SL,uil->L); SR=TNS_MIN2(SR-PadR,uil->R);
 | 
	
		
			
				|  |  | +                SU=TNS_MAX2(SU,uil->U); SB=TNS_MIN2(SB-PadB,UseB);
 | 
	
		
			
				|  |  | +                SL+=uil->PanX; SR+=uil->PanX; SU+=uil->PanY; SB+=uil->PanY;
 | 
	
		
			
				|  |  | +            }else{
 | 
	
		
			
				|  |  | +                SL=uil->L+uil->PanX;SR=uil->R+uil->PanX;SU=uil->U+uil->PanY;SB=uil->B+uil->PanY;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            PX += uil->PanX; PY += uil->PanY;
 | 
	
		
			
				|  |  | +            //printf("u %d %d %d %d %s\n",uil->L,uil->R,uil->U,uil->B,SSTR(uil->TabName));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        (*x)+=PX; (*y)+=PY;
 | 
	
		
			
				|  |  | +        lip=a->LocalUiLists.pFirst; if(lip){
 | 
	
		
			
				|  |  | +            laUiList *uil = lip->p;
 | 
	
		
			
				|  |  | +            uil->FL=SL; uil->FR=SR; uil->FU=SU; uil->FB=SB;
 | 
	
		
			
				|  |  | +            //printf("uil limit %d %d | %d %d %d %d %d %d\n",*x,*y,uil->FL,uil->FR,uil->FU,uil->FB,PX,PY);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -void laPanelToLocal(laOperator *a, int *x, int *y){
 | 
	
		
			
				|  |  | +void laWindowToLocal(laOperator *a, laPanel *p, int *x, int *y){
 | 
	
		
			
				|  |  | +    if(!p) return;
 | 
	
		
			
				|  |  |      int ix = *x, iy = *y;
 | 
	
		
			
				|  |  |      laListItemPointer *lip;
 | 
	
		
			
				|  |  | -    if (a){
 | 
	
		
			
				|  |  | -        for (lip = a->LocalUiLists.pFirst; lip; lip = lip->pNext){
 | 
	
		
			
				|  |  | -            laUiList *uil = lip->p;
 | 
	
		
			
				|  |  | -            (*x) += uil->PanX;
 | 
	
		
			
				|  |  | -            (*y) += uil->PanY;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    laOperator *ai = a;
 | 
	
		
			
				|  |  | +    (*x) = ix - ((MAIN.CurrentWindow->MaximizedUiPanel==p)?0: p->X);
 | 
	
		
			
				|  |  | +    (*y) = iy - ((MAIN.CurrentWindow->MaximizedUiPanel==p)?0: p->Y);
 | 
	
		
			
				|  |  | +    laPanelToLocal(a,x,y);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void laLocalToWindow(laOperator *a, laPanel *p, int *x, int *y){
 | 
	
		
			
				|  |  |      if(!p) return;
 | 
	
	
		
			
				|  | @@ -6186,6 +6203,7 @@ int la_UpdateUiListRecursive(laUiList *uil, int U, int L, int R, int B, int Fast
 | 
	
		
			
				|  |  |                          ui->TB + (ui->State == LA_UI_ACTIVE ? 0 : LA_RH)+(NoDecal?0:LA_M), ui->TL+(NoDecal?0:LA_M), ui->TR-(NoDecal?0:LA_M)-scrollw, B, Fast, ParentPanel);
 | 
	
		
			
				|  |  |                      ui->TB = (ui->Page->HeightCoeff > 0 ? ui->TU + ui->Page->HeightCoeff * LA_RH :
 | 
	
		
			
				|  |  |                              (ui->Page->HeightCoeff < 0 ? B + (ui->Page->HeightCoeff+1) * LA_RH - (LA_M*2)+(ui->Page->HeightCoeff==-2?-LA_M:0) : SubB)) + (NoDecal?0:LA_M);
 | 
	
		
			
				|  |  | +                    ui->Page->LimH = ui->TB-ui->Page->U - (NoDecal?0:LA_M);
 | 
	
		
			
				|  |  |                      int subh = ui->TB-ui->TU-LA_RH-LA_M*2;
 | 
	
		
			
				|  |  |                      if((ui->Page->TR>ui->TR-(NoDecal?0:LA_M) && (!ui->Page->ScrollerShownH)) ||
 | 
	
		
			
				|  |  |                          (ui->Page->TR<=ui->TR-(NoDecal?0:LA_M) && ui->Page->ScrollerShownH)){
 | 
	
	
		
			
				|  | @@ -6371,24 +6389,28 @@ void la_DrawUiListArrows(laUiList *uil, int L, int R, int U, int B, real* color)
 | 
	
		
			
				|  |  |      if(uil->B-uil->PanY>B){ tnsDrawStringAuto("▽", color, mx-LA_RH2, mx+LA_RH2, B-LA_RH, LA_TEXT_ALIGN_CENTER); }
 | 
	
		
			
				|  |  |      tnsFlush();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -void la_DrawUiListScrollerV(laUiList *uil, int DisplayOffset, int TotalH, int DisplayH, int UiR){
 | 
	
		
			
				|  |  | +void la_DrawUiListScrollerV(laUiList *uil, int DisplayOffset, int TotalH, int DisplayedH, int UiR, int BarTop, int BarBottom){
 | 
	
		
			
				|  |  |      if(!uil->ScrollerShownV) return;
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |      int W = LA_SCROLL_W, RM=LA_M;
 | 
	
		
			
				|  |  | -    int Len = (int)((real)DisplayH / (real)TotalH * (real)DisplayH);
 | 
	
		
			
				|  |  | -    int Offset = (int)((real)DisplayOffset / (real)TotalH * (real)DisplayH);
 | 
	
		
			
				|  |  | -    int U = uil->U + Offset;
 | 
	
		
			
				|  |  | +    int DrawH = (BarBottom-BarTop);
 | 
	
		
			
				|  |  | +    int Len = (int)((real)DisplayedH / (real)TotalH * (real)DrawH);
 | 
	
		
			
				|  |  | +    int Offset = (int)((real)DisplayOffset / (real)TotalH * (real)DrawH);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    int U = BarTop + Offset;
 | 
	
		
			
				|  |  |      int B = U + Len;
 | 
	
		
			
				|  |  |      int L = UiR - RM*2 - W;
 | 
	
		
			
				|  |  |      int R = L + W;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (B > U + DisplayH) B = U + DisplayH;
 | 
	
		
			
				|  |  | -    if (U < uil->U) U = uil->U;
 | 
	
		
			
				|  |  | +    if (B > BarBottom) B = BarBottom;
 | 
	
		
			
				|  |  | +    if (U < BarTop) U = BarTop;
 | 
	
		
			
				|  |  | +    Len=B-U;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (B <= uil->U || U >= uil->B) return;
 | 
	
		
			
				|  |  | +    if(Len < LA_RH0){ int Sub=(LA_RH0-Len)/2; U-=Sub; B+=(LA_RH0-Len-Sub); }
 | 
	
		
			
				|  |  | +    if(U < BarTop){ int Sub=BarTop-U; U+=Sub; B+=Sub; }
 | 
	
		
			
				|  |  | +    if(B > BarBottom){ int Sub=B-BarBottom; B-=Sub; U-=Sub; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (B > uil->U + DisplayH) B = uil->U + DisplayH;
 | 
	
		
			
				|  |  | -    if (U < uil->U) U = uil->U;
 | 
	
		
			
				|  |  | +    if (U < BarTop) U = BarTop;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      tnsUseNoTexture();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -6396,16 +6418,16 @@ void la_DrawUiListScrollerV(laUiList *uil, int DisplayOffset, int TotalH, int Di
 | 
	
		
			
				|  |  |      real* color=laThemeColor(bt, LA_BT_TEXT);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      tnsColor4d(LA_COLOR3(color), 0.2);
 | 
	
		
			
				|  |  | -    tnsVertex2d(R-RM, uil->U);
 | 
	
		
			
				|  |  | -    tnsVertex2d(L+RM, uil->U);
 | 
	
		
			
				|  |  | -    tnsVertex2d(L+RM, uil->U + DisplayH);
 | 
	
		
			
				|  |  | -    tnsVertex2d(R-RM, uil->U + DisplayH);
 | 
	
		
			
				|  |  | +    tnsVertex2d(R-RM, BarTop);
 | 
	
		
			
				|  |  | +    tnsVertex2d(L+RM, BarTop);
 | 
	
		
			
				|  |  | +    tnsVertex2d(L+RM, BarBottom);
 | 
	
		
			
				|  |  | +    tnsVertex2d(R-RM, BarBottom);
 | 
	
		
			
				|  |  |      tnsPackAs(GL_TRIANGLE_FAN);
 | 
	
		
			
				|  |  |      tnsColor4d(LA_COLOR3(color), 0.5);
 | 
	
		
			
				|  |  | -    tnsVertex2d(R-RM, uil->U);
 | 
	
		
			
				|  |  | -    tnsVertex2d(L+RM, uil->U);
 | 
	
		
			
				|  |  | -    tnsVertex2d(L+RM, uil->U + DisplayH);
 | 
	
		
			
				|  |  | -    tnsVertex2d(R-RM, uil->U + DisplayH);
 | 
	
		
			
				|  |  | +    tnsVertex2d(R-RM, BarTop);
 | 
	
		
			
				|  |  | +    tnsVertex2d(L+RM, BarTop);
 | 
	
		
			
				|  |  | +    tnsVertex2d(L+RM, BarBottom);
 | 
	
		
			
				|  |  | +    tnsVertex2d(R-RM, BarBottom);
 | 
	
		
			
				|  |  |      tnsPackAs(GL_LINE_LOOP);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      tnsColor4d(LA_COLOR3(color), 1);
 | 
	
	
		
			
				|  | @@ -6416,43 +6438,46 @@ void la_DrawUiListScrollerV(laUiList *uil, int DisplayOffset, int TotalH, int Di
 | 
	
		
			
				|  |  |      tnsPackAs(GL_TRIANGLE_FAN);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      int HU=(U+B)/2+LA_RH2;
 | 
	
		
			
				|  |  | -    tnsDrawStringAuto("☰",laThemeColor(bt, LA_BT_BORDER),L-100,R+100,HU,LA_TEXT_REVERT_Y|LA_TEXT_ALIGN_CENTER);
 | 
	
		
			
				|  |  | +    tnsDrawStringAuto("⣿",laThemeColor(bt, LA_BT_BORDER),L-100,R+100,HU,LA_TEXT_REVERT_Y|LA_TEXT_ALIGN_CENTER);
 | 
	
		
			
				|  |  |      tnsFlush();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -void la_DrawUiListScrollerH(laUiList *uil, int DisplayOffset, int TotalW, int DisplayW, int UiB){
 | 
	
		
			
				|  |  | +void la_DrawUiListScrollerH(laUiList *uil, int DisplayOffset, int TotalW, int DisplayW, int UiB, int BarLeft, int BarRight){
 | 
	
		
			
				|  |  |      if(!uil->ScrollerShownH) return;
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |      int W = LA_SCROLL_W,RM=LA_M;
 | 
	
		
			
				|  |  | -    int Len = (int)((real)DisplayW / (real)TotalW * (real)DisplayW);
 | 
	
		
			
				|  |  | -    int Offset = (int)((real)DisplayOffset / (real)TotalW * (real)DisplayW);
 | 
	
		
			
				|  |  | -    int L = uil->L + Offset;
 | 
	
		
			
				|  |  | +    int DrawW = (BarRight-BarLeft);
 | 
	
		
			
				|  |  | +    int Len = (int)((real)DisplayW / (real)TotalW * (real)DrawW);
 | 
	
		
			
				|  |  | +    int Offset = (int)((real)DisplayOffset / (real)TotalW * (real)DrawW);
 | 
	
		
			
				|  |  | +    int L = BarLeft + Offset;
 | 
	
		
			
				|  |  |      int R = L + Len;
 | 
	
		
			
				|  |  |      int U = UiB - RM - W;
 | 
	
		
			
				|  |  |      int B = U + W;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (B > U + DisplayW) B = U + DisplayW;
 | 
	
		
			
				|  |  | -    if (U < uil->U) U = uil->U;
 | 
	
		
			
				|  |  | +    if (R > BarRight) R = BarRight;
 | 
	
		
			
				|  |  | +    if (L < BarLeft) L = BarLeft;
 | 
	
		
			
				|  |  | +    Len=R-L;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (R <= uil->L || L >= uil->R) return;
 | 
	
		
			
				|  |  | +    if(Len < LA_RH0){ int Sub=(LA_RH0-Len)/2; L-=Sub; R+=(LA_RH0-Len-Sub); }
 | 
	
		
			
				|  |  | +    if(L < BarLeft){ int Sub=BarLeft-L; L+=Sub; R+=Sub; }
 | 
	
		
			
				|  |  | +    if(R > BarRight){ int Sub=R-BarRight; R-=Sub; L-=Sub; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (R > uil->L + DisplayW) R = uil->L + DisplayW;
 | 
	
		
			
				|  |  | -    if (L < uil->L) L = uil->L;
 | 
	
		
			
				|  |  | +    if (L < BarLeft) L = BarLeft;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      tnsUseNoTexture();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      laBoxedTheme* bt=_LA_THEME_PANEL;
 | 
	
		
			
				|  |  |      real* color=laThemeColor(bt, LA_BT_TEXT);
 | 
	
		
			
				|  |  |      tnsColor4d(LA_COLOR3(color), 0.2);
 | 
	
		
			
				|  |  | -    tnsVertex2d(uil->L,U+RM);
 | 
	
		
			
				|  |  | -    tnsVertex2d(uil->L,B-RM);
 | 
	
		
			
				|  |  | -    tnsVertex2d(uil->L + DisplayW,B-RM);
 | 
	
		
			
				|  |  | -    tnsVertex2d(uil->L + DisplayW,U+RM);
 | 
	
		
			
				|  |  | +    tnsVertex2d(BarLeft,U+RM);
 | 
	
		
			
				|  |  | +    tnsVertex2d(BarLeft,B-RM);
 | 
	
		
			
				|  |  | +    tnsVertex2d(BarRight,B-RM);
 | 
	
		
			
				|  |  | +    tnsVertex2d(BarRight,U+RM);
 | 
	
		
			
				|  |  |      tnsPackAs(GL_TRIANGLE_FAN);
 | 
	
		
			
				|  |  |      tnsColor4d(LA_COLOR3(color), 0.5);
 | 
	
		
			
				|  |  | -    tnsVertex2d(uil->L,U+RM);
 | 
	
		
			
				|  |  | -    tnsVertex2d(uil->L,B-RM);
 | 
	
		
			
				|  |  | -    tnsVertex2d(uil->L + DisplayW,B-RM);
 | 
	
		
			
				|  |  | -    tnsVertex2d(uil->L + DisplayW,U+RM);
 | 
	
		
			
				|  |  | +    tnsVertex2d(BarLeft,U+RM);
 | 
	
		
			
				|  |  | +    tnsVertex2d(BarLeft,B-RM);
 | 
	
		
			
				|  |  | +    tnsVertex2d(BarRight,B-RM);
 | 
	
		
			
				|  |  | +    tnsVertex2d(BarRight,U+RM);
 | 
	
		
			
				|  |  |      tnsPackAs(GL_LINE_LOOP);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      tnsColor4d(LA_COLOR3(color), 1);
 | 
	
	
		
			
				|  | @@ -6463,7 +6488,7 @@ void la_DrawUiListScrollerH(laUiList *uil, int DisplayOffset, int TotalW, int Di
 | 
	
		
			
				|  |  |      tnsPackAs(GL_TRIANGLE_FAN);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      int HU=(U+B)/2+LA_RH2;
 | 
	
		
			
				|  |  | -    tnsDrawStringAuto("↔",laThemeColor(bt, LA_BT_BORDER),L-100,R+100,HU,LA_TEXT_REVERT_Y|LA_TEXT_ALIGN_CENTER);
 | 
	
		
			
				|  |  | +    tnsDrawStringAuto("⠶⠶",laThemeColor(bt, LA_BT_BORDER),L-100,R+100,HU,LA_TEXT_REVERT_Y|LA_TEXT_ALIGN_CENTER);
 | 
	
		
			
				|  |  |      tnsFlush();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void la_DrawInstanceBkg(laUiList *uil, real* color, int LP, int RP){
 | 
	
	
		
			
				|  | @@ -6595,7 +6620,7 @@ void la_SwitchThemeQuick(laTheme* t, laTheme* DefaultTheme){
 | 
	
		
			
				|  |  |      if(!DefaultTheme){return;} MAIN.CurrentTheme = t?t:DefaultTheme; t=MAIN.CurrentTheme;
 | 
	
		
			
				|  |  |      for(laBoxedTheme* bt = t->BoxedThemes.pFirst;bt;bt=bt->Item.pNext){ (*bt->BackRef) = bt; }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -int la_DrawUiListRecursive(laUiListDraw *uild, laUiList *uil, int L, int R, int U, int B, int LimH, int ConditionStackLevel, int GlobalX, int GlobalY, int RegisterNodes){
 | 
	
		
			
				|  |  | +int la_DrawUiListRecursive(laUiListDraw *uild, laUiList *uil, int L, int R, int U, int B, int LimH, int ConditionStackLevel, int RegisterNodes){
 | 
	
		
			
				|  |  |      laUiItem *ui;
 | 
	
		
			
				|  |  |      laBoxedTheme *bt;
 | 
	
		
			
				|  |  |      laUiList *sub;
 | 
	
	
		
			
				|  | @@ -6608,7 +6633,7 @@ int la_DrawUiListRecursive(laUiListDraw *uild, laUiList *uil, int L, int R, int
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      ui = uil->UiItems.pFirst;
 | 
	
		
			
				|  |  |      if(uil->PanY<0){uil->PanY=0;}
 | 
	
		
			
				|  |  | -    if (!la_SetUpUiListMatrix(uild, uil, L, R, LimH, B - U, GlobalX, GlobalY)) return 0;
 | 
	
		
			
				|  |  | +    if (!la_SetUpUiListMatrix(uild, uil, L, R, LimH, B - U)) return 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      uil->SaveScale=MAIN.UiScale;
 | 
	
		
			
				|  |  |      MAIN.UiScale*=uil->Scale;
 | 
	
	
		
			
				|  | @@ -6680,15 +6705,33 @@ int la_DrawUiListRecursive(laUiListDraw *uild, laUiList *uil, int L, int R, int
 | 
	
		
			
				|  |  |                  ui->Type == _LA_UI_COLLECTION_SINGLE ||
 | 
	
		
			
				|  |  |                  ui->Type == _LA_UI_COLLECTION_SELECTOR && (ui->Subs.pFirst || ui->Page)){
 | 
	
		
			
				|  |  |                  if (!ui->Page){ ui = ui->Item.pNext; continue; }
 | 
	
		
			
				|  |  | -                tnsFlush(); int DoNodes=RegisterNodes; int NoDecal=ui->Flags&LA_UI_FLAGS_NO_DECAL; int SidePad=NoDecal?-LA_M:LA_M;
 | 
	
		
			
				|  |  | +                tnsFlush(); int DoNodes=RegisterNodes; int NoDecal=ui->Flags&LA_UI_FLAGS_NO_DECAL;
 | 
	
		
			
				|  |  | +                int SidePad=NoDecal?-LA_M:LA_M;
 | 
	
		
			
				|  |  | +                int RightPad=(ui->Page->ScrollerShownV?LA_SCROLL_W+LA_M*2:0);
 | 
	
		
			
				|  |  | +                int BottomPad=(ui->Page->ScrollerShownH?LA_SCROLL_W+LA_M:0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  if(ui->Flags&LA_UI_FLAGS_NODE_CONTAINER){ la_InitSocketRecord(uild, ui->Page); DoNodes=1; }
 | 
	
		
			
				|  |  | -                Ret += la_DrawUiListRecursive(uild, ui->Page, ui->L+SidePad, ui->R-SidePad, U, B,
 | 
	
		
			
				|  |  | -                    (ui->Page->HeightCoeff ? ui->B - ui->Page->U : 10000) -(NoDecal?0:LA_M), ConditionStackLevel, GlobalX, GlobalY, DoNodes);
 | 
	
		
			
				|  |  | -                if (ui->Page->ScrollerShownH){ la_DrawUiListScrollerH(ui->Page, ui->Page->PanX,
 | 
	
		
			
				|  |  | -                    ui->Page->R-ui->Page->L-LA_M*2, ui->R-ui->Page->L-LA_M*2-(ui->Page->ScrollerShownV?LA_SCROLL_W:0),ui->B); }
 | 
	
		
			
				|  |  | -                if (ui->Page->HeightCoeff) la_DrawUiListScrollerV(ui->Page, ui->Page->PanY,
 | 
	
		
			
				|  |  | -                    ui->Page->B-ui->Page->U-(NoDecal?0:LA_M-LA_M), ui->B-ui->Page->U-(NoDecal?0:LA_M-LA_M)-(ui->Page->ScrollerShownH?LA_SCROLL_W+LA_M:0),ui->R);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                int LimH=(ui->Page->HeightCoeff ? ui->B - ui->Page->U : 10000);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                Ret += la_DrawUiListRecursive(uild, ui->Page, ui->L+SidePad, ui->R-SidePad-RightPad,
 | 
	
		
			
				|  |  | +                    U, B, LimH-(NoDecal?0:LA_M)-BottomPad, ConditionStackLevel, DoNodes);
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +                if (ui->Page->ScrollerShownH){
 | 
	
		
			
				|  |  | +                    int PadBottom=(ui->Page->ScrollerShownH?LA_SCROLL_W+LA_M:0);
 | 
	
		
			
				|  |  | +                    int PadRight=(ui->Page->ScrollerShownV?LA_SCROLL_W+LA_M:0);
 | 
	
		
			
				|  |  | +                    la_DrawUiListScrollerH(ui->Page, ui->Page->PanX,
 | 
	
		
			
				|  |  | +                        ui->Page->R-ui->Page->L, ui->R-ui->L-PadRight,ui->B,
 | 
	
		
			
				|  |  | +                        ui->L+LA_M, ui->R-LA_M-PadRight);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (ui->Page->HeightCoeff){
 | 
	
		
			
				|  |  | +                    int PadBottom=(ui->Page->ScrollerShownH?LA_SCROLL_W:0);
 | 
	
		
			
				|  |  | +                    la_DrawUiListScrollerV(ui->Page, ui->Page->PanY,
 | 
	
		
			
				|  |  | +                        ui->Page->B-ui->Page->U, ui->B-ui->Page->U-PadBottom,ui->R,
 | 
	
		
			
				|  |  | +                        ui->Page->U+LA_M,ui->B-LA_M-PadBottom);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |                  if (ui->Page->AllowScale){ la_DrawUiListArrows(ui->Page,ui->L, ui->R, ui->Page->U, ui->B-LA_SCROLL_W-LA_M*2, laThemeColor(bt, LA_BT_BORDER)); }
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  |              }elif (ui->Type == _LA_UI_COLLECTION){
 | 
	
		
			
				|  |  |                  int CanGetState = laCanGetState(ui->PP.LastPs->p);
 | 
	
		
			
				|  |  |                  int CanGetTheme = laCanGetTheme(ui->PP.LastPs->p);laTheme* OriginalTheme=MAIN.CurrentTheme;
 | 
	
	
		
			
				|  | @@ -6727,17 +6770,18 @@ int la_DrawUiListRecursive(laUiListDraw *uild, laUiList *uil, int L, int R, int
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      tnsFlush();
 | 
	
		
			
				|  |  | -                    Ret += la_DrawUiListRecursive(uild, sub, L, R, U, B, 10000, ConditionStackLevel, GlobalX, GlobalY, RegisterNodes);
 | 
	
		
			
				|  |  | +                    Ret += la_DrawUiListRecursive(uild, sub, L, R, U, B, 10000, ConditionStackLevel, RegisterNodes);
 | 
	
		
			
				|  |  |                      
 | 
	
		
			
				|  |  |                      if(CanGetTheme){ la_SwitchThemeQuick(0, OriginalTheme); }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  //ui->PP.EndInstance = Active;
 | 
	
		
			
				|  |  |                  ui->PP.EndInstance = SaveInstance;
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  |              }elif (ui->Type == _LA_UI_CANVAS){
 | 
	
		
			
				|  |  |                  if(!(ui->Flags&LA_UI_FLAGS_NO_OVERLAY)){
 | 
	
		
			
				|  |  |                      for (sub = ui->Subs.pFirst; sub; sub = sub->Item.pNext){
 | 
	
		
			
				|  |  |                          tnsFlush();
 | 
	
		
			
				|  |  | -                        Ret += la_DrawUiListRecursive(uild, sub, L-1, R+1, U-1, B+1, ui->B-LA_M*2-LA_M*2, ConditionStackLevel, GlobalX, GlobalY, RegisterNodes);
 | 
	
		
			
				|  |  | +                        Ret += la_DrawUiListRecursive(uild, sub, L-1, R+1, U-1, B+1, ui->B-LA_M*2-LA_M*2, ConditionStackLevel, RegisterNodes);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -6772,8 +6816,20 @@ int la_DrawPanelScrollBarV(int L, int R, int U, int B, real Total, real Range, r
 | 
	
		
			
				|  |  |      tnsVertex2d(L + 3, End);
 | 
	
		
			
				|  |  |      tnsPackAs(GL_LINE_LOOP);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -int laIsInUiItem(laUiItem *ui, int x, int y){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +int la_RejectByUiList(laOperator* a, int x, int y){
 | 
	
		
			
				|  |  | +    laListItemPointer* lip=a->LocalUiLists.pFirst;
 | 
	
		
			
				|  |  | +    if(lip){ laUiList* uil=lip->p;
 | 
	
		
			
				|  |  | +        if(uil->FL!=uil->FR && (x < uil->FL || y < uil->FU || x > uil->FR || y > uil->FB)){
 | 
	
		
			
				|  |  | +            //printf("rejected %d %d | %d %d %d %d\n",x,y,uil->FL,uil->FR,uil->FU,uil->FB);
 | 
	
		
			
				|  |  | +            return 1;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +int laIsInUiItem(laUiItem *ui, laOperator* a, int x, int y){
 | 
	
		
			
				|  |  |      if (x < ui->L || x > ui->R || y < ui->U || y > ui->B) return 0;
 | 
	
		
			
				|  |  | +    if (a && la_RejectByUiList(a,x,y)) return 0;
 | 
	
		
			
				|  |  |      return 1;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int laIsInBound(int x, int y, int l, int r, int u, int b){
 | 
	
	
		
			
				|  | @@ -6817,7 +6873,7 @@ laUiItem *la_DetectUiItemRecursive(laUiList *uil, int x, int y, int LimB, laList
 | 
	
		
			
				|  |  |              continue;
 | 
	
		
			
				|  |  |          }else if (ui->Type == _LA_UI_CONDITION_TOGGLE){
 | 
	
		
			
				|  |  |              laConditionUiExtraData *cued = ui->Extra;
 | 
	
		
			
				|  |  | -            if (laIsInUiItem(ui, x, y)){
 | 
	
		
			
				|  |  | +            if (laIsInUiItem(ui, 0, x, y)){
 | 
	
		
			
				|  |  |                  lstAppendPointer(LocalBuf, uil);
 | 
	
		
			
				|  |  |                  return ui;
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -6834,7 +6890,7 @@ laUiItem *la_DetectUiItemRecursive(laUiList *uil, int x, int y, int LimB, laList
 | 
	
		
			
				|  |  |          //printf("%s > ",ui->Type->Identifier?ui->Type->Identifier:"-");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (ui->Type != _LA_UI_COLLECTION && ui->Type != _LA_UI_COLLECTION_SINGLE &&
 | 
	
		
			
				|  |  | -            ui->Type != _LA_UI_FIXED_GROUP && ui->Type != _LA_UI_TAB && ui->Type != _LA_UI_CANVAS && laIsInUiItem(ui, x, y)){
 | 
	
		
			
				|  |  | +            ui->Type != _LA_UI_FIXED_GROUP && ui->Type != _LA_UI_TAB && ui->Type != _LA_UI_CANVAS && laIsInUiItem(ui, 0, x, y)){
 | 
	
		
			
				|  |  |              int Add=1; if(ui->Type==_LA_UI_COLUMN_ADJUSTER){
 | 
	
		
			
				|  |  |                  if(!la_DetectSplit(ui->C, x)) Add=0;
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -6849,24 +6905,25 @@ laUiItem *la_DetectUiItemRecursive(laUiList *uil, int x, int y, int LimB, laList
 | 
	
		
			
				|  |  |                      lstAppendPointer(LocalBuf, uil);
 | 
	
		
			
				|  |  |                      return tui;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -            }else if (laIsInUiItem(ui, x, y)){
 | 
	
		
			
				|  |  | +            }else if (laIsInUiItem(ui, 0, x, y)){
 | 
	
		
			
				|  |  |                  lstAppendPointer(LocalBuf, uil);return ui;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (ui->Type == _LA_UI_COLLECTION || ui->Type==_LA_UI_COLLECTION_SINGLE){
 | 
	
		
			
				|  |  | -            if (laIsInUiItem(ui, x, y)){
 | 
	
		
			
				|  |  | -                lstAppendPointer(LocalBuf, uil);
 | 
	
		
			
				|  |  | +            if (laIsInUiItem(ui, 0, x, y)){
 | 
	
		
			
				|  |  |                  if (ui->Subs.pFirst) ((laUiList *)ui->Subs.pFirst)->HeightCoeff = LimB;
 | 
	
		
			
				|  |  |                  if(Deep){
 | 
	
		
			
				|  |  |                      for(laUiList* iuil=ui->Subs.pFirst;iuil;iuil=iuil->Item.pNext){
 | 
	
		
			
				|  |  |                          if (laIsInBound(x, y, iuil->L, iuil->R, iuil->U, iuil->B)){
 | 
	
		
			
				|  |  |                              if (tui = la_DetectUiItemRecursive(iuil, x , y , iuil->B, LocalBuf, Deep)){
 | 
	
		
			
				|  |  |                                  lstAppendPointer(LocalBuf, iuil);
 | 
	
		
			
				|  |  | +                                lstAppendPointer(LocalBuf, uil);
 | 
	
		
			
				|  |  |                                  return tui;
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | +                lstAppendPointer(LocalBuf, uil);
 | 
	
		
			
				|  |  |                  return ui;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -6879,7 +6936,7 @@ laUiItem *la_DetectUiItemRecursive(laUiList *uil, int x, int y, int LimB, laList
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            if (laIsInUiItem(ui, x, y)){
 | 
	
		
			
				|  |  | +            if (laIsInUiItem(ui, 0, x, y)){
 | 
	
		
			
				|  |  |                  lstAppendPointer(LocalBuf, uil);
 | 
	
		
			
				|  |  |                  return ui;
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -7990,6 +8047,8 @@ int la_HandleSingleEvent(laEvent *e, laListHandle *Operators){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      la_DestroyConfirmData(&MAIN.InvokeConfirmData);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    //la_PrintOperatorStack();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      while (1){
 | 
	
		
			
				|  |  |          if (!a) break;
 | 
	
		
			
				|  |  |          
 |