changeset 11802:2e3a6dcebaf3

[gaim-migrate @ 14093] This should be it for the // -> /* */ for the doodle/whiteboard stuff. This could use a bit of cleaning yet.... committer: Tailor Script <tailor@pidgin.im>
author Gary Kramlich <grim@reaperworld.com>
date Mon, 24 Oct 2005 22:45:24 +0000
parents 81806e9241be
children b4602ccb4e69
files src/gtkwhiteboard.c src/gtkwhiteboard.h src/whiteboard.c src/whiteboard.h
diffstat 4 files changed, 473 insertions(+), 419 deletions(-) [+]
line wrap: on
line diff
--- a/src/gtkwhiteboard.c	Mon Oct 24 21:48:21 2005 +0000
+++ b/src/gtkwhiteboard.c	Mon Oct 24 22:45:24 2005 +0000
@@ -21,19 +21,51 @@
  *
  */
 
-// INCLUDES ============================================================================================
-
 #include <stdlib.h>
 
 #include "blist.h"
 
 #include "gtkwhiteboard.h"
 
-// GLOBALS =============================================================================================
+/******************************************************************************
+ * Prototypes
+ *****************************************************************************/
+static void			gaim_gtk_whiteboard_create( GaimWhiteboard *wb );
+
+static void			gaim_gtk_whiteboard_destroy( GaimWhiteboard *wb );
+static void			gaim_gtk_whiteboard_exit( GtkWidget *widget, gpointer data );
+
+/*static void			gaim_gtkwhiteboard_button_start_press( GtkButton *button, gpointer data ); */
+
+static gboolean		gaim_gtk_whiteboard_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer data );
+static gboolean		gaim_gtk_whiteboard_expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer data );
+
+static gboolean		gaim_gtk_whiteboard_brush_down( GtkWidget *widget, GdkEventButton *event, gpointer data );
+static gboolean		gaim_gtk_whiteboard_brush_motion( GtkWidget *widget, GdkEventMotion *event, gpointer data );
+static gboolean		gaim_gtk_whiteboard_brush_up( GtkWidget *widget, GdkEventButton *event, gpointer data );
 
-//GList				*buttonList		= NULL;
+static void			gaim_gtk_whiteboard_draw_brush_point( GaimWhiteboard *wb,
+							      int x, int y, int color, int size );
+static void			gaim_gtk_whiteboard_draw_brush_line( GaimWhiteboard *wb,
+							     int x0, int y0, int x1, int y1, int color, int size );
+
+static void			gaim_gtk_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height );
+static void			gaim_gtk_whiteboard_clear( GaimWhiteboard *wb );
+
+static void			gaim_gtk_whiteboard_button_clear_press( GtkWidget *widget, gpointer data );
+static void			gaim_gtk_whiteboard_button_save_press( GtkWidget *widget, gpointer data );
 
-//GdkColor			DefaultColor[PALETTE_NUM_COLORS];
+static void			gaim_gtk_whiteboard_set_canvas_as_icon( GaimGtkWhiteboard *gtkwb );
+
+static void			gaim_gtk_whiteboard_rgb24_to_rgb48( int color_rgb, GdkColor *color );
+
+/******************************************************************************
+ * Globals
+ *****************************************************************************/
+/*
+GList				*buttonList		= NULL;
+GdkColor			DefaultColor[PALETTE_NUM_COLORS];
+*/
 
 static gboolean			LocalShutdownRequest;
 
@@ -52,264 +84,255 @@
 	gaim_gtk_whiteboard_clear
 };
 
-// FUNCTIONS ============================================================================================
-
+/******************************************************************************
+ * API
+ *****************************************************************************/
 GaimWhiteboardUiOps *gaim_gtk_whiteboard_get_ui_ops( void )
 {
 	return( &ui_ops );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_create( GaimWhiteboard *wb )
 {
-	//g_print( "gaim_gtk_whiteboard_create()\n" );
-	
 	int i;
-	
+
 	GtkWidget *window;
 	GtkWidget *drawing_area;
-	
+
 	GtkWidget *hbox_palette;
 	GtkWidget *vbox_palette_above_canvas_and_controls;
 	GtkWidget *hbox_canvas_and_controls;
 	GtkWidget *vbox_controls;
-	
-	//	--------------------------
-	//	|[][][][palette[][][][][]|
-	//	|------------------------|
-	//	|       canvas     | con |
-	//	|                  | trol|
-	//	|                  | s   |
-	//	|                  |     |
-	//	|                  |     |
-	//	--------------------------
-	
+
+	/*
+		--------------------------
+		|[][][][palette[][][][][]|
+		|------------------------|
+		|       canvas     | con |
+		|                  | trol|
+		|                  | s   |
+		|                  |     |
+		|                  |     |
+		--------------------------
+	*/
 	GtkWidget *clear_button;
 	GtkWidget *save_button;
-	
+
 	GtkWidget *palette_color_box[PALETTE_NUM_COLORS];
 	/* GdkPixbuf *palette_color_area[PALETTE_NUM_COLORS]; */
-	
+
 	GaimGtkWhiteboard *gtkwb = g_new0( GaimGtkWhiteboard, 1 );
 
 	const char *window_title;
 
 	gtkwb->wb = wb;
 	wb->ui_data = gtkwb;
-	
-	// Get dimensions (default?) for the whiteboard canvas
+
+	/* Get dimensions (default?) for the whiteboard canvas */
 	if( wb->prpl_ops && wb->prpl_ops->get_dimensions )
 		wb->prpl_ops->get_dimensions( wb, &gtkwb->width, &gtkwb->height );
-	
+
 	window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
 	gtkwb->window = window;
 	gtk_widget_set_name( window, wb->who );
-	
-	// Try and set window title as the name of the buddy, else just use their username
+
+	/* Try and set window title as the name of the buddy, else just use their
+	 * username
+	 */
 	window_title = gaim_contact_get_alias( gaim_buddy_get_contact( gaim_find_buddy( wb->account, wb->who ) ) );
 	if( window_title )
 		gtk_window_set_title( ( GtkWindow* )( window ), window_title );
 	else
 		gtk_window_set_title( ( GtkWindow* )( window ), wb->who );
-	
+
 	gtk_window_set_resizable( ( GtkWindow* )( window ), FALSE );
-	
+
 	g_signal_connect( G_OBJECT( window ), "destroy",
 			  G_CALLBACK( gaim_gtk_whiteboard_exit ), ( gpointer )( gtkwb ) );
-	
-	// Create vertical box to place palette above the canvas and controls
+
+	/* Create vertical box to place palette above the canvas and controls */
 	vbox_palette_above_canvas_and_controls = gtk_vbox_new( FALSE, 0 );
 	gtk_container_add( GTK_CONTAINER( window ), vbox_palette_above_canvas_and_controls );
 	gtk_widget_show( vbox_palette_above_canvas_and_controls );
-	
-	// Create horizontal box for the palette and all its entries
+
+	/* Create horizontal box for the palette and all its entries */
 	hbox_palette = gtk_hbox_new( FALSE, 0 );
 	gtk_container_add( GTK_CONTAINER( vbox_palette_above_canvas_and_controls ), hbox_palette );
 	gtk_widget_show( hbox_palette );
-	
-	// Create horizontal box to seperate the canvas from the controls
+
+	/* Create horizontal box to seperate the canvas from the controls */
 	hbox_canvas_and_controls = gtk_hbox_new( FALSE, 0 );
 	gtk_container_add( GTK_CONTAINER( vbox_palette_above_canvas_and_controls ), hbox_canvas_and_controls );
 	gtk_widget_show( hbox_canvas_and_controls );
-	
+
 	for( i = 0; i < PALETTE_NUM_COLORS; i++ )
 	{
-		//palette_color_area[i] = 
-		
+		/* palette_color_area[i] = */
+
 		palette_color_box[i] = gtk_image_new_from_pixbuf( NULL );
 		gtk_widget_set_size_request( palette_color_box[i], gtkwb->width / PALETTE_NUM_COLORS ,32 );
 		gtk_container_add( GTK_CONTAINER( hbox_palette ), palette_color_box[i] );
-		
-		
-		
+
 		gtk_widget_show( palette_color_box[i] );
 	}
-	
-	// Create the drawing area
+
+	/* Create the drawing area */
 	drawing_area = gtk_drawing_area_new();
 	gtkwb->drawing_area = drawing_area;
 	gtk_widget_set_size_request( GTK_WIDGET( drawing_area ), gtkwb->width, gtkwb->height );
 	gtk_box_pack_start( GTK_BOX( hbox_canvas_and_controls ), drawing_area, TRUE, TRUE, 8 );
-	
+
 	gtk_widget_show( drawing_area );
-	
-	// Signals used to handle backing pixmap
+
+	/* Signals used to handle backing pixmap */
 	g_signal_connect( G_OBJECT( drawing_area ), "expose_event",
 			  G_CALLBACK( gaim_gtk_whiteboard_expose_event ), ( gpointer )( gtkwb ) );
-	
+
 	g_signal_connect( G_OBJECT( drawing_area ), "configure_event",
 			  G_CALLBACK( gaim_gtk_whiteboard_configure_event ), ( gpointer )( gtkwb ) );
-	
-	// Event signals
+
+	/* Event signals */
 	g_signal_connect( G_OBJECT( drawing_area ), "button_press_event",
 			  G_CALLBACK( gaim_gtk_whiteboard_brush_down ), ( gpointer )( gtkwb ) );
-	
+
 	g_signal_connect( G_OBJECT( drawing_area ), "motion_notify_event",
 			  G_CALLBACK( gaim_gtk_whiteboard_brush_motion ), ( gpointer )( gtkwb ) );
-	
+
 	g_signal_connect( G_OBJECT( drawing_area ), "button_release_event",
 			  G_CALLBACK( gaim_gtk_whiteboard_brush_up ), ( gpointer )( gtkwb ) );
-	
+
 	gtk_widget_set_events( drawing_area, GDK_EXPOSURE_MASK		|
 					     GDK_LEAVE_NOTIFY_MASK	|
 					     GDK_BUTTON_PRESS_MASK	|
 					     GDK_POINTER_MOTION_MASK	|
 					     GDK_BUTTON_RELEASE_MASK	|
 					     GDK_POINTER_MOTION_HINT_MASK );
-	
-	// Create vertical box to contain the controls
+
+	/* Create vertical box to contain the controls */
 	vbox_controls = gtk_vbox_new( FALSE, 0 );
 	gtk_container_add( GTK_CONTAINER( hbox_canvas_and_controls ), vbox_controls );
 	gtk_widget_show( vbox_controls );
-	
-	// Add a clear button
+
+	/* Add a clear button */
 	clear_button = gtk_button_new_with_label( "Clear" );
 	gtk_widget_set_size_request( clear_button, 96 ,32 );
 	gtk_box_pack_start( GTK_BOX( vbox_controls ), clear_button, FALSE, FALSE, 0 );
 	gtk_widget_show( clear_button );
-	
+
 	g_signal_connect( G_OBJECT( clear_button ), "clicked",
 			  G_CALLBACK( gaim_gtk_whiteboard_button_clear_press ), ( gpointer )( gtkwb ) );
-	
-	// Add a save button
+
+	/* Add a save button */
 	save_button = gtk_button_new_with_label( "Save" );
 	gtk_widget_set_size_request( save_button, 96 ,32 );
 	gtk_box_pack_start( GTK_BOX( vbox_controls ), save_button, FALSE, FALSE, 8 );
 	gtk_widget_show( save_button );
-	
+
 	g_signal_connect( G_OBJECT( save_button ), "clicked",
 			  G_CALLBACK( gaim_gtk_whiteboard_button_save_press ), ( gpointer )( gtkwb ) );
-	
-	// Make all this (window) visible
+
+	/* Make all this (window) visible */
 	gtk_widget_show( window );
-	
+
 	gaim_gtk_whiteboard_set_canvas_as_icon( gtkwb );
-	
-	// TODO Specific protocol/whiteboard assignment here? Needs a UI Op?
-	// Set default brush size and color
-	//ds->brush_size	= DOODLE_BRUSH_MEDIUM;
-	//ds->brush_color	= 0;	// black
+
+	/* TODO Specific protocol/whiteboard assignment here? Needs a UI Op? */
+	/* Set default brush size and color */
+	/*
+	ds->brush_size	= DOODLE_BRUSH_MEDIUM;
+	ds->brush_color	= 0;
+	*/
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_destroy( GaimWhiteboard *wb )
 {
-	//g_print( "gaim_gtk_whiteboard_destroy()\n" );
-	
 	GaimGtkWhiteboard *gtkwb = wb->ui_data;
-	
-	// TODO Ask if user wants to save picture before the session is closed
-	
-	// Clear graphical memory
+
+	/* TODO Ask if user wants to save picture before the session is closed */
+
+	/* Clear graphical memory */
 	if( gtkwb->pixmap )
 	{
-		//g_print( "---gtkwb->pixmap = %p\n", gtkwb->pixmap );
 		g_object_unref( gtkwb->pixmap );
 		gtkwb->pixmap = NULL;
 	}
-	
+
 	if( gtkwb->window )
 	{
-		//g_print( "---gtkwb->window = %p\n", gtkwb->window );
 		gtk_widget_destroy( gtkwb->window );
 		gtkwb->window = NULL;
 	}
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_exit( GtkWidget *widget, gpointer data )
 {
-	//g_print( "gaim_gtk_whiteboard_exit()\n" );
-	
 	GaimGtkWhiteboard	*gtkwb	= ( GaimGtkWhiteboard* )( data );
 	GaimWhiteboard		*wb	= gtkwb->wb;
-	
+
 	if( gtkwb->window && gtkwb->pixmap )
 	{
 		LocalShutdownRequest = TRUE;
-		
-		//g_print( "---gtkwb->window = %p\n", gtkwb->window );
+
 		gaim_gtk_whiteboard_destroy( wb );
 	}
 	else
 		LocalShutdownRequest = FALSE;
-	
+
 	if( gtkwb )
 	{
-		//g_print( "---gtkwb = %p\n", gtkwb );
 		g_free( gtkwb );
-		
+
 		gtkwb = NULL;
 		wb->ui_data = NULL;
 	}
-	
-	// Destroy whiteboard core, if the local user exited the whiteboard window
+
+	/* Destroy whiteboard core, if the local user exited the whiteboard window */
 	if( wb && LocalShutdownRequest )
 	{
-		//g_print( "---wb = %p\n", wb );
 		gaim_whiteboard_destroy( wb );
 		wb = NULL;
 	}
 }
 
-// ------------------------------------------------------------------------------------------------------
 /*
-// Whiteboard start button on conversation window (move this code to gtkconv? and use new prpl_info member?)
+ * Whiteboard start button on conversation window (move this code to gtkconv?
+ * and use new prpl_info member?)
+ */
+#if 0
 void gaim_gtkwhiteboard_button_start_press( GtkButton *button, gpointer data )
 {
 	GaimConversation	*conv		= data;
 	GaimAccount		*account	= gaim_conversation_get_account( conv );
 	GaimConnection		*gc		= gaim_account_get_connection( account );
 	char			*to		= ( char* )( gaim_conversation_get_name( conv ) );
-	
-	// Only handle this if local client requested Doodle session (else local client would have sent one)
+
+	/* Only handle this if local client requested Doodle session (else local
+	 * client would have sent one)
+	 */
 	GaimWhiteboard	*wb			= gaim_whiteboard_get( account, to );
-	
-	// Write a local message to this conversation showing that
-	// a request for a Doodle session has been made
+
+	/* Write a local message to this conversation showing that a request for a
+	 * Doodle session has been made
+	 */
 	gaim_conv_im_write( GAIM_CONV_IM( conv ), "", _("Sent Doodle request."),
 			    GAIM_MESSAGE_NICK | GAIM_MESSAGE_RECV, time( NULL ) );
-	
+
 	yahoo_doodle_command_send_request( gc, to );
 	yahoo_doodle_command_send_ready( gc, to );
-	
-	// Insert this 'session' in the list.  At this point, it's only a requested session.	
+
+	/* Insert this 'session' in the list.  At this point, it's only a requested
+	 * session.
+	 */
 	wb = gaim_whiteboard_create( account, to, DOODLE_STATE_REQUESTING );
 }
-*/
-// ------------------------------------------------------------------------------------------------------
+#endif
 
 gboolean gaim_gtk_whiteboard_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer data )
 {
-	//g_print( "gaim_gtk_whiteboard_configure_event | %s\n", ds->who );
-	
 	GaimGtkWhiteboard	*gtkwb	= ( GaimGtkWhiteboard* )( data );
-	
+
 	GdkPixmap		*pixmap = gtkwb->pixmap;
-	
+
 	if( pixmap )
 		g_object_unref( pixmap );
 
@@ -317,9 +340,9 @@
 				 widget->allocation.width,
 				 widget->allocation.height,
 				 -1 );
-	
+
 	gtkwb->pixmap = pixmap;
-	
+
 	gdk_draw_rectangle( pixmap,
 			    widget->style->white_gc,
 			    TRUE,
@@ -330,98 +353,86 @@
 	return( TRUE );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 gboolean gaim_gtk_whiteboard_expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer data )
 {
-	//g_print( "gaim_gtk_whiteboard_expose_event | %s\n", ds->who );
-	
 	GaimGtkWhiteboard	*gtkwb	= ( GaimGtkWhiteboard* )( data );
 	GdkPixmap		*pixmap	= gtkwb->pixmap;
-	
+
 	gdk_draw_drawable( widget->window,
 			   widget->style->fg_gc[GTK_WIDGET_STATE( widget )],
 			   pixmap,
 			   event->area.x, event->area.y,
 			   event->area.x, event->area.y,
 			   event->area.width, event->area.height );
-	
+
 	return( FALSE );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 gboolean gaim_gtk_whiteboard_brush_down( GtkWidget *widget, GdkEventButton *event, gpointer data )
-{	
+{
 	GaimGtkWhiteboard	*gtkwb		= ( GaimGtkWhiteboard* )( data );
-	//g_print( "gaim_gtk_whiteboard_brush_down | %s\n", gtkwb->wb->who );
 	GdkPixmap		*pixmap		= gtkwb->pixmap;
 
 	GaimWhiteboard		*wb		= gtkwb->wb;
 	GList			*draw_list	= wb->draw_list;
-	
+
 	int			*x0		= NULL;
 	int			*y0		= NULL;
-	
+
 	if( BrushState != BRUSH_STATE_UP )
 	{
-		// Potential double-click DOWN to DOWN?
-		
-		g_print( "***Bad brush state transition %d to DOWN\n", BrushState );
-		
+		/* Potential double-click DOWN to DOWN? */
 		BrushState = BRUSH_STATE_DOWN;
-		
-		//return( FALSE );
+
+		/* return( FALSE ); */
 	}
-	
+
 	BrushState = BRUSH_STATE_DOWN;
-	
+
 	if( event->button == 1 && pixmap != NULL )
 	{
-		// Check if draw_list has contents; if so, clear it
+		/* Check if draw_list has contents; if so, clear it */
 		if( draw_list )
 			draw_list = gaim_whiteboard_draw_list_destroy( draw_list );
-		
+
 		x0		= g_new0( int, 1 );
 		y0		= g_new0( int, 1 );
-		
+
 		*x0		= event->x;
 		*y0		= event->y;
-		
-		// Set tracking variables
+
+		/* Set tracking variables */
 		LastX		= *x0;
 		LastY		= *y0;
-		
+
 		MotionCount	= 0;
-		
+
 		draw_list	= g_list_append( draw_list, ( gpointer )( x0 ) );
 		draw_list	= g_list_append( draw_list, ( gpointer )( y0 ) );
-		
+
 		gaim_gtk_whiteboard_draw_brush_point( gtkwb->wb,
 						      event->x, event->y,
-						      0,5 );//gtkwb->brush_color, gtkwb->brush_size ); NOTE temp const prot uiop
+						      0,5 );
+		/* gtkwb->brush_color, gtkwb->brush_size ); NOTE temp const prot uiop */
 	}
-	
+
 	wb->draw_list = draw_list;
-	
+
 	return( TRUE );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 gboolean gaim_gtk_whiteboard_brush_motion( GtkWidget *widget, GdkEventMotion *event, gpointer data )
-{	
+{
 	int			x;
 	int			y;
 	int			*dx;
 	int			*dy;
-	
+
 	GdkModifierType		state;
-	
+
 	GaimGtkWhiteboard	*gtkwb		= ( GaimGtkWhiteboard* )( data );
-	//g_print( "gaim_gtk_whiteboard_brush_motion | %s\n", gtkwb->wb->who );
 	GdkPixmap		*pixmap		= gtkwb->pixmap;
-	
+
 	GaimWhiteboard		*wb		= gtkwb->wb;
 	GList			*draw_list	= wb->draw_list;
 
@@ -433,28 +444,30 @@
 		y	= event->y;
 		state	= event->state;
 	}
-	
+
 	if( state & GDK_BUTTON1_MASK && pixmap != NULL )
-	{	
+	{
 		if( ( BrushState != BRUSH_STATE_DOWN ) && ( BrushState != BRUSH_STATE_MOTION ) )
 		{
 			g_print( "***Bad brush state transition %d to MOTION\n", BrushState );
-			
+
 			BrushState = BRUSH_STATE_MOTION;
-			
+
 			return( FALSE );
 		}
 		BrushState = BRUSH_STATE_MOTION;
-		
+
 		dx	= g_new0( int, 1 );
 		dy	= g_new0( int, 1 );
-		
+
 		*dx	= x - LastX;
 		*dy	= y - LastY;
-		
+
 		MotionCount++;
-		
-		// NOTE 100 is a temporary constant for how many deltas/motions in a stroke (needs UI Ops?)
+
+		/* NOTE 100 is a temporary constant for how many deltas/motions in a
+		 * stroke (needs UI Ops?)
+		 */
 		if( MotionCount == 100 )
 		{
 			int *x0			= g_new0( int, 1 );
@@ -462,122 +475,120 @@
 
 			draw_list = g_list_append( draw_list, ( gpointer )( dx ) );
 			draw_list = g_list_append( draw_list, ( gpointer )( dy ) );
-			
-			// Send draw list to prpl draw_list handler
+
+			/* Send draw list to prpl draw_list handler */
 			if( gtkwb->wb->prpl_ops && gtkwb->wb->prpl_ops->send_draw_list )
 				gtkwb->wb->prpl_ops->send_draw_list( gtkwb->wb, draw_list );
-			
-			// The brush stroke is finished, clear the list for another one
+
+			/* The brush stroke is finished, clear the list for another one */
 			if( draw_list )
 				draw_list = gaim_whiteboard_draw_list_destroy( draw_list );
-			
+
 			*x0			= LastX;
 			*y0			= LastY;
-		
-			// Reset motion tracking
+
+			/* Reset motion tracking */
 			MotionCount		= 0;
-			
+
 			draw_list		= g_list_append( draw_list, ( gpointer )( x0 ) );
 			draw_list		= g_list_append( draw_list, ( gpointer )( y0 ) );
 
 			dx	= g_new0( int, 1 );
 			dy	= g_new0( int, 1 );
-			
+
 			*dx	= x - LastX;
 			*dy	= y - LastY;
 		}
-		
+
 		draw_list = g_list_append( draw_list, ( gpointer )( dx ) );
 		draw_list = g_list_append( draw_list, ( gpointer )( dy ) );
-		
+
 		gaim_gtk_whiteboard_draw_brush_line( gtkwb->wb,
 						     LastX, LastY,
 						     x, y,
-						     0, 5 );//gtkwb->brush_color, gtkwb->brush_size ); temp const proto ui ops?
-		
-		// Set tracking variables
+						     0, 5 );
+		/*gtkwb->brush_color, gtkwb->brush_size ); temp const proto ui ops? */
+
+		/* Set tracking variables */
 		LastX = x;
 		LastY = y;
 	}
-	
+
 	wb->draw_list = draw_list;
- 
+
 	return( TRUE );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 gboolean gaim_gtk_whiteboard_brush_up( GtkWidget *widget, GdkEventButton *event, gpointer data )
 {
 	GaimGtkWhiteboard	*gtkwb		= ( GaimGtkWhiteboard* )( data );
-	//g_print( "gaim_gtk_whiteboard_brush_up | %s\n", gtkwb->wb->who );
 	GdkPixmap		*pixmap		= gtkwb->pixmap;
-	
+
 	GaimWhiteboard		*wb		= gtkwb->wb;
 	GList			*draw_list	= wb->draw_list;
-	
+
 	if( ( BrushState != BRUSH_STATE_DOWN ) && ( BrushState != BRUSH_STATE_MOTION ) )
 	{
 		g_print( "***Bad brush state transition %d to UP\n", BrushState );
-		
+
 		BrushState = BRUSH_STATE_UP;
-		
+
 		return( FALSE );
 	}
 	BrushState = BRUSH_STATE_UP;
-	
+
 	if( event->button == 1 && pixmap != NULL )
 	{
-		// If the brush was never moved, express two sets of two deltas
-		// That's a 'point,' but not for Yahoo!
-		//if( ( event->x == LastX ) && ( event->y == LastY ) )
+		/* If the brush was never moved, express two sets of two deltas That's a
+		 * 'point,' but not for Yahoo!
+		 */
+		/* if( ( event->x == LastX ) && ( event->y == LastY ) ) */
 		if( MotionCount == 0 )
 		{
 			int index;
-			
-			for( index = 0; index < 2; index++ )	// NOTE Yahoo Doodle specific!
+
+			for( index = 0; index < 2; index++ )/* NOTE Yahoo Doodle specific! */
 			{
 				int *x0		= NULL;
 				int *y0		= NULL;
-			
+
 				x0		= g_new0( int, 1 );
 				y0		= g_new0( int, 1 );
-			
+
 				draw_list	= g_list_append( draw_list, ( gpointer )( x0 ) );
 				draw_list	= g_list_append( draw_list, ( gpointer )( y0 ) );
 			}
 		}
-		//else
-		//	MotionCount = 0;
-		
-		// Send draw list to prpl draw_list handler
+		/*
+		else
+			MotionCount = 0;
+		*/
+
+		/* Send draw list to prpl draw_list handler */
 		if( gtkwb->wb->prpl_ops && gtkwb->wb->prpl_ops->send_draw_list )
 			gtkwb->wb->prpl_ops->send_draw_list( gtkwb->wb, draw_list );
-		
+
 		gaim_gtk_whiteboard_set_canvas_as_icon( gtkwb );
-		
-		// The brush stroke is finished, clear the list for another one
+
+		/* The brush stroke is finished, clear the list for another one */
 		if( draw_list )
 			draw_list = gaim_whiteboard_draw_list_destroy( draw_list );
-		
+
 		wb->draw_list = draw_list;
 	}
-	
+
 	return( TRUE );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
-// void gaim_gtk_whiteboard_draw_brush_point( GtkWidget *widget, GaimGtkWhiteboard *gtkwb,
-// 					  int x, int y, int color, int size )
+/* void gaim_gtk_whiteboard_draw_brush_point( GtkWidget *widget, GaimGtkWhiteboard *gtkwb,
+					  int x, int y, int color, int size )
+*/
 void gaim_gtk_whiteboard_draw_brush_point( GaimWhiteboard *wb, int x, int y, int color, int size )
 {
-	//g_print( "goodle_doodle_session_draw_brush | %s\n", ds->who );
-	
 	GaimGtkWhiteboard	*gtkwb	= wb->ui_data;
 	GtkWidget		*widget	= gtkwb->drawing_area;
 	GdkPixmap 		*pixmap	= gtkwb->pixmap;
-			
+
 	GdkRectangle		update_rect;
 
 	GdkGC			*gfx_con = gdk_gc_new( pixmap );
@@ -587,17 +598,19 @@
 	update_rect.y		= y - size / 2;
 	update_rect.width	= size;
 	update_rect.height	= size;
-	
-	// Interpret and convert color
+
+	/* Interpret and convert color */
 	gaim_gtk_whiteboard_rgb24_to_rgb48( color, &col );
-	
+
 	gdk_gc_set_rgb_fg_color( gfx_con, &col );
-	//gdk_gc_set_rgb_bg_color( gfx_con, &col );
-	
-	// NOTE 5 is a size constant for now... this is because of how poorly the gdk_draw_arc draws small circles
+	/* gdk_gc_set_rgb_bg_color( gfx_con, &col ); */
+
+	/* NOTE 5 is a size constant for now... this is because of how poorly the
+	 * gdk_draw_arc draws small circles
+	 */
 	if( size < 5 )
 	{
-		// Draw a rectangle/square
+		/* Draw a rectangle/square */
 		gdk_draw_rectangle( pixmap,
 				    gfx_con,
 				    TRUE,
@@ -606,7 +619,7 @@
 	}
 	else
 	{
-		// Draw a circle
+		/* Draw a circle */
 		gdk_draw_arc( pixmap,
 			      gfx_con,
 			      TRUE,
@@ -614,25 +627,25 @@
 			      update_rect.width, update_rect.height,
 			      0, FULL_CIRCLE_DEGREES );
 	}
-	
+
 	gtk_widget_queue_draw_area( widget, 
 				    update_rect.x, update_rect.y,
 				    update_rect.width, update_rect.height );
-	
+
 	gdk_gc_unref( gfx_con );
 }
 
-// ------------------------------------------------------------------------------------------------------
-// Uses Bresenham's algorithm (as provided by Wikipedia)
-// void gaim_gtk_whiteboard_draw_brush_line( GtkWidget *widget, GaimGtkWhiteboard *gtkwb,
-// 					 int x0, int y0, int x1, int y1, int color, int size )
+/* Uses Bresenham's algorithm (as provided by Wikipedia) */
+/* void gaim_gtk_whiteboard_draw_brush_line( GtkWidget *widget, GaimGtkWhiteboard *gtkwb,
+ 					 int x0, int y0, int x1, int y1, int color, int size )
+*/
 void gaim_gtk_whiteboard_draw_brush_line( GaimWhiteboard *wb, int x0, int y0, int x1, int y1, int color, int size )
-{	
+{
 	int temp;
-	
+
 	int xstep;
 	int ystep;
-	
+
 	int dx;
 	int dy;
 
@@ -643,48 +656,48 @@
 	int y;
 
 	gboolean steep = abs( y1 - y0 ) > abs( x1 - x0 );
-	
+
 	if( steep )
 	{
 		temp = x0; x0 = y0; y0 = temp;
-		temp = x1; x1 = y1; y1 = temp;	
+		temp = x1; x1 = y1; y1 = temp;
 	}
-	
+
 	dx		= abs( x1 - x0 );
 	dy		= abs( y1 - y0 );
-	
+
 	error	= 0;
 	derror	= dy;
-	
+
 	x		= x0;
 	y		= y0;
-	
+
 	if( x0 < x1 )
 		xstep = 1;
 	else
 		xstep = -1;
-	
+
 	if( y0 < y1 )
 		ystep = 1;
 	else
 		ystep = -1;
-	
+
 	if( steep )
 		gaim_gtk_whiteboard_draw_brush_point( wb, y, x, color, size );
 	else
 		gaim_gtk_whiteboard_draw_brush_point( wb, x, y, color, size );
-	
+
 	while( x != x1 )
 	{
 		x	= x + xstep;
 		error	= error + derror;
-		
+
 		if( ( error * 2 ) >= dx )
 		{
 			y	= y + ystep;
 			error	= error - dx;
 		}
-		
+
 		if( steep )
 			gaim_gtk_whiteboard_draw_brush_point( wb, y, x, color, size );
 		else
@@ -692,61 +705,53 @@
 	}
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height )
 {
 	GaimGtkWhiteboard *gtkwb = wb->ui_data;
-	
+
 	gtkwb->width	= width;
 	gtkwb->height	= height;
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_clear( GaimWhiteboard *wb )
 {
 	GaimGtkWhiteboard	*gtkwb		= wb->ui_data;
 	GdkPixmap		*pixmap		= gtkwb->pixmap;
 	GtkWidget		*drawing_area	= gtkwb->drawing_area;
-	
+
 	gdk_draw_rectangle( pixmap,
 			    drawing_area->style->white_gc,
 			    TRUE,
 			    0, 0,
 			    drawing_area->allocation.width, drawing_area->allocation.height );
-		
+
 	gtk_widget_queue_draw_area( drawing_area,
 				    0, 0,
 				    drawing_area->allocation.width, drawing_area->allocation.height );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_button_clear_press( GtkWidget *widget, gpointer data )
 {
 	GaimGtkWhiteboard	*gtkwb	= ( GaimGtkWhiteboard* )( data );
-	
+
 	gaim_gtk_whiteboard_clear( gtkwb->wb );
-	
+
 	gaim_gtk_whiteboard_set_canvas_as_icon( gtkwb );
-	
-	// Do protocol specific clearing procedures
+
+	/* Do protocol specific clearing procedures */
 	if( gtkwb->wb->prpl_ops && gtkwb->wb->prpl_ops->clear )
 		gtkwb->wb->prpl_ops->clear( gtkwb->wb );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_button_save_press( GtkWidget *widget, gpointer data )
 {
 	GaimGtkWhiteboard	*gtkwb	= ( GaimGtkWhiteboard* )( data );
 	GdkPixbuf		*pixbuf;
-	
+
 	GtkWidget *dialog;
 
 	int result;
-	
+
 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	dialog = gtk_file_chooser_dialog_new ("Save File",
 					      GTK_WINDOW(gtkwb->window),
@@ -754,16 +759,18 @@
 					      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 					      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
 					      NULL );
-	
-	//gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER( dialog ), (gboolean)(TRUE) );
+
+	/* gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER( dialog ), (gboolean)(TRUE) ); */
 
-//	if( user_edited_a_new_document )
+/*	if( user_edited_a_new_document ) */
 	{
-//		gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( dialog ), default_folder_for_saving );
+/*		gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( dialog ), default_folder_for_saving ); */
 		gtk_file_chooser_set_current_name( GTK_FILE_CHOOSER( dialog ), "whiteboard.jpg" );
 	}
-//	else
-//		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), filename_for_existing_document);
+/*
+	else
+		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), filename_for_existing_document);
+*/
 #else
 	dialog = gtk_file_selection_new("Save File");
 	gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog), "whiteboard.jpg");
@@ -773,22 +780,22 @@
 	if( result == GTK_RESPONSE_ACCEPT )
 	{
 		char *filename;
-		
+
 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 		filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER( dialog ) );
 #else
 		filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog)));
 #endif
 		gtk_widget_destroy( dialog );
-		
-		// Makes an icon from the whiteboard's canvas 'image'
+
+		/* Makes an icon from the whiteboard's canvas 'image' */
 		pixbuf = gdk_pixbuf_get_from_drawable( NULL,
 						( GdkDrawable* )( gtkwb->pixmap ),
 						gdk_drawable_get_colormap( gtkwb->pixmap ),
 						0, 0,
 						0, 0,
 						gtkwb->width, gtkwb->height );
-		
+
 		if( gdk_pixbuf_save( pixbuf,
 		    		     filename,
 				     "jpeg",
@@ -803,32 +810,28 @@
 	}
 	else
 	if( result == GTK_RESPONSE_CANCEL )
-	{	
+	{
 		gtk_widget_destroy( dialog );
-		
+
 		g_print( "File not Saved... Canceled\n" );
 	}
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_set_canvas_as_icon( GaimGtkWhiteboard *gtkwb )
 {
 	GdkPixbuf *pixbuf;
-	
-	// Makes an icon from the whiteboard's canvas 'image'
+
+	/* Makes an icon from the whiteboard's canvas 'image' */
 	pixbuf = gdk_pixbuf_get_from_drawable( NULL,
 					       ( GdkDrawable* )( gtkwb->pixmap ),
 					       gdk_drawable_get_colormap( gtkwb->pixmap ),
 					       0, 0,
 					       0, 0,
 					       gtkwb->width, gtkwb->height );
-	
+
 	gtk_window_set_icon( ( GtkWindow* )( gtkwb->window ), pixbuf );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_gtk_whiteboard_rgb24_to_rgb48( int color_rgb, GdkColor *color )
 {
 	color->red	= ( color_rgb >> 8 ) | 0xFF;
@@ -836,5 +839,3 @@
 	color->blue	= ( ( color_rgb & 0xFF ) << 8 ) | 0xFF;
 }
 
-// ------------------------------------------------------------------------------------------------------
-
--- a/src/gtkwhiteboard.h	Mon Oct 24 21:48:21 2005 +0000
+++ b/src/gtkwhiteboard.h	Mon Oct 24 22:45:24 2005 +0000
@@ -25,13 +25,10 @@
 #ifndef _GAIM_GTKWHITEBOARD_H_
 #define _GAIM_GTKWHITEBOARD_H_
 
-// INCLUDES ============================================================================================
 #include "gtkgaim.h"
 
 #include "whiteboard.h"
 
-// DEFINES =============================================================================================
-
 #define FULL_CIRCLE_DEGREES		23040
 
 #define BRUSH_STATE_UP			0
@@ -40,50 +37,42 @@
 
 #define PALETTE_NUM_COLORS		7
 
-// DATATYPES ===========================================================================================
+/**
+ * A GaimGtkWhiteboard
+ */
 typedef struct _GaimGtkWhiteboard
 {
-	GaimWhiteboard	*wb;		// backend data for this whiteboard
-	
-	GtkWidget	*window;	// Window for the Doodle session
-	GtkWidget	*drawing_area;	// Drawing area
-	
-	GdkPixmap	*pixmap;	// Memory for drawing area
-	
-	int		width;		// Canvas width
-	int		height;		// Canvas height
+	GaimWhiteboard	*wb;		/**< backend data for this whiteboard */
+
+	GtkWidget	*window;	/**< Window for the Doodle session */
+	GtkWidget	*drawing_area;	/**< Drawing area */
+
+	GdkPixmap	*pixmap;	/**< Memory for drawing area */
+
+	int		width;		/**< Canvas width */
+	int		height;		/**< Canvas height */
 } GaimGtkWhiteboard;
 
-// PROTOTYPES ==========================================================================================
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
 
+/*****************************************************************************/
+/** @name GaimGtkWhiteboard API                                              */
+/*****************************************************************************/
+/*@{*/
+
+/**
+ * Gets the GtkWhiteboard UI Operations.
+ *
+ * @return The GtkWhiteboard UI Operations.
+ */
 GaimWhiteboardUiOps	*gaim_gtk_whiteboard_get_ui_ops( void );
 
-void			gaim_gtk_whiteboard_create( GaimWhiteboard *wb );
-void			gaim_gtk_whiteboard_destroy( GaimWhiteboard *wb );
-void			gaim_gtk_whiteboard_exit( GtkWidget *widget, gpointer data );
-
-//void			gaim_gtkwhiteboard_button_start_press( GtkButton *button, gpointer data );
-
-gboolean		gaim_gtk_whiteboard_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer data );
-gboolean		gaim_gtk_whiteboard_expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer data );
-
-gboolean		gaim_gtk_whiteboard_brush_down( GtkWidget *widget, GdkEventButton *event, gpointer data );
-gboolean		gaim_gtk_whiteboard_brush_motion( GtkWidget *widget, GdkEventMotion *event, gpointer data );
-gboolean		gaim_gtk_whiteboard_brush_up( GtkWidget *widget, GdkEventButton *event, gpointer data );
+/*@}*/
 
-void			gaim_gtk_whiteboard_draw_brush_point( GaimWhiteboard *wb,
-							      int x, int y, int color, int size );
-void			gaim_gtk_whiteboard_draw_brush_line( GaimWhiteboard *wb,
-							     int x0, int y0, int x1, int y1, int color, int size );
-
-void			gaim_gtk_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height );
-void			gaim_gtk_whiteboard_clear( GaimWhiteboard *wb );
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
 
-void			gaim_gtk_whiteboard_button_clear_press( GtkWidget *widget, gpointer data );
-void			gaim_gtk_whiteboard_button_save_press( GtkWidget *widget, gpointer data );
-
-void			gaim_gtk_whiteboard_set_canvas_as_icon( GaimGtkWhiteboard *gtkwb );
-
-void			gaim_gtk_whiteboard_rgb24_to_rgb48( int color_rgb, GdkColor *color );
-
-#endif // _GAIM_GTKWHITEBOARD_H_
+#endif /* _GAIM_GTKWHITEBOARD_H_ */
--- a/src/whiteboard.c	Mon Oct 24 21:48:21 2005 +0000
+++ b/src/whiteboard.c	Mon Oct 24 22:45:24 2005 +0000
@@ -21,197 +21,165 @@
  *
  */
 
-// INCLUDES =============================================================================================
-
 #include <string.h>
 
 #include "whiteboard.h"
 #include "prpl.h"
 
-// DATATYPES ============================================================================================
-
-// GLOBALS ==============================================================================================
-
+/******************************************************************************
+ * Globals
+ *****************************************************************************/
 static GaimWhiteboardUiOps	*whiteboard_ui_ops	= NULL;
-//static GaimWhiteboardPrplOps	*whiteboard_prpl_ops	= NULL;
+/* static GaimWhiteboardPrplOps	*whiteboard_prpl_ops	= NULL; */
 
 static GList			*wbList			= NULL;
 
-//static gboolean		auto_accept		= TRUE;
+/*static gboolean		auto_accept		= TRUE; */
 
-// FUNCTIONS ============================================================================================
-
+/******************************************************************************
+ * API
+ *****************************************************************************/
 void gaim_whiteboard_set_ui_ops( GaimWhiteboardUiOps *ops )
 {
 	whiteboard_ui_ops = ops;
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_whiteboard_set_prpl_ops( GaimWhiteboard *wb, GaimWhiteboardPrplOps *ops )
 {
 	wb->prpl_ops = ops;
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 GaimWhiteboard *gaim_whiteboard_create( GaimAccount *account, char *who, int state )
 {
-	//g_print( "gaim_whiteboard_create()\n" );
-	
 	GaimPluginProtocolInfo *prpl_info;
 	GaimWhiteboard *wb	= g_new0( GaimWhiteboard, 1 );
 
 	wb->account		= account;
 	wb->state		= state;
 	wb->who			= g_strdup( who );
-	
+
 	prpl_info = GAIM_PLUGIN_PROTOCOL_INFO( account->gc->prpl );
 	gaim_whiteboard_set_prpl_ops( wb, prpl_info->whiteboard_prpl_ops );
-	
-	// Start up protocol specifics
+
+	/* Start up protocol specifics */
 	if( wb->prpl_ops && wb->prpl_ops->start )
 		wb->prpl_ops->start( wb );
-	
+
 	wbList			= g_list_append( wbList, ( gpointer )( wb ) );
-	
+
 	return( wb );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_whiteboard_destroy( GaimWhiteboard *wb )
 {
-	//g_print( "gaim_whiteboard_destroy()\n" );
-
 	if( wb->ui_data )
 	{
-		//g_print( "---wb->ui_data = %p\n", wb->ui_data );
-		
-		// Destroy frontend
+		/* Destroy frontend */
 		if( whiteboard_ui_ops && whiteboard_ui_ops->destroy )
 			whiteboard_ui_ops->destroy( wb );
 	}
-	
-	// Do protocol specific session ending procedures
+
+	/* Do protocol specific session ending procedures */
 	if( wb->prpl_ops && wb->prpl_ops->end )
 		wb->prpl_ops->end( wb );
-	
+
 	if( wb )
 	{
-		//g_print( "---wb = %p\n", wb );
-		
 		wb->account	= NULL;
 		wb->state	= 0;
-	
+
 		if( wb->who )
 			g_free( wb->who );
-			
+
 		wbList = g_list_remove( wbList, wb );
-		
+
 		g_free( wb );
 		wb = NULL;
 	}
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_whiteboard_start( GaimWhiteboard *wb )
 {
-	//g_print( "gaim_whiteboard_start()\n" );
-	
-	// Create frontend for whiteboard
+	/* Create frontend for whiteboard */
 	if( whiteboard_ui_ops && whiteboard_ui_ops->create )
 		whiteboard_ui_ops->create( wb );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
-// Looks through the list of whiteboard sessions for one that is between usernames 'me' and 'who'
-// Returns a pointer to a matching whiteboard session; if none match, it returns NULL
+/* Looks through the list of whiteboard sessions for one that is between
+ * usernames 'me' and 'who'.  Returns a pointer to a matching whiteboard
+ * session; if none match, it returns NULL.
+ */
 GaimWhiteboard *gaim_whiteboard_get_session( GaimAccount *account, char *who )
 {
-	//g_print( "gaim_whiteboard_get_session()\n" );
-	
 	GaimWhiteboard	*wb	= NULL;
-	
+
 	GList		*l	= wbList;
-	
-	// Look for a whiteboard session between the local user and the remote user
+
+	/* Look for a whiteboard session between the local user and the remote
+	 * user
+	 */
 	while( l )
 	{
 		wb = l->data;
-		
-		if( !strcmp( gaim_account_get_username( wb->account ), gaim_account_get_username( account ) ) &&
+
+		if( !strcmp( gaim_account_get_username( wb->account ),
+					 gaim_account_get_username( account ) ) &&
 			     !strcmp( wb->who, who ) )
 			return( wb );
-		
-		l = l->next;	
+
+		l = l->next;
 	}
-	
+
 	return( NULL );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 GList *gaim_whiteboard_draw_list_destroy( GList *draw_list )
 {
-	//g_print( "gaim_whiteboard_draw_list_destroy()\n" );
-	
 	if( draw_list == NULL )
-		return( NULL );	
+		return( NULL );
 	else
 	{
-		// Destroy the contents of this list
+		/* Destroy the contents of this list */
 		int	*n = NULL;
 		GList	*l = draw_list;
 		while( l )
 		{
 			n = l->data;
-			
+
 			if( n )
 				g_free( n );
-			
+
 			l = l->next;
 		}
-		
+
 		g_list_free( draw_list );
 		draw_list = NULL;
 	}
-	
+
 	return( draw_list );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height )
 {
 	if( whiteboard_ui_ops && whiteboard_ui_ops->set_dimensions )
 		whiteboard_ui_ops->set_dimensions( wb, width, height );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_whiteboard_draw_point( GaimWhiteboard *wb, int x, int y, int color, int size )
 {
 	if( whiteboard_ui_ops && whiteboard_ui_ops->draw_point )
 		whiteboard_ui_ops->draw_point( wb, x, y, color, size );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_whiteboard_draw_line( GaimWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size )
 {
 	if( whiteboard_ui_ops && whiteboard_ui_ops->draw_line )
 		whiteboard_ui_ops->draw_line( wb, x1, y1, x2, y2, color, size );
 }
 
-// ------------------------------------------------------------------------------------------------------
-
 void gaim_whiteboard_clear( GaimWhiteboard *wb )
 {
 	if( whiteboard_ui_ops && whiteboard_ui_ops->clear )
 		whiteboard_ui_ops->clear( wb );
 }
 
-// ------------------------------------------------------------------------------------------------------
--- a/src/whiteboard.h	Mon Oct 24 21:48:21 2005 +0000
+++ b/src/whiteboard.h	Mon Oct 24 22:45:24 2005 +0000
@@ -25,64 +25,160 @@
 #ifndef _GAIM_WHITEBOARD_H_
 #define _GAIM_WHITEBOARD_H_
 
-// DEFINES =============================================================================================
-
-typedef struct _GaimWhiteboardPrplOps GaimWhiteboardPrplOps;	// NOTE A nasty compiler dependency fix
+/**
+ * Whiteboard PRPL Operations
+ */
+typedef struct _GaimWhiteboardPrplOps GaimWhiteboardPrplOps;
 
 #include "account.h"
 
-// INCLUDES ============================================================================================
-
-// DATATYPES ===========================================================================================
+/**
+ * A GaimWhiteboard
+ */
 typedef struct _GaimWhiteboard
 {
-	int			state;		// State of whiteboard session
-	
-	GaimAccount		*account;	// Account associated with this session
-	char			*who;		// Name of the remote user
-	
-	void			*ui_data;	// Graphical user-interface data
-	void			*proto_data;	// Protocol specific data
-	GaimWhiteboardPrplOps	*prpl_ops;	// Protocol-plugin operations
-	
-	GList			*draw_list;	// List of drawing elements/deltas to send
+	int			state;		/**< State of whiteboard session */
+
+	GaimAccount		*account;	/**< Account associated with this session */
+	char			*who;		/**< Name of the remote user */
+
+	void			*ui_data;	/**< Graphical user-interface data */
+	void			*proto_data;	/**< Protocol specific data */
+	GaimWhiteboardPrplOps	*prpl_ops;	/**< Protocol-plugin operations */
+
+	GList			*draw_list;	/**< List of drawing elements/deltas to send */
 } GaimWhiteboard;
 
+/**
+ * The GaimWhiteboard UI Operations
+ */
 typedef struct _GaimWhiteboardUiOps
 {
-	void ( *create )( GaimWhiteboard *wb );
-	void ( *destroy )( GaimWhiteboard *wb );
-	void ( *set_dimensions)( GaimWhiteboard *wb, int width, int height );
-	void ( *draw_point )( GaimWhiteboard *wb, int x, int y, int color, int size );
-	void ( *draw_line )( GaimWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size );
-	void ( *clear )( GaimWhiteboard *wb );
+	void ( *create )( GaimWhiteboard *wb ); /**< create function */
+	void ( *destroy )( GaimWhiteboard *wb ); /**< destory function */
+	void ( *set_dimensions)( GaimWhiteboard *wb, int width, int height ); /**< set_dimensions function */
+	void ( *draw_point )( GaimWhiteboard *wb, int x, int y, int color, int size ); /**< draw_point function */
+	void ( *draw_line )( GaimWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size ); /**< draw_line function */
+	void ( *clear )( GaimWhiteboard *wb ); /**< clear function */
 } GaimWhiteboardUiOps;
 
+/**
+ * GaimWhiteboard PRPL Operations
+ */
 struct _GaimWhiteboardPrplOps
 {
-	void ( *start )( GaimWhiteboard *wb );
-	void ( *end )( GaimWhiteboard *wb );
-	void ( *get_dimensions )( GaimWhiteboard *wb, int *width, int *height );
-	void ( *set_dimensions )( GaimWhiteboard *wb, int width, int height );
-	void ( *send_draw_list )( GaimWhiteboard *wb, GList *draw_list );
-	void ( *clear )( GaimWhiteboard *wb );
+	void ( *start )( GaimWhiteboard *wb ); /**< start function */
+	void ( *end )( GaimWhiteboard *wb ); /**< end function */
+	void ( *get_dimensions )( GaimWhiteboard *wb, int *width, int *height ); /**< get_dimensions function */
+	void ( *set_dimensions )( GaimWhiteboard *wb, int width, int height );  /**< set_dimensions function */
+	void ( *send_draw_list )( GaimWhiteboard *wb, GList *draw_list ); /**< send_draw_list function */
+	void ( *clear )( GaimWhiteboard *wb ); /**< clear function */
 };
 
-// PROTOTYPES ==========================================================================================
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
 
+/******************************************************************************/
+/** @name GaimWhiteboard API                                                  */
+/******************************************************************************/
+/*@{*/
+
+/**
+ * Sets the UI Operations
+ *
+ * @param ops The UI Operations to set
+ */
 void		gaim_whiteboard_set_ui_ops( GaimWhiteboardUiOps *ops );
 
+/**
+ * Creates a whiteboard
+ *
+ * @param account The account.
+ * @param who     Who you're drawing with.
+ * @param state   The state.
+ *
+ * @return The new whiteboard
+ */
 GaimWhiteboard	*gaim_whiteboard_create( GaimAccount *account, char *who, int state );
+
+/**
+ * Destroys a whiteboard
+ *
+ * @param wb The whiteboard.
+ */
 void		gaim_whiteboard_destroy( GaimWhiteboard *wb );
+
+/**
+ * Starts a whiteboard
+ *
+ * @param wb The whiteboard.
+ */
 void		gaim_whiteboard_start( GaimWhiteboard *wb );
 
+/**
+ * Finds a whiteboard from an account and user.
+ *
+ * @param account The account.
+ * @param who     The user.
+ *
+ * @return The whiteboard if found, otherwise @c NULL.
+ */
 GaimWhiteboard	*gaim_whiteboard_get_session( GaimAccount *account, char *who );
 
+/**
+ * Destorys a drawing list for a whiteboard
+ *
+ * @param draw_list The drawing list.
+ *
+ * @return The start of the new drawing list (?)
+ */
 GList		*gaim_whiteboard_draw_list_destroy( GList *draw_list );
 
+/**
+ * Sets the dimensions for a whiteboard.
+ *
+ * @param wb     The whiteboard.
+ * @param width  The width.
+ * @param height The height.
+ */
 void		gaim_whiteboard_set_dimensions( GaimWhiteboard *wb, int width, int height );
+
+/**
+ * Draws a point on a whiteboard.
+ *
+ * @param wb    The whiteboard.
+ * @param x     The x coordinate.
+ * @param y     The y coordinate.
+ * @param color The color to use.
+ * @param size  The brush size.
+ */
 void		gaim_whiteboard_draw_point( GaimWhiteboard *wb, int x, int y, int color, int size );
+
+/**
+ * Draws a line on a whiteboard
+ *
+ * @param wb    The whiteboard.
+ * @param x1    The top-left x coordinate.
+ * @param y1    The top-left y coordinate.
+ * @param x2    The bottom-right x coordinate.
+ * @param y2    The bottom-right y coordinate.
+ * @param color The color to use.
+ * @param size  The brush size.
+ */
 void		gaim_whiteboard_draw_line( GaimWhiteboard *wb, int x1, int y1, int x2, int y2, int color, int size );
+
+/**
+ * Clears a whiteboard
+ *
+ * @param wb The whiteboard.
+ */
 void		gaim_whiteboard_clear( GaimWhiteboard *wb );
 
-#endif // _GAIM_WHITEBOARD_H_
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GAIM_WHITEBOARD_H_ */