How to make the toolbar button flashing

2011-03-01 Thread Miroslav Rajcic
I am trying to make the Pause button flash (or show any similar behaviour 
similar to that) when the pause state is active.

So far I tried many things, but none of these seem to work:
- changing the button background color
- changing the button stock icon
- changing the button relief style

Relevant code is following:

//start timer to alternate the button state
nBlinkButtonTimerID  = g_timeout_add (900, flash_pause_button_timer, NULL);

gboolean flash_pause_button_timer(gpointer data)
{
static bool bFlipFlop = false;
bFlipFlop = !bFlipFlop;

//get pointers to the relevant buttons
GtkToolbar *toolbar2 = (GtkToolbar *)lookup_widget(window1, toolbar2);
GtkWidget *tool_pause = (GtkWidget *)gtk_toolbar_get_nth_item(toolbar2, 2);
GList *children1 = gtk_container_get_children(GTK_CONTAINER(tool_pause));
GtkButton *button = (GtkButton *)g_list_nth_data (children1, 0);
g_list_free(children1);
GtkWidget *tool_stop = (GtkWidget *)gtk_toolbar_get_nth_item(toolbar2, 1);

//create two alternating colors (standard bkg and black bkg)
GtkStyle* style = gtk_rc_get_style(tool_stop);
GdkColor rgbStart = style-bg[GTK_STATE_NORMAL];
GdkColor rgbEnd = { 0, 0, 0, 0 };

//modify color
gtk_widget_modify_bg (GTK_WIDGET(button), GTK_STATE_NORMAL, (bFlipFlop)? 
rgbEnd : rgbStart);
gtk_widget_modify_bg (GTK_WIDGET(button), GTK_STATE_ACTIVE, (bFlipFlop)? 
rgbEnd : rgbStart);
gtk_widget_modify_base (GTK_WIDGET(button), GTK_STATE_NORMAL, (bFlipFlop)? 
rgbEnd : rgbStart);
gtk_widget_modify_base (GTK_WIDGET(button), GTK_STATE_ACTIVE, (bFlipFlop)? 
rgbEnd : rgbStart);

gtk_widget_queue_draw (GTK_WIDGET(button));
#if GTK_CHECK_VERSION(2,18,0)
gdk_window_process_updates (gtk_widget_get_window(GTK_WIDGET(button)), 
TRUE);

#else
gdk_window_process_updates (GTK_WIDGET(button)-window, TRUE);
#endif

/*
GtkWidget *w1 = 
gtk_tool_button_get_icon_widget(GTK_TOOL_BUTTON(tool_pause));
gtk_widget_modify_bg (w1, GTK_STATE_NORMAL, (bFlipFlop)? rgbEnd : 
rgbStart);
gtk_widget_modify_bg (w1, GTK_STATE_ACTIVE, (bFlipFlop)? rgbEnd : 
rgbStart);
gtk_widget_modify_base (w1, GTK_STATE_NORMAL, (bFlipFlop)? rgbEnd : 
rgbStart);
gtk_widget_modify_base (w1, GTK_STATE_ACTIVE, (bFlipFlop)? rgbEnd : 
rgbStart);

*/

//modify relief style
gtk_button_set_relief(button, (bFlipFlop)? 
GTK_RELIEF_NORMAL:GTK_RELIEF_NONE);


//modify stock icon
gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(tool_pause), (bFlipFlop)? 
GTK_STOCK_MEDIA_PAUSE : GTK_STOCK_MEDIA_RECORD);


gtk_tool_item_toolbar_reconfigured (GTK_TOOL_ITEM(tool_pause));

return TRUE;
}

Why doesn't any of these work ? Any tips ? 


___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


Re: How to make the toolbar button flashing

2011-03-01 Thread James Morris
On 1 March 2011 08:20, Miroslav Rajcic raj...@sokrates.hr wrote:
 I am trying to make the Pause button flash (or show any similar behaviour
 similar to that) when the pause state is active.
 So far I tried many things, but none of these seem to work:
 - changing the button background color
 - changing the button stock icon


Alternating between two different stock items is quite easy when you
know how, but I had to ask here for help.
If you have two images,

--8---
img1 = gtk_image_new_from_stock( GTK_STOCK_MEDIA_PLAY,
GTK_ICON_SIZE_SMALL_TOOLBAR);
img2 = gtk_image_new_from_stock( GTK_STOCK_MEDIA_STOP,
GTK_ICON_SIZE_SMALL_TOOLBAR);

 /* convert img1 and img2 from floating references which
are deleted when no longer in use, to a normal reference.
this prevents either of the images being deleted when we
swap the play/stop button images. unref'd after gtk_main.
*/
g_object_ref_sink(img1);
g_object_ref_sink(img2);
--8---

then in your idle callback simply use gtk_button_set_image,
alternating between the two images every time the function is called
(ie you could use a static gboolean to track which button to show each
time).

then once gtk_main returns:
--8---
gtk_main();

/* free the play  stop images */
g_object_unref(img1);
g_object_unref(img2);
--8---




http://github.com/jwm-art-net/BoxySeq/blob/master/boxyseq_gui/gui_main.c









 - changing the button relief style

 Relevant code is following:

 //start timer to alternate the button state
 nBlinkButtonTimerID  = g_timeout_add (900, flash_pause_button_timer, NULL);

 gboolean flash_pause_button_timer(gpointer data)
 {
 static bool bFlipFlop = false;
 bFlipFlop = !bFlipFlop;

 //get pointers to the relevant buttons
 GtkToolbar *toolbar2 = (GtkToolbar *)lookup_widget(window1, toolbar2);
 GtkWidget *tool_pause = (GtkWidget *)gtk_toolbar_get_nth_item(toolbar2, 2);
 GList *children1 = gtk_container_get_children(GTK_CONTAINER(tool_pause));
 GtkButton *button = (GtkButton *)g_list_nth_data (children1, 0);
 g_list_free(children1);
 GtkWidget *tool_stop = (GtkWidget *)gtk_toolbar_get_nth_item(toolbar2, 1);

 //create two alternating colors (standard bkg and black bkg)
 GtkStyle* style = gtk_rc_get_style(tool_stop);
 GdkColor rgbStart = style-bg[GTK_STATE_NORMAL];
 GdkColor rgbEnd = { 0, 0, 0, 0 };

 //modify color
 gtk_widget_modify_bg (GTK_WIDGET(button), GTK_STATE_NORMAL, (bFlipFlop)?
 rgbEnd : rgbStart);
 gtk_widget_modify_bg (GTK_WIDGET(button), GTK_STATE_ACTIVE, (bFlipFlop)?
 rgbEnd : rgbStart);
 gtk_widget_modify_base (GTK_WIDGET(button), GTK_STATE_NORMAL, (bFlipFlop)?
 rgbEnd : rgbStart);
 gtk_widget_modify_base (GTK_WIDGET(button), GTK_STATE_ACTIVE, (bFlipFlop)?
 rgbEnd : rgbStart);
 gtk_widget_queue_draw (GTK_WIDGET(button));
 #if GTK_CHECK_VERSION(2,18,0)
 gdk_window_process_updates (gtk_widget_get_window(GTK_WIDGET(button)),
 TRUE);
 #else
 gdk_window_process_updates (GTK_WIDGET(button)-window, TRUE);
 #endif

 /*
 GtkWidget *w1 =
 gtk_tool_button_get_icon_widget(GTK_TOOL_BUTTON(tool_pause));
 gtk_widget_modify_bg (w1, GTK_STATE_NORMAL, (bFlipFlop)? rgbEnd :
 rgbStart);
 gtk_widget_modify_bg (w1, GTK_STATE_ACTIVE, (bFlipFlop)? rgbEnd :
 rgbStart);
 gtk_widget_modify_base (w1, GTK_STATE_NORMAL, (bFlipFlop)? rgbEnd :
 rgbStart);
 gtk_widget_modify_base (w1, GTK_STATE_ACTIVE, (bFlipFlop)? rgbEnd :
 rgbStart);
 */

 //modify relief style
 gtk_button_set_relief(button, (bFlipFlop)?
 GTK_RELIEF_NORMAL:GTK_RELIEF_NONE);

 //modify stock icon
 gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(tool_pause), (bFlipFlop)?
 GTK_STOCK_MEDIA_PAUSE : GTK_STOCK_MEDIA_RECORD);

 gtk_tool_item_toolbar_reconfigured (GTK_TOOL_ITEM(tool_pause));

 return TRUE;
 }

 Why doesn't any of these work ? Any tips ?
 ___
 gtk-app-devel-list mailing list
 gtk-app-devel-list@gnome.org
 http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list




-- 
_
: http://jwm-art.net/
-audio/image/text/code/
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


Re: How to make the toolbar button flashing

2011-03-01 Thread Miroslav Rajcic

Hi James,
your example uses ordinary GtkButton, not the GtkToolItem and I couldn't 
make it work in my example (although I did try to fetch underlying 
GtkButton). I've now figured how to change the icon, the key is to use 
gtk_tool_button_set_icon_widget method:


img1 = gtk_image_new_from_stock( GTK_STOCK_MEDIA_PLAY, 
GTK_ICON_SIZE_SMALL_TOOLBAR);

gtk_widget_show(img1);
gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(tool_pause), img1);

Thank you for your help.

Regards,
 Miroslav

- Original Message - 
From: James Morris jwm.art@gmail.com

To: Miroslav Rajcic raj...@sokrates.hr
Cc: gtk-app-devel-list@gnome.org
Sent: Tuesday, March 01, 2011 10:24 AM
Subject: Re: How to make the toolbar button flashing


On 1 March 2011 08:20, Miroslav Rajcic raj...@sokrates.hr wrote:
I am trying to make the Pause button flash (or show any similar 
behaviour

similar to that) when the pause state is active.
So far I tried many things, but none of these seem to work:
- changing the button background color
- changing the button stock icon



Alternating between two different stock items is quite easy when you
know how, but I had to ask here for help.
If you have two images,

--8---
img1 = gtk_image_new_from_stock( GTK_STOCK_MEDIA_PLAY,
GTK_ICON_SIZE_SMALL_TOOLBAR);
img2 = gtk_image_new_from_stock( GTK_STOCK_MEDIA_STOP,
GTK_ICON_SIZE_SMALL_TOOLBAR);

/* convert img1 and img2 from floating references which
are deleted when no longer in use, to a normal reference.
this prevents either of the images being deleted when we
swap the play/stop button images. unref'd after gtk_main.
*/
g_object_ref_sink(img1);
g_object_ref_sink(img2);
--8---

then in your idle callback simply use gtk_button_set_image,
alternating between the two images every time the function is called
(ie you could use a static gboolean to track which button to show each
time).

then once gtk_main returns:
--8---
gtk_main();

/* free the play  stop images */
g_object_unref(img1);
g_object_unref(img2);
--8---




http://github.com/jwm-art-net/BoxySeq/blob/master/boxyseq_gui/gui_main.c










- changing the button relief style

Relevant code is following:

//start timer to alternate the button state
nBlinkButtonTimerID = g_timeout_add (900, flash_pause_button_timer, NULL);

gboolean flash_pause_button_timer(gpointer data)
{
static bool bFlipFlop = false;
bFlipFlop = !bFlipFlop;

//get pointers to the relevant buttons
GtkToolbar *toolbar2 = (GtkToolbar *)lookup_widget(window1, toolbar2);
GtkWidget *tool_pause = (GtkWidget *)gtk_toolbar_get_nth_item(toolbar2, 
2);

GList *children1 = gtk_container_get_children(GTK_CONTAINER(tool_pause));
GtkButton *button = (GtkButton *)g_list_nth_data (children1, 0);
g_list_free(children1);
GtkWidget *tool_stop = (GtkWidget *)gtk_toolbar_get_nth_item(toolbar2, 1);

//create two alternating colors (standard bkg and black bkg)
GtkStyle* style = gtk_rc_get_style(tool_stop);
GdkColor rgbStart = style-bg[GTK_STATE_NORMAL];
GdkColor rgbEnd = { 0, 0, 0, 0 };

//modify color
gtk_widget_modify_bg (GTK_WIDGET(button), GTK_STATE_NORMAL, (bFlipFlop)?
rgbEnd : rgbStart);
gtk_widget_modify_bg (GTK_WIDGET(button), GTK_STATE_ACTIVE, (bFlipFlop)?
rgbEnd : rgbStart);
gtk_widget_modify_base (GTK_WIDGET(button), GTK_STATE_NORMAL, (bFlipFlop)?
rgbEnd : rgbStart);
gtk_widget_modify_base (GTK_WIDGET(button), GTK_STATE_ACTIVE, (bFlipFlop)?
rgbEnd : rgbStart);
gtk_widget_queue_draw (GTK_WIDGET(button));
#if GTK_CHECK_VERSION(2,18,0)
gdk_window_process_updates (gtk_widget_get_window(GTK_WIDGET(button)),
TRUE);
#else
gdk_window_process_updates (GTK_WIDGET(button)-window, TRUE);
#endif

/*
GtkWidget *w1 =
gtk_tool_button_get_icon_widget(GTK_TOOL_BUTTON(tool_pause));
gtk_widget_modify_bg (w1, GTK_STATE_NORMAL, (bFlipFlop)? rgbEnd :
rgbStart);
gtk_widget_modify_bg (w1, GTK_STATE_ACTIVE, (bFlipFlop)? rgbEnd :
rgbStart);
gtk_widget_modify_base (w1, GTK_STATE_NORMAL, (bFlipFlop)? rgbEnd :
rgbStart);
gtk_widget_modify_base (w1, GTK_STATE_ACTIVE, (bFlipFlop)? rgbEnd :
rgbStart);
*/

//modify relief style
gtk_button_set_relief(button, (bFlipFlop)?
GTK_RELIEF_NORMAL:GTK_RELIEF_NONE);

//modify stock icon
gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(tool_pause), (bFlipFlop)?
GTK_STOCK_MEDIA_PAUSE : GTK_STOCK_MEDIA_RECORD);

gtk_tool_item_toolbar_reconfigured (GTK_TOOL_ITEM(tool_pause));

return TRUE;
}

Why doesn't any of these work ? Any tips ?
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list





--
_
: http://jwm-art.net/
-audio/image/text/code/

__ Information from ESET NOD32 Antivirus, version of virus signature 
database 5915 (20110228) __


The message was checked by ESET NOD32 Antivirus.

http://www.eset.com 


___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


CAD like app.

2011-03-01 Thread Maximilian Schneider
Hello,

I'm working on a CAD like gtk app.
a cairo Drawing area surounded by toolbar icons, controllable through
the mouse+keyboard.

I'm stuck trying to figure out how to create keyboard shortcuts.

How is it supposed to be done?

I've heard that this subject isn't the most well baked part of gtk...
but any solution that works is fine by me.

Thanks,
Max S.

___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list


Re: CAD like app.

2011-03-01 Thread John Matthewman
On 3/1/11, Maximilian Schneider k...@greatfreeworld.org wrote:
 Hello,

 I'm working on a CAD like gtk app.
 a cairo Drawing area surounded by toolbar icons, controllable through
 the mouse+keyboard.

 I'm stuck trying to figure out how to create keyboard shortcuts.

 How is it supposed to be done?

 I've heard that this subject isn't the most well baked part of gtk...
 but any solution that works is fine by me.

I remember getting stumped by this when making a toolbar with keyboard
shortcuts in a PyGTK application, but I eventually figured out how to
use Accelerators and Actions to solve the problem. In PyGTK the
relevant objects were (if I remember it all correctly): Action,
AccelGroup, ActionGroup. Maybe you can search from some example code
snippets?

John
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list