*/}}
Browse Source

Optimizations and font etc

YimingWu 1 year ago
parent
commit
a5ac019830
8 changed files with 33 additions and 21 deletions
  1. 9 0
      CMakeLists.txt
  2. 0 1
      la_kernel.c
  3. 1 1
      la_tns.h
  4. 7 3
      la_tns_kernel.c
  5. 7 4
      la_util.c
  6. 0 1
      lagui-config.cmake
  7. 1 1
      resources/la_templates.c
  8. 8 10
      resources/la_widgets.c

+ 9 - 0
CMakeLists.txt

@@ -30,9 +30,18 @@ include_directories(
     lagui
 )
 
+set(LAGUI_FONTS
+    "fonts/NotoEmoji-Regular.ttf"
+    "fonts/NotoSansCJK-Regular.ttc"
+    "fonts/NotoSansMono-Regular.ttf"
+    "fonts/NotoSansSymbols-Regular.ttf"
+    "fonts/NotoSansSymbols2-Regular.ttf"
+)
+
 add_library(lagui ${HEADER_FILES} ${SOURCE_FILES})
 
 install(FILES ${HEADER_FILES} DESTINATION include/lagui)
 install(TARGETS lagui EXPORT lagui-targets DESTINATION lib/lagui)
 install(EXPORT lagui-targets DESTINATION lib/lagui)
 install(FILES lagui-config.cmake DESTINATION lib/lagui)
+install(FILES ${LAGUI_FONTS} DESTINATION $ENV{HOME}/.local/share/fonts/lagui)

+ 0 - 1
la_kernel.c

@@ -177,7 +177,6 @@ Window la_CreateWindowX11(int x, int y, int w, int h, char *title, int SyncToVBl
     XClassHint ch; ch.res_name = "LAGUI_WINDOW"; ch.res_class = "LAGUI_WINDOW";
     XSetClassHint(MAIN.dpy, win, &ch);
 
-
 #define _NET_WM_STATE_ADD 1
     if(w<0&&h<0){
         XEvent xev;

+ 1 - 1
la_tns.h

@@ -1223,7 +1223,7 @@ void tnsRecalculateVertNormal(tnsVert *v);
 void tnsRecalculateFaceAverageNormal(tnsFace *f);
 
 int tnsLoadVectorGraphPackage(const char *name, unsigned int size);
-int tnsGetMonoFontAdvance();
+real tnsGetMonoFontAdvance();
 int tnsInvalidateFontCache();
 int tnsLoadSystemFontMono(char* from, char* mono);
 int tnsLoadSystemFont(char* from, char* name);

+ 7 - 3
la_tns_kernel.c

@@ -2895,7 +2895,7 @@ int next_p2(int a){
         rval <<= 1;
     return rval;
 }
-int tnsGetMonoFontAdvance(){
+real tnsGetMonoFontAdvance(){
     return FM->UsingFont->MonoAdvance;
 }
 int tnsInvalidateFontCache(){
@@ -2927,6 +2927,8 @@ int tnsInvalidateFontCache(){
 tnsFontSingleCharacter *tfntFetchCharTextureIDW(uint32_t ch, int UseMono);
 
 const char* TNS_FONT_LOAD_OPTIONS[9]={"./","fonts/","lagui/fonts/","../","../fonts/","../lagui/fonts/","../../","../../fonts/","../../lagui/fonts/"};
+const char* TNS_FONT_LOAD_OPTIONS_FROM_HOME[2]={".local/share/fonts/lagui/",".local/share/fonts/"};
+
 int tnsLoadSystemFontMono(char* from, char* mono){
     char buf[1024]; if(!FM->UsingFont || !mono || !mono[0]) return 0;
     tnsFont *f=FM->UsingFont;
@@ -2968,8 +2970,10 @@ int tnsLoadSystemFont(char* from, char* name){
     }
 
     int GenHeight=LA_RH*MAIN.FontSize;
-    for(int i=-1;i<9;i++){
-        char* option=(i<0)?from:TNS_FONT_LOAD_OPTIONS[i]; sprintf(buf,"%s%s",option,name);
+    for(int i=-1;i<11;i++){
+        char* option;
+        if(i<9){ option=(i<0)?from:TNS_FONT_LOAD_OPTIONS[i]; sprintf(buf,"%s%s",option,name); }
+        else{ option=TNS_FONT_LOAD_OPTIONS_FROM_HOME[i-9]; sprintf(buf,"%s/%s%s",getenv("HOME"),option,name); }
         FT_Face face; FT_Long i,num_faces; FT_Open_Args args; args.flags=FT_OPEN_PATHNAME; args.pathname=buf;
         if(FT_Open_Face(f->ftlib, &args, -1, &face )) continue;
         num_faces = face->num_faces; FT_Done_Face(face); int found=0;

+ 7 - 4
la_util.c

@@ -46,8 +46,11 @@ int laToUTF8(const uint32_t ch, char* out, char** next){
 int strToUnicode(uint32_t* target, unsigned char* const src){
     uint32_t UC,adv,i=0; unsigned char* source=src; while(target[i]=laToUnicode(source, &adv)) { source+=adv; i++; } target[i]=0; return i;
 }
+int strToUTF8Lim(unsigned char* target, uint32_t* const src, int count){
+    uint32_t* source=src; unsigned char* out=target; int i=0; while(laToUTF8(*source, out, &out)){ source++; i++; if(i>=count) break; } *out=0; return out-target;
+}
 int strToUTF8(unsigned char* target, uint32_t* const src){
-    uint32_t* source=src; unsigned char* out=target; while(laToUTF8(*source, out, &out)){ source++; } *out=0; return out-target;
+    strToUTF8Lim(target,src,INT_MAX);
 }
 int strlenU(uint32_t* str){ int i=0; while(str[i]!=0) i++; return i; }
 int strcpyU(uint32_t* target, uint32_t* const source ){ int i=0; while(source[i]!=0){ target[i]=source[i]; i++; } target[i]=0; }
@@ -1702,7 +1705,7 @@ void strBeginEdit(laStringEdit **se, char *FullStr){
 char* strGetEditString(laStringEdit *se, int SelectionOnly){
     if(!se) return 0; char* result=0; int next=0, max=0, len=0;
     arrEnsureLength(&result, 0, &max, sizeof(char)); int NextChar=0;
-    int Line=0, starti=0, endat=0;
+    int Line=0, starti=0, endat=INT_MAX;
     for(laStringLine* sl=se->Lines.pFirst;sl;sl=sl->Item.pNext,Line++){
         starti=0;
         if(SelectionOnly && Line<se->BeginLine){ continue; }
@@ -1710,9 +1713,9 @@ char* strGetEditString(laStringEdit *se, int SelectionOnly){
         int tlen=strlenU(&sl->Buf[starti]); int Extra=sl->Item.pNext?2:1;
         arrEnsureLength(&result, (len+tlen)*4+Extra, &max, sizeof(char));
         if(SelectionOnly && Line==se->EndLine){ endat=NextChar+se->EndBefore-starti; }
-        NextChar+=strToUTF8(&result[NextChar], &sl->Buf[starti]); len+=tlen;
+        NextChar+=strToUTF8Lim(&result[NextChar], &sl->Buf[starti], endat); len+=tlen;
         if(Extra==2){ result[NextChar]='\n'; NextChar+=1; }
-        if(SelectionOnly && Line==se->EndLine){ result[endat]=0; break; }
+        if(SelectionOnly && Line==se->EndLine){ break; }
     }
     return result;
 }

+ 0 - 1
lagui-config.cmake

@@ -31,7 +31,6 @@ set(LAGUI_INCLUDE_DIRS_ALL
     ${CMAKE_SOURCE_DIR}
     ${X11_INCLUDE_DIR}
     ${GLEW_INCLUDE_PATH}
-    ${GLM_INCLUDE_PATH}
     ${FREETYPE_INCLUDE_DIRS}
     ${LAGUI_INCLUDE_DIRS}
     CACHE INTERNAL "Include dirs of LaGUI and dependencies"

+ 1 - 1
resources/la_templates.c

@@ -1175,7 +1175,7 @@ void laui_ResourceFolderItem(laUiList *uil, laPropPack *Base, laPropPack *Operat
 }
 
 void laui_LogItem(laUiList *uil, laPropPack *Base, laPropPack *OperatorInst, laColumn *ExtraColumns, int context){
-    laShowItem(uil, ExtraColumns, Base, "content")->Flags|=LA_TEXT_LINE_WRAP|LA_TEXT_USE_NEWLINE|LA_TEXT_MONO|LA_TEXT_LCD_16;
+    laShowItem(uil, ExtraColumns, Base, "content")->Flags|=LA_TEXT_LINE_WRAP|LA_TEXT_USE_NEWLINE|LA_TEXT_MONO|LA_UI_FLAGS_NO_TOOLTIP;
 }
 
 void laui_NodeRack(laUiList *uil, laPropPack *This, laPropPack *Extra, laColumn *UNUSED, int context){

+ 8 - 10
resources/la_widgets.c

@@ -986,7 +986,7 @@ void la_MultiStringDraw(laUiItem *ui, int h){
     }
 
     laStringEdit* se=ui->Extra->Edit;
-    int MonoWidth=tnsGetMonoFontAdvance(); int Count=se->TotalLines;
+    real MonoWidth=tnsGetMonoFontAdvance(); int Count=se->TotalLines;
     while(Count){ Count/=10; NumberWidth+=MonoWidth; }
 
     if (ui->State!=LA_UI_ACTIVE){
@@ -1752,7 +1752,7 @@ int OPINV_EditStringCopySelection(laOperator *a, laEvent *e){
 
 int la_ProcessTextEdit(laEvent *e, laStringEdit *se, laUiItem* ui){
     int Select=e->SpecialKeyBit&LA_KEY_SHIFT;
-    int _L, MonoWidth;
+    real _L, MonoWidth;
     switch (e->Type){
     case LA_INPUT:
         switch (e->Input){
@@ -1775,15 +1775,13 @@ int la_ProcessTextEdit(laEvent *e, laStringEdit *se, laUiItem* ui){
     case LA_L_MOUSE_DOWN:
     case LA_MOUSEMOVE:
         if(!ui) return 0;
-        MonoWidth=tnsGetMonoFontAdvance(); _L=(*ui->Type->Theme)->LM;
+        MonoWidth=tnsGetMonoFontAdvance(); _L=(*ui->Type->Theme)->LM+ui->L;
         int Count=se->TotalLines; while(Count){ Count/=10; _L+=MonoWidth; }
         if(e->Type==LA_L_MOUSE_DOWN){
             strSetCursor(se, (e->y-ui->U)/LA_RH+se->ViewStartLine, (e->x-_L-MonoWidth/2)/MonoWidth); strCancelSelect(se); strLazySelect(se);
             se->MouseSelecting=1; se->CursorPreferBefore=se->CursorBefore; return 1;
         }else{
             if(!se->MouseSelecting) return 0;
-            MonoWidth=tnsGetMonoFontAdvance(); _L=(*ui->Type->Theme)->LM;
-            int Count=se->TotalLines; while(Count){ Count/=10; _L+=MonoWidth; }
             strSetCursor(se, (e->y-ui->U)/LA_RH+se->ViewStartLine, (e->x-_L-MonoWidth/2)/MonoWidth); strEndSelect(se);
             se->CursorPreferBefore=se->CursorBefore; return 1;
         }return 0;
@@ -1933,8 +1931,8 @@ int OPMOD_IntArrayHorizon(laOperator *a, laEvent *e){
         return LA_RUNNING;
     }
 
-    if (ui->State == LA_UI_EDITING){
-        if (la_ProcessTextEdit(e, uit->Edit, ui))laRedrawCurrentPanel();
+    if (uit->Edit){
+        if (la_ProcessTextEdit(e, uit->Edit, ui)) laRedrawCurrentPanel();
         return LA_RUNNING;
     }
 
@@ -2567,9 +2565,9 @@ int OPMOD_MultiString(laOperator *a, laEvent *e){
             ui->State = LA_UI_ACTIVE;
             laGetString(&ui->PP, _buf, &buf);
             strBeginEdit(&es->Edit,buf);la_SetMultistringViewRange(ui,es->Edit,bt);
+            laRedrawCurrentPanel();
+            return LA_RUNNING;
         }
-        laRedrawCurrentPanel();
-        return LA_RUNNING;
     }
 
     if (e->Type == LA_R_MOUSE_DOWN){
@@ -2580,7 +2578,7 @@ int OPMOD_MultiString(laOperator *a, laEvent *e){
         return LA_RUNNING;
     }
 
-    if (ui->State == LA_UI_EDITING){
+    if (ui->State == LA_UI_ACTIVE){
         if (la_ProcessTextEdit(e, se, ui))laRedrawCurrentPanel();
         return LA_RUNNING;
     }