📄 xpdfviewer.cc
字号:
XtSetArg(args[n], XmNitemCount, nZoomMenuItems); ++n; zoomComboBox = XmCreateComboBox(toolBar, "zoomComboBox", args, n); for (i = 0; i < nZoomMenuItems; ++i) { XmStringFree(st[i]); } addToolTip(zoomComboBox, "Zoom"); XtAddCallback(zoomComboBox, XmNselectionCallback, &zoomComboBoxCbk, (XtPointer)this); XtManageChild(zoomComboBox); zoomWidget = zoomComboBox;#else Widget menuPane; char buf[16]; n = 0; menuPane = XmCreatePulldownMenu(toolBar, "zoomMenuPane", args, n); for (i = 0; i < nZoomMenuItems; ++i) { n = 0; s = XmStringCreateLocalized(zoomMenuInfo[i].label); XtSetArg(args[n], XmNlabelString, s); ++n; XtSetArg(args[n], XmNuserData, (XtPointer)i); ++n; sprintf(buf, "zoom%d", i); btn = XmCreatePushButton(menuPane, buf, args, n); XmStringFree(s); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &zoomMenuCbk, (XtPointer)this); zoomMenuBtns[i] = btn; } n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNleftWidget, pageCountLabel); ++n; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNmarginWidth, 0); ++n; XtSetArg(args[n], XmNmarginHeight, 0); ++n; XtSetArg(args[n], XmNsubMenuId, menuPane); ++n; zoomMenu = XmCreateOptionMenu(toolBar, "zoomMenu", args, n); addToolTip(zoomMenu, "Zoom"); XtManageChild(zoomMenu); zoomWidget = zoomMenu;#endif // find/print/about buttons n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNleftWidget, zoomWidget); ++n; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNmarginWidth, 6); ++n; XtSetArg(args[n], XmNlabelString, emptyString); ++n; findBtn = XmCreatePushButton(toolBar, "find", args, n); addToolTip(findBtn, "Find"); XtManageChild(findBtn); XtAddCallback(findBtn, XmNactivateCallback, &findCbk, (XtPointer)this); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNleftWidget, findBtn); ++n; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNmarginWidth, 6); ++n; XtSetArg(args[n], XmNlabelString, emptyString); ++n; printBtn = XmCreatePushButton(toolBar, "print", args, n); addToolTip(printBtn, "Print"); XtManageChild(printBtn); XtAddCallback(printBtn, XmNactivateCallback, &printCbk, (XtPointer)this); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNleftWidget, printBtn); ++n; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNmarginWidth, 6); ++n; XtSetArg(args[n], XmNlabelString, emptyString); ++n; aboutBtn = XmCreatePushButton(toolBar, "about", args, n); addToolTip(aboutBtn, "About / help"); XtManageChild(aboutBtn); XtAddCallback(aboutBtn, XmNactivateCallback, &aboutCbk, (XtPointer)this); lastBtn = aboutBtn; // quit button n = 0; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNmarginWidth, 6); ++n; s = XmStringCreateLocalized("Quit"); XtSetArg(args[n], XmNlabelString, s); ++n; quitBtn = XmCreatePushButton(toolBar, "quit", args, n); XmStringFree(s); XtManageChild(quitBtn); XtAddCallback(quitBtn, XmNactivateCallback, &quitCbk, (XtPointer)this); // link label n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNleftWidget, lastBtn); ++n; XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNrightWidget, quitBtn); ++n; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; s = XmStringCreateLocalized(""); XtSetArg(args[n], XmNlabelString, s); ++n; XtSetArg(args[n], XmNrecomputeSize, True); ++n; XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); ++n; linkLabel = XmCreateLabel(toolBar, "linkLabel", args, n); XmStringFree(s); XtManageChild(linkLabel); XmStringFree(emptyString);}#ifndef DISABLE_OUTLINEvoid XPDFViewer::initPanedWin(Widget parent) { Widget clipWin; Arg args[20]; int n; // paned window n = 0; XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n;#if defined(__sgi) && (XmVERSION <= 1) panedWin = SgCreateHorzPanedWindow(parent, "panedWin", args, n);#else panedWin = XmCreatePanedWindow(parent, "panedWin", args, n);#endif XtManageChild(panedWin); // scrolled window for outline container n = 0; XtSetArg(args[n], XmNpositionIndex, 0); ++n; XtSetArg(args[n], XmNallowResize, True); ++n; XtSetArg(args[n], XmNpaneMinimum, 1); ++n; XtSetArg(args[n], XmNpaneMaximum, 10000); ++n;#if !(defined(__sgi) && (XmVERSION <= 1)) XtSetArg(args[n], XmNwidth, 1); ++n;#endif XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); ++n; outlineScroll = XmCreateScrolledWindow(panedWin, "outlineScroll", args, n); XtManageChild(outlineScroll); XtVaGetValues(outlineScroll, XmNclipWindow, &clipWin, NULL); XtVaSetValues(clipWin, XmNbackground, app->getPaperPixel(), NULL); // outline tree n = 0; XtSetArg(args[n], XmNbackground, app->getPaperPixel()); ++n; outlineTree = XPDFCreateTree(outlineScroll, "outlineTree", args, n); XtManageChild(outlineTree); XtAddCallback(outlineTree, XPDFNselectionCallback, &outlineSelectCbk, (XtPointer)this);}#endifvoid XPDFViewer::initCore(Widget parent, GBool fullScreen) { core = new XPDFCore(win, parent, app->getPaperRGB(), app->getPaperPixel(), app->getMattePixel(fullScreen), fullScreen, app->getReverseVideo(), app->getInstallCmap(), app->getRGBCubeSize()); core->setUpdateCbk(&updateCbk, this); core->setActionCbk(&actionCbk, this); core->setKeyPressCbk(&keyPressCbk, this); core->setMouseCbk(&mouseCbk, this);}void XPDFViewer::initPopupMenu() { Widget btn; Arg args[20]; int n; XmString s, s2; n = 0;#if XmVersion < 1002 // older versions of Motif need this, newer ones choke on it, // sometimes not displaying the menu at all, maybe depending on the // state of the NumLock key (taken from DDD) XtSetArg(args[n], XmNmenuPost, "<Btn3Down>"); ++n;#endif popupMenu = XmCreatePopupMenu(core->getDrawAreaWidget(), "popupMenu", args, n); n = 0; s = XmStringCreateLocalized("Open..."); XtSetArg(args[n], XmNlabelString, s); ++n; s2 = XmStringCreateLocalized("O"); XtSetArg(args[n], XmNacceleratorText, s2); ++n; btn = XmCreatePushButton(popupMenu, "open", args, n); XmStringFree(s); XmStringFree(s2); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &openCbk, (XtPointer)this); n = 0; s = XmStringCreateLocalized("Open in new window..."); XtSetArg(args[n], XmNlabelString, s); ++n; btn = XmCreatePushButton(popupMenu, "openInNewWindow", args, n); XmStringFree(s); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &openInNewWindowCbk, (XtPointer)this); n = 0; s = XmStringCreateLocalized("Reload"); XtSetArg(args[n], XmNlabelString, s); ++n; s2 = XmStringCreateLocalized("R"); XtSetArg(args[n], XmNacceleratorText, s2); ++n; btn = XmCreatePushButton(popupMenu, "reload", args, n); XmStringFree(s); XmStringFree(s2); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &reloadCbk, (XtPointer)this); n = 0; s = XmStringCreateLocalized("Save as..."); XtSetArg(args[n], XmNlabelString, s); ++n; btn = XmCreatePushButton(popupMenu, "saveAs", args, n); XmStringFree(s); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &saveAsCbk, (XtPointer)this); n = 0; btn = XmCreateSeparator(popupMenu, "sep1", args, n); XtManageChild(btn); n = 0; s = XmStringCreateLocalized("Continuous view"); XtSetArg(args[n], XmNlabelString, s); ++n; XtSetArg(args[n], XmNindicatorType, XmN_OF_MANY); ++n; XtSetArg(args[n], XmNvisibleWhenOff, True); ++n; XtSetArg(args[n], XmNset, core->getContinuousMode() ? XmSET : XmUNSET); ++n; btn = XmCreateToggleButton(popupMenu, "continuousMode", args, n); XmStringFree(s); XtManageChild(btn); XtAddCallback(btn, XmNvalueChangedCallback, &continuousModeToggleCbk, (XtPointer)this); n = 0; s = XmStringCreateLocalized("Full screen"); XtSetArg(args[n], XmNlabelString, s); ++n; XtSetArg(args[n], XmNindicatorType, XmN_OF_MANY); ++n; XtSetArg(args[n], XmNvisibleWhenOff, True); ++n; XtSetArg(args[n], XmNset, core->getFullScreen() ? XmSET : XmUNSET); ++n; btn = XmCreateToggleButton(popupMenu, "fullScreen", args, n); XmStringFree(s); XtManageChild(btn); XtAddCallback(btn, XmNvalueChangedCallback, &fullScreenToggleCbk, (XtPointer)this); n = 0; s = XmStringCreateLocalized("Rotate counterclockwise"); XtSetArg(args[n], XmNlabelString, s); ++n; btn = XmCreatePushButton(popupMenu, "rotateCCW", args, n); XmStringFree(s); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &rotateCCWCbk, (XtPointer)this); n = 0; s = XmStringCreateLocalized("Rotate clockwise"); XtSetArg(args[n], XmNlabelString, s); ++n; btn = XmCreatePushButton(popupMenu, "rotateCW", args, n); XmStringFree(s); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &rotateCWCbk, (XtPointer)this); n = 0; s = XmStringCreateLocalized("Zoom to selection"); XtSetArg(args[n], XmNlabelString, s); ++n; btn = XmCreatePushButton(popupMenu, "zoomToSelection", args, n); XmStringFree(s); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &zoomToSelectionCbk, (XtPointer)this); n = 0; btn = XmCreateSeparator(popupMenu, "sep2", args, n); XtManageChild(btn); n = 0; s = XmStringCreateLocalized("Close"); XtSetArg(args[n], XmNlabelString, s); ++n; s2 = XmStringCreateLocalized("Ctrl+W"); XtSetArg(args[n], XmNacceleratorText, s2); ++n; btn = XmCreatePushButton(popupMenu, "close", args, n); XmStringFree(s); XmStringFree(s2); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &closeCbk, (XtPointer)this); n = 0; s = XmStringCreateLocalized("Quit"); XtSetArg(args[n], XmNlabelString, s); ++n; s2 = XmStringCreateLocalized("Q"); XtSetArg(args[n], XmNacceleratorText, s2); ++n; btn = XmCreatePushButton(popupMenu, "quit", args, n); XmStringFree(s); XmStringFree(s2); XtManageChild(btn); XtAddCallback(btn, XmNactivateCallback, &quitCbk, (XtPointer)this); // this is magic (taken from DDD) - weird things happen if this // call isn't made XtUngrabButton(core->getDrawAreaWidget(), AnyButton, AnyModifier);}void XPDFViewer::addToolTip(Widget widget, char *text) {#ifdef XmNtoolTipString XmString s; Cardinal n, i; WidgetList children; if (XtIsComposite(widget)) { XtVaGetValues(widget, XmNnumChildren, &n, XmNchildren, &children, NULL); for (i = 0; i < n; ++i) { addToolTip(children[i], text); } } else { s = XmStringCreateLocalized(text); XtVaSetValues(widget, XmNtoolTipString, s, NULL); XmStringFree(s); }#endif}void XPDFViewer::mapWindow() {#ifdef HAVE_X11_XPM_H Pixmap iconPixmap;#endif int depth; Pixel fg, bg, arm; // show the window XtPopup(win, XtGrabNone); core->takeFocus(); // create the icon#ifdef HAVE_X11_XPM_H if (XpmCreatePixmapFromData(display, XtWindow(win), xpdfIcon, &iconPixmap, NULL, NULL) == XpmSuccess) { XtVaSetValues(win, XmNiconPixmap, iconPixmap, NULL); }#endif // set button bitmaps (must be done after the window is mapped) if (toolBar != None) { XtVaGetValues(backBtn, XmNdepth, &depth, XmNforeground, &fg, XmNbackground, &bg, XmNarmColor, &arm, NULL); XtVaSetValues(backBtn, XmNlabelType, XmPIXMAP, XmNlabelPixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)backArrow_bits, backArrow_width, backArrow_height, fg, bg, depth), XmNarmPixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)backArrow_bits, backArrow_width, backArrow_height, fg, arm, depth), XmNlabelInsensitivePixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)backArrowDis_bits, backArrowDis_width, backArrowDis_height, fg, bg, depth), NULL); XtVaSetValues(prevTenPageBtn, XmNlabelType, XmPIXMAP, XmNlabelPixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)dblLeftArrow_bits, dblLeftArrow_width, dblLeftArrow_height, fg, bg, depth), XmNarmPixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)dblLeftArrow_bits, dblLeftArrow_width, dblLeftArrow_height, fg, arm, depth), XmNlabelInsensitivePixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)dblLeftArrowDis_bits, dblLeftArrowDis_width, dblLeftArrowDis_height, fg, bg, depth), NULL); XtVaSetValues(prevPageBtn, XmNlabelType, XmPIXMAP, XmNlabelPixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)leftArrow_bits, leftArrow_width, leftArrow_height, fg, bg, depth), XmNarmPixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)leftArrow_bits, leftArrow_width, leftArrow_height, fg, arm, depth), XmNlabelInsensitivePixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)leftArrowDis_bits, leftArrowDis_width, leftArrowDis_height, fg, bg, depth), NULL); XtVaSetValues(nextPageBtn, XmNlabelType, XmPIXMAP, XmNlabelPixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)rightArrow_bits, rightArrow_width, rightArrow_height, fg, bg, depth), XmNarmPixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)rightArrow_bits, rightArrow_width, rightArrow_height, fg, arm, depth), XmNlabelInsensitivePixmap, XCreatePixmapFromBitmapData(display, XtWindow(toolBar), (char *)rightArrowDis_bits, rightArrowDis_width, rightArrowDis_height, fg, bg, depth), NULL); XtVaSetValues(nextTenPageBtn, XmNlabelType, XmPIXMAP, XmNlabelPixmap, XCreatePixmapFromBitmapData(display, XtWindow(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -