Mercurial > pidgin.yaz
annotate src/gtkwhiteboard.c @ 11830:9cd233ea2799
[gaim-migrate @ 14121]
Removing a g_free() I added during my first rewrite of the font_size stuff. It doesn't belong there any more.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Wed, 26 Oct 2005 01:48:33 +0000 |
parents | 4669e7461968 |
children | 2219f4bf4a57 |
rev | line source |
---|---|
11475 | 1 /* |
2 * gaim | |
3 * | |
4 * Gaim is the legal property of its developers, whose names are too numerous | |
5 * to list here. Please refer to the COPYRIGHT file distributed with this | |
6 * source distribution. | |
7 * | |
8 * This program is free software; you can redistribute it and/or modify | |
9 * it under the terms of the GNU General Public License as published by | |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU General Public License | |
19 * along with this program; if not, write to the Free Software | |
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 * | |
22 */ | |
23 | |
24 #include <stdlib.h> | |
25 | |
26 #include "blist.h" | |
27 | |
28 #include "gtkwhiteboard.h" | |
29 | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
30 /****************************************************************************** |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
31 * Prototypes |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
32 *****************************************************************************/ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
33 static void gaim_gtk_whiteboard_create( GaimWhiteboard *wb ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
34 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
35 static void gaim_gtk_whiteboard_destroy( GaimWhiteboard *wb ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
36 static void gaim_gtk_whiteboard_exit( GtkWidget *widget, gpointer data ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
37 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
38 /*static void gaim_gtkwhiteboard_button_start_press( GtkButton *button, gpointer data ); */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
39 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
40 static gboolean gaim_gtk_whiteboard_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer data ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
41 static gboolean gaim_gtk_whiteboard_expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer data ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
42 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
43 static gboolean gaim_gtk_whiteboard_brush_down( GtkWidget *widget, GdkEventButton *event, gpointer data ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
44 static gboolean gaim_gtk_whiteboard_brush_motion( GtkWidget *widget, GdkEventMotion *event, gpointer data ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
45 static gboolean gaim_gtk_whiteboard_brush_up( GtkWidget *widget, GdkEventButton *event, gpointer data ); |
11475 | 46 |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
47 static void gaim_gtk_whiteboard_draw_brush_point( GaimWhiteboard *wb, |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
48 int x, int y, int color, int size ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
49 static void gaim_gtk_whiteboard_draw_brush_line( GaimWhiteboard *wb, |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
50 int x0, int y0, int x1, int y1, int color, int size ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
51 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
52 static void gaim_gtk_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
53 static void gaim_gtk_whiteboard_clear( GaimWhiteboard *wb ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
54 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
55 static void gaim_gtk_whiteboard_button_clear_press( GtkWidget *widget, gpointer data ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
56 static void gaim_gtk_whiteboard_button_save_press( GtkWidget *widget, gpointer data ); |
11475 | 57 |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
58 static void gaim_gtk_whiteboard_set_canvas_as_icon( GaimGtkWhiteboard *gtkwb ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
59 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
60 static void gaim_gtk_whiteboard_rgb24_to_rgb48( int color_rgb, GdkColor *color ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
61 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
62 /****************************************************************************** |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
63 * Globals |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
64 *****************************************************************************/ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
65 /* |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
66 GList *buttonList = NULL; |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
67 GdkColor DefaultColor[PALETTE_NUM_COLORS]; |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
68 */ |
11475 | 69 |
70 static gboolean LocalShutdownRequest; | |
71 | |
11829
4669e7461968
[gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents:
11802
diff
changeset
|
72 static int LastX; /* Tracks last position of the mouse when drawing */ |
11475 | 73 static int LastY; |
11829
4669e7461968
[gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents:
11802
diff
changeset
|
74 static int MotionCount; /* Tracks how many brush motions made */ |
11475 | 75 static int BrushState = BRUSH_STATE_UP; |
76 | |
77 static GaimWhiteboardUiOps ui_ops = | |
78 { | |
79 gaim_gtk_whiteboard_create, | |
80 gaim_gtk_whiteboard_destroy, | |
81 gaim_gtk_whiteboard_set_dimensions, | |
82 gaim_gtk_whiteboard_draw_brush_point, | |
83 gaim_gtk_whiteboard_draw_brush_line, | |
84 gaim_gtk_whiteboard_clear | |
85 }; | |
86 | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
87 /****************************************************************************** |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
88 * API |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
89 *****************************************************************************/ |
11475 | 90 GaimWhiteboardUiOps *gaim_gtk_whiteboard_get_ui_ops( void ) |
91 { | |
92 return( &ui_ops ); | |
93 } | |
94 | |
95 void gaim_gtk_whiteboard_create( GaimWhiteboard *wb ) | |
96 { | |
97 int i; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
98 |
11475 | 99 GtkWidget *window; |
100 GtkWidget *drawing_area; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
101 |
11475 | 102 GtkWidget *hbox_palette; |
103 GtkWidget *vbox_palette_above_canvas_and_controls; | |
104 GtkWidget *hbox_canvas_and_controls; | |
105 GtkWidget *vbox_controls; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
106 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
107 /* |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
108 -------------------------- |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
109 |[][][][palette[][][][][]| |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
110 |------------------------| |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
111 | canvas | con | |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
112 | | trol| |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
113 | | s | |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
114 | | | |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
115 | | | |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
116 -------------------------- |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
117 */ |
11475 | 118 GtkWidget *clear_button; |
119 GtkWidget *save_button; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
120 |
11475 | 121 GtkWidget *palette_color_box[PALETTE_NUM_COLORS]; |
11484
4539174a88bd
[gaim-migrate @ 13726]
Richard Laager <rlaager@wiktel.com>
parents:
11475
diff
changeset
|
122 /* GdkPixbuf *palette_color_area[PALETTE_NUM_COLORS]; */ |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
123 |
11475 | 124 GaimGtkWhiteboard *gtkwb = g_new0( GaimGtkWhiteboard, 1 ); |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
125 |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
126 const char *window_title; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
127 |
11475 | 128 gtkwb->wb = wb; |
129 wb->ui_data = gtkwb; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
130 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
131 /* Get dimensions (default?) for the whiteboard canvas */ |
11475 | 132 if( wb->prpl_ops && wb->prpl_ops->get_dimensions ) |
133 wb->prpl_ops->get_dimensions( wb, >kwb->width, >kwb->height ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
134 |
11475 | 135 window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); |
136 gtkwb->window = window; | |
137 gtk_widget_set_name( window, wb->who ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
138 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
139 /* Try and set window title as the name of the buddy, else just use their |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
140 * username |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
141 */ |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
142 window_title = gaim_contact_get_alias( gaim_buddy_get_contact( gaim_find_buddy( wb->account, wb->who ) ) ); |
11475 | 143 if( window_title ) |
144 gtk_window_set_title( ( GtkWindow* )( window ), window_title ); | |
145 else | |
146 gtk_window_set_title( ( GtkWindow* )( window ), wb->who ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
147 |
11475 | 148 gtk_window_set_resizable( ( GtkWindow* )( window ), FALSE ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
149 |
11475 | 150 g_signal_connect( G_OBJECT( window ), "destroy", |
151 G_CALLBACK( gaim_gtk_whiteboard_exit ), ( gpointer )( gtkwb ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
152 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
153 /* Create vertical box to place palette above the canvas and controls */ |
11475 | 154 vbox_palette_above_canvas_and_controls = gtk_vbox_new( FALSE, 0 ); |
155 gtk_container_add( GTK_CONTAINER( window ), vbox_palette_above_canvas_and_controls ); | |
156 gtk_widget_show( vbox_palette_above_canvas_and_controls ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
157 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
158 /* Create horizontal box for the palette and all its entries */ |
11475 | 159 hbox_palette = gtk_hbox_new( FALSE, 0 ); |
160 gtk_container_add( GTK_CONTAINER( vbox_palette_above_canvas_and_controls ), hbox_palette ); | |
161 gtk_widget_show( hbox_palette ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
162 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
163 /* Create horizontal box to seperate the canvas from the controls */ |
11475 | 164 hbox_canvas_and_controls = gtk_hbox_new( FALSE, 0 ); |
165 gtk_container_add( GTK_CONTAINER( vbox_palette_above_canvas_and_controls ), hbox_canvas_and_controls ); | |
166 gtk_widget_show( hbox_canvas_and_controls ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
167 |
11475 | 168 for( i = 0; i < PALETTE_NUM_COLORS; i++ ) |
169 { | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
170 /* palette_color_area[i] = */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
171 |
11475 | 172 palette_color_box[i] = gtk_image_new_from_pixbuf( NULL ); |
173 gtk_widget_set_size_request( palette_color_box[i], gtkwb->width / PALETTE_NUM_COLORS ,32 ); | |
174 gtk_container_add( GTK_CONTAINER( hbox_palette ), palette_color_box[i] ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
175 |
11475 | 176 gtk_widget_show( palette_color_box[i] ); |
177 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
178 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
179 /* Create the drawing area */ |
11475 | 180 drawing_area = gtk_drawing_area_new(); |
181 gtkwb->drawing_area = drawing_area; | |
182 gtk_widget_set_size_request( GTK_WIDGET( drawing_area ), gtkwb->width, gtkwb->height ); | |
183 gtk_box_pack_start( GTK_BOX( hbox_canvas_and_controls ), drawing_area, TRUE, TRUE, 8 ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
184 |
11475 | 185 gtk_widget_show( drawing_area ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
186 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
187 /* Signals used to handle backing pixmap */ |
11475 | 188 g_signal_connect( G_OBJECT( drawing_area ), "expose_event", |
189 G_CALLBACK( gaim_gtk_whiteboard_expose_event ), ( gpointer )( gtkwb ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
190 |
11475 | 191 g_signal_connect( G_OBJECT( drawing_area ), "configure_event", |
192 G_CALLBACK( gaim_gtk_whiteboard_configure_event ), ( gpointer )( gtkwb ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
193 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
194 /* Event signals */ |
11475 | 195 g_signal_connect( G_OBJECT( drawing_area ), "button_press_event", |
196 G_CALLBACK( gaim_gtk_whiteboard_brush_down ), ( gpointer )( gtkwb ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
197 |
11475 | 198 g_signal_connect( G_OBJECT( drawing_area ), "motion_notify_event", |
199 G_CALLBACK( gaim_gtk_whiteboard_brush_motion ), ( gpointer )( gtkwb ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
200 |
11475 | 201 g_signal_connect( G_OBJECT( drawing_area ), "button_release_event", |
202 G_CALLBACK( gaim_gtk_whiteboard_brush_up ), ( gpointer )( gtkwb ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
203 |
11475 | 204 gtk_widget_set_events( drawing_area, GDK_EXPOSURE_MASK | |
205 GDK_LEAVE_NOTIFY_MASK | | |
206 GDK_BUTTON_PRESS_MASK | | |
207 GDK_POINTER_MOTION_MASK | | |
208 GDK_BUTTON_RELEASE_MASK | | |
209 GDK_POINTER_MOTION_HINT_MASK ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
210 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
211 /* Create vertical box to contain the controls */ |
11475 | 212 vbox_controls = gtk_vbox_new( FALSE, 0 ); |
213 gtk_container_add( GTK_CONTAINER( hbox_canvas_and_controls ), vbox_controls ); | |
214 gtk_widget_show( vbox_controls ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
215 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
216 /* Add a clear button */ |
11475 | 217 clear_button = gtk_button_new_with_label( "Clear" ); |
218 gtk_widget_set_size_request( clear_button, 96 ,32 ); | |
219 gtk_box_pack_start( GTK_BOX( vbox_controls ), clear_button, FALSE, FALSE, 0 ); | |
220 gtk_widget_show( clear_button ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
221 |
11475 | 222 g_signal_connect( G_OBJECT( clear_button ), "clicked", |
223 G_CALLBACK( gaim_gtk_whiteboard_button_clear_press ), ( gpointer )( gtkwb ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
224 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
225 /* Add a save button */ |
11475 | 226 save_button = gtk_button_new_with_label( "Save" ); |
227 gtk_widget_set_size_request( save_button, 96 ,32 ); | |
228 gtk_box_pack_start( GTK_BOX( vbox_controls ), save_button, FALSE, FALSE, 8 ); | |
229 gtk_widget_show( save_button ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
230 |
11475 | 231 g_signal_connect( G_OBJECT( save_button ), "clicked", |
232 G_CALLBACK( gaim_gtk_whiteboard_button_save_press ), ( gpointer )( gtkwb ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
233 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
234 /* Make all this (window) visible */ |
11475 | 235 gtk_widget_show( window ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
236 |
11475 | 237 gaim_gtk_whiteboard_set_canvas_as_icon( gtkwb ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
238 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
239 /* TODO Specific protocol/whiteboard assignment here? Needs a UI Op? */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
240 /* Set default brush size and color */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
241 /* |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
242 ds->brush_size = DOODLE_BRUSH_MEDIUM; |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
243 ds->brush_color = 0; |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
244 */ |
11475 | 245 } |
246 | |
247 void gaim_gtk_whiteboard_destroy( GaimWhiteboard *wb ) | |
248 { | |
249 GaimGtkWhiteboard *gtkwb = wb->ui_data; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
250 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
251 /* TODO Ask if user wants to save picture before the session is closed */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
252 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
253 /* Clear graphical memory */ |
11475 | 254 if( gtkwb->pixmap ) |
255 { | |
256 g_object_unref( gtkwb->pixmap ); | |
257 gtkwb->pixmap = NULL; | |
258 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
259 |
11475 | 260 if( gtkwb->window ) |
261 { | |
262 gtk_widget_destroy( gtkwb->window ); | |
263 gtkwb->window = NULL; | |
264 } | |
265 } | |
266 | |
267 void gaim_gtk_whiteboard_exit( GtkWidget *widget, gpointer data ) | |
268 { | |
269 GaimGtkWhiteboard *gtkwb = ( GaimGtkWhiteboard* )( data ); | |
270 GaimWhiteboard *wb = gtkwb->wb; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
271 |
11475 | 272 if( gtkwb->window && gtkwb->pixmap ) |
273 { | |
274 LocalShutdownRequest = TRUE; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
275 |
11475 | 276 gaim_gtk_whiteboard_destroy( wb ); |
277 } | |
278 else | |
279 LocalShutdownRequest = FALSE; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
280 |
11475 | 281 if( gtkwb ) |
282 { | |
283 g_free( gtkwb ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
284 |
11475 | 285 gtkwb = NULL; |
286 wb->ui_data = NULL; | |
287 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
288 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
289 /* Destroy whiteboard core, if the local user exited the whiteboard window */ |
11475 | 290 if( wb && LocalShutdownRequest ) |
291 { | |
292 gaim_whiteboard_destroy( wb ); | |
293 wb = NULL; | |
294 } | |
295 } | |
296 | |
297 /* | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
298 * Whiteboard start button on conversation window (move this code to gtkconv? |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
299 * and use new prpl_info member?) |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
300 */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
301 #if 0 |
11475 | 302 void gaim_gtkwhiteboard_button_start_press( GtkButton *button, gpointer data ) |
303 { | |
304 GaimConversation *conv = data; | |
305 GaimAccount *account = gaim_conversation_get_account( conv ); | |
306 GaimConnection *gc = gaim_account_get_connection( account ); | |
307 char *to = ( char* )( gaim_conversation_get_name( conv ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
308 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
309 /* Only handle this if local client requested Doodle session (else local |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
310 * client would have sent one) |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
311 */ |
11475 | 312 GaimWhiteboard *wb = gaim_whiteboard_get( account, to ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
313 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
314 /* Write a local message to this conversation showing that a request for a |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
315 * Doodle session has been made |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
316 */ |
11475 | 317 gaim_conv_im_write( GAIM_CONV_IM( conv ), "", _("Sent Doodle request."), |
318 GAIM_MESSAGE_NICK | GAIM_MESSAGE_RECV, time( NULL ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
319 |
11475 | 320 yahoo_doodle_command_send_request( gc, to ); |
321 yahoo_doodle_command_send_ready( gc, to ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
322 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
323 /* Insert this 'session' in the list. At this point, it's only a requested |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
324 * session. |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
325 */ |
11475 | 326 wb = gaim_whiteboard_create( account, to, DOODLE_STATE_REQUESTING ); |
327 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
328 #endif |
11475 | 329 |
330 gboolean gaim_gtk_whiteboard_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer data ) | |
331 { | |
332 GaimGtkWhiteboard *gtkwb = ( GaimGtkWhiteboard* )( data ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
333 |
11475 | 334 GdkPixmap *pixmap = gtkwb->pixmap; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
335 |
11475 | 336 if( pixmap ) |
337 g_object_unref( pixmap ); | |
338 | |
339 pixmap = gdk_pixmap_new( widget->window, | |
340 widget->allocation.width, | |
341 widget->allocation.height, | |
342 -1 ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
343 |
11475 | 344 gtkwb->pixmap = pixmap; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
345 |
11475 | 346 gdk_draw_rectangle( pixmap, |
347 widget->style->white_gc, | |
348 TRUE, | |
349 0, 0, | |
350 widget->allocation.width, | |
351 widget->allocation.height ); | |
352 | |
353 return( TRUE ); | |
354 } | |
355 | |
356 gboolean gaim_gtk_whiteboard_expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer data ) | |
357 { | |
358 GaimGtkWhiteboard *gtkwb = ( GaimGtkWhiteboard* )( data ); | |
359 GdkPixmap *pixmap = gtkwb->pixmap; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
360 |
11475 | 361 gdk_draw_drawable( widget->window, |
362 widget->style->fg_gc[GTK_WIDGET_STATE( widget )], | |
363 pixmap, | |
364 event->area.x, event->area.y, | |
365 event->area.x, event->area.y, | |
366 event->area.width, event->area.height ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
367 |
11475 | 368 return( FALSE ); |
369 } | |
370 | |
371 gboolean gaim_gtk_whiteboard_brush_down( GtkWidget *widget, GdkEventButton *event, gpointer data ) | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
372 { |
11475 | 373 GaimGtkWhiteboard *gtkwb = ( GaimGtkWhiteboard* )( data ); |
374 GdkPixmap *pixmap = gtkwb->pixmap; | |
375 | |
376 GaimWhiteboard *wb = gtkwb->wb; | |
377 GList *draw_list = wb->draw_list; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
378 |
11475 | 379 int *x0 = NULL; |
380 int *y0 = NULL; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
381 |
11475 | 382 if( BrushState != BRUSH_STATE_UP ) |
383 { | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
384 /* Potential double-click DOWN to DOWN? */ |
11475 | 385 BrushState = BRUSH_STATE_DOWN; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
386 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
387 /* return( FALSE ); */ |
11475 | 388 } |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
389 |
11475 | 390 BrushState = BRUSH_STATE_DOWN; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
391 |
11475 | 392 if( event->button == 1 && pixmap != NULL ) |
393 { | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
394 /* Check if draw_list has contents; if so, clear it */ |
11475 | 395 if( draw_list ) |
396 draw_list = gaim_whiteboard_draw_list_destroy( draw_list ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
397 |
11475 | 398 x0 = g_new0( int, 1 ); |
399 y0 = g_new0( int, 1 ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
400 |
11475 | 401 *x0 = event->x; |
402 *y0 = event->y; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
403 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
404 /* Set tracking variables */ |
11475 | 405 LastX = *x0; |
406 LastY = *y0; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
407 |
11475 | 408 MotionCount = 0; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
409 |
11475 | 410 draw_list = g_list_append( draw_list, ( gpointer )( x0 ) ); |
411 draw_list = g_list_append( draw_list, ( gpointer )( y0 ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
412 |
11475 | 413 gaim_gtk_whiteboard_draw_brush_point( gtkwb->wb, |
414 event->x, event->y, | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
415 0,5 ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
416 /* gtkwb->brush_color, gtkwb->brush_size ); NOTE temp const prot uiop */ |
11475 | 417 } |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
418 |
11475 | 419 wb->draw_list = draw_list; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
420 |
11475 | 421 return( TRUE ); |
422 } | |
423 | |
424 gboolean gaim_gtk_whiteboard_brush_motion( GtkWidget *widget, GdkEventMotion *event, gpointer data ) | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
425 { |
11475 | 426 int x; |
427 int y; | |
428 int *dx; | |
429 int *dy; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
430 |
11475 | 431 GdkModifierType state; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
432 |
11475 | 433 GaimGtkWhiteboard *gtkwb = ( GaimGtkWhiteboard* )( data ); |
434 GdkPixmap *pixmap = gtkwb->pixmap; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
435 |
11475 | 436 GaimWhiteboard *wb = gtkwb->wb; |
437 GList *draw_list = wb->draw_list; | |
438 | |
439 if( event->is_hint ) | |
440 gdk_window_get_pointer( event->window, &x, &y, &state ); | |
441 else | |
442 { | |
443 x = event->x; | |
444 y = event->y; | |
445 state = event->state; | |
446 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
447 |
11475 | 448 if( state & GDK_BUTTON1_MASK && pixmap != NULL ) |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
449 { |
11475 | 450 if( ( BrushState != BRUSH_STATE_DOWN ) && ( BrushState != BRUSH_STATE_MOTION ) ) |
451 { | |
452 g_print( "***Bad brush state transition %d to MOTION\n", BrushState ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
453 |
11475 | 454 BrushState = BRUSH_STATE_MOTION; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
455 |
11475 | 456 return( FALSE ); |
457 } | |
458 BrushState = BRUSH_STATE_MOTION; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
459 |
11475 | 460 dx = g_new0( int, 1 ); |
461 dy = g_new0( int, 1 ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
462 |
11475 | 463 *dx = x - LastX; |
464 *dy = y - LastY; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
465 |
11475 | 466 MotionCount++; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
467 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
468 /* NOTE 100 is a temporary constant for how many deltas/motions in a |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
469 * stroke (needs UI Ops?) |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
470 */ |
11475 | 471 if( MotionCount == 100 ) |
472 { | |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
473 int *x0 = g_new0( int, 1 ); |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
474 int *y0 = g_new0( int, 1 ); |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
475 |
11475 | 476 draw_list = g_list_append( draw_list, ( gpointer )( dx ) ); |
477 draw_list = g_list_append( draw_list, ( gpointer )( dy ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
478 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
479 /* Send draw list to prpl draw_list handler */ |
11475 | 480 if( gtkwb->wb->prpl_ops && gtkwb->wb->prpl_ops->send_draw_list ) |
481 gtkwb->wb->prpl_ops->send_draw_list( gtkwb->wb, draw_list ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
482 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
483 /* The brush stroke is finished, clear the list for another one */ |
11475 | 484 if( draw_list ) |
485 draw_list = gaim_whiteboard_draw_list_destroy( draw_list ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
486 |
11475 | 487 *x0 = LastX; |
488 *y0 = LastY; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
489 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
490 /* Reset motion tracking */ |
11475 | 491 MotionCount = 0; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
492 |
11475 | 493 draw_list = g_list_append( draw_list, ( gpointer )( x0 ) ); |
494 draw_list = g_list_append( draw_list, ( gpointer )( y0 ) ); | |
495 | |
496 dx = g_new0( int, 1 ); | |
497 dy = g_new0( int, 1 ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
498 |
11475 | 499 *dx = x - LastX; |
500 *dy = y - LastY; | |
501 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
502 |
11475 | 503 draw_list = g_list_append( draw_list, ( gpointer )( dx ) ); |
504 draw_list = g_list_append( draw_list, ( gpointer )( dy ) ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
505 |
11475 | 506 gaim_gtk_whiteboard_draw_brush_line( gtkwb->wb, |
507 LastX, LastY, | |
508 x, y, | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
509 0, 5 ); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
510 /*gtkwb->brush_color, gtkwb->brush_size ); temp const proto ui ops? */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
511 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
512 /* Set tracking variables */ |
11475 | 513 LastX = x; |
514 LastY = y; | |
515 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
516 |
11475 | 517 wb->draw_list = draw_list; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
518 |
11475 | 519 return( TRUE ); |
520 } | |
521 | |
522 gboolean gaim_gtk_whiteboard_brush_up( GtkWidget *widget, GdkEventButton *event, gpointer data ) | |
523 { | |
524 GaimGtkWhiteboard *gtkwb = ( GaimGtkWhiteboard* )( data ); | |
525 GdkPixmap *pixmap = gtkwb->pixmap; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
526 |
11475 | 527 GaimWhiteboard *wb = gtkwb->wb; |
528 GList *draw_list = wb->draw_list; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
529 |
11475 | 530 if( ( BrushState != BRUSH_STATE_DOWN ) && ( BrushState != BRUSH_STATE_MOTION ) ) |
531 { | |
532 g_print( "***Bad brush state transition %d to UP\n", BrushState ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
533 |
11475 | 534 BrushState = BRUSH_STATE_UP; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
535 |
11475 | 536 return( FALSE ); |
537 } | |
538 BrushState = BRUSH_STATE_UP; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
539 |
11475 | 540 if( event->button == 1 && pixmap != NULL ) |
541 { | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
542 /* If the brush was never moved, express two sets of two deltas That's a |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
543 * 'point,' but not for Yahoo! |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
544 */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
545 /* if( ( event->x == LastX ) && ( event->y == LastY ) ) */ |
11475 | 546 if( MotionCount == 0 ) |
547 { | |
548 int index; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
549 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
550 for( index = 0; index < 2; index++ )/* NOTE Yahoo Doodle specific! */ |
11475 | 551 { |
552 int *x0 = NULL; | |
553 int *y0 = NULL; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
554 |
11475 | 555 x0 = g_new0( int, 1 ); |
556 y0 = g_new0( int, 1 ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
557 |
11475 | 558 draw_list = g_list_append( draw_list, ( gpointer )( x0 ) ); |
559 draw_list = g_list_append( draw_list, ( gpointer )( y0 ) ); | |
560 } | |
561 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
562 /* |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
563 else |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
564 MotionCount = 0; |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
565 */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
566 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
567 /* Send draw list to prpl draw_list handler */ |
11475 | 568 if( gtkwb->wb->prpl_ops && gtkwb->wb->prpl_ops->send_draw_list ) |
569 gtkwb->wb->prpl_ops->send_draw_list( gtkwb->wb, draw_list ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
570 |
11475 | 571 gaim_gtk_whiteboard_set_canvas_as_icon( gtkwb ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
572 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
573 /* The brush stroke is finished, clear the list for another one */ |
11475 | 574 if( draw_list ) |
575 draw_list = gaim_whiteboard_draw_list_destroy( draw_list ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
576 |
11475 | 577 wb->draw_list = draw_list; |
578 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
579 |
11475 | 580 return( TRUE ); |
581 } | |
582 | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
583 /* void gaim_gtk_whiteboard_draw_brush_point( GtkWidget *widget, GaimGtkWhiteboard *gtkwb, |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
584 int x, int y, int color, int size ) |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
585 */ |
11475 | 586 void gaim_gtk_whiteboard_draw_brush_point( GaimWhiteboard *wb, int x, int y, int color, int size ) |
587 { | |
588 GaimGtkWhiteboard *gtkwb = wb->ui_data; | |
589 GtkWidget *widget = gtkwb->drawing_area; | |
590 GdkPixmap *pixmap = gtkwb->pixmap; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
591 |
11475 | 592 GdkRectangle update_rect; |
593 | |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
594 GdkGC *gfx_con = gdk_gc_new( pixmap ); |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
595 GdkColor col; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
596 |
11475 | 597 update_rect.x = x - size / 2; |
598 update_rect.y = y - size / 2; | |
599 update_rect.width = size; | |
600 update_rect.height = size; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
601 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
602 /* Interpret and convert color */ |
11475 | 603 gaim_gtk_whiteboard_rgb24_to_rgb48( color, &col ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
604 |
11475 | 605 gdk_gc_set_rgb_fg_color( gfx_con, &col ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
606 /* gdk_gc_set_rgb_bg_color( gfx_con, &col ); */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
607 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
608 /* NOTE 5 is a size constant for now... this is because of how poorly the |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
609 * gdk_draw_arc draws small circles |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
610 */ |
11475 | 611 if( size < 5 ) |
612 { | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
613 /* Draw a rectangle/square */ |
11475 | 614 gdk_draw_rectangle( pixmap, |
615 gfx_con, | |
616 TRUE, | |
617 update_rect.x, update_rect.y, | |
618 update_rect.width, update_rect.height ); | |
619 } | |
620 else | |
621 { | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
622 /* Draw a circle */ |
11475 | 623 gdk_draw_arc( pixmap, |
624 gfx_con, | |
625 TRUE, | |
626 update_rect.x, update_rect.y, | |
627 update_rect.width, update_rect.height, | |
628 0, FULL_CIRCLE_DEGREES ); | |
629 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
630 |
11475 | 631 gtk_widget_queue_draw_area( widget, |
632 update_rect.x, update_rect.y, | |
633 update_rect.width, update_rect.height ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
634 |
11475 | 635 gdk_gc_unref( gfx_con ); |
636 } | |
637 | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
638 /* Uses Bresenham's algorithm (as provided by Wikipedia) */ |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
639 /* void gaim_gtk_whiteboard_draw_brush_line( GtkWidget *widget, GaimGtkWhiteboard *gtkwb, |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
640 int x0, int y0, int x1, int y1, int color, int size ) |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
641 */ |
11475 | 642 void gaim_gtk_whiteboard_draw_brush_line( GaimWhiteboard *wb, int x0, int y0, int x1, int y1, int color, int size ) |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
643 { |
11475 | 644 int temp; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
645 |
11475 | 646 int xstep; |
647 int ystep; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
648 |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
649 int dx; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
650 int dy; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
651 |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
652 int error; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
653 int derror; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
654 |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
655 int x; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
656 int y; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
657 |
11475 | 658 gboolean steep = abs( y1 - y0 ) > abs( x1 - x0 ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
659 |
11475 | 660 if( steep ) |
661 { | |
662 temp = x0; x0 = y0; y0 = temp; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
663 temp = x1; x1 = y1; y1 = temp; |
11475 | 664 } |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
665 |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
666 dx = abs( x1 - x0 ); |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
667 dy = abs( y1 - y0 ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
668 |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
669 error = 0; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
670 derror = dy; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
671 |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
672 x = x0; |
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
673 y = y0; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
674 |
11475 | 675 if( x0 < x1 ) |
676 xstep = 1; | |
677 else | |
678 xstep = -1; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
679 |
11475 | 680 if( y0 < y1 ) |
681 ystep = 1; | |
682 else | |
683 ystep = -1; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
684 |
11475 | 685 if( steep ) |
686 gaim_gtk_whiteboard_draw_brush_point( wb, y, x, color, size ); | |
687 else | |
688 gaim_gtk_whiteboard_draw_brush_point( wb, x, y, color, size ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
689 |
11475 | 690 while( x != x1 ) |
691 { | |
692 x = x + xstep; | |
693 error = error + derror; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
694 |
11475 | 695 if( ( error * 2 ) >= dx ) |
696 { | |
697 y = y + ystep; | |
698 error = error - dx; | |
699 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
700 |
11475 | 701 if( steep ) |
702 gaim_gtk_whiteboard_draw_brush_point( wb, y, x, color, size ); | |
703 else | |
704 gaim_gtk_whiteboard_draw_brush_point( wb, x, y, color, size ); | |
705 } | |
706 } | |
707 | |
708 void gaim_gtk_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height ) | |
709 { | |
710 GaimGtkWhiteboard *gtkwb = wb->ui_data; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
711 |
11475 | 712 gtkwb->width = width; |
713 gtkwb->height = height; | |
714 } | |
715 | |
716 void gaim_gtk_whiteboard_clear( GaimWhiteboard *wb ) | |
717 { | |
718 GaimGtkWhiteboard *gtkwb = wb->ui_data; | |
719 GdkPixmap *pixmap = gtkwb->pixmap; | |
720 GtkWidget *drawing_area = gtkwb->drawing_area; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
721 |
11475 | 722 gdk_draw_rectangle( pixmap, |
723 drawing_area->style->white_gc, | |
724 TRUE, | |
725 0, 0, | |
726 drawing_area->allocation.width, drawing_area->allocation.height ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
727 |
11475 | 728 gtk_widget_queue_draw_area( drawing_area, |
729 0, 0, | |
730 drawing_area->allocation.width, drawing_area->allocation.height ); | |
731 } | |
732 | |
733 void gaim_gtk_whiteboard_button_clear_press( GtkWidget *widget, gpointer data ) | |
734 { | |
735 GaimGtkWhiteboard *gtkwb = ( GaimGtkWhiteboard* )( data ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
736 |
11475 | 737 gaim_gtk_whiteboard_clear( gtkwb->wb ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
738 |
11475 | 739 gaim_gtk_whiteboard_set_canvas_as_icon( gtkwb ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
740 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
741 /* Do protocol specific clearing procedures */ |
11475 | 742 if( gtkwb->wb->prpl_ops && gtkwb->wb->prpl_ops->clear ) |
743 gtkwb->wb->prpl_ops->clear( gtkwb->wb ); | |
744 } | |
745 | |
746 void gaim_gtk_whiteboard_button_save_press( GtkWidget *widget, gpointer data ) | |
747 { | |
748 GaimGtkWhiteboard *gtkwb = ( GaimGtkWhiteboard* )( data ); | |
749 GdkPixbuf *pixbuf; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
750 |
11475 | 751 GtkWidget *dialog; |
752 | |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
753 int result; |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
754 |
11558 | 755 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
11475 | 756 dialog = gtk_file_chooser_dialog_new ("Save File", |
757 GTK_WINDOW(gtkwb->window), | |
758 GTK_FILE_CHOOSER_ACTION_SAVE, | |
759 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
760 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, | |
761 NULL ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
762 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
763 /* gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER( dialog ), (gboolean)(TRUE) ); */ |
11475 | 764 |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
765 /* if( user_edited_a_new_document ) */ |
11475 | 766 { |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
767 /* gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( dialog ), default_folder_for_saving ); */ |
11475 | 768 gtk_file_chooser_set_current_name( GTK_FILE_CHOOSER( dialog ), "whiteboard.jpg" ); |
769 } | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
770 /* |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
771 else |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
772 gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), filename_for_existing_document); |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
773 */ |
11558 | 774 #else |
775 dialog = gtk_file_selection_new("Save File"); | |
776 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog), "whiteboard.jpg"); | |
777 #endif | |
11506
88d504770c60
[gaim-migrate @ 13751]
Richard Laager <rlaager@wiktel.com>
parents:
11484
diff
changeset
|
778 result = gtk_dialog_run( GTK_DIALOG( dialog ) ); |
11475 | 779 |
780 if( result == GTK_RESPONSE_ACCEPT ) | |
781 { | |
782 char *filename; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
783 |
11558 | 784 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
11475 | 785 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER( dialog ) ); |
11558 | 786 #else |
787 filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog))); | |
788 #endif | |
11475 | 789 gtk_widget_destroy( dialog ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
790 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
791 /* Makes an icon from the whiteboard's canvas 'image' */ |
11475 | 792 pixbuf = gdk_pixbuf_get_from_drawable( NULL, |
793 ( GdkDrawable* )( gtkwb->pixmap ), | |
794 gdk_drawable_get_colormap( gtkwb->pixmap ), | |
795 0, 0, | |
796 0, 0, | |
797 gtkwb->width, gtkwb->height ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
798 |
11475 | 799 if( gdk_pixbuf_save( pixbuf, |
800 filename, | |
801 "jpeg", | |
802 NULL, | |
803 "quality", | |
804 "100", | |
805 NULL ) ) | |
806 g_print( "File Saved...\n" ); | |
807 else | |
808 g_print( "File not Saved... Error\n" ); | |
11558 | 809 g_free(filename); |
11475 | 810 } |
811 else | |
812 if( result == GTK_RESPONSE_CANCEL ) | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
813 { |
11475 | 814 gtk_widget_destroy( dialog ); |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
815 |
11475 | 816 g_print( "File not Saved... Canceled\n" ); |
817 } | |
818 } | |
819 | |
820 void gaim_gtk_whiteboard_set_canvas_as_icon( GaimGtkWhiteboard *gtkwb ) | |
821 { | |
822 GdkPixbuf *pixbuf; | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
823 |
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
824 /* Makes an icon from the whiteboard's canvas 'image' */ |
11475 | 825 pixbuf = gdk_pixbuf_get_from_drawable( NULL, |
826 ( GdkDrawable* )( gtkwb->pixmap ), | |
827 gdk_drawable_get_colormap( gtkwb->pixmap ), | |
828 0, 0, | |
829 0, 0, | |
830 gtkwb->width, gtkwb->height ); | |
11802
2e3a6dcebaf3
[gaim-migrate @ 14093]
Gary Kramlich <grim@reaperworld.com>
parents:
11558
diff
changeset
|
831 |
11475 | 832 gtk_window_set_icon( ( GtkWindow* )( gtkwb->window ), pixbuf ); |
833 } | |
834 | |
835 void gaim_gtk_whiteboard_rgb24_to_rgb48( int color_rgb, GdkColor *color ) | |
836 { | |
837 color->red = ( color_rgb >> 8 ) | 0xFF; | |
838 color->green = ( color_rgb & 0xFF00 ) | 0xFF; | |
839 color->blue = ( ( color_rgb & 0xFF ) << 8 ) | 0xFF; | |
840 } | |
841 |