📄 window_manager.c
字号:
SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'",str); return(NO); } } /* * Case there is just one string */ if (str2 == NULL) { /* Try to read a size */ l = strtol(str1,&endp,0); if (*endp == '\0') { if (l<=0) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font size '%d'",l); return(NO); } if (currentFont == NULL) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'. You must specify the name of the font.",str); return(NO); } *size = l; *style = FontPlain; *name = currentFont->fontName; *encoding = FontEncodingDefault; return(YES); } /* Or just a type */ *style = GetFontStyleFromStyleName(str1); if (*style != FontError) { if (currentFont == NULL) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'. You must specify the name of the font and its size.",str); return(NO); } *size = currentFont->size; *name = currentFont->fontName; *encoding = FontEncodingDefault; return(YES); } /* Or just a name */ if (currentFont == NULL) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'. You must specify the size of the font",str); return(NO); } *size = currentFont->size; *style = FontPlain; strcpy(str0,str1); *name = str0; *encoding = FontEncodingDefault; return(YES); } /* * Case there are only two strings : string-string */ if (str3 == NULL) { /* Try to read a size */ l = strtol(str1,&endp,0); if (*endp == '-') { if (l<=0) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font size '%d'",l); return(NO); } if (currentFont == NULL) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'. You must specify the name of the font.",str); return(NO); } /* And the type */ *style = GetFontStyleFromStyleName(str2); if (*style != FontError) { *size = l; *name = currentFont->fontName; *encoding = FontEncodingDefault; return(YES); } SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'.",str); return(NO); } /* Or a font name */ *endStr1 = '\0'; strcpy(str0,str1); *name = str0; *endStr1 = '-'; /* And a size */ l = strtol(str2,&endp,0); if (*endp == '\0') { if (l<=0) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font size '%d'",l); return(NO); } *style = FontPlain; *size = l; *encoding = FontEncodingDefault; return(YES); } /* Or a style */ *style = GetFontStyleFromStyleName(str2); if (*style != FontError) { if (currentFont == NULL) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'. You must specify the size of the font.",str); return(NO); } *size = currentFont->size; *encoding = FontEncodingDefault; return(YES); } SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'.",str); return(NO); } /* * Case there are three strings : string-string-string */ /* Read a font name */ *endStr1 = '\0'; strcpy(str0,str1); *name = str0; *endStr1 = '-'; /* And a size */ l = strtol(str2,&endp,0); if (*endp == '-') { if (l<=0) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font size '%d'",l); return(NO); } } else { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'.",str); return(NO); } *size = l; /* And a style */ if (str4 != NULL) *endStr3 = '\0'; *style = GetFontStyleFromStyleName(str3); if (str4 != NULL) *endStr3 = '-'; if (*style == FontError) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'.",str); return(NO); } /* And an encoding */ if (str4 != NULL) { *encoding = GetFontEncodingFromEncodingName(str4); if (*encoding == FontEncodingError) { SetErrorf("GetFontNameSizeStyleEncoding() : Bad font name '%s'.",str); return(NO); } } else { *encoding = FontEncodingDefault; } return(YES);} /* Is the font exist ? */char WExistFont(char *str,FONTID *id){ char *name; int size; unsigned char style,encoding; if (GetFontNameSizeStyleEncoding(str,&name,&size,&style,&encoding) == NO) Errorf1("");; if (GraphicMode) return(XXExistFont(name,size,style,encoding,id)); else return(1);}void WFlushEvents(){ if (GraphicMode) XXFlushEvents();}/* * Allocation and desallocation of a font */static FONT NewFont(FONTID id,char *name,int size, unsigned char style, unsigned char encoding){ FONT font; font = (FONT) Malloc(sizeof (struct font)); font->fontName = CopyStr(name); font->size = size; font->style = style; font->encoding = encoding; font->postscriptName = NULL; font->postscriptSize = -1; font->id = id; font->nRef = 0; font->name = CopyStr(GetFontFullName(name,size,style,encoding)); if (GraphicMode) XXGetFontInfo(font,&(font->ascent),&(font->descent),&(font->interline)); else font->ascent = font->descent = font->interline = 8; AddElemHashTable(theFontHashTable,(AHASHELEM) font); return(font);}/* Returns the font or create it if it does not exist or returns NULL */static FONT CGetFont(char *str){ FONT f; FONTID id; char *name; int size; unsigned char style,encoding; char *str1; f = (FONT) GetElemHashTable(theFontHashTable,str); if (f != NULL) return (f); if (GetFontNameSizeStyleEncoding(str, &name,&size, &style,&encoding) == NO) { SetErrorf("CGetFont() : Bad font syntax '%s'",str); return(NULL); } str1 = GetFontFullName(name,size,style,encoding); f = (FONT) GetElemHashTable(theFontHashTable,str1); if (f != NULL) return (f); if (!WExistFont(str,&id)) { SetErrorf("CGetFont() : font '%s' does not exist",str); return(NULL); } return(NewFont(id,name,size,style,encoding)); }/* * Parse a font name */ char ParseFont_(char *arg, FONT def, FONT *f){ char *str; *f = def; if (arg == NULL) { SetErrorf("ParseFont_() : NULL string cannot be converted to a font"); return(NO); } if (*arg == '\0') { SetErrorf("ParseFont_() : empty string cannot be converted to a font"); return(NO); } if (ParseStr_(arg,NULL,&str) == NO) return(NO); if (!strcmp("default",str)) { *f = defaultFont; return(YES); } *f = CGetFont(str); if (*f == NULL) { *f = def; return(NO); } return(YES);}void ParseFont(char *arg, FONT *f) { if (ParseFont_(arg,0,f) == NO) Errorf1("");}/* Change the Font of the text */void WSetFont(WINDOW win,FONT font){ if (win->flagHide) return; currentFont = font; if (PSMode) PSSetFont(font); if (GraphicMode) XXSetFont(win->frame,font);}/* Get the current Font of the text */FONT WGetFont(WINDOW win){ if (win->flagHide) return(NULL); return(currentFont);} /* * The font command */ void C_Font(char **argv){ char *action,*str,*str1,*str2,*hModeStr,*vModeStr,opt,flagFixed; LWFLOAT x,y,rx,rw,ry,rh,angle; int hMode,vMode, encoding; GOBJECT o; FONT font; int size; unsigned char style; char flagSize,flagStyle; LISTV lv; argv = ParseArgv(argv,tWORD,&action,-1); if (!strcmp(action,"exist")) { argv = ParseArgv(argv,tSTR,&str,0); if (WExistFont(str,NULL)) SetResultInt(1); else SetResultInt(0); return; } if (!strcmp(action,"list")) { if (*argv == NULL || !strcmp(*argv,"-e")) str = "*"; else argv = ParseArgv(argv,tSTR,&str,-1); str1 = "default"; flagFixed = 0; while(opt = ParseOption(&argv)) { switch(opt) { case 'e': argv = ParseArgv(argv,tSTR,&str1,-1); break; case 'f': flagFixed = 1; break; default: ErrorOption(opt); } NoMoreArgs(argv); } encoding = GetFontEncodingFromEncodingName(str1); if (encoding == FontEncodingError) Errorf1(""); lv = TNewListv(); XXFontMatch(str,encoding,flagFixed,lv); SetResultValue((VALUE) lv); return; } if (!strcmp(action,"default")) { argv = ParseArgv(argv,tFONT_,NULL,&font,0); if (font != NULL) currentFont = defaultFont = font; SetResultStr(defaultFont->name); return; } argv = ParseArgv(argv,tFONT,&font,-1); if (!strcmp(action,"info")) { NoMoreArgs(argv); lv = TNewListv(); AppendInt2Listv(lv,font->ascent); AppendInt2Listv(lv,font->descent); AppendInt2Listv(lv,font->interline); SetResultValue(lv); return; } if (!strcmp(action,"size")) { NoMoreArgs(argv); SetResultInt(font->size); return; } if (!strcmp(action,"style")) { NoMoreArgs(argv); SetResultStr(GetFontStyleNameFromStyle(font->style)); return; } if (!strcmp(action,"name")) { NoMoreArgs(argv); SetResultStr(font->fontName); return; } if (!strcmp(action,"encoding")) { NoMoreArgs(argv); SetResultStr(GetFontEncodingNameFromEncoding(font->style)); return; } if (!strcmp(action,"rect")) { argv = ParseArgv(argv,tSTR,&str,tWORD,&hModeStr,tFLOAT,&x,tWORD,&vModeStr,tFLOAT,&y,tFLOAT_,0.0,&angle,tGOBJECT_,NULL,&o,0); if (!strcmp(hModeStr,"left")) hMode = HPositionLeftStr; else if (!strcmp(hModeStr,"right1")) hMode = HPositionRight1Str; else if (!strcmp(hModeStr,"rightN") || !strcmp(hModeStr,"right")) hMode = HPositionRightNStr; else if (!strcmp(hModeStr,"middle1")) hMode = HPositionMiddle1Str; else if (!strcmp(hModeStr,"middleN") || !strcmp(hModeStr,"middle")) hMode = HPositionMiddleNStr; else Errorf("Bad horizontal string position mode '%s'",hModeStr); if (!strcmp(vModeStr,"up")) vMode = VPositionUpStr; else if (!strcmp(vModeStr,"down")) vMode = VPositionDownStr; else if (!strcmp(vModeStr,"base")) vMode = VPositionBaseStr; else if (!strcmp(vModeStr,"middle")) vMode = VPositionMiddleStr; else if (!strcmp(vModeStr,"middleUp")) vMode = VPositionMiddleUpStr; else Errorf("Bad vertical string position mode '%s'",vModeStr); WGetBoundRectString(o,font,str,hMode,x,vMode,y,angle,&rx,&ry,&rw,&rh); lv = TNewListv(); AppendFloat2Listv(lv,rx); AppendFloat2Listv(lv,ry); AppendFloat2Listv(lv,rw); AppendFloat2Listv(lv,rh); SetResultValue(lv); return; } Errorf("Bad action '%s'",action);} /* * Initializations */static void WInitFont(void) { FONTID id; char *name; int size; theFontHashTable = NewHashTable(40); if (GraphicMode) name = XXGetDefaultFont(&id,&size); else name = "fixed"; defaultFont = NewFont(id,name,size,FontPlain,FontEncodingDefault); currentFont = defaultFont;}void C_ChooseFile(char **argv){ char *str; NoMoreArgs(argv); str = XXChooseFileDialog("Choose a file",NO); SetResultStr(str);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -