CPDFPortraitView Class Reference

#include <PDFPortraitView.h>

Collaboration diagram for CPDFPortraitView:

Collaboration graph
[legend]

List of all members.

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

CPDFViewview
CLayoutMgr layout
CDisplayList list
int nStart
int nEnd
int nOffset
GBool bReady


Detailed Description

Definition at line 33 of file PDFPortraitView.h.


Constructor & Destructor Documentation

CPDFPortraitView::CPDFPortraitView ( void   ) 

Definition at line 27 of file PDFPortraitView.cpp.

00028 : view(NULL)
00029 , nStart(-1)
00030 , nEnd(-1)
00031 , nOffset(100)
00032 , bReady(gFalse)
00033 {
00034 }

CPDFPortraitView::~CPDFPortraitView ( void   ) 

Definition at line 36 of file PDFPortraitView.cpp.

00037 {
00038 }


Member Function Documentation

void CPDFPortraitView::onPageRendered ( const int  pageNumber  )  [private]

Definition at line 364 of file PDFPortraitView.cpp.

00365 {
00366     // compare and draw, checkpoint
00367     if (list.remove(pageNumber))
00368     {
00369         if (list.isEmpty())
00370         {
00371             drawPages(nStart, nEnd);
00372         }
00373     }
00374 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

void CPDFPortraitView::drawScribble ( const int  x,
const int  y,
const int  pn 
) [private]

Definition at line 1445 of file PDFPortraitView.cpp.

01446 {
01447     view->ctrl->scbMgr.drawScribblePage(pn, 
01448         view->ctrl, x, y);
01449 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

void CPDFPortraitView::setReady ( const GBool  b = gTrue  )  [inline, private]

Definition at line 57 of file PDFPortraitView.h.

00057 { bReady = b; }

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

void CPDFPortraitView::setView ( CPDFView p  )  [inline]

Definition at line 82 of file PDFPortraitView.h.

00082 { view = p; }

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 }

Here is the call graph for this function:

void CPDFPortraitView::clear (  ) 

Definition at line 61 of file PDFPortraitView.cpp.

00062 {
00063     list.clear();
00064     layout.clear();
00065 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

GBool CPDFPortraitView::isReady (  )  const [inline]

Definition at line 89 of file PDFPortraitView.h.

00089 { return bReady; }

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

gboolean CPDFPortraitView::deleteCbk ( GdkEvent *  event  ) 

Definition at line 343 of file PDFPortraitView.cpp.

00344 {
00345     return TRUE;
00346 }


Member Data Documentation

Definition at line 36 of file PDFPortraitView.h.

Definition at line 37 of file PDFPortraitView.h.

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.

Definition at line 40 of file PDFPortraitView.h.

GBool CPDFPortraitView::bReady [private]

Definition at line 41 of file PDFPortraitView.h.


The documentation for this class was generated from the following files:

Generated on Wed Feb 4 18:26:24 2009 by  doxygen 1.5.6