|
@@ -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;
|
|
|
|