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 }