File indexing completed on 2024-05-12 17:05:49
0001 /* 0002 this file is part of the oxygen gtk engine 0003 SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "oxygenscrollbarstatedata.h" 0009 #include "../config.h" 0010 0011 #include <iostream> 0012 0013 namespace Oxygen 0014 { 0015 0016 //_____________________________________________ 0017 void ScrollBarStateData::connect( GtkWidget* widget ) 0018 { 0019 0020 #if OXYGEN_DEBUG 0021 std::cerr << "Oxygen::ScrollBarStateData::connect - " << widget << " (" << G_OBJECT_TYPE_NAME( widget ) << ")" << std::endl; 0022 #endif 0023 0024 _target = widget; 0025 _upArrowData._timeLine.connect( (GSourceFunc)delayedUpdate, this ); 0026 _downArrowData._timeLine.connect( (GSourceFunc)delayedUpdate, this ); 0027 } 0028 0029 //_____________________________________________ 0030 void ScrollBarStateData::disconnect( GtkWidget* widget ) 0031 { 0032 #if OXYGEN_DEBUG 0033 std::cerr << "Oxygen::ScrollBarStateData::disconnect - " << widget << " (" << G_OBJECT_TYPE_NAME( widget ) << ")" << std::endl; 0034 #endif 0035 0036 _upArrowData._timeLine.disconnect(); 0037 _upArrowData._rect = Gtk::gdk_rectangle(); 0038 _upArrowData._state = false; 0039 0040 _downArrowData._timeLine.disconnect(); 0041 _downArrowData._rect = Gtk::gdk_rectangle(); 0042 _downArrowData._state = false; 0043 0044 _target = 0L; 0045 0046 } 0047 0048 //_____________________________________________ 0049 bool ScrollBarStateData::Data::updateState( bool state ) 0050 { 0051 if( state == _state ) return false; 0052 0053 #if OXYGEN_DEBUG 0054 std::cerr 0055 << "Oxygen::ScrollBarStateData::Data::updateState - " 0056 << " state: " << state 0057 << std::endl; 0058 #endif 0059 0060 _state = state; 0061 0062 // change direction 0063 _timeLine.setDirection( state ? TimeLine::Forward:TimeLine::Backward ); 0064 0065 // restart timeLine if needed 0066 if( _timeLine.isConnected() && !_timeLine.isRunning() ) _timeLine.start(); 0067 0068 return true; 0069 } 0070 0071 //_____________________________________________ 0072 gboolean ScrollBarStateData::delayedUpdate( gpointer pointer ) 0073 { 0074 0075 ScrollBarStateData& data( *static_cast<ScrollBarStateData*>( pointer ) ); 0076 0077 if( data._target ) 0078 { gtk_widget_queue_draw( data._target ); } 0079 0080 return FALSE; 0081 0082 } 0083 0084 }