File indexing completed on 2024-05-12 05:34:37
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 "oxygenwidgetstatedata.h" 0009 #include "../config.h" 0010 0011 #include <iostream> 0012 0013 namespace Oxygen 0014 { 0015 0016 //_____________________________________________ 0017 void WidgetStateData::connect( GtkWidget* widget ) 0018 { 0019 0020 #if OXYGEN_DEBUG 0021 std::cerr << "Oxygen::WidgetStateData::connect - " << widget << " (" << G_OBJECT_TYPE_NAME( widget ) << ")" << std::endl; 0022 #endif 0023 0024 _target = widget; 0025 _timeLine.connect( (GSourceFunc)delayedUpdate, this ); 0026 } 0027 0028 //_____________________________________________ 0029 void WidgetStateData::disconnect( GtkWidget* widget ) 0030 { 0031 #if OXYGEN_DEBUG 0032 std::cerr << "Oxygen::WidgetStateData::disconnect - " << widget << " (" << G_OBJECT_TYPE_NAME( widget ) << ")" << std::endl; 0033 #endif 0034 0035 _timeLine.disconnect(); 0036 _target = 0L; 0037 _state = false; 0038 } 0039 0040 //_____________________________________________ 0041 bool WidgetStateData::updateState( bool state, const GdkRectangle& rect ) 0042 { 0043 0044 // always update dirty rect 0045 _dirtyRect = rect; 0046 0047 // check state and update 0048 if( state == _state ) return false; 0049 0050 #if OXYGEN_DEBUG 0051 std::cerr 0052 << "Oxygen::WidgetStateData::updateState - " 0053 << _target << " (" << ( _target ? std::string( G_OBJECT_TYPE_NAME( _target ) ) : "none" ) << ")" 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 WidgetStateData::delayedUpdate( gpointer pointer ) 0071 { 0072 0073 WidgetStateData& data( *static_cast<WidgetStateData*>( pointer ) ); 0074 0075 #if OXYGEN_DEBUG 0076 std::cerr 0077 << "Oxygen::WidgetStateData::updateState - " 0078 << data._target << " (" << G_OBJECT_TYPE_NAME( data._target ) << ")" 0079 << " state: " << data._state 0080 << " rect: " << data._dirtyRect 0081 << " opacity: " << data._timeLine.value() 0082 << std::endl; 0083 #endif 0084 0085 if( data._target && gtk_widget_get_realized(data._target) ) 0086 { Gtk::gtk_widget_queue_draw( data._target, &data._dirtyRect ); } 0087 0088 return FALSE; 0089 0090 } 0091 0092 }