⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 window_manager.c

📁 LastWave
💻 C
📖 第 1 页 / 共 5 页
字号:
      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 + -