*/}}
Ver código fonte

Apparently ODE works

Yiming Wu 2 anos atrás
pai
commit
5069539f62
3 arquivos alterados com 17 adições e 27 exclusões
  1. 11 12
      source/lagui/la_kernel.c
  2. 3 12
      source/lagui/la_util.c
  3. 3 3
      source/lagui/la_util.h

+ 11 - 12
source/lagui/la_kernel.c

@@ -144,6 +144,7 @@ void la_DestroyWindow(laWindow *wnd){
     lstRemoveItem(&MAIN.Windows, wnd);
 
     memFree(wnd);
+    MAIN.CurrentWindow=MAIN.Windows.pFirst;
 }
 
 void laRenameWindow(laWindow* wnd, char* name){
@@ -411,7 +412,6 @@ void laShutoff(){
     laSharedTypeItem* sti; while(sti=lstPopItem(&MAIN.SharedTypePointerSync)){ memFree(sti); }
     laKeyMapItem* kmi; while(kmi=lstPopItem(&MAIN.KeyMap.Items)){ la_FreeKeyMapItem(kmi); }
     laTheme* t; while(t=lstPopItem(&MAIN.Themes)){ la_DestroyTheme(t); }
-    laPanel* p; while(p=lstPopItem(&MAIN.WastedPanels)){ memFree(p); }
 
     arrFree(&MAIN.InputBuf,&MAIN.InputBufNext);
     arrFree(&MAIN.InputBufU,&MAIN.InputBufUNext);
@@ -427,6 +427,7 @@ void laShutoff(){
     tnsQuit();
 
     laPropContainer* pc; while(pc=lstPopItem(&MAIN.PropContainers)){ la_FreePropertyContainer(pc); }
+    laPanel* p; while(p=lstPopItem(&MAIN.WastedPanels)){ memFree(p); }
 
     strSafeDump();
 
@@ -2157,14 +2158,14 @@ void laDeferredDestroyPanel(laPanel *p){
 void laDestroySinglePanel(laPanel *p){
     la_SetPropMathcerContext(p);
 
-    if (p->PropLinkPP.LastPs->p->SubProp->Props.pFirst){
+    if (p->PropLinkPP.LastPs&&p->PropLinkPP.LastPs->p->SubProp->Props.pFirst){
         for(laProp* prop=p->PropLinkPP.LastPs->p->SubProp->Props.pFirst;prop;prop=prop->Item.pNext){
             { /* la_StopUsingPropPack(&prop->DetachedPP); */ }
             //laStopUsingDataBlock(prop->DetachedPP.LastPs->UseInstance, prop->DetachedPP.LastPs->p,MAIN.PropMatcherContextP);
         }
     }
 
-    if(p==MAIN.CurrentWindow->MaximizedUiPanel){ laRestoreCanvasUI(); }
+    if(MAIN.CurrentWindow&&p==MAIN.CurrentWindow->MaximizedUiPanel){ laRestoreCanvasUI(); }
 
     la_DestroyUiList(&p->UI, 1, 1, 0);
     la_DestroyUiList(&p->TitleBar, 1, 1, 0);
@@ -5892,7 +5893,7 @@ void laRequestDelayEvent(real Seconds){
     MAIN.DelayTriggered=0; MAIN.DelayStart=MAIN.TimeAccum; MAIN.DelayTime = Seconds; }
 
 int la_UiStillInService(void *UiInstance){
-    laOperator *ai, *dai;
+    laOperator *ai, *dai; if(!MAIN.CurrentWindow) return 0;
     for (ai = MAIN.CurrentWindow->Operators.pFirst; ai; ai = ai->Item.pNext){
         if (ai->Instance == UiInstance) return 1;
     }
@@ -5942,7 +5943,7 @@ void la_StopAllOperators(){
     }
     for (ai = MAIN.CurrentWindow->Operators.pFirst; ai; ai = NextAi){
         NextAi = ai->Item.pNext;
-        if (ai->Instance == ai->ToPanel && !ai->ToPanel->IsMenuPanel){
+        if (ai->ToPanel && ai->Instance == ai->ToPanel && !ai->ToPanel->IsMenuPanel){
             laHidePanelWithDissoveEffect(ai->ToPanel);
             ai->ToPanel->LaterDestroy = 1;
         }
@@ -6081,6 +6082,7 @@ int la_UpdateOperatorHints(laWindow* w){
     laSafeString* ss=0;
     for(laOperator* o=w->Operators.pFirst;o;o=o->Item.pNext){
         if(o->RuntimeHint&&o->RuntimeHint->Ptr){ strSafePrint(&ss, "%s | %s  ", o->Type->Name, o->RuntimeHint->Ptr);}
+        strSafeDestroy(&o->RuntimeHint);
     }
     if((w->OperatorHints&&ss&&strSame(ss->Ptr,w->OperatorHints->Ptr))||(!w->OperatorHints&&!ss)){ //pass
     }else{
@@ -6214,7 +6216,7 @@ int la_HandleEvents(laWindow *w){
 
             if (e && !w->Operators.pFirst){ laInvokeUi(0, "LA_window_operator", e, w, 0, 0); }
 
-            if (e) if(!la_HandleSingleEvent(e, &w->Operators)){ la_StopAllOperators(); return 0; } //EXIT
+            if (e) if(!la_HandleSingleEvent(e, &w->Operators)){ la_StopAllOperators(); FreeMem(e); return 0; } //EXIT
 
             FreeMem(e);
         }
@@ -6385,7 +6387,7 @@ void laMainLoop(){
 
         for (w=MAIN.Windows.pFirst;w;w = NextW){
             NextW = w->Item.pNext;
-            if(!la_HandleEvents(w)) return;
+            if(!la_HandleEvents(w)){ laShutoff(); return; }
         }
         for(w=MAIN.Windows.pFirst;w;w=w->Item.pNext){
             tnsSwitchToCurrentWindowContext(w);
@@ -6396,7 +6398,7 @@ void laMainLoop(){
         }
         //t2 = clock();
         laRecordTime(&FrameEndTime);
-        TimeInterval = /* (t2 - t1) / 1000.0;*/ laTimeElapsedSecondsf(&FrameEndTime, &FrameStartTime);
+        TimeInterval = laTimeElapsedSecondsf(&FrameEndTime, &FrameStartTime);
         Pause = (1.0 / MAIN.TopFramerate - TimeInterval);
 
         if (Pause > 0){
@@ -6404,10 +6406,7 @@ void laMainLoop(){
             usleep(ms);
         }
 
-        laRecordTime(&FrameEndTime);
-        TimeInterval = /* (t2 - t1) / 1000.0;*/ laTimeElapsedSecondsf(&FrameEndTime, &FrameStartTime);
-
-        MAIN.TimeAccum += (MAIN.LastFrameTime = (Pause + TimeInterval));
+        MAIN.TimeAccum += (MAIN.LastFrameTime = Pause+TimeInterval);
         FrameInterval = 1.0 / MAIN.Animation.FrameRate;
     }
 }

+ 3 - 12
source/lagui/la_util.c

@@ -11,7 +11,6 @@ Send feedback to la_support@nicksbest.com
 #include "la_interface.h"
 #include <stdio.h>
 #include <stdlib.h>
-#include <time.h>
 
 laSafeStringCollection SSC;
 
@@ -50,19 +49,11 @@ struct tm *laGetFullTime(){
 }
 
 void laRecordTime(laTimeRecorder *tr){
-    //GetSystemTime(&tr->Time);
-    //time(&tr->At);
-    tr->At = clock();
+    clock_gettime(CLOCK_REALTIME, &tr->ts);
 }
 real laTimeElapsedSecondsf(laTimeRecorder *End, laTimeRecorder *Begin){
-    return (real)(End->At - Begin->At) / CLOCKS_PER_SEC;
-}
-int laTimeElapsedMilliseconds(laTimeRecorder *End, laTimeRecorder *Begin){ return 0;
-    //return (
-    //    End->Time.wMilliseconds - Begin->Time.wMilliseconds +
-    //    (End->Time.wSecond - Begin->Time.wSecond) * 1000 +
-    //    (End->Time.wMinute - Begin->Time.wMinute) * 60000 +
-    //    (End->Time.wHour - Begin->Time.wHour) * 3600000);
+    real sec=End->ts.tv_sec-Begin->ts.tv_sec; sec+=((End->ts.tv_nsec-Begin->ts.tv_nsec)/1e9);
+    return sec;
 }
 
 void laSetAuthorInfo(char *Name, char *CopyrightString){

+ 3 - 3
source/lagui/la_util.h

@@ -10,7 +10,9 @@ Send feedback to la_support@nicksbest.com
 */
 
 #define _CRT_SECURE_NO_WARNINGS
+#define _GNU_SOURCE
 
+#include <time.h>
 
 #include "GL/glew.h"
 
@@ -316,10 +318,8 @@ STRUCTURE(laAVLTreeReal64) {
 	laMemoryPool       MemoryPool;
 };
 
-
 STRUCTURE(laTimeRecorder) {
-	//SYSTEMTIME Time;
-	time_t     At;
+	struct timespec ts;
 };
 
 STRUCTURE(laTranslationNode) {