@ -60,6 +60,10 @@
p . setBrush ( TQt : : NoBrush ) ;
extern int m_scrollBarSubLineWidth ;
extern bool m_scrollbarBack1 ;
extern bool m_scrollbarForward1 ;
extern bool m_scrollbarBack2 ;
extern bool m_scrollbarForward2 ;
WidgetLookup m_widgetLookup ;
Animations m_animations ;
@ -410,11 +414,18 @@ void gtkScrollbarToScrollbarCeData(GtkScrollbar* scrollbarWidget, TQStyleControl
ceData . pageStep = gtk_adjustment_get_page_increment ( adjustment ) ;
// Convert the GTK slider length into a correct pagestep that TQt3 can use to obtain the same slider length value
bool threeButtonScrollBar = false ;
if ( m_scrollbarBack2 | m_scrollbarForward2 ) threeButtonScrollBar = true ;
TQStyle : : ControlElementFlags elementFlags = TQStyle : : CEF_None ;
int gtkSliderLength = slider_end_pos - slider_start_pos ;
uint range = ceData . maxSteps - ceData . minSteps ;
// HACK
// GTK3 does not handle odd-sized steppers correctly
if ( ( m_scrollBarSubLineWidth % 2 ) ! = 0 ) {
gtkSliderLength = gtkSliderLength + 4 ;
}
int sbextent = tqApp - > style ( ) . pixelMetric ( TQStyle : : PM_ScrollBarExtent , ceData , elementFlags , NULL ) ;
int maxlen = ( ( ceData . orientation = = TQt : : Horizontal ) ? ceData . rect . width ( ) : ceData . rect . height ( ) ) - ( sbextent * 2 ) ;
int maxlen = ( ( ceData . orientation = = TQt : : Horizontal ) ? ceData . rect . width ( ) : ceData . rect . height ( ) ) - ( sbextent * ( threeButtonScrollBar ? 3.0 : 2.0 ) ) ;
int gtkPageStep = ceil ( ( - 1.0 ) * ( range * gtkSliderLength ) / ( gtkSliderLength - maxlen ) ) ;
ceData . pageStep = gtkPageStep ;
}
@ -600,6 +611,8 @@ draw_slider_frame(DRAW_ARGS, const GtkWidgetPath* path, GtkStateFlags state, Gtk
cairo_restore ( cr ) ;
}
TQStyle : : SubControl lastSliderActiveSubControl = TQStyle : : SC_None ;
static void
draw_scrollbar_frame ( DRAW_ARGS , const GtkWidgetPath * path , GtkStateFlags state , GtkWidget * widget ) {
cairo_save ( cr ) ;
@ -658,6 +671,10 @@ draw_scrollbar_frame(DRAW_ARGS, const GtkWidgetPath* path, GtkStateFlags state,
state = ( GtkStateFlags ) ( state | GTK_STATE_FLAG_INSENSITIVE ) ;
}
sflags & = ~ TQStyle : : Style_On ;
sflags & = ~ TQStyle : : Style_Down ;
sflags & = ~ TQStyle : : Style_Active ;
// Determine active subcontrols
gint cursor_x = - 1 ;
gint cursor_y = - 1 ;
@ -680,34 +697,64 @@ draw_scrollbar_frame(DRAW_ARGS, const GtkWidgetPath* path, GtkStateFlags state,
last = tqApp - > style ( ) . querySubControlMetrics ( TQStyle : : CC_ScrollBar , ceData , elementFlags , TQStyle : : SC_ScrollBarLast ) ;
// HACK
// This may not be 100% reliable , and it has the side effect of triggering the page step activity effect when the slider is dragged quickly and the mouse cursor momentarily pops out of the slider rectangle.
// This may not be 100% reliable !
GdkModifierType mouseStateFlags ;
gdk_device_get_state ( device , gtk_widget_get_window ( widget ) , NULL , & mouseStateFlags ) ;
bool mousedown = ( mouseStateFlags & GDK_BUTTON1_MASK ) ;
if ( mousedown ) {
bool combine_addlineregion_drawing_areas = tqApp - > style ( ) . styleHint ( TQStyle : : SH_ScrollBar_CombineAddLineRegionDrawingAreas ) ;
if ( lastSliderActiveSubControl ! = TQStyle : : SC_None ) {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | lastSliderActiveSubControl ) ;
}
else {
if ( subline . contains ( cursor_pos ) ) {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | TQStyle : : SC_ScrollBarSubLine ) ;
lastSliderActiveSubControl = TQStyle : : SC_ScrollBarSubLine ;
}
else if ( addline . contains ( cursor_pos ) ) {
// Not so fast...the addline region may contain a subline control!
TQRect internalSubLine ;
if ( ceData . orientation = = TQt : : Horizontal ) {
internalSubLine = TQRect ( addline . x ( ) , addline . y ( ) , addline . width ( ) / 2 , addline . height ( ) ) ;
}
else {
internalSubLine = TQRect ( addline . x ( ) , addline . y ( ) , addline . width ( ) , addline . height ( ) / 2 ) ;
}
if ( internalSubLine . contains ( cursor_pos ) ) {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | TQStyle : : SC_ScrollBarSubLine ) ;
lastSliderActiveSubControl = TQStyle : : SC_ScrollBarSubLine ;
}
if ( addline . contains ( cursor_pos ) ) {
else {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | TQStyle : : SC_ScrollBarAddLine ) ;
lastSliderActiveSubControl = TQStyle : : SC_ScrollBarAddLine ;
}
if ( subpage . contains ( cursor_pos ) ) {
}
else if ( subpage . contains ( cursor_pos ) ) {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | TQStyle : : SC_ScrollBarSubPage ) ;
lastSliderActiveSubControl = TQStyle : : SC_ScrollBarSubPage ;
}
if ( addpage . contains ( cursor_pos ) ) {
else if ( addpage . contains ( cursor_pos ) ) {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | TQStyle : : SC_ScrollBarAddPage ) ;
lastSliderActiveSubControl = TQStyle : : SC_ScrollBarAddPage ;
}
if ( slider . contains ( cursor_pos ) ) {
else if ( slider . contains ( cursor_pos ) ) {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | TQStyle : : SC_ScrollBarSlider ) ;
lastSliderActiveSubControl = TQStyle : : SC_ScrollBarSlider ;
}
if ( first . contains ( cursor_pos ) ) {
else if ( first . contains ( cursor_pos ) ) {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | TQStyle : : SC_ScrollBarFirst ) ;
lastSliderActiveSubControl = TQStyle : : SC_ScrollBarFirst ;
}
if ( last . contains ( cursor_pos ) ) {
else if ( last . contains ( cursor_pos ) ) {
activeSubControl = ( TQStyle : : SubControl ) ( activeSubControl | TQStyle : : SC_ScrollBarLast ) ;
lastSliderActiveSubControl = TQStyle : : SC_ScrollBarLast ;
}
}
}
else {
lastSliderActiveSubControl = TQStyle : : SC_None ;
}
}
// Draw item