#include <PDFPortraitView.h>
Public Member Functions | |
CPDFPortraitView (void) | |
~CPDFPortraitView (void) | |
void | setView (CPDFView *p) |
void | init () |
void | clear () |
void | displayPage (const int pageNumber, const ContinousModeScroll mode=ScrollToPage) |
void | ipcCbk (gint *fd, GdkInputCondition id) |
int | hitTest (const int x, const int y, int &ox, int &oy) |
GBool | isReady () const |
gboolean | buttonPressCbk (GdkEventButton *) |
gboolean | buttonReleaseCbk (GdkEventButton *) |
gboolean | motionNotifyCbk (GdkEventMotion *) |
gboolean | keyPressCbk (GdkEventKey *) |
gboolean | deleteCbk (GdkEvent *) |
Private Member Functions | |
void | onPageRendered (const int pageNumber) |
void | updateToolbar (CPageInfo *page) |
void | updatePagebar () |
void | zoomFromRect (int left, int top, int right, int bottom) |
void | zoomToRect (int left, int top, int right, int bottom) |
void | switchMode () |
void | drawScribble (const int x, const int y, const int pn) |
void | getPagesRange (int &start, int &end, const int pageNumber, const ContinousModeScroll scroll) |
void | validatePosition () |
void | setReady (const GBool b=gTrue) |
void | getPageScreenPosition (const int pn, int &x, int &y) |
void | zoomBack () |
void | backward () |
void | forward () |
void | zoomFromRectPageMode (rectangle &rect) |
void | adjustPositionPageMode (const rectangle &oldRect, double ratio) |
void | zoomFitPageMode () |
GBool | doLinkPageMode (const int x, const int y) |
void | zoomFromRectContinousMode (rectangle &rect) |
void | adjustPositionContinousMode (const rectangle &oldRect, double ratio) |
void | zoomFitContinousMode () |
GBool | doLinkContinousMode (const int x, const int y) |
void | displayPages (const int start, const int end) |
void | drawPages (const int start, const int end) |
void | drawPageImage (CPageInfo *page) |
Private Attributes | |
CPDFView * | view |
CLayoutMgr | layout |
CDisplayList | list |
int | nStart |
int | nEnd |
int | nOffset |
GBool | bReady |
Definition at line 33 of file PDFPortraitView.h.
CPDFPortraitView::CPDFPortraitView | ( | void | ) |
CPDFPortraitView::~CPDFPortraitView | ( | void | ) |
void CPDFPortraitView::onPageRendered | ( | const int | pageNumber | ) | [private] |
void CPDFPortraitView::updateToolbar | ( | CPageInfo * | page | ) | [private] |
Definition at line 839 of file PDFPortraitView.cpp.
00840 { 00841 GBool bDirty = gFalse; 00842 00843 // pan 00844 rectangle rect; 00845 int w = page->bitmap->getWidth(); 00846 int h = page->bitmap->getHeight(); 00847 layout.getVirtualScreen(rect); 00848 if (view->isPageMode() && 00849 w <= view->ctrl->settings.getScreenWidth() && 00850 h <= view->ctrl->settings.getScreenHeight() && 00851 view->ctrl->settings.getScreenX() >= 0 && 00852 view->ctrl->settings.getScreenY() >= 0 && 00853 view->ctrl->settings.getScreenX() + w <= view->ctrl->settings.getScreenWidth() && 00854 view->ctrl->settings.getScreenY() + h <= view->ctrl->settings.getScreenHeight()) 00855 { 00856 if (view->ctrl->channels.getPanState() != iconState_grey) 00857 { 00858 bDirty = gTrue; 00859 view->ctrl->channels.setPanState(iconState_grey); 00860 } 00861 } 00862 else if (view->isContinousMode() && 00863 rect.right - rect.left <= view->ctrl->settings.getScreenWidth() && 00864 rect.bottom - rect.top <= view->ctrl->settings.getScreenHeight() && 00865 view->ctrl->channels.getPanState() != iconState_grey) 00866 { 00867 bDirty = gTrue; 00868 view->ctrl->channels.setPanState(iconState_grey); 00869 } 00870 else 00871 { 00872 if (view->ctrl->channels.getPanState() == iconState_grey) 00873 { 00874 bDirty = gTrue; 00875 view->ctrl->channels.setPanState(iconState_normal); 00876 } 00877 } 00878 00879 // zoom 00880 double z = page->calZoom(); 00881 if (z >= view->ctrl->core->getZoomMax(page->pageNumber)) 00882 { 00883 if (view->ctrl->channels.getZoomInState() != iconState_grey) 00884 { 00885 bDirty = gTrue; 00886 view->ctrl->channels.setZoomIn(iconState_grey); 00887 } 00888 } 00889 else 00890 { 00891 if (view->ctrl->channels.getZoomInState() == iconState_grey || 00892 view->ctrl->channels.getZoomInState() == iconState_selected) 00893 { 00894 bDirty = gTrue; 00895 view->ctrl->channels.setZoomIn(iconState_normal); 00896 } 00897 else if (view->ctrl->channels.getZoomInState() == 3) 00898 { 00899 view->ctrl->channels.setZoomIn(iconState_selected); 00900 } 00901 } 00902 00903 // zoom back 00904 if (view->ctrl->channels.getZoombackState() != view->ctrl->settings.getZoomBackState()) 00905 { 00906 bDirty = gTrue; 00907 view->ctrl->channels.setZoombackState(view->ctrl->settings.getZoomBackState()); 00908 } 00909 00910 /* 00911 if (z <= ZoomMin) 00912 { 00913 if (view->ctrl->channels.getZoomOutState() != iconState_grey) 00914 { 00915 bDirty = gTrue; 00916 view->ctrl->channels.setZoomOut(iconState_grey); 00917 } 00918 } 00919 else 00920 { 00921 if (view->ctrl->channels.getZoomOutState() == iconState_grey || 00922 view->ctrl->channels.getZoomOutState() == iconState_selected) 00923 { 00924 bDirty = gTrue; 00925 view->ctrl->channels.setZoomOut(iconState_normal); 00926 } 00927 } 00928 */ 00929 00930 // rotate 00931 if (view->ctrl->channels.getRotateState() != PortraitToLandscape) 00932 { 00933 bDirty = gTrue; 00934 view->ctrl->channels.setRotateState(PortraitToLandscape); 00935 } 00936 00937 // mode 00938 if (view->ctrl->channels.getContinousState() == iconState_normal && 00939 view->isContinousMode()) 00940 { 00941 bDirty = gTrue; 00942 view->ctrl->channels.setContinousState(3); 00943 } 00944 else if (view->ctrl->channels.getContinousState() == 3 && 00945 view->isPageMode()) 00946 { 00947 bDirty = gTrue; 00948 view->ctrl->channels.setContinousState(iconState_normal); 00949 } 00950 00951 // backward 00952 if (view->ctrl->channels.getBackwardState() == iconState_grey && 00953 view->ctrl->settings.canGoBack()) 00954 { 00955 bDirty = gTrue; 00956 view->ctrl->channels.setBackwardState(iconState_normal); 00957 } 00958 else if (view->ctrl->channels.getBackwardState() == iconState_normal && 00959 !view->ctrl->settings.canGoBack()) 00960 { 00961 bDirty = gTrue; 00962 view->ctrl->channels.setBackwardState(iconState_grey); 00963 } 00964 00965 // forward 00966 if (view->ctrl->channels.getForwardState() == iconState_grey && 00967 view->ctrl->settings.canGoForward()) 00968 { 00969 bDirty = gTrue; 00970 view->ctrl->channels.setForwardState(iconState_normal); 00971 } 00972 else if (view->ctrl->channels.getForwardState() == iconState_normal && 00973 !view->ctrl->settings.canGoForward()) 00974 { 00975 bDirty = gTrue; 00976 view->ctrl->channels.setForwardState(iconState_grey); 00977 } 00978 00979 // update 00980 if (bDirty) 00981 { 00982 view->ctrl->channels.setToolbarDirty(); 00983 view->ctrl->channels.setToolbarUpdateType(dmQFull); 00984 view->ctrl->updateReq++; 00985 PV_LOGPRINTF("updateReq %d", view->ctrl->updateReq); 00986 view->ctrl->channels.redrawToolbar(); 00987 } 00988 else 00989 { 00990 view->ctrl->channels.setToolbarDirty(gFalse); 00991 view->ctrl->channels.setToolbarUpdateType(dmQUndefined); 00992 } 00993 }
void CPDFPortraitView::updatePagebar | ( | ) | [private] |
Definition at line 995 of file PDFPortraitView.cpp.
00996 { 00997 // increase reference 00998 view->ctrl->updateReq++; 00999 PV_LOGPRINTF("updateReq %d", view->ctrl->updateReq); 01000 view->ctrl->channels.pagebar_set_current_page(view->ctrl->settings.getCurrentPage()); 01001 // offset. todo 01002 }
void CPDFPortraitView::zoomFromRect | ( | int | left, | |
int | top, | |||
int | right, | |||
int | bottom | |||
) | [private] |
Definition at line 1011 of file PDFPortraitView.cpp.
01012 { 01013 rectangle rect; 01014 rect.left = left; rect.top = top; rect.right = right; rect.bottom = bottom; 01015 rect.normalize(); 01016 if (view->isPageMode()) 01017 { 01018 zoomFromRectPageMode(rect); 01019 } 01020 else if (view->isContinousMode()) 01021 { 01022 zoomFromRectContinousMode(rect); 01023 } 01024 }
void CPDFPortraitView::zoomToRect | ( | int | left, | |
int | top, | |||
int | right, | |||
int | bottom | |||
) | [private] |
Definition at line 1120 of file PDFPortraitView.cpp.
01121 { 01122 /* 01123 // check rectangle and normalize rectangle 01124 if (left > right) { int tmp = left; left = right; right = tmp; } 01125 if (top > bottom) { int tmp = top; top = bottom; bottom = tmp; } 01126 PV_LOGPRINTF("Zoom To rectangle (%d %d)-(%d %d)", left, top, right, bottom); 01127 01128 double ratio = 1.0; 01129 CPageInfo * page = view->ctrl->pageList.getPage(view->ctrl->settings.getCurrentPage()); 01130 rectangle rect; 01131 rect.left = left; rect.top = top; rect.right = right; rect.bottom = bottom; 01132 01133 if (left == right || top == bottom) 01134 { 01135 PV_LOGPRINTF("Rectangle is empty!"); 01136 ratio = ZoomMin / page->calZoom(); 01137 view->ctrl->settings.setNewZoom(ZoomMin); 01138 adjustPosition(rect, ratio); 01139 } 01140 else 01141 { 01142 // calcuate zoom factor from dpi: dpi = 0.01 * zoomA * 72 01143 // zoom and then calcuate the new position 01144 ratio = view->calRatio(rect, gFalse); 01145 view->ctrl->settings.setZoom(page->calZoom() * ratio); 01146 if (view->ctrl->settings.getZoom() >= view->ctrl->core->getZoomMax(page->pageNumber)) 01147 { 01148 view->ctrl->settings.setNewZoom(view->ctrl->core->getZoomMax(page->pageNumber)); 01149 ratio = view->ctrl->core->getZoomMax(page->pageNumber) / page->calZoom(); 01150 } 01151 else if (view->ctrl->settings.getZoom() <= ZoomMin) 01152 { 01153 view->ctrl->settings.setNewZoom(ZoomMin); 01154 ratio = ZoomMin / page->calZoom(); 01155 } 01156 else 01157 { 01158 view->ctrl->settings.setNewZoom(view->ctrl->settings.getZoom()); 01159 } 01160 adjustPosition( rect, ratio); 01161 } 01162 displayPage(view->ctrl->settings.getCurrentPage()); 01163 */ 01164 }
void CPDFPortraitView::switchMode | ( | ) | [private] |
Definition at line 1308 of file PDFPortraitView.cpp.
01309 { 01310 // Should redraw when mode is changed 01311 if (view->isPageMode()) 01312 { 01313 // from page mode to continous mode 01314 view->setContinousMode(); 01315 01316 // reset page position 01317 init(); 01318 01319 // adjust x position 01320 rectangle rect; 01321 layout.getPageRect(view->ctrl->settings.getCurrentPage(), rect); 01322 int x = view->ctrl->settings.getScreenX(); 01323 view->ctrl->settings.setScreenX(rect.left - x); 01324 } 01325 else if (view->isContinousMode()) 01326 { 01327 // from continous mode to page mode 01328 view->setPageMode(); 01329 01330 // adjust position 01331 view->ctrl->settings.setScreenY(0); 01332 rectangle rect; 01333 layout.getPageRect(view->ctrl->settings.getCurrentPage(), rect); 01334 int x = view->ctrl->settings.getScreenX(); 01335 view->ctrl->settings.setScreenX(rect.left - x); 01336 } 01337 01338 // disable zoomback 01339 view->ctrl->settings.disableZoomBack(); 01340 01341 displayPage(view->ctrl->settings.getCurrentPage()); 01342 }
void CPDFPortraitView::drawScribble | ( | const int | x, | |
const int | y, | |||
const int | pn | |||
) | [private] |
void CPDFPortraitView::getPagesRange | ( | int & | start, | |
int & | end, | |||
const int | pageNumber, | |||
const ContinousModeScroll | scroll | |||
) | [private] |
Definition at line 726 of file PDFPortraitView.cpp.
00727 { 00728 rectangle rect; 00729 if (scroll == ScrollToPage) 00730 { 00731 layout.getPageRect(pageNumber,rect); 00732 rect.bottom = rect.top + view->ctrl->settings.getScreenHeight(); 00733 view->ctrl->settings.setScreenY(rect.top); 00734 view->ctrl->settings.setCurrentPage(layout.getPagesVisible(start, end, rect)); 00735 return; 00736 } 00737 00738 if (scroll == ScrollToNextPage) 00739 { 00740 view->ctrl->settings.moveScreenY(view->ctrl->settings.getScreenHeight() - PageRepeat); 00741 validatePosition(); 00742 view->ctrl->settings.getScreenRect(rect); 00743 view->ctrl->settings.setCurrentPage(layout.getPagesVisible(start, end, rect)); 00744 return; 00745 } 00746 00747 if (scroll == ScrollToPrevPage) 00748 { 00749 view->ctrl->settings.moveScreenY(PageRepeat - view->ctrl->settings.getScreenHeight()); 00750 validatePosition(); 00751 view->ctrl->settings.getScreenRect(rect); 00752 view->ctrl->settings.setCurrentPage(layout.getPagesVisible(start, end, rect)); 00753 return; 00754 } 00755 00756 if (scroll == ScrollToPosition) 00757 { 00758 // position is ready, need check 00759 validatePosition(); 00760 view->ctrl->settings.getScreenRect(rect); 00761 00762 // when scroll, Should pay attention to render direction 00763 int n = layout.getPagesVisible(start, end, rect); 00764 if (n < view->ctrl->settings.getCurrentPage()) 00765 { 00766 view->ctrl->settings.setRenderDir(RenderPrev); 00767 } 00768 else 00769 { 00770 view->ctrl->settings.setRenderDir(RenderNext); 00771 } 00772 view->ctrl->settings.setCurrentPage(n); 00773 return; 00774 } 00775 00776 if (scroll == ScrollToNextPages) 00777 { 00778 view->ctrl->settings.moveScreenY(view->ctrl->settings.getScreenHeight() * JumpWidth); 00779 validatePosition(); 00780 view->ctrl->settings.getScreenRect(rect); 00781 view->ctrl->settings.setCurrentPage(layout.getPagesVisible(start, end, rect)); 00782 return; 00783 } 00784 00785 if (scroll == ScrollToPrevPages) 00786 { 00787 view->ctrl->settings.moveScreenY(- JumpWidth * view->ctrl->settings.getScreenHeight()); 00788 validatePosition(); 00789 view->ctrl->settings.getScreenRect(rect); 00790 view->ctrl->settings.setCurrentPage(layout.getPagesVisible(start, end, rect)); 00791 return; 00792 } 00793 00794 if (scroll == ScrollRedraw) 00795 { 00796 start = nStart; end = nEnd; 00797 } 00798 }
void CPDFPortraitView::validatePosition | ( | ) | [private] |
Definition at line 1235 of file PDFPortraitView.cpp.
01236 { 01237 rectangle rect; 01238 int w = 0; 01239 layout.getVirtualScreen(rect); 01240 if (view->isContinousMode()) 01241 { 01242 w = rect.right - rect.left; 01243 if (view->ctrl->settings.getScreenY() < rect.top + Margin) 01244 { 01245 view->ctrl->settings.setScreenY(rect.top + Margin); 01246 } 01247 else if (view->ctrl->settings.getScreenY() > 01248 rect.bottom - view->ctrl->settings.getScreenHeight() - Margin) 01249 { 01250 view->ctrl->settings.setScreenY(rect.bottom - view->ctrl->settings.getScreenHeight() - Margin); 01251 } 01252 01253 if (w > view->ctrl->settings.getScreenWidth()) 01254 { 01255 if (view->ctrl->settings.getScreenX() < rect.left + Margin) 01256 { 01257 view->ctrl->settings.setScreenX(rect.left + Margin); 01258 } 01259 else if (view->ctrl->settings.getScreenX() + view->ctrl->settings.getScreenWidth() > rect.right - Margin) 01260 { 01261 view->ctrl->settings.setScreenX(rect.right - view->ctrl->settings.getScreenWidth() - Margin); 01262 } 01263 } 01264 else 01265 { 01266 view->ctrl->settings.setScreenX((w - view->ctrl->settings.getScreenWidth()) / 2); 01267 } 01268 } 01269 else if (view->isPageMode()) 01270 { 01271 // here, rect is the page image rect 01272 w = rect.right - rect.left; 01273 int h = rect.bottom - rect.top; 01274 if ( h > view->ctrl->settings.getScreenHeight()) 01275 { 01276 if (view->ctrl->settings.getScreenY() < view->ctrl->settings.getScreenHeight() - h + Margin) 01277 { 01278 view->ctrl->settings.setScreenY(view->ctrl->settings.getScreenHeight() - h + Margin); 01279 } 01280 else if (view->ctrl->settings.getScreenY() > -Margin) 01281 { 01282 view->ctrl->settings.setScreenY(-Margin); 01283 } 01284 } 01285 else 01286 { 01287 view->ctrl->settings.setScreenY((view->ctrl->settings.getScreenHeight() - h) /2 ); 01288 } 01289 01290 if (w > view->ctrl->settings.getScreenWidth()) 01291 { 01292 if (view->ctrl->settings.getScreenX() < view->ctrl->settings.getScreenWidth() - w + Margin) 01293 { 01294 view->ctrl->settings.setScreenX(view->ctrl->settings.getScreenWidth() - w + Margin); 01295 } 01296 else if (view->ctrl->settings.getScreenX() > -Margin) 01297 { 01298 view->ctrl->settings.setScreenX(-Margin); 01299 } 01300 } 01301 else 01302 { 01303 view->ctrl->settings.setScreenX((view->ctrl->settings.getScreenWidth() - w) / 2); 01304 } 01305 } 01306 }
void CPDFPortraitView::setReady | ( | const GBool | b = gTrue |
) | [inline, private] |
void CPDFPortraitView::getPageScreenPosition | ( | const int | pn, | |
int & | x, | |||
int & | y | |||
) | [private] |
Definition at line 348 of file PDFPortraitView.cpp.
00349 { 00350 if (view->isPageMode()) 00351 { 00352 x = layout.getVirtualScreen().left; 00353 y = layout.getVirtualScreen().top; 00354 } 00355 else 00356 { 00357 rectangle rect; 00358 layout.getPageRect(pn, rect); 00359 x = rect.left - view->ctrl->settings.getScreenX(); 00360 y = rect.top - view->ctrl->settings.getScreenY(); 00361 } 00362 }
void CPDFPortraitView::zoomBack | ( | ) | [private] |
Definition at line 642 of file PDFPortraitView.cpp.
00643 { 00644 if (!view->ctrl->settings.zoomBack()) 00645 { 00646 return; 00647 } 00648 00649 init(); 00650 00651 displayPage(view->ctrl->settings.getCurrentPage(), ScrollToPosition); 00652 }
void CPDFPortraitView::backward | ( | ) | [private] |
Definition at line 654 of file PDFPortraitView.cpp.
00655 { 00656 // goBackward will change current page. 00657 HistoryItemPtr ptr = view->ctrl->settings.goBackward(); 00658 if (ptr) 00659 { 00660 displayPage(view->ctrl->settings.getCurrentPage(), ScrollToPage); 00661 } 00662 }
void CPDFPortraitView::forward | ( | ) | [private] |
Definition at line 664 of file PDFPortraitView.cpp.
00665 { 00666 // goForward will change current page. 00667 HistoryItemPtr ptr = view->ctrl->settings.goForward(); 00668 if (ptr) 00669 { 00670 displayPage(view->ctrl->settings.getCurrentPage(), ScrollToPage); 00671 } 00672 }
void CPDFPortraitView::zoomFromRectPageMode | ( | rectangle & | rect | ) | [private] |
Definition at line 1026 of file PDFPortraitView.cpp.
01027 { 01028 // tmp var 01029 double ratio = 1.0, max = 1.0, z = 1.0, tmp = 1.0; 01030 01031 // get page info 01032 CPageInfo * page = view->ctrl->pageList.getPage(view->ctrl->settings.getCurrentPage()); 01033 max = view->ctrl->core->getZoomMax(page->pageNumber); 01034 z = page->calZoom(); 01035 ratio = view->calRatio(rect); 01036 01037 // calcuate zoom factor from dpi: dpi = 0.01 * zoomA * 72 01038 // zoom and then calcuate the new position 01039 tmp = z * ratio; 01040 if (tmp >= max) 01041 { 01042 view->ctrl->settings.setNewZoom(max); 01043 ratio = max / z; 01044 } 01045 else if (tmp <= ZoomMin) 01046 { 01047 view->ctrl->settings.setNewZoom(ZoomMin); 01048 ratio = ZoomMin / z; 01049 } 01050 else 01051 { 01052 view->ctrl->settings.setNewZoom(tmp); 01053 } 01054 01055 // center the rectangle 01056 adjustPositionPageMode(rect, ratio); 01057 01058 // display it with new zoom factor 01059 displayPage(view->ctrl->settings.getCurrentPage()); 01060 }
void CPDFPortraitView::adjustPositionPageMode | ( | const rectangle & | oldRect, | |
double | ratio | |||
) | [private] |
Definition at line 1168 of file PDFPortraitView.cpp.
01169 { 01170 // old offset 01171 int offsetX = 0, offsetY = 0; 01172 point oldCenter, newCenter; 01173 oldCenter.x = (oldRect.left + oldRect.right) / 2; 01174 oldCenter.y = (oldRect.top + oldRect.bottom) / 2; 01175 offsetX = oldCenter.x - view->ctrl->settings.getScreenX(); 01176 offsetY = oldCenter.y - view->ctrl->settings.getScreenY(); 01177 01178 // calculate new rect 01179 rectangle newRect; 01180 int width = (int)((double)(oldRect.right - oldRect.left) * ratio); 01181 int height = (int)((double)(oldRect.bottom - oldRect.top) * ratio); 01182 newRect.left = (view->ctrl->settings.getScreenWidth() - width) / 2; 01183 newRect.right = newRect.left + width; 01184 newRect.top = (view->ctrl->settings.getScreenHeight() - height) /2; 01185 newRect.bottom = newRect.top + height; 01186 01187 // offset 01188 newCenter.x = (newRect.left + newRect.right) / 2; 01189 if (SmallNone != view->lessThreshold(oldRect)) 01190 { 01191 newCenter.y = oldCenter.y - (int)((double)offsetY * ratio); 01192 } 01193 else 01194 { 01195 newCenter.y = (newRect.top + newRect.bottom) / 2; 01196 newCenter.y -= (int)((double)offsetY * ratio); 01197 } 01198 01199 view->ctrl->settings.setScreenX(newCenter.x - (int)((double)offsetX * ratio)); 01200 view->ctrl->settings.setScreenY(newCenter.y); 01201 }
void CPDFPortraitView::zoomFitPageMode | ( | ) | [private] |
Definition at line 1346 of file PDFPortraitView.cpp.
01347 { 01348 // update settings, reset the screen position 01349 view->ctrl->settings.setNewZoom(ZoomPage); 01350 view->ctrl->settings.setScreenX(0); 01351 view->ctrl->settings.setScreenY(0); 01352 displayPage(view->ctrl->settings.getCurrentPage()); 01353 }
GBool CPDFPortraitView::doLinkPageMode | ( | const int | x, | |
const int | y | |||
) | [private] |
Definition at line 1423 of file PDFPortraitView.cpp.
01424 { 01425 return view->doLink(view->ctrl->settings.getCurrentPage(), 01426 x - view->ctrl->settings.getScreenX(), 01427 y - view->ctrl->settings.getScreenY()); 01428 }
void CPDFPortraitView::zoomFromRectContinousMode | ( | rectangle & | rect | ) | [private] |
Definition at line 1067 of file PDFPortraitView.cpp.
01068 { 01069 // tmp var 01070 double ratio = 1.0, max = 1.0, min = 99999.0, z = 1.0, tmp = 1.0; 01071 01072 // convert from screen to virtual screen 01073 layout.screenToVirtualScreen(view->ctrl, rect); 01074 01075 // get max and min zoom factor for all visible pages 01076 int pn = nStart; 01077 CPageInfo * page = NULL; 01078 while (pn <= nEnd) 01079 { 01080 tmp = view->ctrl->core->getZoomMax(pn); 01081 if (max < tmp) max = tmp; 01082 01083 // actually, Should check which page is selected. todo 01084 page = view->ctrl->pageList.getPage(pn); 01085 tmp = page->calZoom(); 01086 if (min > tmp) min = tmp; 01087 ++pn; 01088 } 01089 z = min; 01090 ratio = view->calRatio(rect); 01091 01092 // calcuate zoom factor from dpi: dpi = 0.01 * zoomA * 72 01093 // zoom and then calcuate the new position 01094 tmp = z * ratio; 01095 if (tmp >= max) 01096 { 01097 view->ctrl->settings.setNewZoom(max); 01098 ratio = max / z; 01099 } 01100 else if (tmp <= ZoomMin) 01101 { 01102 view->ctrl->settings.setNewZoom(ZoomMin); 01103 ratio = ZoomMin / z; 01104 } 01105 else 01106 { 01107 view->ctrl->settings.setNewZoom(tmp); 01108 } 01109 01110 // reset 01111 init(); 01112 01113 // center the rectangle for continous mode 01114 adjustPositionContinousMode(rect, ratio); 01115 01116 // display it with new zoom factor 01117 displayPage(view->ctrl->settings.getCurrentPage(), ScrollToPosition); 01118 }
void CPDFPortraitView::adjustPositionContinousMode | ( | const rectangle & | oldRect, | |
double | ratio | |||
) | [private] |
Definition at line 1205 of file PDFPortraitView.cpp.
01206 { 01207 // calculate the center point & offset 01208 int x = 0, y = 0, offset = 0; 01209 point oldCenter, newCenter; 01210 oldCenter.x = (oldRect.left + oldRect.right) / 2; 01211 oldCenter.y = (oldRect.top + oldRect.bottom) / 2; 01212 offset = oldCenter.y - view->ctrl->settings.getScreenY(); 01213 x = (int)((double)oldCenter.x * ratio); 01214 y = (int)((double)oldCenter.y * ratio); 01215 01216 // new center point 01217 newCenter.x = x - view->ctrl->settings.getScreenWidth() / 2; 01218 if (SmallNone == view->lessThreshold(oldRect)) 01219 { 01220 newCenter.y = y - view->ctrl->settings.getScreenHeight() / 2; 01221 } 01222 else 01223 { 01224 newCenter.y = y - offset; // do not change offset 01225 } 01226 01227 // update screen position 01228 view->ctrl->settings.setScreenX(newCenter.x); 01229 view->ctrl->settings.setScreenY(newCenter.y); 01230 }
void CPDFPortraitView::zoomFitContinousMode | ( | ) | [private] |
Definition at line 1357 of file PDFPortraitView.cpp.
01358 { 01359 // calculate ratio 01360 double oldZoom = view->ctrl->calZoom(view->ctrl->settings.getCurrentPage()); 01361 view->ctrl->settings.setZoom(ZoomPage); 01362 double newZoom = view->ctrl->calZoom(view->ctrl->settings.getCurrentPage()); 01363 view->ctrl->settings.setZoom(oldZoom); 01364 view->ctrl->settings.setNewZoom(newZoom); 01365 double ratio = newZoom / oldZoom; 01366 01367 // get current virtual screen 01368 rectangle rect; 01369 rect.left = 0; rect.right = view->ctrl->settings.getScreenWidth(); 01370 rect.top = view->ctrl->settings.getScreenY(); 01371 rect.bottom = view->ctrl->settings.getScreenY(); 01372 01373 // reset page position list 01374 init(); 01375 01376 // adjust 01377 adjustPositionContinousMode(rect, ratio); 01378 01379 // display 01380 displayPage(view->ctrl->settings.getCurrentPage(), ScrollToPosition); 01381 }
GBool CPDFPortraitView::doLinkContinousMode | ( | const int | x, | |
const int | y | |||
) | [private] |
Definition at line 1431 of file PDFPortraitView.cpp.
01432 { 01433 point pt; pt.x = x; pt.y = y; 01434 layout.screenToVirtualScreen(view->ctrl, pt); 01435 int pn = layout.hitTest(pt.x, pt.y, nStart, nEnd); 01436 if (pn < 0) return gFalse; 01437 rectangle rect; 01438 layout.getPageRect(pn, rect); 01439 return view->doLink(pn, pt.x - rect.left, pt.y - rect.top); 01440 }
void CPDFPortraitView::displayPages | ( | const int | start, | |
const int | end | |||
) | [private] |
Definition at line 581 of file PDFPortraitView.cpp.
00582 { 00583 // blink 00584 view->ctrl->channels.busy_blink(); 00585 00586 // record 00587 nStart = start, nEnd = end; 00588 00589 // check page number is valid or not 00590 GBool bRendering = gFalse; 00591 00592 // clear all items 00593 list.clear(); 00594 00595 // check 00596 for(int i = start; i <= end; ++i) 00597 { 00598 if (i >= 1 && i <= view->ctrl->core->getNumPages()) 00599 { 00600 CPageInfo info; 00601 info.pageNumber = i; 00602 info.pageZoom = view->ctrl->calZoom(i); 00603 info.rotate = view->ctrl->settings.getRotate(); 00604 CPageInfo * page = view->ctrl->pageList.checkPage(info); 00605 if (NULL == page) 00606 { 00607 TodoItem * item = new TodoItem; 00608 item->pageNumber = info.pageNumber; 00609 item->rotate = info.rotate; 00610 item->zoom = info.pageZoom; 00611 item->timeStamp = view->ctrl->getTimeStamp(); 00612 if (view->ctrl->thread.isInRendering(item)) 00613 { 00614 bRendering = gTrue; 00615 item->timeStamp = 0; // set a flag 00616 } 00617 list.add(item); 00618 } 00619 } 00620 } 00621 00622 // draw now if available 00623 if (list.isEmpty()) 00624 { 00625 drawPages(start, end); 00626 } 00627 else 00628 { 00629 if (bRendering) 00630 { 00631 list.issueItems(view); 00632 } 00633 else 00634 { 00635 list.renderItems(view); // abort and issue 00636 } 00637 } 00638 }
void CPDFPortraitView::drawPages | ( | const int | start, | |
const int | end | |||
) | [private] |
Definition at line 674 of file PDFPortraitView.cpp.
00675 { 00676 // update pagebar 00677 updatePagebar(); 00678 00679 // update toolbar 00680 CPageInfo * page = view->ctrl->pageList.getPage(view->ctrl->settings.getCurrentPage()); 00681 updateToolbar(page); 00682 00683 #if (PV_PROFILE_ON) 00684 int t1 = view->ctrl->getHighTimeStamp(); 00685 #endif 00686 00687 // clear background 00688 view->ctrl->gtkMgr.clearBkground(); 00689 00690 for(int i = start; i <= end; ++i) 00691 { 00692 // should I check page parameters? 00693 page = view->ctrl->pageList.getPage(i); 00694 if (page) 00695 { 00696 drawPageImage(page); 00697 } 00698 } 00699 00700 // sync 00701 XSync(view->ctrl->gtkMgr.display, gTrue); 00702 00703 #if (PV_PROFILE_ON) 00704 int t2 = view->ctrl->getHighTimeStamp(); 00705 PV_DUMP("\ndrawImage and XSync time %d\n", t2 - t1); 00706 #endif 00707 00708 // Should update screen now? It could happen when toolbar and pagebar aren't dirty 00709 if (view->ctrl->updateReq <= 0) 00710 { 00711 view->refreshDeviceScreen(dmQFull); 00712 view->ctrl->updateReq = 0; 00713 } 00714 00715 // set ready. Now enable handle mouse event 00716 setReady(); 00717 00718 // issue new requests now 00719 view->issueNewRequests(); 00720 }
void CPDFPortraitView::drawPageImage | ( | CPageInfo * | page | ) | [private] |
Definition at line 800 of file PDFPortraitView.cpp.
00801 { 00802 // update page time stamp 00803 page->timestamp = view->ctrl->getTimeStamp(); 00804 00805 // page position 00806 int x = view->ctrl->settings.getScreenX(); 00807 int y = view->ctrl->settings.getScreenY(); 00808 00809 // should adjust page position 00810 if (view->isPageMode()) 00811 { 00812 if (page->bitmap->getWidth() <= view->ctrl->settings.getScreenWidth() || 00813 view->ctrl->settings.getZoom() == ZoomPage) 00814 { 00815 x = ((view->ctrl->settings.getScreenWidth() - page->bitmap->getWidth()) >> 1); 00816 view->ctrl->settings.setScreenX(x); 00817 } 00818 layout.updatePageRect(x, y, page->bitmap->getWidth(), page->bitmap->getHeight()); 00819 } 00820 else if (view->isContinousMode()) 00821 { 00822 rectangle rect; 00823 layout.getPageRect(page->pageNumber, rect); 00824 x = rect.left - view->ctrl->settings.getScreenX(); 00825 y = rect.top - view->ctrl->settings.getScreenY(); 00826 } 00827 00828 // display image. draw border only in continous mode 00829 view->ctrl->gtkMgr.drawImage(page->bitmap, 00830 0, 0, 00831 x, y, 00832 page->bitmap->getWidth(), page->bitmap->getHeight(), 00833 view->isContinousMode()); 00834 00835 // draw scribble, x & y refers page start position in screen 00836 drawScribble(x, y, page->pageNumber); 00837 }
void CPDFPortraitView::setView | ( | CPDFView * | p | ) | [inline] |
void CPDFPortraitView::init | ( | ) |
Definition at line 43 of file PDFPortraitView.cpp.
00044 { 00045 list.clear(); 00046 if (view->isPageMode()) 00047 { 00048 // validatePosition(); 00049 } 00050 else if (view->isContinousMode()) 00051 { 00052 // update zoom, otherwise zoomPage and zoomWidth will cause 00053 // page size problems, because not all pages are rendered in 00054 // same zoom factor 00055 double z = layout.initPagesPosition(view->ctrl); 00056 view->ctrl->settings.setZoom(z); 00057 } 00058 setReady(gFalse); 00059 }
void CPDFPortraitView::clear | ( | ) |
void CPDFPortraitView::displayPage | ( | const int | pageNumber, | |
const ContinousModeScroll | mode = ScrollToPage | |||
) |
Definition at line 541 of file PDFPortraitView.cpp.
00542 { 00543 // check page number is valid or not 00544 if (pageNumber <= 0 || 00545 pageNumber > view->ctrl->core->getNumPages()) 00546 { 00547 PV_ERRORPRINTF("Invalid page number %d!", pageNumber); 00548 view->ctrl->channels.busy_off(); 00549 return; 00550 } 00551 00552 // set busy 00553 setReady(gFalse); 00554 00555 if (view->isPageMode()) 00556 { 00557 // change current page 00558 view->ctrl->settings.setCurrentPage(pageNumber); 00559 00560 // display it 00561 displayPages(pageNumber, pageNumber); 00562 } 00563 else if (view->isContinousMode()) 00564 { 00565 // calcuate pages should be displayed from pagenumber and scroll mode 00566 int start = pageNumber, end = pageNumber; 00567 getPagesRange(start, end, pageNumber, scroll); 00568 00569 // debug 00570 PV_LOGPRINTF("Visible page range [%d, %d] current page %d", start, end, 00571 view->ctrl->settings.getCurrentPage()); 00572 00573 // display them 00574 displayPages(start, end); 00575 } 00576 }
void CPDFPortraitView::ipcCbk | ( | gint * | fd, | |
GdkInputCondition | id | |||
) |
Definition at line 376 of file PDFPortraitView.cpp.
00377 { 00378 char szBuffer[IPC_BUF_MAX]; 00379 int nBuf = IPC_BUF_MAX; 00380 erIpcCmd_t command; 00381 erServerChannel_t channel = view->ctrl->channels.erIpcChannel; 00382 erIpcGetMessage(channel, szBuffer, &nBuf); 00383 if (vwrParseCommand(szBuffer, &command) >= 0) 00384 { 00385 switch (command.cc) 00386 { 00387 case ccVwrJumpToPage: 00388 { 00389 int pg = atoi(command.arg[1]); 00390 00391 // should change render direction 00392 if (pg < view->ctrl->settings.getCurrentPage()) 00393 { 00394 if (pg <= 1) 00395 { 00396 view->ctrl->settings.setRenderDir(RenderNext); 00397 } 00398 else 00399 { 00400 view->ctrl->settings.setRenderDir(RenderPrev); 00401 } 00402 } 00403 else if (pg > view->ctrl->settings.getCurrentPage()) 00404 { 00405 if (pg >= view->ctrl->core->getNumPages()) 00406 { 00407 view->ctrl->settings.setRenderDir(RenderPrev); 00408 } 00409 else 00410 { 00411 view->ctrl->settings.setRenderDir(RenderNext); 00412 } 00413 } 00414 00415 displayPage(pg); 00416 break; 00417 } 00418 case ccVwrToolbar: 00419 { 00420 // protect toolbar 00421 if (!isReady()) 00422 { 00423 PV_TBPRINTF("Not allow to handle it during rendering!"); 00424 return; 00425 } 00426 PV_TBPRINTF("Received toolbar message!"); 00427 00428 int iconID = atoi(command.arg[0]); 00429 int state = atoi(command.arg[1]); 00430 if (view->ctrl->channels.onReceiveToolbarMsg(iconID, state)) 00431 { 00432 view->ctrl->channels.setToolbarUpdateType(dmQTyping); 00433 view->ctrl->channels.redrawToolbar(); 00434 } 00435 00436 if (iconID == iconID_zoomfit) 00437 { 00438 if (view->isPageMode()) 00439 { 00440 zoomFitPageMode(); 00441 } 00442 else if (view->isContinousMode()) 00443 { 00444 zoomFitContinousMode(); 00445 } 00446 } 00447 else if (iconID == iconID_portrait_landscape || 00448 iconID == iconID_landscape_portrait) 00449 { 00450 view->ctrl->channels.setRotateState(RotateDirty); 00451 if (view->isPageMode()) 00452 { 00453 view->rotatePageMode(-90); 00454 } 00455 else 00456 { 00457 view->rotateContinousMode(-90); 00458 } 00459 } 00460 else if (iconID == iconID_page_mode || 00461 iconID == iconID_continuous_mode) 00462 { 00463 switchMode(); 00464 } 00465 else if (iconID == iconID_zoomback) 00466 { 00467 zoomBack(); 00468 } 00469 else if (iconID == iconID_back) 00470 { 00471 backward(); 00472 } 00473 else if (iconID == iconID_forward) 00474 { 00475 forward(); 00476 } 00477 else if (view->ctrl->scbMgr.isEraseDirty()) 00478 { 00479 if (view->ctrl->channels.isScribbleIcon(iconID) || 00480 iconID == iconID_pan || 00481 iconID == iconID_zoomin) 00482 { 00483 // need to redraw the page now 00484 view->ctrl->scbMgr.setEraseDirty(gFalse); 00485 view->ctrl->channels.setToolbarUpdateType(dmQFull); 00486 if (iconID == iconID_zoomin) 00487 { 00488 view->ctrl->channels.setZoomIn(3); 00489 } 00490 view->displayPage(view->ctrl->settings.getCurrentPage(), ScrollRedraw); 00491 } 00492 } 00493 break; 00494 } 00495 case ccVwrToolbarSync: 00496 { 00497 00498 if (view->ctrl->channels.getToolbarUpdateType() == dmQTyping) 00499 { 00500 PV_TBPRINTF("Toolbar sync typing!"); 00501 view->refreshDeviceScreen(dmQTyping, gFalse); 00502 view->ctrl->channels.setToolbarDirty(gFalse); 00503 view->ctrl->channels.setToolbarUpdateType(dmQUndefined); 00504 } 00505 else if (view->ctrl->channels.getToolbarUpdateType() == dmQFull) 00506 { 00507 PV_TBPRINTF("Toolbar sync full update!"); 00508 --view->ctrl->updateReq; 00509 if (view->ctrl->updateReq <= 0) 00510 { 00511 view->refreshDeviceScreen(dmQFull); 00512 view->ctrl->updateReq = 0; 00513 } 00514 view->ctrl->channels.setToolbarDirty(gFalse); 00515 view->ctrl->channels.setToolbarUpdateType(dmQUndefined); 00516 } 00517 PV_TBPRINTF("Receive toolbar sync %d!", view->ctrl->updateReq); 00518 break; 00519 } 00520 case ccVwrPagebarSync: 00521 { 00522 --view->ctrl->updateReq; 00523 if (view->ctrl->updateReq <= 0) 00524 { 00525 view->refreshDeviceScreen(dmQFull); 00526 view->ctrl->updateReq = 0; 00527 } 00528 PV_TBPRINTF("Receive pageBar sync %d!", view->ctrl->updateReq ); 00529 break; 00530 } 00531 default: 00532 break; 00533 } 00534 } 00535 }
int CPDFPortraitView::hitTest | ( | const int | x, | |
const int | y, | |||
int & | ox, | |||
int & | oy | |||
) |
Definition at line 1385 of file PDFPortraitView.cpp.
01386 { 01387 if (view->isPageMode()) 01388 { 01389 if (layout.hitTest(x, y)) 01390 { 01391 // convert to page offset 01392 ox = x - view->ctrl->settings.getScreenX(); 01393 oy = y - view->ctrl->settings.getScreenY(); 01394 return view->ctrl->settings.getCurrentPage(); 01395 } 01396 } 01397 else 01398 { 01399 if (nStart > 0 && nEnd > 0 && list.isEmpty()) 01400 { 01401 // from screen to virtual screen 01402 ox = x + view->ctrl->settings.getScreenX(); 01403 oy = y + view->ctrl->settings.getScreenY(); 01404 int pn = layout.hitTest(ox, oy, nStart, nEnd); 01405 if (pn > 0) 01406 { 01407 rectangle rect; 01408 layout.getPageRect(pn, rect); 01409 ox -= rect.left; 01410 oy -= rect.top; 01411 return pn; 01412 } 01413 else 01414 { 01415 return -1; 01416 } 01417 01418 } 01419 } 01420 return -1; 01421 }
GBool CPDFPortraitView::isReady | ( | ) | const [inline] |
gboolean CPDFPortraitView::buttonPressCbk | ( | GdkEventButton * | event | ) |
Definition at line 69 of file PDFPortraitView.cpp.
00070 { 00071 if (!isReady()) 00072 { 00073 PV_LOGPRINTF("Not allow to handle mouse event now!"); 00074 return FALSE; 00075 } 00076 00077 int x = (int)event->x; 00078 int y = (int)event->y; 00079 if (y >= view->ctrl->settings.getScreenHeight()) return FALSE; 00080 00081 if (view->isPanEnable()) 00082 { 00083 // enable panning, record the position 00084 view->initPan(x, y); 00085 } 00086 else if (view->isZoomInEnable() || 00087 view->isZoomOutEnable()) 00088 { 00089 view->initZoomRect(x, y); 00090 } 00091 else if (view->isScribbleEnable()) 00092 { 00093 // PV_LOGPRINTF("scribble down!"); 00094 int ox, oy; 00095 int px, py; 00096 int pn = hitTest(x, y, ox, oy); 00097 00098 // get page x & y 00099 getPageScreenPosition(pn, px, py); 00100 view->ctrl->scbMgr.onScribblePress(pn, view->ctrl, px, py, x, y, ox, oy); 00101 } 00102 else if (view->isEraseEnable()) 00103 { 00104 int ox, oy; 00105 int pn = hitTest(x, y, ox, oy); 00106 00107 if (view->isPageMode()) 00108 { 00109 x = layout.getVirtualScreen().left; 00110 y = layout.getVirtualScreen().top; 00111 } 00112 else 00113 { 00114 rectangle rect; 00115 layout.getPageRect(pn, rect); 00116 x = rect.left - view->ctrl->settings.getScreenX(); 00117 y = rect.top - view->ctrl->settings.getScreenY(); 00118 } 00119 view->ctrl->scbMgr.onErasePress(pn, view->ctrl, 00120 x, y, ox, oy); 00121 } 00122 00123 return FALSE; 00124 }
gboolean CPDFPortraitView::buttonReleaseCbk | ( | GdkEventButton * | event | ) |
Definition at line 126 of file PDFPortraitView.cpp.
00127 { 00128 if (!isReady()) 00129 { 00130 PV_LOGPRINTF("Not allow to handle mouse event now!"); 00131 return FALSE; 00132 } 00133 00134 int x = (int)event->x; 00135 int y = (int)event->y; 00136 if (y >= view->ctrl->settings.getScreenHeight()) return FALSE; 00137 00138 if (view->isScribbleEnable()) 00139 { 00140 // PV_LOGPRINTF("scribble release!"); 00141 int ox, oy; 00142 int px, py; 00143 00144 // get page number 00145 int pn = hitTest(x, y, ox, oy); 00146 00147 // get page x & y 00148 getPageScreenPosition(pn, px, py); 00149 view->ctrl->scbMgr.onScribbleRelease(pn, view->ctrl, px, py, x, y, ox, oy); 00150 return FALSE; 00151 } 00152 else if (view->isEraseEnable()) 00153 { 00154 int ox, oy; 00155 int pn = hitTest(x, y, ox, oy); 00156 if (view->isPageMode()) 00157 { 00158 x = layout.getVirtualScreen().left; 00159 y = layout.getVirtualScreen().top; 00160 } 00161 else 00162 { 00163 rectangle rect; 00164 layout.getPageRect(pn, rect); 00165 x = rect.left - view->ctrl->settings.getScreenX(); 00166 y = rect.top - view->ctrl->settings.getScreenY(); 00167 } 00168 view->ctrl->scbMgr.onEraseRelease(pn, view->ctrl, x, y, ox, oy); 00169 return FALSE; 00170 } 00171 00172 // try to do hyper link at first. if not in scribble 00173 if (view->isSmallOffset(x, y)) 00174 { 00175 PV_LOGPRINTF("Small Offset!"); 00176 if (view->isPageMode()) 00177 { 00178 if (doLinkPageMode(x, y)) 00179 return FALSE; 00180 } 00181 else 00182 { 00183 if (doLinkContinousMode(x, y)) 00184 return FALSE; 00185 } 00186 PV_LOGPRINTF("Seems no link!"); 00187 } 00188 if (view->isPanEnable()) 00189 { 00190 // pan should never out of range of current document 00191 int deltaX = view->panPt.x - x; 00192 int deltaY = view->panPt.y - y; 00193 if (view->isPageMode()) 00194 { 00195 view->ctrl->settings.moveScreenX(-deltaX); 00196 view->ctrl->settings.moveScreenY(-deltaY); 00197 } 00198 else 00199 { 00200 view->ctrl->settings.moveScreenX(deltaX); 00201 view->ctrl->settings.moveScreenY(deltaY); 00202 } 00203 validatePosition(); 00204 displayPage(view->ctrl->settings.getCurrentPage(), ScrollToPosition); 00205 return FALSE; 00206 } 00207 else if (view->isZoomInEnable()) 00208 { 00209 view->adjustZoomRect(x, y); 00210 zoomFromRect(view->zoomRect.left, 00211 view->zoomRect.top, 00212 view->zoomRect.right, 00213 view->zoomRect.bottom); 00214 00215 } 00216 else if (view->isZoomOutEnable()) 00217 { 00218 view->adjustZoomRect(x, y); 00219 zoomToRect(view->zoomRect.left, 00220 view->zoomRect.top, 00221 view->zoomRect.right, 00222 view->zoomRect.bottom); 00223 } 00224 return FALSE; 00225 }
gboolean CPDFPortraitView::motionNotifyCbk | ( | GdkEventMotion * | event | ) |
Definition at line 227 of file PDFPortraitView.cpp.
00228 { 00229 if (!isReady()) 00230 { 00231 PV_LOGPRINTF("Not allow to handle mouse event now!"); 00232 return FALSE; 00233 } 00234 00235 int x = (int)event->x; 00236 int y = (int)event->y; 00237 if (y >= view->ctrl->settings.getScreenHeight()) 00238 { 00239 PV_LOGPRINTF("Not allow to handle mouse event now!"); 00240 return FALSE; 00241 } 00242 00243 if (view->isPanEnable()) 00244 { 00245 return FALSE; 00246 } 00247 else if (view->isZoomInEnable() || 00248 view->isZoomOutEnable()) 00249 { 00250 view->adjustZoomRect(x, y); 00251 } 00252 else if (view->isScribbleEnable()) 00253 { 00254 // PV_LOGPRINTF("scribble!"); 00255 int ox, oy; 00256 int px, py; 00257 int pn = hitTest(x, y, ox, oy); 00258 00259 // get page x & y 00260 getPageScreenPosition(pn, px, py); 00261 view->ctrl->scbMgr.onScribbleMove(pn, view->ctrl, px, py, 00262 x, y, ox, oy); 00263 } 00264 else if (view->isEraseEnable()) 00265 { 00266 int ox, oy; 00267 int pn = hitTest(x, y, ox, oy); 00268 getPageScreenPosition(pn, x, y); 00269 view->ctrl->scbMgr.onEraseMove(pn, view->ctrl, 00270 x, y, ox, oy); 00271 } 00272 return FALSE; 00273 }
gboolean CPDFPortraitView::keyPressCbk | ( | GdkEventKey * | event | ) |
Definition at line 275 of file PDFPortraitView.cpp.
00276 { 00277 if (event->time == 0) 00278 { 00279 onPageRendered(event->state); 00280 return FALSE; 00281 } 00282 00283 switch (event->keyval) 00284 { 00285 case GDK_Home: 00286 displayPage(1); 00287 break; 00288 case GDK_F5: 00289 view->quit(); 00290 break; 00291 case GDK_Page_Up: 00292 view->ctrl->settings.setRenderDir(RenderPrev); 00293 if (view->ctrl->settings.getCurrentPage() <= 1) 00294 { 00295 displayPage(1, ScrollToPrevPage); 00296 } 00297 else 00298 { 00299 displayPage(view->ctrl->settings.getCurrentPage() - 1, ScrollToPrevPage); 00300 } 00301 break; 00302 case GDK_Page_Down: 00303 view->ctrl->settings.setRenderDir(RenderNext); 00304 if (view->ctrl->settings.getCurrentPage() >= view->ctrl->core->getNumPages()) 00305 { 00306 displayPage(view->ctrl->settings.getCurrentPage(), ScrollToNextPage); 00307 } 00308 else 00309 { 00310 displayPage(view->ctrl->settings.getCurrentPage() + 1, ScrollToNextPage); 00311 } 00312 break; 00313 case GDK_F1: /* iRex: long pageflip forward */ 00314 view->ctrl->settings.setRenderDir(RenderNext); 00315 if (view->ctrl->settings.getCurrentPage() + JumpWidth > view->ctrl->core->getNumPages()) 00316 { 00317 displayPage(view->ctrl->core->getNumPages()); 00318 } 00319 else 00320 { 00321 displayPage(view->ctrl->settings.getCurrentPage() + JumpWidth, ScrollToNextPages); 00322 } 00323 break; 00324 case GDK_F2: /* iRex: long pageflip backward */ 00325 view->ctrl->settings.setRenderDir(RenderPrev); 00326 if ((view->ctrl->settings.getCurrentPage() - JumpWidth) < 1) 00327 { 00328 displayPage(1); 00329 } 00330 else 00331 { 00332 displayPage(view->ctrl->settings.getCurrentPage() - JumpWidth, ScrollToPrevPages); 00333 } 00334 break; 00335 default: 00336 view->ctrl->channels.busy_off(); 00337 break; // no return: do not bypass keyPressCbk 00338 } 00339 return FALSE; 00340 00341 }
gboolean CPDFPortraitView::deleteCbk | ( | GdkEvent * | event | ) |
CPDFView* CPDFPortraitView::view [private] |
Definition at line 36 of file PDFPortraitView.h.
CLayoutMgr CPDFPortraitView::layout [private] |
Definition at line 37 of file PDFPortraitView.h.
CDisplayList CPDFPortraitView::list [private] |
Definition at line 38 of file PDFPortraitView.h.
int CPDFPortraitView::nStart [private] |
Definition at line 39 of file PDFPortraitView.h.
int CPDFPortraitView::nEnd [private] |
Definition at line 39 of file PDFPortraitView.h.
int CPDFPortraitView::nOffset [private] |
Definition at line 40 of file PDFPortraitView.h.
GBool CPDFPortraitView::bReady [private] |
Definition at line 41 of file PDFPortraitView.h.