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

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 "oxygenarrowstatedata.h"
0009 #include "../config.h"
0010 
0011 #include <iostream>
0012 
0013 namespace Oxygen
0014 {
0015 
0016     //_____________________________________________
0017     void ArrowStateData::connect( GtkWidget* widget )
0018     {
0019 
0020         #if OXYGEN_DEBUG
0021         std::cerr << "Oxygen::ArrowStateData::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 ArrowStateData::disconnect( GtkWidget* widget )
0031     {
0032         #if OXYGEN_DEBUG
0033         std::cerr << "Oxygen::ArrowStateData::disconnect - " << widget << " (" << G_OBJECT_TYPE_NAME( widget ) << ")" << std::endl;
0034         #endif
0035 
0036         _upArrowData._timeLine.disconnect();
0037         _upArrowData._state = false;
0038 
0039         _downArrowData._timeLine.disconnect();
0040         _downArrowData._state = false;
0041 
0042         _target = 0L;
0043 
0044     }
0045 
0046     //_____________________________________________
0047     bool ArrowStateData::Data::updateState( bool state )
0048     {
0049         if( state == _state ) return false;
0050 
0051         #if OXYGEN_DEBUG
0052         std::cerr
0053             << "Oxygen::ArrowStateData::Data::updateState - "
0054             << " state: " << state
0055             << std::endl;
0056         #endif
0057 
0058         _state = state;
0059 
0060         // change direction
0061         _timeLine.setDirection( state ? TimeLine::Forward:TimeLine::Backward );
0062 
0063         // restart timeLine if needed
0064         if( _timeLine.isConnected() && !_timeLine.isRunning() ) _timeLine.start();
0065 
0066         return true;
0067     }
0068 
0069     //_____________________________________________
0070     gboolean ArrowStateData::delayedUpdate( gpointer pointer )
0071     {
0072 
0073         ArrowStateData& data( *static_cast<ArrowStateData*>( pointer ) );
0074 
0075         if( data._target )
0076         { gtk_widget_queue_draw( data._target ); }
0077 
0078         return FALSE;
0079 
0080     }
0081 
0082 }