File indexing completed on 2024-05-12 05:34:35

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 }