| 123 GtkWidget *color_button; |
123 GtkWidget *color_button; |
| 124 |
124 |
| 125 PidginWhiteboard *gtkwb = g_new0(PidginWhiteboard, 1); |
125 PidginWhiteboard *gtkwb = g_new0(PidginWhiteboard, 1); |
| 126 |
126 |
| 127 gtkwb->wb = wb; |
127 gtkwb->wb = wb; |
| 128 wb->ui_data = gtkwb; |
128 purple_whiteboard_set_ui_data(wb, gtkwb); |
| 129 |
129 |
| 130 /* Get dimensions (default?) for the whiteboard canvas */ |
130 /* Get dimensions (default?) for the whiteboard canvas */ |
| 131 if (!purple_whiteboard_get_dimensions(wb, >kwb->width, >kwb->height)) |
131 if (!purple_whiteboard_get_dimensions(wb, >kwb->width, >kwb->height)) |
| 132 { |
132 { |
| 133 /* Give some initial board-size */ |
133 /* Give some initial board-size */ |
| 143 } |
143 } |
| 144 |
144 |
| 145 /* Try and set window title as the name of the buddy, else just use their |
145 /* Try and set window title as the name of the buddy, else just use their |
| 146 * username |
146 * username |
| 147 */ |
147 */ |
| 148 buddy = purple_find_buddy(wb->account, wb->who); |
148 buddy = purple_find_buddy(purple_whiteboard_get_account(wb), purple_whiteboard_get_who(wb)); |
| 149 |
149 |
| 150 window = pidgin_create_window(buddy != NULL ? purple_buddy_get_contact_alias(buddy) : wb->who, 0, NULL, FALSE); |
150 window = pidgin_create_window(buddy != NULL ? purple_buddy_get_contact_alias(buddy) : purple_whiteboard_get_who(wb), 0, NULL, FALSE); |
| 151 gtkwb->window = window; |
151 gtkwb->window = window; |
| 152 gtk_widget_set_name(window, wb->who); |
152 gtk_widget_set_name(window, purple_whiteboard_get_who(wb)); |
| 153 |
153 |
| 154 g_signal_connect(G_OBJECT(window), "delete_event", |
154 g_signal_connect(G_OBJECT(window), "delete_event", |
| 155 G_CALLBACK(whiteboard_close_cb), gtkwb); |
155 G_CALLBACK(whiteboard_close_cb), gtkwb); |
| 156 |
156 |
| 157 #if 0 |
157 #if 0 |
| 272 { |
272 { |
| 273 PidginWhiteboard *gtkwb; |
273 PidginWhiteboard *gtkwb; |
| 274 GtkWidget *colour_dialog; |
274 GtkWidget *colour_dialog; |
| 275 |
275 |
| 276 g_return_if_fail(wb != NULL); |
276 g_return_if_fail(wb != NULL); |
| 277 gtkwb = wb->ui_data; |
277 gtkwb = purple_whiteboard_get_ui_data(wb); |
| 278 g_return_if_fail(gtkwb != NULL); |
278 g_return_if_fail(gtkwb != NULL); |
| 279 |
279 |
| 280 /* TODO Ask if user wants to save picture before the session is closed */ |
280 /* TODO Ask if user wants to save picture before the session is closed */ |
| 281 |
281 |
| 282 /* Clear graphical memory */ |
282 /* Clear graphical memory */ |
| 299 { |
299 { |
| 300 gtk_widget_destroy(gtkwb->window); |
300 gtk_widget_destroy(gtkwb->window); |
| 301 gtkwb->window = NULL; |
301 gtkwb->window = NULL; |
| 302 } |
302 } |
| 303 g_free(gtkwb); |
303 g_free(gtkwb); |
| 304 wb->ui_data = NULL; |
304 purple_whiteboard_set_ui_data(wb, NULL); |
| 305 } |
305 } |
| 306 |
306 |
| 307 static gboolean whiteboard_close_cb(GtkWidget *widget, GdkEvent *event, PidginWhiteboard *gtkwb) |
307 static gboolean whiteboard_close_cb(GtkWidget *widget, GdkEvent *event, PidginWhiteboard *gtkwb) |
| 308 { |
308 { |
| 309 PurpleWhiteboard *wb; |
309 PurpleWhiteboard *wb; |
| 404 { |
404 { |
| 405 PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; |
405 PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; |
| 406 GdkPixmap *pixmap = gtkwb->pixmap; |
406 GdkPixmap *pixmap = gtkwb->pixmap; |
| 407 |
407 |
| 408 PurpleWhiteboard *wb = gtkwb->wb; |
408 PurpleWhiteboard *wb = gtkwb->wb; |
| 409 GList *draw_list = wb->draw_list; |
409 GList *draw_list = purple_whiteboard_get_draw_list(wb); |
| 410 |
410 |
| 411 if(BrushState != BRUSH_STATE_UP) |
411 if(BrushState != BRUSH_STATE_UP) |
| 412 { |
412 { |
| 413 /* Potential double-click DOWN to DOWN? */ |
413 /* Potential double-click DOWN to DOWN? */ |
| 414 BrushState = BRUSH_STATE_DOWN; |
414 BrushState = BRUSH_STATE_DOWN; |
| 439 pidgin_whiteboard_draw_brush_point(gtkwb->wb, |
439 pidgin_whiteboard_draw_brush_point(gtkwb->wb, |
| 440 event->x, event->y, |
440 event->x, event->y, |
| 441 gtkwb->brush_color, gtkwb->brush_size); |
441 gtkwb->brush_color, gtkwb->brush_size); |
| 442 } |
442 } |
| 443 |
443 |
| 444 wb->draw_list = draw_list; |
444 purple_whiteboard_set_draw_list(wb, draw_list); |
| 445 |
445 |
| 446 return TRUE; |
446 return TRUE; |
| 447 } |
447 } |
| 448 |
448 |
| 449 static gboolean pidgin_whiteboard_brush_motion(GtkWidget *widget, GdkEventMotion *event, gpointer data) |
449 static gboolean pidgin_whiteboard_brush_motion(GtkWidget *widget, GdkEventMotion *event, gpointer data) |
| 457 |
457 |
| 458 PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; |
458 PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; |
| 459 GdkPixmap *pixmap = gtkwb->pixmap; |
459 GdkPixmap *pixmap = gtkwb->pixmap; |
| 460 |
460 |
| 461 PurpleWhiteboard *wb = gtkwb->wb; |
461 PurpleWhiteboard *wb = gtkwb->wb; |
| 462 GList *draw_list = wb->draw_list; |
462 GList *draw_list = purple_whiteboard_get_draw_list(wb); |
| 463 |
463 |
| 464 if(event->is_hint) |
464 if(event->is_hint) |
| 465 gdk_window_get_pointer(event->window, &x, &y, &state); |
465 gdk_window_get_pointer(event->window, &x, &y, &state); |
| 466 else |
466 else |
| 467 { |
467 { |
| 526 /* Set tracking variables */ |
526 /* Set tracking variables */ |
| 527 LastX = x; |
527 LastX = x; |
| 528 LastY = y; |
528 LastY = y; |
| 529 } |
529 } |
| 530 |
530 |
| 531 wb->draw_list = draw_list; |
531 purple_whiteboard_set_draw_list(wb, draw_list); |
| 532 |
532 |
| 533 return TRUE; |
533 return TRUE; |
| 534 } |
534 } |
| 535 |
535 |
| 536 static gboolean pidgin_whiteboard_brush_up(GtkWidget *widget, GdkEventButton *event, gpointer data) |
536 static gboolean pidgin_whiteboard_brush_up(GtkWidget *widget, GdkEventButton *event, gpointer data) |
| 537 { |
537 { |
| 538 PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; |
538 PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; |
| 539 GdkPixmap *pixmap = gtkwb->pixmap; |
539 GdkPixmap *pixmap = gtkwb->pixmap; |
| 540 |
540 |
| 541 PurpleWhiteboard *wb = gtkwb->wb; |
541 PurpleWhiteboard *wb = gtkwb->wb; |
| 542 GList *draw_list = wb->draw_list; |
542 GList *draw_list = purple_whiteboard_get_draw_list(wb); |
| 543 |
543 |
| 544 if((BrushState != BRUSH_STATE_DOWN) && (BrushState != BRUSH_STATE_MOTION)) |
544 if((BrushState != BRUSH_STATE_DOWN) && (BrushState != BRUSH_STATE_MOTION)) |
| 545 { |
545 { |
| 546 purple_debug_error("gtkwhiteboard", "***Bad brush state transition %d to UP\n", BrushState); |
546 purple_debug_error("gtkwhiteboard", "***Bad brush state transition %d to UP\n", BrushState); |
| 547 |
547 |
| 581 |
581 |
| 582 /* The brush stroke is finished, clear the list for another one */ |
582 /* The brush stroke is finished, clear the list for another one */ |
| 583 if(draw_list) |
583 if(draw_list) |
| 584 purple_whiteboard_draw_list_destroy(draw_list); |
584 purple_whiteboard_draw_list_destroy(draw_list); |
| 585 |
585 |
| 586 wb->draw_list = NULL; |
586 purple_whiteboard_set_draw_list(wb, NULL); |
| 587 } |
587 } |
| 588 |
588 |
| 589 return TRUE; |
589 return TRUE; |
| 590 } |
590 } |
| 591 |
591 |
| 592 static void pidgin_whiteboard_draw_brush_point(PurpleWhiteboard *wb, int x, int y, int color, int size) |
592 static void pidgin_whiteboard_draw_brush_point(PurpleWhiteboard *wb, int x, int y, int color, int size) |
| 593 { |
593 { |
| 594 PidginWhiteboard *gtkwb = wb->ui_data; |
594 PidginWhiteboard *gtkwb = purple_whiteboard_get_ui_data(wb); |
| 595 GtkWidget *widget = gtkwb->drawing_area; |
595 GtkWidget *widget = gtkwb->drawing_area; |
| 596 GdkPixmap *pixmap = gtkwb->pixmap; |
596 GdkPixmap *pixmap = gtkwb->pixmap; |
| 597 |
597 |
| 598 cairo_t *gfx_con = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); |
598 cairo_t *gfx_con = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); |
| 599 GdkColor col; |
599 GdkColor col; |
| 682 } |
682 } |
| 683 } |
683 } |
| 684 |
684 |
| 685 static void pidgin_whiteboard_set_dimensions(PurpleWhiteboard *wb, int width, int height) |
685 static void pidgin_whiteboard_set_dimensions(PurpleWhiteboard *wb, int width, int height) |
| 686 { |
686 { |
| 687 PidginWhiteboard *gtkwb = wb->ui_data; |
687 PidginWhiteboard *gtkwb = purple_whiteboard_get_ui_data(wb); |
| 688 |
688 |
| 689 gtkwb->width = width; |
689 gtkwb->width = width; |
| 690 gtkwb->height = height; |
690 gtkwb->height = height; |
| 691 } |
691 } |
| 692 |
692 |
| 693 static void pidgin_whiteboard_set_brush(PurpleWhiteboard *wb, int size, int color) |
693 static void pidgin_whiteboard_set_brush(PurpleWhiteboard *wb, int size, int color) |
| 694 { |
694 { |
| 695 PidginWhiteboard *gtkwb = wb->ui_data; |
695 PidginWhiteboard *gtkwb = purple_whiteboard_get_ui_data(wb); |
| 696 |
696 |
| 697 gtkwb->brush_size = size; |
697 gtkwb->brush_size = size; |
| 698 gtkwb->brush_color = color; |
698 gtkwb->brush_color = color; |
| 699 } |
699 } |
| 700 |
700 |
| 701 static void pidgin_whiteboard_clear(PurpleWhiteboard *wb) |
701 static void pidgin_whiteboard_clear(PurpleWhiteboard *wb) |
| 702 { |
702 { |
| 703 PidginWhiteboard *gtkwb = wb->ui_data; |
703 PidginWhiteboard *gtkwb = purple_whiteboard_get_ui_data(wb); |
| 704 GdkPixmap *pixmap = gtkwb->pixmap; |
704 GdkPixmap *pixmap = gtkwb->pixmap; |
| 705 GtkWidget *drawing_area = gtkwb->drawing_area; |
705 GtkWidget *drawing_area = gtkwb->drawing_area; |
| 706 cairo_t *cr = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); |
706 cairo_t *cr = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); |
| 707 |
707 |
| 708 gdk_cairo_set_source_color(cr, &drawing_area->style->white); |
708 gdk_cairo_set_source_color(cr, &drawing_area->style->white); |