Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
plib
plib-1.8.5-commit2140-slider.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File plib-1.8.5-commit2140-slider.patch of Package plib
Changes to fix the "puauxLargeInput" widget per e-mail from Melchior Franz dated Mon 1/12/2009 1:28 PM: * don't write outside of the text box * fix slider fractions * remove redundant code --- src/puAux/puAuxLargeInput.cxx 2009/01/13 15:47:52 2139 +++ src/puAux/puAuxLargeInput.cxx 2009/01/13 17:02:41 2140 @@ -31,14 +31,13 @@ static void puaLargeInputHandleRightSlider ( puObject *slider ) { - float val = ((puaScrollBar *)slider)->getMaxValue () - slider->getFloatValue () ; - puaLargeInput* text = (puaLargeInput*) slider->getUserData () ; - //int lines_in_window = text->getLinesInWindow () ; + int lines_in_window = text->getLinesInWindow () ; int num_lines = text->getNumLines () ; + float val = 1 - slider->getFloatValue () ; if ( num_lines > 0 ) - text->setTopLineInWindow ( int ( val + 0.5f ) ) ; + text->setTopLineInWindow ( int ( val * ( num_lines - lines_in_window ) + 0.5f ) ) ; } // Private function from the widget itself @@ -75,39 +74,32 @@ type |= PUCLASS_LARGEINPUT ; num_lines = 1 ; slider_width = sl_width ; - lines_in_window = ( h - (bottom_slider?slider_width:0) ) / - ( getLegendFont().getStringHeight() + getLegendFont().getStringDescender() + 1 ) ; top_line_in_window = 0 ; max_width = 0 ; - widget = this ; // Set up the widgets frame = new puFrame ( 0, 0, w, h ); + int bottom_slider_width = 0; if ( wrap_text ) bottom_slider = (puSlider *)NULL ; else { bottom_slider = new puSlider ( 0, 0, w - slider_width, FALSE, slider_width ) , bottom_slider->setValue ( 0.0f ) ; // All the way to the left -// bottom_slider->setDelta(0.1f); // Commented out CBModes and Deltas for these sliders to increase response time and to ensure the sliders react properly even when first selected - JCJ 13 Jun 2002 - bottom_slider->setSliderFraction (1.0f) ; -// bottom_slider->setCBMode( PUSLIDER_DELTA ); + bottom_slider_width = slider_width; } - right_slider = new puaScrollBar ( w - slider_width, (bottom_slider?slider_width:0), - h - (bottom_slider?slider_width:0), arrows, TRUE, slider_width ) , + right_slider = new puaScrollBar ( w - slider_width, bottom_slider_width, + h - bottom_slider_width, arrows, TRUE, slider_width ) , right_slider->setValue ( 1.0f ) ; // All the way to the top -// right_slider->setDelta(0.1f); - right_slider->setSliderFraction (1.0f) ; - right_slider->setStepSize ( 1.0f ) ; -// right_slider->setCBMode( PUSLIDER_DELTA ); right_slider->setUserData ( this ) ; right_slider->setCallback ( puaLargeInputHandleRightSlider ) ; setValue ( "\n" ) ; + setSize ( w, h ) ; close () ; reveal () ; @@ -115,29 +107,40 @@ void puaLargeInput::setSize ( int w, int h ) { - // Resize the frame: - frame->setSize ( w, h ) ; + int bottom_slider_width = bottom_slider ? slider_width : 0 ; + int line_size = legendFont.getStringHeight() + legendFont.getStringDescender() + 1 ; + if ( !w ) w = 1 ; + if ( !h ) h = 1 ; - // Resize and reposition the sliders if ( bottom_slider ) bottom_slider->setSize ( w - slider_width, slider_width ) ; else // No bottom slider, rewrap the text wrapText () ; - right_slider->setPosition ( w-slider_width, (bottom_slider?slider_width:0) ) ; - right_slider->setSize ( slider_width, h-(bottom_slider?slider_width:0) ) ; + right_slider->setPosition ( w - slider_width, bottom_slider_width ) ; + right_slider->setSize ( slider_width, h - bottom_slider_width ) ; - lines_in_window = ( h - (bottom_slider?slider_width:0) ) / - ( getLegendFont().getStringHeight() + getLegendFont().getStringDescender() + 1 ) ; + lines_in_window = ( h - bottom_slider_width ) / line_size ; + frame->setSize ( w, h ) ; + setSliders () ; +} - int line_size = legendFont.getStringHeight () + // Height of a line - legendFont.getStringDescender() ; // of text, in pixels - int box_height = ( abox.max[1] - abox.min[1] - slider_width ) / line_size ; - int right_slider_max = num_lines - lines_in_window + 1 ; - if ( right_slider_max < 1 ) right_slider_max = 1 ; +void puaLargeInput::setSliders ( void ) +{ + int w = abox.max[0] - abox.min[0] ; + int h = abox.max[1] - abox.min[1] ; + int line_size = legendFont.getStringHeight() + legendFont.getStringDescender() + 1 ; + int bottom_slider_width = bottom_slider ? slider_width : 0 ; + int box_width = w - slider_width ; // in pixels + int box_height = ( h - bottom_slider_width ) / line_size ; // in lines + + if ( bottom_slider ) { + float frac = box_width > max_width ? 1 : float(box_width) / max_width ; + bottom_slider->setSliderFraction ( frac ) ; + } - right_slider->setSliderFraction ( float(box_height) / float(right_slider_max) ) ; - right_slider->setMaxValue ( float(right_slider_max) ) ; + right_slider->setSliderFraction ( float(box_height) / num_lines ) ; + right_slider->setValue ( 1.0f - float(top_line_in_window) / num_lines ) ; } void puaLargeInput::setSelectRegion ( int s, int e ) @@ -297,14 +300,12 @@ void puaLargeInput::setValue ( const char *s ) { - if ( bottom_slider ) bottom_slider->setSliderFraction ( 0.0f ) ; - right_slider->setSliderFraction ( 0.0f ) ; - if ( s == NULL ) { puValue::setValue ( "\n" ) ; num_lines = 0 ; cursor_position = select_start_position = select_end_position = 0 ; + setSliders () ; return ; } @@ -353,26 +354,8 @@ if ( max_width < line_width ) max_width = line_width ; - // Set slider fractions - - int line_size = legendFont.getStringHeight () + // Height of a line - legendFont.getStringDescender() ; // of text, in pixels - - int box_width = abox.max[0] - abox.min[0] - slider_width ; // Input box width, in pixels - int box_height = ( abox.max[1] - abox.min[1] - slider_width ) / line_size ; - // Input box height, in lines - - if ( bottom_slider ) - bottom_slider->setSliderFraction ( float(box_width) / float(max_width) ) ; - - int right_slider_max = num_lines - lines_in_window + 1 ; - if ( right_slider_max < 1 ) right_slider_max = 1 ; - - right_slider->setSliderFraction ( float(box_height) / float(right_slider_max) ) ; - right_slider->setMaxValue ( float(right_slider_max) ) ; - - // Normalize the cursors normalizeCursors () ; + setSliders () ; } @@ -397,14 +380,14 @@ int ywidget = abox.min[1] + dy ; int line_size = legendFont.getStringHeight () + // Height of a line - legendFont.getStringDescender() + 1 ; // of text, in pixels + legendFont.getStringDescender() + 1 ; // of text, in pixels int xx = int(legendFont.getFloatStringWidth ( " " )) ; int yy = int( abox.max[1] - abox.min[1] - legendFont.getStringHeight () * 1.5f ) ; - int box_width = abox.max[0] - abox.min[0] - slider_width - xx - xx ; // Input box width, in pixels - int box_height = ( abox.max[1] - abox.min[1] - (bottom_slider?slider_width:0) ) / line_size ; - // Input box height, in lines + int box_width = abox.max[0] - abox.min[0] - slider_width - xx - xx ; // Input box width, in pixels + int box_height = ( abox.max[1] - abox.min[1] - (bottom_slider?slider_width:0) - 1 + - legendFont.getStringHeight () * 0.5f ) / line_size ; // Input box height, in lines float bottom_value = bottom_slider ? bottom_slider->getFloatValue () : 0.0f ; @@ -416,8 +399,6 @@ int end_lin // Position on line count of bottom of window, in lines = top_line_in_window + box_height ; - /* Removed IF statement to permit highlighting to remain even when widget not active - JCJ 13 Jun 2002 */ - char *val = bottom_slider ? getStringValue () : getDisplayedText () ; // Highlight the select area @@ -544,7 +525,7 @@ val = end_of_line + 1 ; end_of_line = strchr (val, '\n') ; // Just go to the next line } - else if ( line_count <= end_lin ) // Within the window, draw it + else if ( line_count < end_lin ) // Within the window, draw it { char temp_char = *end_of_line ; // Temporary holder for last char on line @@ -620,7 +601,7 @@ val = end_of_line + 1 ; end_of_line = strchr (val, '\n') ; // On to the next line } - else if ( line_count > end_lin ) // Have gone beyond window, end process + else if ( line_count >= end_lin ) // Have gone beyond window, end process end_of_line = NULL ; line_count++ ; --- src/puAux/puAux.h 2009/01/13 15:47:52 2139 +++ src/puAux/puAux.h 2009/01/13 17:02:41 2140 @@ -155,6 +155,7 @@ void normalizeCursors ( void ) ; void removeSelectRegion ( void ) ; + void setSliders ( void ) ; void wrapText ( void ) ;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor