fontsel.c
来自「nedit 是一款linux下的开发源码的功能强大的编辑器」· C语言 代码 · 共 1,313 行 · 第 1/4 页
C
1,313 行
if (ctrlBlk.sel2 != NULL) { XmStringFree(items[0]); items[0] = XmStringCreate(ctrlBlk.sel2, XmSTRING_DEFAULT_CHARSET); XmListSelectItem(ctrlBlk.styleList, items[0], FALSE); XmListSetBottomItem(ctrlBlk.styleList, items[0]); } for (i = 0; i < itemCount2; i++) XmStringFree(items[i]); } if (dontChange != SIZE) { for (i = 0; i < itemCount3; i++) { items[i] = XmStringCreate(itemBuf3[i], XmSTRING_DEFAULT_CHARSET); XtFree(itemBuf3[i]); } XmListDeleteAllItems(ctrlBlk.sizeList); XmListAddItems(ctrlBlk.sizeList, items, itemCount3, 1); if (ctrlBlk.sel3 != NULL) { XmStringFree(items[0]); items[0] = XmStringCreate(ctrlBlk.sel3, XmSTRING_DEFAULT_CHARSET); XmListSelectItem(ctrlBlk.sizeList, items[0], FALSE); XmListSetBottomItem(ctrlBlk.sizeList, items[0]); } for (i = 0; i < itemCount3; i++) XmStringFree(items[i]); }}/* returns TRUE if argument is not name of a proportional font */static int notPropFont(const char *font){ char buff1[TEMP_BUF_SIZE]; getStringComponent(font, 11, buff1); if ((strcmp(buff1, "p") == 0) || (strcmp(buff1, "P") == 0)) return(FALSE); else return(TRUE);}/* returns TRUE if the style portion of the font matches the currently selected style */static int styleMatch(xfselControlBlkType *ctrlBlk, const char *font){ char buff[TEMP_BUF_SIZE]; if (ctrlBlk->sel2 == NULL) return(TRUE); getStylePart(font, buff); if (strcmp(buff, ctrlBlk->sel2) == 0) return(TRUE); else return(FALSE);}/* returns TRUE if the size portion of the font matches the currently selected size */static int sizeMatch(xfselControlBlkType *ctrlBlk, const char *font){ char buff[TEMP_BUF_SIZE]; if (ctrlBlk->sel3 == NULL) return(TRUE); getSizePart(font, buff, ctrlBlk->showSizeInPixels); if (strcmp(buff, ctrlBlk->sel3) == 0) return(TRUE); else return(FALSE);}/* returns TRUE if the font portion of the font matches the currently selected font */static int fontMatch(xfselControlBlkType *ctrlBlk, const char *font){ char buff[TEMP_BUF_SIZE]; if (ctrlBlk->sel1 == NULL) return(TRUE); getFontPart(font, buff); if (strcmp(buff, ctrlBlk->sel1) == 0) return(TRUE); else return(FALSE);}/* inserts a string into correct sorted position in a list */static void addItemToList(char **buf, const char *item, int *count){ int i, j; if (*count == MAX_ENTRIES_IN_LIST) { fprintf(stderr, "Trying to add more than MAX_ENTRIES_IN_LIST "); fprintf(stderr, "(%d) entries to array\n", MAX_ENTRIES_IN_LIST); return; } for (i = 0; i < *count; i++) { if (strcmp(buf[i], item) == 0) return; if (strcmp(buf[i], item) > 0) break; } for (j = *count; j > i; j--) buf[j] = buf[j-1]; buf[i] = XtMalloc(strlen(item) + 1); strcpy(buf[i], item); (*count)++;}/* given a font name this function returns the part used in the first scroll list */static void getFontPart(const char *font, char *buff1){ char buff2[TEMP_BUF_SIZE], buff3[TEMP_BUF_SIZE]; char buff4[TEMP_BUF_SIZE]; getStringComponent(font, 2, buff1); getStringComponent(font, 1, buff2); sprintf(buff3, "%s (%s", buff1, buff2); getStringComponent(font, 13, buff1); getStringComponent(font, 14, buff4); if (((strncmp(buff1, "iso8859", 7) == 0) || (strncmp(buff1, "ISO8859", 7) == 0)) && (strcmp(buff4, "1") == 0)) sprintf(buff1, "%s)", buff3); else { sprintf(buff2, "%s, %s,", buff3, buff1); sprintf(buff1, "%s %s)", buff2, buff4); }}/* given a font name this function returns the part used in the second scroll list */static void getStylePart(const char *font, char *buff1){ char buff2[TEMP_BUF_SIZE], buff3[TEMP_BUF_SIZE]; getStringComponent(font, 3, buff3); getStringComponent(font, 5, buff2); if ((strcmp(buff2, "normal") != 0) && (strcmp(buff2, "Normal") != 0) && (strcmp(buff2, "NORMAL") != 0)) sprintf(buff1, "%s %s", buff3, buff2); else strcpy(buff1, buff3); getStringComponent(font, 6, buff2); if (buff2[0] != '\0') sprintf(buff3, "%s %s", buff1, buff2); else strcpy(buff3, buff1); getStringComponent(font, 4, buff2); if ((strcmp(buff2, "o") == 0) || (strcmp(buff2, "O") == 0)) sprintf(buff1, "%s oblique", buff3); else if ((strcmp(buff2, "i") == 0) || (strcmp(buff2, "I") == 0)) sprintf(buff1, "%s italic", buff3); if (strcmp(buff1, " ") == 0) strcpy(buff1, "-");}/* given a font name this function returns the part used in the third scroll list */static void getSizePart(const char *font, char *buff1, int inPixels){ int size; if (inPixels) { getStringComponent(font, 7, buff1); size = atoi(buff1); sprintf(buff1, "%2d", size); } else { double temp; getStringComponent(font, 8, buff1); size = atoi(buff1); temp = (double)size / 10.0; if (buff1[strlen(buff1) - 1] == '0') { size = (int)floor(temp+0.5); sprintf(buff1, "%2d", size); } else sprintf(buff1, "%4.1f", temp); }}/* Call back functions start from here - suffix Action in the function name is for the callback function for the corresponding widget */static void propFontToggleAction(Widget widget, xfselControlBlkType *ctrlBlk, XmToggleButtonCallbackStruct *call_data){ if (call_data->reason == XmCR_VALUE_CHANGED) { if (ctrlBlk->showPropFonts == PREF_FIXED) ctrlBlk->showPropFonts = PREF_PROP; else ctrlBlk->showPropFonts = PREF_FIXED; if (ctrlBlk->sel1 != NULL) XtFree(ctrlBlk->sel1); ctrlBlk->sel1 = NULL; if (ctrlBlk->sel2 != NULL) XtFree(ctrlBlk->sel2); ctrlBlk->sel2 = NULL; if (ctrlBlk->sel3 != NULL) XtFree(ctrlBlk->sel3); ctrlBlk->sel3 = NULL; setupScrollLists(NONE, *ctrlBlk); XmTextSetString(ctrlBlk->fontNameField, ""); enableSample(ctrlBlk, False, NULL); }}static void sizeToggleAction(Widget widget, xfselControlBlkType *ctrlBlk, XmToggleButtonCallbackStruct *call_data){ int i, makeSelection; char newSize[10]; XmString str; if (call_data->reason == XmCR_VALUE_CHANGED) { makeSelection = (ctrlBlk->sel3 != NULL); for (i = 0; (makeSelection) && (i < ctrlBlk->numFonts); i++) if ((fontMatch(ctrlBlk, ctrlBlk->fontData[i])) && (styleMatch(ctrlBlk, ctrlBlk->fontData[i])) && (sizeMatch(ctrlBlk, ctrlBlk->fontData[i]))) { getSizePart(ctrlBlk->fontData[i], newSize, !ctrlBlk->showSizeInPixels); break; } if (ctrlBlk->showSizeInPixels) ctrlBlk->showSizeInPixels = FALSE; else ctrlBlk->showSizeInPixels = TRUE; if (ctrlBlk->sel3 != NULL) XtFree(ctrlBlk->sel3); ctrlBlk->sel3 = NULL; setupScrollLists(NONE, *ctrlBlk); if (makeSelection) { str = XmStringCreate(newSize, XmSTRING_DEFAULT_CHARSET); XmListSelectItem(ctrlBlk->sizeList, str, TRUE); XmListSetBottomItem(ctrlBlk->sizeList, str); XmStringFree(str); } }}static void enableSample(xfselControlBlkType *ctrlBlk, Bool turn_on, XmFontList *fontList){ int n=0; Arg args[4]; XtSetArg(args[n], XmNeditable, turn_on); n++; XtSetArg(args[n], XmNcursorPositionVisible, turn_on); n++; if( turn_on ) { if( !fontList ) { fprintf(stderr, "nedit: Internal error in fontsel.c, line %i\n", \ __LINE__); } else { XtSetArg(args[n], XmNfontList, *fontList); n++; } XtSetArg(args[n], XmNforeground, ctrlBlk->sampleFG); n++; } else { XtSetArg(args[n], XmNforeground, ctrlBlk->sampleBG); n++; } XtSetValues(ctrlBlk->dispField, args, n); /* Make sure the sample area gets resized if the font size changes */ XtUnmanageChild(ctrlBlk->dispField); XtManageChild(ctrlBlk->dispField);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?