| 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 | |
| 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 | } |
| 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 | } |
| 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 | } |
| 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 | |
| | 1471 | static 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 | |
| | 1476 | static 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 | |
| | 1481 | void AW_window::create_window_variables() { |
| 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 | |
| 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); |