Changeset 279

Show
Ignore:
Timestamp:
06/26/07 07:07:49 (16 months ago)
Author:
jordi
Message:

Igor Vagulin sent a patch to change the Scroll and Text Selection ToggleAction? to RadioActions?.

Moved the implementation of PagePter?'s setMode() to its implementation file.

Fixed the selection of an empty rectangle.

Location:
trunk/src
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/MainPter.cxx

    r277 r279  
    697697 
    698698void 
    699 MainPter::pageModeScrollActivated (gboolean active) 
    700 { 
    701     IMainView &view = getView (); 
    702     if ( active ) 
    703     { 
    704         m_PagePter->setMode(PagePterModeScroll); 
    705         view.activePageModeText (FALSE); 
    706     } 
    707 } 
    708  
    709 void 
    710 MainPter::pageModeTextActivated (gboolean active) 
    711 { 
    712     IMainView &view = getView (); 
    713     if ( active ) 
    714     { 
    715         m_PagePter->setMode(PagePterModeSelectText); 
    716         view.activePageModeScroll (FALSE); 
    717     } 
     699MainPter::setPageMode (PagePterMode mode) 
     700{ 
     701    m_PagePter->setMode(mode); 
    718702} 
    719703 
  • trunk/src/MainPter.h

    r277 r279  
    4141            ~MainPter (void); 
    4242 
    43             void pageModeTextActivated(gboolean active); 
    44             void pageModeScrollActivated(gboolean active); 
     43            void setPageMode(PagePterMode mode); 
    4544 
    4645            void setInitialState (void); 
  • trunk/src/PDFDocument.cxx

    r277 r279  
    657657} 
    658658 
     659static void 
     660repairEmpty(PopplerRectangle& rect) 
     661{ 
     662    //rect must have be least 1x1 
     663    if(rect.y1 == rect.y2) 
     664        rect.y2++; 
     665    if(rect.x1 == rect.x2) 
     666        rect.x2++; 
     667} 
     668 
    659669void  
    660670PDFDocument::setTextSelection (DocumentRectangle *rect) 
     
    670680     
    671681    //for get text we must exchange y coordinate, don't ask me where logic here. 
    672     PopplerRectangle textRect = { rect->getX1(), 
    673                                   (pageHeight - rect->getY2()), 
    674                                   rect->getX2(), 
    675                                   (pageHeight - rect->getY1())}; 
     682    PopplerRectangle textRect = { rect->getX1() / getZoom(), 
     683                                  (pageHeight - rect->getY2() / getZoom()), 
     684                                  rect->getX2() * getZoom() / getZoom(), 
     685                                  (pageHeight - rect->getY1() / getZoom())}; 
     686    repairEmpty(textRect); 
     687 
    676688    gchar *text = poppler_page_get_text(page, &textRect); 
    677689    if(!text) 
     
    692704        g_free(text); 
    693705} 
     706 
    694707GdkRegion* 
    695708PDFDocument::getTextRegion (DocumentRectangle *r) 
     
    705718    rect.y1 = r->getY1() / getZoom(); 
    706719    rect.x2 = r->getX2() / getZoom(); 
    707     rect.y2 = r->getY2() / getZoom(); 
     720    rect.y2 = r->getY2() / getZoom();    
     721    repairEmpty(rect); 
    708722 
    709723    //calc selection size 
  • trunk/src/PagePter.cxx

    r277 r279  
    6868    m_NextPageScroll = PAGE_SCROLL_START; 
    6969    m_PageView = NULL; 
    70     m_Mode = PagePterModeScroll; 
     70    m_ScrollMode = PagePterModeScroll; 
    7171} 
    7272 
     
    135135            m_DragInfo->startX = x; 
    136136            m_DragInfo->startY = y; 
    137             if(m_Mode == PagePterModeScroll) 
     137            if(m_ScrollMode == PagePterModeScroll) 
    138138                view.setCursor (PAGE_VIEW_CURSOR_DRAG); 
    139139            else 
     
    160160        m_LastSelection = NULL; 
    161161 
    162         if(m_Document->isLoaded() && m_Mode == PagePterModeSelectText){ 
     162        if(m_Document->isLoaded() && m_ScrollMode == PagePterModeSelectText){ 
    163163            DocumentRectangle rect(m_DragInfo->startX, m_DragInfo->startY, 
    164164                                   m_DragInfo->x, m_DragInfo->y); 
     
    205205        m_DragInfo->y = y;   
    206206 
    207         if(m_Mode == PagePterModeScroll){ 
     207        if(m_ScrollMode == PagePterModeScroll){ 
    208208            view.scrollPage (view.getHorizontalScroll (), view.getVerticalScroll (), 
    209209                             x - m_DragInfo->startX, y - m_DragInfo->startY); 
     
    408408 
    409409/// 
     410/// @brief Sets the page mouse scroll mode 
     411/// 
     412/// @param mode Scroll mode to set. 
     413/// 
     414void 
     415PagePter::setMode (PagePterMode mode) 
     416{ 
     417    this->m_ScrollMode = mode; 
     418} 
     419 
     420/// 
    410421/// @brief The page view has been resized. 
    411422/// 
  • trunk/src/PagePter.h

    r277 r279  
    2424namespace ePDFView 
    2525{ 
    26     enum PagePterMode{ 
    27         PagePterModeScroll, 
    28         PagePterModeSelectText, 
    29     }; 
     26    enum PagePterMode{ 
     27        PagePterModeScroll, 
     28        PagePterModeSelectText, 
     29    }; 
    3030 
    3131    /// 
     
    5959            void setView (IMainView &view); 
    6060            void viewResized (gint width, gint height); 
    61             void setMode(PagePterMode mode) 
    62             { 
    63                 m_Mode = mode; 
    64             } 
     61            void setMode(PagePterMode mode); 
    6562 
    6663        protected: 
     
    7370            /// The page view. 
    7471            IPageView *m_PageView; 
    75             /// Last text selection 
    76             GdkRegion *m_LastSelection; 
    77             /// What page presenter must do when user move mouse with button pressed. 
    78             PagePterMode m_Mode; 
     72            /// Last text selection 
     73            GdkRegion *m_LastSelection; 
     74            /// What page presenter must do when user move mouse with button pressed. 
     75            PagePterMode m_ScrollMode; 
    7976 
    80             void refreshPage (PageScroll pageScroll, gboolean wasZoomed); 
     77            void refreshPage (PageScroll pageScroll, gboolean wasZoomed); 
    8178    }; 
    8279} 
  • trunk/src/gtk/MainView.cxx

    r277 r279  
    7777static void main_window_zoom_out_cb (GtkWidget *, gpointer); 
    7878static void main_window_zoom_width_cb (GtkToggleAction *, gpointer); 
    79 static void main_window_page_mode_scroll_cb (GtkToggleAction *, gpointer); 
    80 static void main_window_page_mode_text_cb (GtkToggleAction *, gpointer); 
     79static void main_window_set_page_mode (GtkRadioAction *, GtkRadioAction *, gpointer); 
    8180 
    8281#if defined (HAVE_CUPS) 
     
    189188      N_("Make the current document fill the window width"), 
    190189      G_CALLBACK (main_window_zoom_width_cb), FALSE }, 
    191  
     190}; 
     191 
     192static GtkRadioActionEntry g_PageScrollEntries[] = 
     193{    
    192194    { "PageModeScroll", GTK_STOCK_FULLSCREEN, N_("Scroll"), NULL, 
    193       N_("Mouse scroll page"), 
    194       G_CALLBACK (main_window_page_mode_scroll_cb), FALSE }, 
     195      N_("Mouse scroll page"), (int)PagePterModeScroll }, 
    195196 
    196197    { "PageModeText", GTK_STOCK_SELECT_ALL, N_("Select Text"), NULL, 
    197       N_(" Mouse select text"), 
    198       G_CALLBACK (main_window_page_mode_text_cb), FALSE }, 
    199  
     198      N_(" Mouse select text"), (int)PagePterModeSelectText }, 
    200199}; 
     200 
    201201 
    202202//////////////////////////////////////////////////////////////// 
     
    963963                                         G_N_ELEMENTS (g_ToggleEntries), 
    964964                                         m_Pter); 
     965    gtk_action_group_add_radio_actions (actionGroup, g_PageScrollEntries, 
     966                                        G_N_ELEMENTS (g_PageScrollEntries), 0, 
     967                                        G_CALLBACK(main_window_set_page_mode), m_Pter); 
    965968    m_UIManager = gtk_ui_manager_new (); 
    966969    gtk_ui_manager_insert_action_group (m_UIManager, actionGroup, 0); 
     
    14531456 
    14541457void 
    1455 main_window_page_mode_scroll_cb (GtkToggleAction *action, gpointer data) 
    1456 { 
    1457     g_assert ( NULL != data && "The data parameter is NULL."); 
    1458  
    1459     MainPter *pter = (MainPter *)data; 
    1460     pter->pageModeScrollActivated (gtk_toggle_action_get_active (action)); 
    1461 } 
    1462  
    1463 void 
    1464 main_window_page_mode_text_cb (GtkToggleAction *action, gpointer data) 
    1465 { 
    1466     g_assert ( NULL != data && "The data parameter is NULL."); 
    1467  
    1468     MainPter *pter = (MainPter *)data; 
    1469     pter->pageModeTextActivated (gtk_toggle_action_get_active (action)); 
    1470 } 
     1458main_window_set_page_mode (GtkRadioAction *action, GtkRadioAction *current, gpointer data) 
     1459{ 
     1460    g_assert ( NULL != data && "The data parameter is NULL."); 
     1461 
     1462    MainPter *pter = (MainPter *)data; 
     1463    PagePterMode mode = (PagePterMode)gtk_radio_action_get_current_value(action); 
     1464    pter->setPageMode (mode); 
     1465}