Changeset 325 for branches


Ignore:
Timestamp:
Mar 28, 2010, 8:51:33 PM (12 years ago)
Author:
dmik
Message:

branches/kmk: DocumentViewer?: Cache input field rectangles and type and show a hand pointer over fields other than text entry.

Location:
branches/kmk/Lucide/gui
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/kmk/Lucide/gui/docViewer.cpp

    r324 r325  
    5656typedef LuDocument_LuRectSequence    *PLuRectSequence;
    5757typedef LuDocument_LuLinkMapSequence *PLuLinkMapSequence;
    58 typedef LuDocument_LuInputFieldSequence *PLuInputFieldSequence;
    5958
    6059#define LINE_HEIGHT     16
     
    232231
    233232        if ( doc->isHaveInputFields( ev ) ) {
    234             inputFields = new PLuInputFieldSequence[ totalpages ];
    235             memset( inputFields, 0, sizeof( PLuInputFieldSequence ) * totalpages );
     233            inputFields = new PageInputFields[ totalpages ];
     234            memset( inputFields, 0, sizeof( PageInputFields ) * totalpages );
    236235        }
    237236
     
    359358    {
    360359        for ( long i = 0; i < totalpages; i++ ) {
    361             if ( inputFields[ i ] != NULL ) {
    362                 LuDocument::freeInputFields( ev, inputFields[ i ] );
    363                 inputFields[ i ] = NULL;
     360            if ( inputFields[ i ].fields != NULL ) {
     361                LuDocument::freeInputFields( ev, inputFields[ i ].fields );
     362                inputFields[ i ].fields = NULL;
     363            }
     364            if ( inputFields[ i ].cache != NULL ) {
     365                delete[] inputFields[ i ].cache;
     366                inputFields[ i ].cache = NULL;
    364367            }
    365368        }
     
    656659
    657660        if ( inputFields != NULL ) {
    658             if ( inputFields[ currentpage ] == NULL ) {
    659                 inputFields[ currentpage ] = doc->getInputFields( ev, currentpage );
     661            if ( inputFields[ currentpage ].fields == NULL ) {
     662                inputFields[ currentpage ].fields = doc->getInputFields( ev, currentpage );
     663                unsigned long len = inputFields[ currentpage ].fields->_length;
     664                inputFields[ currentpage ].cache = new PageInputFields::Cache[ len ];
     665                memset( inputFields[ currentpage ].cache, 0, sizeof( PageInputFields::Cache ) * len );
    660666            }
    661667        }
     
    11271133
    11281134            // load input fields for page if not loaded before
    1129             if ( inputFields[ pda->pagenum ] == NULL ) {
    1130                 inputFields[ pda->pagenum ] = doc->getInputFields( ev, pda->pagenum );
     1135            if ( inputFields[ pda->pagenum ].fields == NULL ) {
     1136                inputFields[ pda->pagenum ].fields = doc->getInputFields( ev, pda->pagenum );
     1137                unsigned long len = inputFields[ pda->pagenum ].fields->_length;
     1138                inputFields[ pda->pagenum ].cache = new PageInputFields::Cache[ len ];
     1139                memset( inputFields[ pda->pagenum ].cache, 0, sizeof( PageInputFields::Cache ) * len );
    11311140            }
    11321141        }
     
    13431352
    13441353            // load input fields for page if not loaded before
    1345             if ( inputFields[ pda->pagenum ] == NULL ) {
    1346                 inputFields[ pda->pagenum ] = doc->getInputFields( ev, pda->pagenum );
     1354            if ( inputFields[ pda->pagenum ].fields == NULL ) {
     1355                inputFields[ pda->pagenum ].fields = doc->getInputFields( ev, pda->pagenum );
     1356                unsigned long len = inputFields[ pda->pagenum ].fields->_length;
     1357                inputFields[ pda->pagenum ].cache = new PageInputFields::Cache[ len ];
     1358                memset( inputFields[ pda->pagenum ].cache, 0, sizeof( PageInputFields::Cache ) * len );
    13471359            }
    13481360
     
    18051817            if ( inputFields != NULL )
    18061818            {
    1807                 if ( ( pg != -1 ) && ( inputFields[ pg ] != NULL ) )
     1819                if ( ( pg != -1 ) && ( inputFields[ pg ].fields != NULL ) )
    18081820                {
    1809                     for ( int i = 0; i < inputFields[ pg ]->_length; i++ )
     1821                    for ( int i = 0; i < inputFields[ pg ].fields->_length; i++ )
    18101822                    {
    1811                         LuRectangle *rect = inputFields[ pg ]->_buffer[i]->getRectangle( ev );
     1823                        LuRectangle *&rect = inputFields[ pg ].cache[ i ].rect;
     1824                        LuInputField_Type &type = inputFields[ pg ].cache[ i ].type;
     1825                        if ( rect == NULL ) {
     1826                            rect = inputFields[ pg ].fields->_buffer[ i ]->getRectangle( ev );
     1827                            type = inputFields[ pg ].fields->_buffer[ i ]->getType( ev );
     1828                        }
    18121829
    18131830                        RECTL r = {0};
     
    18161833                        POINTL ptl = { xpos, ypos };
    18171834                        if ( WinPtInRect( hab, &r, &ptl ) ) {
    1818                             WinSetPointer( HWND_DESKTOP, textPtr );
     1835                            WinSetPointer( HWND_DESKTOP,
     1836                                           type == LuInputField_Text ? textPtr : handPtr );
    18191837                            return TRUE;
    18201838                        }
  • branches/kmk/Lucide/gui/docViewer.h

    r324 r325  
    5050    LuSize startpos;
    5151    RECTL  drawrect;
     52};
     53
     54struct PageInputFields
     55{
     56    LuDocument_LuInputFieldSequence *fields;
     57
     58    struct Cache
     59    {
     60        LuRectangle *rect;
     61        LuInputField_Type type;
     62    };
     63
     64    Cache *cache;
    5265};
    5366
     
    208221
    209222        // input fields
    210         LuDocument_LuInputFieldSequence **inputFields;
     223        PageInputFields *inputFields;
    211224
    212225        // search
Note: See TracChangeset for help on using the changeset viewer.