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

📄 xpdfviewer.cc

📁 这是一个做pdf阅读器的源代码文件,是大家学习阅读器资料的很好参考
💻 CC
📖 第 1 页 / 共 5 页
字号:
void XPDFViewer::cmdToggleFullScreenMode(GString *args[], int nArgs,					 XEvent *event) {  if (core->getFullScreen()) {    cmdWindowMode(NULL, 0, event);  } else {    cmdFullScreenMode(NULL, 0, event);  }}void XPDFViewer::cmdToggleOutline(GString *args[], int nArgs,				  XEvent *event) {#ifndef DISABLE_OUTLINE  Dimension w;  if (outlineScroll == None) {    return;  }  XtVaGetValues(outlineScroll, XmNwidth, &w, NULL);  if (w > 1) {    cmdCloseOutline(NULL, 0, event);  } else {    cmdOpenOutline(NULL, 0, event);  }#endif}void XPDFViewer::cmdWindowMode(GString *args[], int nArgs,			       XEvent *event) {  PDFDoc *doc;  XPDFViewer *viewer;  int pg;  Widget btn;  if (!core->getFullScreen()) {    return;  }  pg = core->getPageNum();  XtPopdown(win);  doc = core->takeDoc(gFalse);  viewer = app->reopen(this, doc, pg, gFalse);  btn = XtNameToWidget(viewer->popupMenu, "fullScreen");  XtVaSetValues(btn, XmNset, XmUNSET, NULL);}void XPDFViewer::cmdZoomFitPage(GString *args[], int nArgs,				XEvent *event) {  if (core->getZoom() != zoomPage) {    setZoomIdx(zoomPageIdx);    displayPage(core->getPageNum(), zoomPage,		core->getRotate(), gTrue, gFalse);  }}void XPDFViewer::cmdZoomFitWidth(GString *args[], int nArgs,				 XEvent *event) {  if (core->getZoom() != zoomWidth) {    setZoomIdx(zoomWidthIdx);    displayPage(core->getPageNum(), zoomWidth,		core->getRotate(), gTrue, gFalse);  }}void XPDFViewer::cmdZoomIn(GString *args[], int nArgs,			   XEvent *event) {  int z;  z = getZoomIdx();  if (z <= minZoomIdx && z > maxZoomIdx) {    --z;    setZoomIdx(z);    displayPage(core->getPageNum(), zoomMenuInfo[z].zoom,		core->getRotate(), gTrue, gFalse);  }}void XPDFViewer::cmdZoomOut(GString *args[], int nArgs,			    XEvent *event) {  int z;  z = getZoomIdx();  if (z < minZoomIdx && z >= maxZoomIdx) {    ++z;    setZoomIdx(z);    displayPage(core->getPageNum(), zoomMenuInfo[z].zoom,		core->getRotate(), gTrue, gFalse);  }}void XPDFViewer::cmdZoomPercent(GString *args[], int nArgs,				XEvent *event) {  double z;  z = atof(args[0]->getCString());  setZoomVal(z);  displayPage(core->getPageNum(), z, core->getRotate(), gTrue, gFalse);}void XPDFViewer::cmdZoomToSelection(GString *args[], int nArgs,				    XEvent *event) {  int pg;  double ulx, uly, lrx, lry;  if (core->getSelection(&pg, &ulx, &uly, &lrx, &lry)) {    core->zoomToRect(pg, ulx, uly, lrx, lry);  }}//------------------------------------------------------------------------// GUI code: main window//------------------------------------------------------------------------void XPDFViewer::initWindow(GBool fullScreen) {  Colormap colormap;  XColor xcol;  Atom state, val;  Arg args[20];  int n;  char *title;  display = XtDisplay(app->getAppShell());  screenNum = XScreenNumberOfScreen(XtScreen(app->getAppShell()));  toolBar = None;#ifndef DISABLE_OUTLINE  outlineScroll = None;#endif  // private colormap  if (app->getInstallCmap()) {    XtVaGetValues(app->getAppShell(), XmNcolormap, &colormap, NULL);    // ensure that BlackPixel and WhitePixel are reserved in the    // new colormap    xcol.red = xcol.green = xcol.blue = 0;    XAllocColor(display, colormap, &xcol);    xcol.red = xcol.green = xcol.blue = 65535;    XAllocColor(display, colormap, &xcol);    colormap = XCopyColormapAndFree(display, colormap);  }  // top-level window  n = 0;  title = app->getTitle() ? app->getTitle()->getCString()                          : (char *)xpdfAppName;  XtSetArg(args[n], XmNtitle, title); ++n;  XtSetArg(args[n], XmNiconName, title); ++n;  XtSetArg(args[n], XmNminWidth, 100); ++n;  XtSetArg(args[n], XmNminHeight, 100); ++n;  XtSetArg(args[n], XmNbaseWidth, 0); ++n;  XtSetArg(args[n], XmNbaseHeight, 0); ++n;  XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); ++n;  win = XtCreatePopupShell("win", topLevelShellWidgetClass,			   app->getAppShell(), args, n);  if (app->getInstallCmap()) {    XtVaSetValues(win, XmNcolormap, colormap, NULL);  }  XmAddWMProtocolCallback(win, XInternAtom(display, "WM_DELETE_WINDOW", False),			  &closeMsgCbk, this);  // create the full-screen window  if (fullScreen) {    initCore(win, gTrue);  // create the normal (non-full-screen) window  } else {    if (app->getGeometry()) {      n = 0;      XtSetArg(args[n], XmNgeometry, app->getGeometry()->getCString()); ++n;      XtSetValues(win, args, n);    }    n = 0;    form = XmCreateForm(win, "form", args, n);    XtManageChild(form);#ifdef DISABLE_OUTLINE    initToolbar(form);    n = 0;    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n;    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n;    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;    XtSetValues(toolBar, args, n);    initCore(form, gFalse);    n = 0;    XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n;    XtSetArg(args[n], XmNbottomWidget, toolBar); ++n;    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n;    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n;    XtSetValues(core->getWidget(), args, n);#else    initToolbar(form);    n = 0;    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n;    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n;    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;    XtSetValues(toolBar, args, n);    initPanedWin(form);    n = 0;    XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n;    XtSetArg(args[n], XmNbottomWidget, toolBar); ++n;    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n;    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n;    XtSetValues(panedWin, args, n);    initCore(panedWin, fullScreen);    n = 0;    XtSetArg(args[n], XmNpositionIndex, 1); ++n;    XtSetArg(args[n], XmNallowResize, True); ++n;    XtSetArg(args[n], XmNpaneMinimum, 1); ++n;    XtSetArg(args[n], XmNpaneMaximum, 10000); ++n;    XtSetValues(core->getWidget(), args, n);#endif  }  // set the zoom menu to match the initial zoom setting  setZoomVal(core->getZoom());  // set traversal order  XtVaSetValues(core->getDrawAreaWidget(),		XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, NULL);  if (toolBar != None) {    XtVaSetValues(backBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(prevTenPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(prevPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(nextPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(nextTenPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(forwardBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(pageNumText, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(zoomWidget, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(findBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(printBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(aboutBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);    XtVaSetValues(quitBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP,		  NULL);  }  initPopupMenu();  if (fullScreen) {    // Set both the old-style Motif decorations hint and the new-style    // _NET_WM_STATE property.  This is redundant, but might be useful    // for older window managers.  We also set the geometry to +0+0 to    // avoid interactive placement.  (Note: we need to realize the    // shell, so it has a Window on which to set the _NET_WM_STATE    // property, but we don't want to map it until later, so we set    // mappedWhenManaged to false.)    n = 0;    XtSetArg(args[n], XmNmappedWhenManaged, False); ++n;    XtSetArg(args[n], XmNmwmDecorations, 0); ++n;    XtSetArg(args[n], XmNgeometry, "+0+0"); ++n;    XtSetValues(win, args, n);    XtRealizeWidget(win);    state = XInternAtom(display, "_NET_WM_STATE", False);    val = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", False);    XChangeProperty(display, XtWindow(win), state, XA_ATOM, 32,		    PropModeReplace, (Guchar *)&val, 1);  }}void XPDFViewer::initToolbar(Widget parent) {  Widget label, lastBtn;#ifndef USE_COMBO_BOX  Widget btn;#endif  Arg args[20];  int n;  XmString s, emptyString;  int i;  // toolbar  n = 0;  toolBar = XmCreateForm(parent, "toolBar", args, n);  XtManageChild(toolBar);  // create an empty string -- this is used for buttons that will get  // pixmaps later  emptyString = XmStringCreateLocalized("");  // page movement buttons  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNmarginWidth, 6); ++n;  XtSetArg(args[n], XmNsensitive, False); ++n;  XtSetArg(args[n], XmNlabelString, emptyString); ++n;  backBtn = XmCreatePushButton(toolBar, "back", args, n);  addToolTip(backBtn, "Back");  XtManageChild(backBtn);  XtAddCallback(backBtn, XmNactivateCallback,		&backCbk, (XtPointer)this);  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n;  XtSetArg(args[n], XmNleftWidget, backBtn); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNmarginWidth, 6); ++n;  XtSetArg(args[n], XmNsensitive, False); ++n;  XtSetArg(args[n], XmNlabelString, emptyString); ++n;  prevTenPageBtn = XmCreatePushButton(toolBar, "prevTenPage", args, n);  addToolTip(prevTenPageBtn, "-10 pages");  XtManageChild(prevTenPageBtn);  XtAddCallback(prevTenPageBtn, XmNactivateCallback,		&prevTenPageCbk, (XtPointer)this);  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n;  XtSetArg(args[n], XmNleftWidget, prevTenPageBtn); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNmarginWidth, 6); ++n;  XtSetArg(args[n], XmNsensitive, False); ++n;  XtSetArg(args[n], XmNlabelString, emptyString); ++n;  prevPageBtn = XmCreatePushButton(toolBar, "prevPage", args, n);  addToolTip(prevPageBtn, "Previous page");  XtManageChild(prevPageBtn);  XtAddCallback(prevPageBtn, XmNactivateCallback,		&prevPageCbk, (XtPointer)this);  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n;  XtSetArg(args[n], XmNleftWidget, prevPageBtn); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNmarginWidth, 6); ++n;  XtSetArg(args[n], XmNsensitive, False); ++n;  XtSetArg(args[n], XmNlabelString, emptyString); ++n;  nextPageBtn = XmCreatePushButton(toolBar, "nextPage", args, n);  addToolTip(nextPageBtn, "Next page");  XtManageChild(nextPageBtn);  XtAddCallback(nextPageBtn, XmNactivateCallback,		&nextPageCbk, (XtPointer)this);  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n;  XtSetArg(args[n], XmNleftWidget, nextPageBtn); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNmarginWidth, 6); ++n;  XtSetArg(args[n], XmNsensitive, False); ++n;  XtSetArg(args[n], XmNlabelString, emptyString); ++n;  nextTenPageBtn = XmCreatePushButton(toolBar, "nextTenPage", args, n);  addToolTip(nextTenPageBtn, "+10 pages");  XtManageChild(nextTenPageBtn);  XtAddCallback(nextTenPageBtn, XmNactivateCallback,		&nextTenPageCbk, (XtPointer)this);  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n;  XtSetArg(args[n], XmNleftWidget, nextTenPageBtn); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNmarginWidth, 6); ++n;  XtSetArg(args[n], XmNsensitive, False); ++n;  XtSetArg(args[n], XmNlabelString, emptyString); ++n;  forwardBtn = XmCreatePushButton(toolBar, "forward", args, n);  addToolTip(forwardBtn, "Forward");  XtManageChild(forwardBtn);  XtAddCallback(forwardBtn, XmNactivateCallback,		&forwardCbk, (XtPointer)this);  // page number display  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n;  XtSetArg(args[n], XmNleftWidget, forwardBtn); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  s = XmStringCreateLocalized("Page ");  XtSetArg(args[n], XmNlabelString, s); ++n;  label = XmCreateLabel(toolBar, "pageLabel", args, n);  XmStringFree(s);  XtManageChild(label);  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n;  XtSetArg(args[n], XmNleftWidget, label); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNmarginWidth, 3); ++n;  XtSetArg(args[n], XmNmarginHeight, 3); ++n;  XtSetArg(args[n], XmNcolumns, 5); ++n;  pageNumText = XmCreateTextField(toolBar, "pageNum", args, n);  XtManageChild(pageNumText);  XtAddCallback(pageNumText, XmNactivateCallback,		&pageNumCbk, (XtPointer)this);  n = 0;  XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n;  XtSetArg(args[n], XmNleftWidget, pageNumText); ++n;  XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n;  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n;  s = XmStringCreateLocalized(" of 00000");  XtSetArg(args[n], XmNlabelString, s); ++n;  XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); ++n;  XtSetArg(args[n], XmNrecomputeSize, False); ++n;  pageCountLabel = XmCreateLabel(toolBar, "pageCountLabel", args, n);  XmStringFree(s);  XtManageChild(pageCountLabel);  s = XmStringCreateLocalized(" of 0");  XtVaSetValues(pageCountLabel, XmNlabelString, s, NULL);  XmStringFree(s);  // zoom menu#if USE_COMBO_BOX  XmString st[nZoomMenuItems];  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], XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX); ++n;  XtSetArg(args[n], XmNpositionMode, XmONE_BASED); ++n;  XtSetArg(args[n], XmNcolumns, 7); ++n;  for (i = 0; i < nZoomMenuItems; ++i) {    st[i] = XmStringCreateLocalized(zoomMenuInfo[i].label);  }  XtSetArg(args[n], XmNitems, st); ++n;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -