📄 draw.c
字号:
static int varyDist = 50; static int minDist = 50; int t; int dist; if (SFcurrentListY < SFlowerY) { dist = SFlowerY - SFcurrentListY; } else if (SFcurrentListY > SFupperY) { dist = SFcurrentListY - SFupperY; } else { return (unsigned long) 1; } t = maxVal - ((maxVal / varyDist) * (dist - minDist)); if (t < 1) { t = 1; } if (t > maxVal) { t = maxVal; } return (unsigned long) t;}static void SFscrollTimer (XtPointer cd, XtIntervalId *id) { SFDir *dir; int save; intptr_t n; n = (intptr_t) cd; dir = &(SFdirs[SFdirPtr + n]); save = dir->vOrigin; if (SFcurrentListY < SFlowerY) { if (dir->vOrigin > 0) { SFvSliderMovedCallback ( selFileVScrolls[n], (XtPointer) n, (XtPointer) ((intptr_t)(dir->vOrigin) - 1) ); } } else if (SFcurrentListY > SFupperY) { if (dir->vOrigin < dir->nEntries - SFlistSize) { SFvSliderMovedCallback ( selFileVScrolls[n], (XtPointer) n, (XtPointer) ((intptr_t)(dir->vOrigin) + 1) ); } } if (dir->vOrigin != save) { if (dir->nEntries) { XawScrollbarSetThumb ( selFileVScrolls[n], (float) (((double) dir->vOrigin) / dir->nEntries), (float) (((double) (( dir->nEntries < SFlistSize ) ? dir->nEntries : SFlistSize)) / dir->nEntries) ); } } if (SFbuttonPressed) { SFscrollTimerId = XtAppAddTimeOut ( SFapp, SFscrollTimerInterval (), SFscrollTimer, (XtPointer) n ); }}static int SFnewInvertEntry (intptr_t n, XMotionEvent *event) { int x, y; int new; static int SFscrollTimerAdded = 0; x = event->x; y = event->y; if (SFdirPtr + n >= SFdirEnd) { return -1; } else if ( (x >= 0) && (x <= SFupperX) && (y >= SFlowerY) && (y <= SFupperY) ) { SFDir *dir = &(SFdirs[SFdirPtr + n]); if (SFscrollTimerAdded) { SFscrollTimerAdded = 0; XtRemoveTimeOut (SFscrollTimerId); } new = (y - SFlowerY) / SFentryHeight; if (dir->vOrigin + new >= dir->nEntries) { return -1; } return new; } else { if (SFbuttonPressed) { SFcurrentListY = y; if (!SFscrollTimerAdded) { SFscrollTimerAdded = 1; SFscrollTimerId = XtAppAddTimeOut ( SFapp, SFscrollTimerInterval (), SFscrollTimer, (XtPointer) n ); } } return -1; }}void SFenterList (Widget w, XtPointer cl, XEvent *ev, Boolean *b) { int new; intptr_t n; XEnterWindowEvent *event; n = (intptr_t) cl; event = (XEnterWindowEvent *) ev; /* sanity */ if (SFcurrentInvert[n] != -1) { SFinvertEntry (n); SFcurrentInvert[n] = -1; } new = SFnewInvertEntry (n, (XMotionEvent *) event); if (new != -1) { SFcurrentInvert[n] = new; SFinvertEntry (n); }}void SFleaveList (Widget w, XtPointer cl, XEvent *ev, Boolean *b) { intptr_t n; n = (intptr_t) cl; if (SFcurrentInvert[n] != -1) { SFinvertEntry (n); SFcurrentInvert[n] = -1; }}void SFmotionList (Widget w, XtPointer cl, XEvent *ev, Boolean *b) { int new; intptr_t n; XMotionEvent *event; n = (intptr_t) cl; event = (XMotionEvent *) ev; new = SFnewInvertEntry (n, event); if (new != SFcurrentInvert[n]) { if (SFcurrentInvert[n] != -1) { SFinvertEntry (n); } SFcurrentInvert[n] = new; if (new != -1) { SFinvertEntry (n); } }}void SFvFloatSliderMovedCallback (Widget w, XtPointer cl, XtPointer cd) { intptr_t n, new; float *fnew; n = (intptr_t) cl; fnew = (float *) cd; new = (*fnew) * SFdirs[SFdirPtr + n].nEntries; SFvSliderMovedCallback (w, (XtPointer) n, (XtPointer) new);}void SFvSliderMovedCallback (Widget w, XtPointer cl, XtPointer cd) { intptr_t n, new, old; Window win; SFDir *dir; n = (intptr_t) cl; new = (intptr_t) cd; dir = &(SFdirs[SFdirPtr + n]); old = dir->vOrigin; dir->vOrigin = new; if (old == new) { return; } win = XtWindow (selFileLists[n]); if (ABS (new - old) < SFlistSize) { if (new > old) { XCopyArea ( SFdisplay, win, win, SFscrollGC, SFlineToTextH, SFlowerY + (new - old) * SFentryHeight, SFentryWidth + SFlineToTextH, (SFlistSize - (new - old)) * SFentryHeight, SFlineToTextH, SFlowerY ); XClearArea ( SFdisplay, win, SFlineToTextH, SFlowerY + (SFlistSize - (new - old)) * SFentryHeight, SFentryWidth + SFlineToTextH, (new - old) * SFentryHeight, False ); SFdrawStrings (win, dir, SFlistSize - (new - old), SFlistSize - 1); } else { XCopyArea ( SFdisplay, win, win, SFscrollGC, SFlineToTextH, SFlowerY, SFentryWidth + SFlineToTextH, (SFlistSize - (old - new)) * SFentryHeight, SFlineToTextH, SFlowerY + (old - new) * SFentryHeight ); XClearArea ( SFdisplay, win, SFlineToTextH, SFlowerY, SFentryWidth + SFlineToTextH, (old - new) * SFentryHeight, False ); SFdrawStrings (win, dir, 0, old - new); } } else { XClearArea ( SFdisplay, win, SFlineToTextH, SFlowerY, SFentryWidth + SFlineToTextH, SFlistSize * SFentryHeight, False ); SFdrawStrings (win, dir, 0, SFlistSize - 1); }}void SFvAreaSelectedCallback (Widget w, XtPointer cl, XtPointer cd) { SFDir *dir; intptr_t n, pnew, new; n = (intptr_t) cl; pnew = (intptr_t) cd; dir = &(SFdirs[SFdirPtr + n]); new = dir->vOrigin + (((double) pnew) / SFvScrollHeight) * dir->nEntries; if (new > dir->nEntries - SFlistSize) { new = dir->nEntries - SFlistSize; } if (new < 0) { new = 0; } if (dir->nEntries) { float f; f = ((double) new) / dir->nEntries; XawScrollbarSetThumb ( w, f, (float) (((double) (( dir->nEntries < SFlistSize ) ? dir->nEntries : SFlistSize)) / dir->nEntries) ); } SFvSliderMovedCallback (w, (XtPointer) n, (XtPointer) new);}void SFhSliderMovedCallback (Widget w, XtPointer cl, XtPointer cd) { SFDir *dir; int save; float *new; intptr_t n; n = (intptr_t) cl; new = (float *) cd; dir = &(SFdirs[SFdirPtr + n]); save = dir->hOrigin; dir->hOrigin = (*new) * dir->nChars; if (dir->hOrigin == save) { return; } SFdrawList (n, SF_DO_NOT_SCROLL);}void SFhAreaSelectedCallback (Widget w, XtPointer cl, XtPointer cd) { SFDir *dir; intptr_t n, pnew, new; n = (intptr_t) cl; pnew = (intptr_t) cd; dir = &(SFdirs[SFdirPtr + n]); new = dir->hOrigin + (((double) pnew) / SFhScrollWidth) * dir->nChars; if (new > dir->nChars - SFcharsPerEntry) { new = dir->nChars - SFcharsPerEntry; } if (new < 0) { new = 0; } if (dir->nChars) { float f; f = ((double) new) / dir->nChars; XawScrollbarSetThumb ( w, f, (float) (((double) (( dir->nChars < SFcharsPerEntry ) ? dir->nChars : SFcharsPerEntry)) / dir->nChars) ); SFhSliderMovedCallback (w, (XtPointer) n, &f); }}void SFpathSliderMovedCallback (Widget w, XtPointer cl, XtPointer cd) { SFDir *dir; float *new; int n; XawTextPosition pos; int SFdirPtrSave; new = (float *) cl; SFdirPtrSave = SFdirPtr; SFdirPtr = (*new) * SFdirEnd; if (SFdirPtr == SFdirPtrSave) { return; } SFdrawLists (SF_DO_SCROLL); n = 2; while (SFdirPtr + n >= SFdirEnd) { n--; } dir = &(SFdirs[SFdirPtr + n]); pos = dir->path - SFcurrentPath; if (!strncmp (SFcurrentPath, SFstartDir, strlen (SFstartDir))) { pos -= strlen (SFstartDir); if (pos < 0) { pos = 0; } } XawTextSetInsertionPoint (selFileField, pos);}void SFpathAreaSelectedCallback (Widget w, XtPointer cl, XtPointer cd) { intptr_t pnew, new; float f; pnew = (intptr_t) cd; new = SFdirPtr + (((double) pnew) / SFpathScrollWidth) * SFdirEnd; if (new > SFdirEnd - 3) { new = SFdirEnd - 3; } if (new < 0) { new = 0; } f = ((double) new) / SFdirEnd; XawScrollbarSetThumb ( w, f, (float) (((double) ((SFdirEnd < 3) ? SFdirEnd : 3)) / SFdirEnd) ); SFpathSliderMovedCallback (w, (XtPointer) NULL, &f);}Boolean SFworkProc (XtPointer cl) { SFDir *dir; SFEntry *entry; for (dir = &(SFdirs[SFdirEnd - 1]); dir >= SFdirs; dir--) { if (! (dir->nEntries)) { continue; } for ( entry = & (dir->entries[dir->nEntries - 1]); entry >= dir->entries; entry-- ) { if (!(entry->statDone)) { SFstatAndCheck (dir, entry); return False; } } } SFworkProcAdded = 0; return True;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -