Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add pen color selection #83

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions src/callbacks.c
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,62 @@ void on_opacity_lesser(GtkMenuItem *menuitem,
}


static gboolean
cmw_destroy_cb(GtkWidget *widget)
{
/* This is needed to get out of gtk_main */
gtk_main_quit();
return FALSE;
}


static void
dialog_response (GtkDialog *dialog, gint response, gpointer user_data)
{
GromitData *data = (GromitData *) user_data;
switch (response)
{
case GTK_RESPONSE_OK:
gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), data->default_pen->paint_color);
/* Set default tool color in case of no config file*/
*data->red = *data->default_pen->paint_color;
gdk_cairo_set_source_rgba(data->default_pen->paint_ctx, data->default_pen->paint_color);
cairo_set_operator(data->default_pen->paint_ctx, CAIRO_OPERATOR_OVER);

if (data->current_tool_context) {
/* Change the color of the current tool */
*(data->current_tool_context->paint_color) = *(data->red);
gdk_cairo_set_source_rgba(data->current_tool_context->paint_ctx, data->current_tool_context->paint_color);
}
break;
default:
break;
}
gtk_widget_destroy(dialog);
}


void on_select_color(GtkMenuItem *menuitem,
gpointer user_data)
{
GtkWidget *csd;

csd = gtk_color_chooser_dialog_new ("Select color", NULL);

/* Set as modal */
gtk_window_set_modal (GTK_WINDOW(csd),TRUE);

g_signal_connect (csd, "destroy",
G_CALLBACK (cmw_destroy_cb), NULL);
g_signal_connect (csd, "response",
G_CALLBACK (dialog_response), user_data);

gtk_widget_show (csd);
gtk_main ();

}


void on_undo(GtkMenuItem *menuitem,
gpointer user_data)
{
Expand Down
3 changes: 3 additions & 0 deletions src/callbacks.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@ void on_undo(GtkMenuItem *menuitem,
void on_redo(GtkMenuItem *menuitem,
gpointer user_data);

void on_select_color(GtkMenuItem *menuitem,
gpointer user_data);

void on_about(GtkMenuItem *menuitem,
gpointer user_data);

Expand Down
12 changes: 12 additions & 0 deletions src/gromit-mpx.c
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ void select_tool (GromitData *data,
if(data->debug)
g_printerr("DEBUG: select_tool set context for '%s'\n", slave_name);
devdata->cur_context = context;
data->current_tool_context = context;
success = 1;
}
else /* try master name */
Expand All @@ -389,6 +390,7 @@ void select_tool (GromitData *data,
if(data->debug)
g_printerr("DEBUG: select_tool set context for '%s'\n", name);
devdata->cur_context = context;
data->current_tool_context = context;
success = 1;
}
else /* try default_name */
Expand All @@ -397,6 +399,7 @@ void select_tool (GromitData *data,
if(data->debug)
g_printerr("DEBUG: select_tool set default context '%s' for '%s'\n", default_name, name);
devdata->cur_context = context;
data->current_tool_context = context;
success = 1;
}

Expand Down Expand Up @@ -918,6 +921,8 @@ void setup_main_app (GromitData *data, gboolean activate)
snprintf(labelBuf, sizeof(labelBuf), "Redo (SHIFT-%s)", data->undo_keyval);
GtkWidget* redo_item = gtk_menu_item_new_with_label (labelBuf);

GtkWidget* select_color_item = gtk_menu_item_new_with_label ("Select color");

GtkWidget* sep_item = gtk_separator_menu_item_new();
GtkWidget* intro_item = gtk_menu_item_new_with_mnemonic("_Introduction");
GtkWidget* about_item = gtk_menu_item_new_with_mnemonic("_About");
Expand All @@ -935,6 +940,7 @@ void setup_main_app (GromitData *data, gboolean activate)
gtk_menu_shell_append (GTK_MENU_SHELL (menu), opacity_lesser_item);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), undo_item);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), redo_item);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), select_color_item);

gtk_menu_shell_append (GTK_MENU_SHELL (menu), sep_item);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), intro_item);
Expand Down Expand Up @@ -971,6 +977,10 @@ void setup_main_app (GromitData *data, gboolean activate)
G_CALLBACK (on_redo),
data);

g_signal_connect(G_OBJECT (select_color_item), "activate",
G_CALLBACK (on_select_color),
data);

g_signal_connect(G_OBJECT (intro_item), "activate",
G_CALLBACK (on_intro),
data);
Expand All @@ -992,6 +1002,7 @@ void setup_main_app (GromitData *data, gboolean activate)
gtk_widget_show (opacity_lesser_item);
gtk_widget_show (undo_item);
gtk_widget_show (redo_item);
gtk_widget_show (select_color_item);

gtk_widget_show (sep_item);
gtk_widget_show (intro_item);
Expand Down Expand Up @@ -1024,6 +1035,7 @@ int app_parse_args (int argc, char **argv, GromitData *data)

data->undo_keyval = DEFAULT_UNDOKEY;
data->undo_keycode = 0;
data->current_tool_context = NULL;

for (i=1; i < argc ; i++)
{
Expand Down
4 changes: 3 additions & 1 deletion src/gromit-mpx.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,9 @@ typedef struct

GromitPaintContext *default_pen;
GromitPaintContext *default_eraser;


GromitPaintContext *current_tool_context;

GHashTable *tool_config;

cairo_surface_t *backbuffer;
Expand Down