Changeset 8349

Show
Ignore:
Timestamp:
30/01/12 20:24:04 (4 months ago)
Author:
westram
Message:
  • scrollbar code slightly refactored
Location:
branches/e4fix/WINDOW
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/e4fix/WINDOW/AW_window.cxx

    r8299 r8349  
    404404void AW_window::calculate_scrollbars() { 
    405405    AW_screen_area screen; 
    406  
    407     int  slider_size_horizontal; 
    408     int  slider_size_vertical; 
    409     bool vertical, horizontal; 
    410     int  position_of_slider; 
    411     int  slider_max; 
    412  
    413     vertical = horizontal = true; // es gibt verticalen & horizontalen scrollbar 
    414  
    415406    this->_get_area_size(AW_MIDDLE_AREA, &screen); 
    416407 
    417408    // HORIZONTAL 
    418     slider_max = (int)get_scrolled_picture_width(); 
    419     if (slider_max <1) { 
    420         slider_max = 1; 
     409    { 
     410        int slider_max = (int)get_scrolled_picture_width(); 
     411        if (slider_max <1) { 
     412            slider_max = 1; 
     413            XtVaSetValues(p_w->scroll_bar_horizontal, XmNsliderSize, 1, NULL); 
     414        } 
     415 
     416        bool      use_horizontal_bar     = true; 
     417        const int scrolled_area_width    = int(screen.r-left_indent_of_horizontal_scrollbar); 
     418        int       slider_size_horizontal = scrolled_area_width; 
     419 
     420        if (slider_size_horizontal < 1) slider_size_horizontal = 1; // ist der slider zu klein (<1) ? 
     421        if (slider_size_horizontal > slider_max) { // Schirm groesser als Bild 
     422            slider_size_horizontal = slider_max; // slider nimmt ganze laenge ein 
     423            XtVaSetValues(p_w->scroll_bar_horizontal, XmNvalue, 0, NULL); // slider ganz links setzen 
     424            use_horizontal_bar = false; // kein horizontaler slider mehr 
     425        } 
     426 
     427        // check wether XmNValue is to big 
     428        int position_of_slider; 
     429        XtVaGetValues(p_w->scroll_bar_horizontal, XmNvalue, &position_of_slider, NULL); 
     430        if (position_of_slider > (slider_max-slider_size_horizontal)) { // steht der slider fuer slidergroesse zu rechts ? 
     431            position_of_slider = slider_max-slider_size_horizontal; // -1 ? vielleicht ! 
     432            if (position_of_slider < 0) position_of_slider = 0; 
     433            XtVaSetValues(p_w->scroll_bar_horizontal, XmNvalue, position_of_slider, NULL); 
     434        } 
     435        // Anpassung fuer resize, wenn unbeschriebener Bereich vergroessert wird 
     436        if (-slider_pos_horizontal + get_scrolled_picture_width() < scrolled_area_width) { 
     437            if (use_horizontal_bar) { 
     438                slider_pos_horizontal = (int)(get_scrolled_picture_width() - scrolled_area_width); 
     439            } 
     440            else { 
     441                slider_pos_horizontal = 0; // slider nach ganz oben, da alles sichtbar 
     442            } 
     443        } 
     444 
    421445        XtVaSetValues(p_w->scroll_bar_horizontal, XmNsliderSize, 1, NULL); 
    422     } 
    423  
    424     slider_size_horizontal = (int)((screen.r 
    425             -left_indent_of_horizontal_scrollbar)); 
    426     if (slider_size_horizontal < 1) 
    427         slider_size_horizontal = 1; // ist der slider zu klein (<1) ? 
    428     if (slider_size_horizontal > slider_max) { // Schirm groesser als Bild 
    429         slider_size_horizontal = slider_max; // slider nimmt ganze laenge ein 
    430         XtVaSetValues(p_w->scroll_bar_horizontal, XmNvalue, 0, NULL); // slider ganz links setzen 
    431         horizontal = false; // kein horizontaler slider mehr 
    432     } 
    433  
    434     // check wether XmNValue is to big 
    435     XtVaGetValues(p_w->scroll_bar_horizontal, XmNvalue, &position_of_slider, 
    436             NULL); 
    437     if (position_of_slider > (slider_max-slider_size_horizontal)) { // steht der slider fuer slidergroesse zu rechts ? 
    438         position_of_slider = slider_max-slider_size_horizontal; // -1 ? vielleicht ! 
    439         if (position_of_slider < 0) 
    440             position_of_slider = 0; 
    441         XtVaSetValues(p_w->scroll_bar_horizontal, XmNvalue, position_of_slider, 
    442                 NULL); 
    443     } 
    444     // Anpassung fuer resize, wenn unbeschriebener Bereich vergroessert wird 
    445     if (-slider_pos_horizontal + get_scrolled_picture_width() < screen.r 
    446             -left_indent_of_horizontal_scrollbar) { 
    447         if (horizontal) { 
    448             slider_pos_horizontal = (int)(get_scrolled_picture_width() 
    449                     - (screen.r-left_indent_of_horizontal_scrollbar)); 
    450         } 
    451         else { 
    452             slider_pos_horizontal = 0; // slider nach ganz oben, da alles sichtbar 
    453         } 
    454     } 
    455     XtVaSetValues(p_w->scroll_bar_horizontal, XmNsliderSize, 1, NULL); 
    456     XtVaSetValues(p_w->scroll_bar_horizontal, XmNmaximum, slider_max, NULL); 
    457     XtVaSetValues(p_w->scroll_bar_horizontal, XmNsliderSize, 
    458             slider_size_horizontal, NULL); 
    459     char buffer[200]; 
    460     sprintf(buffer, "window/%s/horizontal_page_increment", window_defaults_name); 
    461     XtVaSetValues(p_w->scroll_bar_horizontal, XmNpageIncrement, (int)((screen.r 
    462             -left_indent_of_horizontal_scrollbar)*(get_root()->awar(buffer)->read_int()*0.01)), 
    463     NULL); 
    464  
    465     sprintf(buffer, "window/%s/scroll_width_horizontal", window_defaults_name); 
    466     XtVaSetValues(p_w->scroll_bar_horizontal, XmNincrement, (int)(get_root()->awar(buffer)->read_int()), NULL); 
    467  
    468     sprintf(buffer, "window/%s/scroll_delay_horizontal", window_defaults_name); 
    469     XtVaSetValues(p_w->scroll_bar_horizontal, XmNrepeatDelay, (int)(get_root()->awar(buffer)->read_int()), NULL); 
     446        XtVaSetValues(p_w->scroll_bar_horizontal, XmNmaximum, slider_max, NULL); 
     447        XtVaSetValues(p_w->scroll_bar_horizontal, XmNsliderSize, slider_size_horizontal, NULL); 
     448 
     449        update_scrollbar_settings_from_awars(AW_HORIZONTAL); 
     450    } 
    470451 
    471452    // VERTICAL 
    472     slider_max = (int)get_scrolled_picture_height(); 
    473     if (slider_max <1) { 
    474         slider_max = 1; 
     453    { 
     454        int slider_max = (int)get_scrolled_picture_height(); 
     455        if (slider_max <1) { 
     456            slider_max = 1; 
     457            XtVaSetValues(p_w->scroll_bar_vertical, XmNsliderSize, 1, NULL); 
     458        } 
     459 
     460        bool      use_vertical_bar     = true; 
     461        const int scrolled_area_height = int(screen.b-top_indent_of_vertical_scrollbar-bottom_indent_of_vertical_scrollbar); 
     462        int       slider_size_vertical = scrolled_area_height; 
     463 
     464        if (slider_size_vertical < 1) slider_size_vertical = 1; 
     465        if (slider_size_vertical > slider_max) { 
     466            slider_size_vertical = slider_max; 
     467            XtVaSetValues(p_w->scroll_bar_vertical, XmNvalue, 0, NULL); 
     468            use_vertical_bar = false; 
     469        } 
     470 
     471        // check wether XmNValue is to big 
     472        int position_of_slider; 
     473        XtVaGetValues(p_w->scroll_bar_vertical, XmNvalue, &position_of_slider, NULL); 
     474        if (position_of_slider > (slider_max-slider_size_vertical)) { 
     475            position_of_slider = slider_max-slider_size_vertical; // -1 ? vielleicht ! 
     476            if (position_of_slider < 0) position_of_slider = 0; 
     477            XtVaSetValues(p_w->scroll_bar_vertical, XmNvalue, position_of_slider, NULL); 
     478        } 
     479        // Anpassung fuer resize, wenn unbeschriebener Bereich vergroessert wird 
     480        if (-slider_pos_vertical + get_scrolled_picture_height() < scrolled_area_height) { 
     481            if (use_vertical_bar) { 
     482                slider_pos_vertical = (int)(get_scrolled_picture_height() - scrolled_area_height); 
     483            } 
     484            else { 
     485                slider_pos_vertical = 0; // slider nach ganz oben, da alles sichtbar 
     486            } 
     487        } 
    475488        XtVaSetValues(p_w->scroll_bar_vertical, XmNsliderSize, 1, NULL); 
    476     } 
    477  
    478     slider_size_vertical = (int)((screen.b-top_indent_of_vertical_scrollbar 
    479             -bottom_indent_of_vertical_scrollbar)); 
    480     if (slider_size_vertical < 1) 
    481         slider_size_vertical = 1; 
    482     if (slider_size_vertical > slider_max) { 
    483         slider_size_vertical = slider_max; 
    484         XtVaSetValues(p_w->scroll_bar_vertical, XmNvalue, 0, NULL); 
    485         vertical = false; 
    486     } 
    487  
    488     // check wether XmNValue is to big 
    489     XtVaGetValues(p_w->scroll_bar_vertical, XmNvalue, &position_of_slider, NULL); 
    490     if (position_of_slider > (slider_max-slider_size_vertical)) { 
    491         position_of_slider = slider_max-slider_size_vertical; // -1 ? vielleicht ! 
    492         if (position_of_slider < 0) 
    493             position_of_slider = 0; 
    494         XtVaSetValues(p_w->scroll_bar_vertical, XmNvalue, position_of_slider, 
    495                 NULL); 
    496     } 
    497     // Anpassung fuer resize, wenn unbeschriebener Bereich vergroessert wird 
    498     if (-slider_pos_vertical + get_scrolled_picture_height() < screen.b 
    499             -top_indent_of_vertical_scrollbar 
    500             -bottom_indent_of_vertical_scrollbar) { 
    501         if (vertical) { 
    502             slider_pos_vertical = (int)(get_scrolled_picture_height() 
    503                     - (screen.b-top_indent_of_vertical_scrollbar 
    504                             -bottom_indent_of_vertical_scrollbar)); 
    505         } 
    506         else { 
    507             slider_pos_vertical = 0; // slider nach ganz oben, da alles sichtbar 
    508         } 
    509     } 
    510     XtVaSetValues(p_w->scroll_bar_vertical, XmNsliderSize, 1, NULL); 
    511     XtVaSetValues(p_w->scroll_bar_vertical, XmNmaximum, slider_max, NULL); 
    512     XtVaSetValues(p_w->scroll_bar_vertical, XmNsliderSize, 
    513             slider_size_vertical, NULL); 
    514     sprintf(buffer, "window/%s/vertical_page_increment", window_defaults_name); 
    515     XtVaSetValues(p_w->scroll_bar_vertical, XmNpageIncrement, (int)((screen.b 
    516             -top_indent_of_vertical_scrollbar 
    517             -bottom_indent_of_vertical_scrollbar)*(get_root()->awar(buffer)->read_int()*0.01)), 
    518     NULL); 
    519  
    520     sprintf(buffer, "window/%s/scroll_width_vertical", window_defaults_name); 
    521     XtVaSetValues(p_w->scroll_bar_vertical, XmNincrement, (int)(get_root()->awar(buffer)->read_int()), NULL); 
    522  
    523     sprintf(buffer, "window/%s/scroll_delay_vertical", window_defaults_name); 
    524     XtVaSetValues(p_w->scroll_bar_vertical, XmNrepeatDelay, (int)(get_root()->awar(buffer)->read_int()), NULL); 
     489        XtVaSetValues(p_w->scroll_bar_vertical, XmNmaximum, slider_max, NULL); 
     490        XtVaSetValues(p_w->scroll_bar_vertical, XmNsliderSize, slider_size_vertical, NULL); 
     491 
     492        update_scrollbar_settings_from_awars(AW_VERTICAL); 
     493    } 
    525494} 
    526495 
     
    14711440} 
    14721441 
    1473 static void horizontal_scrollbar_redefinition_cb(class AW_root */*aw_root*/, AW_CL cd1, AW_CL cd2) { 
     1442void AW_window::update_scrollbar_settings_from_awars(AW_orientation orientation) { 
    14741443    AW_screen_area screen; 
    1475  
     1444    _get_area_size(AW_MIDDLE_AREA, &screen); 
     1445 
     1446    // @@@ DRY awar code 
     1447     
    14761448    char buffer[200]; 
    1477     AW_window *aw = (AW_window *)cd1; 
    1478     Widget w = (Widget)cd2; 
    1479  
    1480     aw->_get_area_size(AW_MIDDLE_AREA, &screen); 
    1481  
    1482     sprintf(buffer, "window/%s/horizontal_page_increment", 
    1483             aw->window_defaults_name); 
    1484     XtVaSetValues(w, XmNpageIncrement, (int)((screen.r 
    1485             -aw->left_indent_of_horizontal_scrollbar)*(aw->get_root()->awar(buffer)->read_int()*0.01)), NULL); 
    1486  
    1487     sprintf(buffer, "window/%s/scroll_width_horizontal", 
    1488             aw->window_defaults_name); 
    1489     XtVaSetValues(w, XmNincrement, (int)(aw->get_root()->awar(buffer)->read_int()), NULL); 
    1490  
    1491     sprintf(buffer, "window/%s/scroll_delay_horizontal", 
    1492             aw->window_defaults_name); 
    1493     XtVaSetValues(w, XmNrepeatDelay, (int)(aw->get_root()->awar(buffer)->read_int()), NULL); 
    1494  
    1495 } 
    1496  
    1497 static void vertical_scrollbar_redefinition_cb(class AW_root */*aw_root*/, AW_CL cd1, AW_CL cd2) { 
    1498     AW_screen_area screen; 
    1499  
     1449    if (orientation == AW_HORIZONTAL) { 
     1450        sprintf(buffer, "window/%s/horizontal_page_increment", window_defaults_name);  
     1451        XtVaSetValues(p_w->scroll_bar_horizontal, XmNpageIncrement, (int)((screen.r-left_indent_of_horizontal_scrollbar)*(get_root()->awar(buffer)->read_int()*0.01)), NULL); 
     1452 
     1453        sprintf(buffer, "window/%s/scroll_width_horizontal", window_defaults_name); 
     1454        XtVaSetValues(p_w->scroll_bar_horizontal, XmNincrement, (int)(get_root()->awar(buffer)->read_int()), NULL); 
     1455 
     1456        sprintf(buffer, "window/%s/scroll_delay_horizontal", window_defaults_name); 
     1457        XtVaSetValues(p_w->scroll_bar_horizontal, XmNrepeatDelay, (int)(get_root()->awar(buffer)->read_int()), NULL); 
     1458    } 
     1459    else { 
     1460        sprintf(buffer, "window/%s/vertical_page_increment", window_defaults_name); 
     1461        XtVaSetValues(p_w->scroll_bar_vertical, XmNpageIncrement, (int)((screen.b-top_indent_of_vertical_scrollbar-bottom_indent_of_vertical_scrollbar)*(get_root()->awar(buffer)->read_int()*0.01)), NULL); 
     1462 
     1463        sprintf(buffer, "window/%s/scroll_width_vertical", window_defaults_name); 
     1464        XtVaSetValues(p_w->scroll_bar_vertical, XmNincrement, (int)(get_root()->awar(buffer)->read_int()), NULL); 
     1465 
     1466        sprintf(buffer, "window/%s/scroll_delay_vertical", window_defaults_name); 
     1467        XtVaSetValues(p_w->scroll_bar_vertical, XmNrepeatDelay, (int)(get_root()->awar(buffer)->read_int()), NULL); 
     1468    } 
     1469} 
     1470 
     1471static void horizontal_scrollbar_redefinition_cb(AW_root*, AW_CL cd) { 
     1472    AW_window *aw = (AW_window *)cd; 
     1473    aw->update_scrollbar_settings_from_awars(AW_HORIZONTAL); 
     1474} 
     1475 
     1476static void vertical_scrollbar_redefinition_cb(AW_root*, AW_CL cd) { 
     1477    AW_window *aw = (AW_window *)cd; 
     1478    aw->update_scrollbar_settings_from_awars(AW_VERTICAL); 
     1479} 
     1480 
     1481void AW_window::create_window_variables() { 
    15001482    char buffer[200]; 
    1501     AW_window *aw = (AW_window *)cd1; 
    1502     Widget w = (Widget)cd2; 
    1503  
    1504     aw->_get_area_size(AW_MIDDLE_AREA, &screen); 
    1505  
    1506     sprintf(buffer, "window/%s/vertical_page_increment", 
    1507             aw->window_defaults_name); 
    1508     XtVaSetValues(w, XmNpageIncrement, (int)((screen.b 
    1509             -aw->top_indent_of_vertical_scrollbar 
    1510             -aw->bottom_indent_of_vertical_scrollbar)*(aw->get_root()->awar(buffer)->read_int()*0.01)), NULL); 
    1511  
    1512     sprintf(buffer, "window/%s/scroll_width_vertical", aw->window_defaults_name); 
    1513     XtVaSetValues(w, XmNincrement, (int)(aw->get_root()->awar(buffer)->read_int()), NULL); 
    1514  
    1515     sprintf(buffer, "window/%s/scroll_delay_vertical", aw->window_defaults_name); 
    1516     XtVaSetValues(w, XmNrepeatDelay, (int)(aw->get_root()->awar(buffer)->read_int()), NULL); 
    1517 } 
    1518  
    1519 void AW_window::create_window_variables() { 
    1520  
    1521     char buffer[200]; 
    1522     memset(buffer, 0, 200); 
     1483 
    15231484    sprintf(buffer, "window/%s/horizontal_page_increment", window_defaults_name); 
    15241485    get_root()->awar_int(buffer, 50); 
    1525     get_root()->awar(buffer)->add_callback( 
    1526             (AW_RCB)horizontal_scrollbar_redefinition_cb, (AW_CL)this, 
    1527             (AW_CL)p_w->scroll_bar_horizontal); 
     1486    get_root()->awar(buffer)->add_callback(horizontal_scrollbar_redefinition_cb, (AW_CL)this); 
    15281487 
    15291488    sprintf(buffer, "window/%s/vertical_page_increment", window_defaults_name); 
    15301489    get_root()->awar_int(buffer, 50); 
    1531     get_root()->awar(buffer)->add_callback((AW_RCB)vertical_scrollbar_redefinition_cb, 
    1532             (AW_CL)this, (AW_CL)p_w->scroll_bar_vertical); 
     1490    get_root()->awar(buffer)->add_callback(vertical_scrollbar_redefinition_cb, (AW_CL)this); 
     1491 
     1492    sprintf(buffer, "window/%s/scroll_delay_horizontal", window_defaults_name); 
     1493    get_root()->awar_int(buffer, 20); 
     1494    get_root()->awar(buffer)->add_callback(horizontal_scrollbar_redefinition_cb, (AW_CL)this); 
    15331495 
    15341496    sprintf(buffer, "window/%s/scroll_delay_vertical", window_defaults_name); 
    15351497    get_root()->awar_int(buffer, 20); 
    1536     get_root()->awar(buffer)->add_callback((AW_RCB)vertical_scrollbar_redefinition_cb, 
    1537             (AW_CL)this, (AW_CL)p_w->scroll_bar_vertical); 
    1538  
    1539     sprintf(buffer, "window/%s/scroll_delay_horizontal", window_defaults_name); 
    1540     get_root()->awar_int(buffer, 20); 
    1541     get_root()->awar(buffer)->add_callback( 
    1542             (AW_RCB)horizontal_scrollbar_redefinition_cb, (AW_CL)this, 
    1543             (AW_CL)p_w->scroll_bar_horizontal); 
     1498    get_root()->awar(buffer)->add_callback(vertical_scrollbar_redefinition_cb, (AW_CL)this); 
    15441499 
    15451500    sprintf(buffer, "window/%s/scroll_width_horizontal", window_defaults_name); 
    15461501    get_root()->awar_int(buffer, 9); 
    1547     get_root()->awar(buffer)->add_callback( 
    1548             (AW_RCB)horizontal_scrollbar_redefinition_cb, (AW_CL)this, 
    1549             (AW_CL)p_w->scroll_bar_horizontal); 
     1502    get_root()->awar(buffer)->add_callback(horizontal_scrollbar_redefinition_cb, (AW_CL)this); 
    15501503 
    15511504    sprintf(buffer, "window/%s/scroll_width_vertical", window_defaults_name); 
    15521505    get_root()->awar_int(buffer, 20); 
    1553     get_root()->awar(buffer)->add_callback((AW_RCB)vertical_scrollbar_redefinition_cb, 
    1554             (AW_CL)this, (AW_CL)p_w->scroll_bar_vertical); 
    1555  
     1506    get_root()->awar(buffer)->add_callback(vertical_scrollbar_redefinition_cb, (AW_CL)this); 
    15561507} 
    15571508 
  • branches/e4fix/WINDOW/aw_window.hxx

    r8287 r8349  
    4747#endif 
    4848 
     49enum AW_orientation { AW_HORIZONTAL, AW_VERTICAL }; 
     50 
    4951class AW_at_size { 
    5052    int  to_offset_x;                               // here we use offsets (not positions like in AW_at) 
     
    391393    void set_vertical_scrollbar_bottom_indent(int indent); 
    392394 
     395    void update_scrollbar_settings_from_awars(AW_orientation orientation); 
    393396 
    394397    void create_user_geometry_awars(int posx, int posy, int width, int height);