136
139
static void transport_widget_start_timing (TransportWidget* widget);
137
140
static gboolean transport_widget_trigger_seek (gpointer userdata);
138
141
static gboolean transport_widget_seek (gpointer userdata);
142
static gboolean transport_widget_fade_playbutton (gpointer userdata);
141
145
/// Init functions //////////////////////////////////////////////////////////
168
172
priv->has_focus = FALSE;
169
173
priv->hold_timer = 0;
170
174
priv->skip_frequency = 0;
175
priv->launching_timer = 0;
176
priv->launching_transparency = 1.0f;
177
priv->fade_out = TRUE;
171
178
priv->command_coordinates = g_hash_table_new_full(g_direct_hash,
1734
1741
_finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y);
1743
else if(priv->current_state == TRANSPORT_STATE_LAUNCHING)
1746
g_debug ("launching in draw");
1748
_setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6);
1749
_mask_play (cr_surf,
1752
PLAY_WIDTH - (2*PLAY_PADDING),
1753
PLAY_HEIGHT - (2*PLAY_PADDING));
1755
double BUTTON_SHADOW_LAUNCHING[] = {color_button[3].r,
1758
priv->launching_transparency};
1759
double BUTTON_LAUNCHING_END[] = {color_button[0].r,
1762
priv->launching_transparency};
1763
double BUTTON_LAUNCHING_START[] = {color_button[1].r,
1766
priv->launching_transparency};
1770
PLAY_WIDTH - (2*PLAY_PADDING),
1771
PLAY_HEIGHT - (2*PLAY_PADDING),
1772
BUTTON_SHADOW_LAUNCHING,
1773
BUTTON_SHADOW_LAUNCHING,
1775
_surface_blur (surf, 3);
1776
_finalize_repaint (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y + 0.5f, 3);
1779
_setup (&cr_surf, &surf, PLAY_WIDTH, PLAY_HEIGHT);
1780
cairo_set_line_width (cr, 10.5);
1781
cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
1782
cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND);
1783
_mask_play (cr_surf,
1786
PLAY_WIDTH - (2*PLAY_PADDING),
1787
PLAY_HEIGHT - (2*PLAY_PADDING));
1791
PLAY_WIDTH - (2*PLAY_PADDING),
1792
PLAY_HEIGHT - (2*PLAY_PADDING),
1793
BUTTON_LAUNCHING_START,
1794
BUTTON_LAUNCHING_END,
1796
_finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y);
1750
1812
(TransportState)initial_state);
1816
transport_widget_fade_playbutton (gpointer userdata)
1818
TransportWidget* bar = (TransportWidget*)userdata;
1819
g_return_val_if_fail(IS_TRANSPORT_WIDGET(bar), FALSE);
1821
g_debug ("fade in /out timeout");
1823
TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(bar);
1824
if (priv->launching_transparency == 1.0f){
1825
priv->fade_out = TRUE;
1827
else if (priv->launching_transparency <= 0.3F){
1828
priv->fade_out = FALSE;
1830
if (priv->fade_out == TRUE){
1831
priv->launching_transparency -= 0.05f;
1834
priv->launching_transparency += 0.05f;
1836
gtk_widget_queue_draw (GTK_WIDGET(bar));
1754
1840
* transport_widget_update_state()
1755
1841
* Callback for updates from the other side of dbus
1761
1847
//g_debug("transport_widget_update_state - with property %s", property);
1762
1848
TransportWidget* bar = (TransportWidget*)userdata;
1763
1849
g_return_if_fail(IS_TRANSPORT_WIDGET(bar));
1850
TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(bar);
1765
1852
if(g_ascii_strcasecmp(DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE, property) == 0)
1767
int update_value = g_variant_get_int32(value);
1768
//g_debug("transport_widget_update_state - with value %i", update_value);
1769
transport_widget_toggle_play_pause(bar, (TransportState)update_value);
1854
TransportState new_state = (TransportState)g_variant_get_int32(value);
1855
//g_debug("transport_widget_update_state - with value %i", update_value);
1856
if (new_state == TRANSPORT_STATE_LAUNCHING){
1857
priv->current_state = TRANSPORT_STATE_LAUNCHING;
1858
priv->launching_timer = g_timeout_add (100,
1859
transport_widget_fade_playbutton,
1861
//g_debug("TransportWidget::toggle play state : %i", priv->current_state);
1864
if (priv->launching_timer != 0){
1865
g_source_remove (priv->launching_timer);
1866
priv->launching_timer = 0;
1867
priv->fade_out = TRUE;
1868
priv->launching_transparency = 1.0f;
1870
transport_widget_toggle_play_pause(bar, new_state);