Changeset 126


Ignore:
Timestamp:
Sep 17, 2006, 7:38:51 AM (14 years ago)
Author:
Eugene Romanenko
Message:

Prevent getLinkMapping() call on every redraw if no links on page.

Location:
trunk/Lucide/SOURCE
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/docViewer.cpp

    r122 r126  
    123123    selrects = NULL;
    124124    // links
     125    haveLinks = false;
    125126    links = NULL;
    126127    handPtr = WinLoadPointer( HWND_DESKTOP, NULLHANDLE, IDP_HAND );
     
    202203            zoom = 1;
    203204        }
     205        haveLinks = doc->isHaveLinks( ev );
    204206
    205207        pagesizes = new LuSize[ totalpages ];
     
    280282    fullwidth   = 0;
    281283    fullheight  = 0;
     284    haveLinks   = false;
    282285
    283286    DosReleaseMutexSem( todrawAccess );
     
    602605
    603606        if ( links != NULL ) {
    604             if ( links[ currentpage ] == NULL ) {
     607            if ( ( links[ currentpage ] == NULL ) && haveLinks ) {
    605608                links[ currentpage ] = doc->getLinkMapping( ev, currentpage );
    606609            }
     
    10431046
    10441047            // load links for page if not loaded before
    1045             if ( links[ pda->pagenum ] == NULL ) {
     1048            if ( ( links[ pda->pagenum ] == NULL ) && haveLinks ) {
    10461049                links[ pda->pagenum ] = doc->getLinkMapping( ev, pda->pagenum );
    10471050            }
     
    12381241
    12391242            // load links for page if not loaded before
    1240             if ( links[ pda->pagenum ] == NULL ) {
     1243            if ( ( links[ pda->pagenum ] == NULL ) && haveLinks ) {
    12411244                links[ pda->pagenum ] = doc->getLinkMapping( ev, pda->pagenum );
    12421245            }
  • trunk/Lucide/SOURCE/gui/docViewer.h

    r122 r126  
    189189
    190190        // links
     191        bool haveLinks;
    191192        LuDocument_LuLinkMapSequence **links;
    192193
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.cpp

    r124 r126  
    234234                                                                long pagenum)
    235235{
    236     // Abstract method does nothing
    237     return NULL;
     236    // Abstract method, returns empty sequence
     237    LuDocument_LuLinkMapSequence *mapping = NULL;
     238    mapping = (LuDocument_LuLinkMapSequence *)SOMMalloc( sizeof( LuDocument_LuLinkMapSequence ) );
     239    mapping->_maximum = 0;
     240    mapping->_length = 0;
     241    mapping->_buffer = NULL;
     242    return mapping;
    238243}
    239244
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.idl

    r123 r126  
    286286     * with freeLinkMapping() when done.
    287287     *
    288      * Return value: A pointer to sequence of LuLinkMapping
    289      *               or NULL if no links on page.
     288     * Return value: A pointer to sequence of LuLinkMapping.
    290289     *
    291290     * Note: SOMMalloc() must be used for all memory allocations.
    292      * Default return value: NULL
     291     * Default return value: pointer to empty LuLinkMapSequence
    293292     **/
    294293    LuLinkMapSequence *getLinkMapping( in long pagenum );
  • trunk/Lucide/SOURCE/plugins/lupoppler/lupoppler.cpp

    r123 r126  
    595595{
    596596    LuDocument_LuLinkMapSequence *mapping = NULL;
     597    mapping = (LuDocument_LuLinkMapSequence *)SOMMalloc( sizeof( LuDocument_LuLinkMapSequence ) );
     598    mapping->_maximum = 0;
     599    mapping->_length = 0;
     600    mapping->_buffer = NULL;
    597601
    598602    LuPopplerDocumentData *somThis = LuPopplerDocumentGetData(somSelf);
     
    605609    obj.free();
    606610
    607     if ( links == NULL ) {
    608         return NULL;
     611    if ( links == NULL ) {  // No links, return empty LuLinkMapSequence
     612        return mapping;
    609613    }
    610614
     
    614618    int len = links->getNumLinks();
    615619
    616     if ( len > 0 )
    617     {
    618         mapping = (LuDocument_LuLinkMapSequence *)SOMMalloc( sizeof( LuDocument_LuLinkMapSequence ) );
    619         mapping->_maximum = len;
    620         mapping->_length = len;
     620    mapping->_maximum = len;
     621    mapping->_length = len;
     622    if ( len != 0 ) {
    621623        mapping->_buffer = (LuLinkMapping *)SOMMalloc( sizeof( LuLinkMapping ) * len );
    622 
    623         for ( int i = 0; i < len; i++ )
    624         {
    625             Link *link = links->getLink( i );
    626             LinkAction *link_action = link->getAction();
    627             build_link( document->doc, &(mapping->_buffer[ i ].link), NULL, link_action );
    628 
    629             link->getRect( &(mapping->_buffer[ i ].area.x1),
    630                            &(mapping->_buffer[ i ].area.y1),
    631                            &(mapping->_buffer[ i ].area.x2),
    632                            &(mapping->_buffer[ i ].area.y2) );
    633 
    634             mapping->_buffer[ i ].area.x1 -= page->page->getCropBox()->x1;
    635             mapping->_buffer[ i ].area.x2 -= page->page->getCropBox()->x1;
    636             mapping->_buffer[ i ].area.y1 -= page->page->getCropBox()->y1;
    637             mapping->_buffer[ i ].area.y2 -= page->page->getCropBox()->y1;
    638 
    639             double y1 = mapping->_buffer[ i ].area.y1;
    640             double y2 = mapping->_buffer[ i ].area.y2;
    641             mapping->_buffer[ i ].area.y1 = height - y2;
    642             mapping->_buffer[ i ].area.y2 = height - y1;
    643         }
     624    }
     625
     626    for ( int i = 0; i < len; i++ )
     627    {
     628        Link *link = links->getLink( i );
     629        LinkAction *link_action = link->getAction();
     630        build_link( document->doc, &(mapping->_buffer[ i ].link), NULL, link_action );
     631
     632        link->getRect( &(mapping->_buffer[ i ].area.x1),
     633                       &(mapping->_buffer[ i ].area.y1),
     634                       &(mapping->_buffer[ i ].area.x2),
     635                       &(mapping->_buffer[ i ].area.y2) );
     636
     637        mapping->_buffer[ i ].area.x1 -= page->page->getCropBox()->x1;
     638        mapping->_buffer[ i ].area.x2 -= page->page->getCropBox()->x1;
     639        mapping->_buffer[ i ].area.y1 -= page->page->getCropBox()->y1;
     640        mapping->_buffer[ i ].area.y2 -= page->page->getCropBox()->y1;
     641
     642        double y1 = mapping->_buffer[ i ].area.y1;
     643        double y2 = mapping->_buffer[ i ].area.y2;
     644        mapping->_buffer[ i ].area.y1 = height - y2;
     645        mapping->_buffer[ i ].area.y2 = height - y1;
    644646    }
    645647
Note: See TracChangeset for help on using the changeset viewer.