diff src/conversation.c @ 337:f5b199e20d12

[gaim-migrate @ 347] Cheese first look at graphical smileys. These are subject to change quite a bit :0 committer: Tailor Script <tailor@pidgin.im>
author Rob Flynn <gaim@robflynn.com>
date Tue, 06 Jun 2000 09:36:12 +0000
parents 68637b451377
children 2434adbb8703
line wrap: on
line diff
--- a/src/conversation.c	Mon Jun 05 17:25:16 2000 +0000
+++ b/src/conversation.c	Tue Jun 06 09:36:12 2000 +0000
@@ -45,6 +45,10 @@
 #include "pixmaps/link.xpm"
 #include "pixmaps/strike.xpm"
 
+#include "pixmaps/smile_happy.xpm"
+#include "pixmaps/smile_sad.xpm"
+#include "pixmaps/smile_wink.xpm"
+
 int state_lock=0;
 
 GdkPixmap *dark_icon_pm = NULL;
@@ -837,18 +841,23 @@
         char *who = NULL;
         FILE *fd;
         char colour[10];
-
+	GdkBitmap *mask;
+	GdkPixmap *face;
+	int state;
+	int y;
+	int i;
+	char *smiley = g_malloc(5);
+	
         if (flags & WFLAG_SYSTEM) {
 
                 gtk_html_freeze(GTK_HTML(c->text));
         
                 gtk_html_append_text(GTK_HTML(c->text), what, 0);
-
-                gtk_html_append_text(GTK_HTML(c->text), "<BR>", 0);
+		
+		gtk_html_append_text(GTK_HTML(c->text), "<BR>", 0);
 
                 gtk_html_thaw(GTK_HTML(c->text));
 
-
                 if ((general_options & OPT_GEN_LOG_ALL) || find_log_info(c->name)) {
                         char *t1;
 
@@ -887,8 +896,98 @@
 
                 gtk_html_freeze(GTK_HTML(c->text));
 
-                gtk_html_append_text(GTK_HTML(c->text), buf, 0);
-                gtk_html_append_text(GTK_HTML(c->text), what, (display_options & OPT_DISP_IGNORE_COLOUR) ? HTML_OPTION_NO_COLOURS : 0);
+		y = 0;
+		state = 0;
+		buf2[0] = 0;
+
+
+		gtk_html_append_text(GTK_HTML(c->text), buf, 0);
+	
+		if (display_options & OPT_DISP_SHOW_SMILEY)
+		{
+			for (i = 0; i < strlen(what); i++)
+        		{
+               			buf2[y] = what[i];
+               			y++;
+
+		                if ((what[i] == ':') || (what[i] == ';'))
+               			{
+                       			if (state == 0)
+                        	  	{
+                                		smiley[state] = what[i];
+                                		state = 1;
+                        		}
+                        		else
+                                		state = 0;
+                		}
+                		else if ((what[i] == '-'))
+                		{
+                        		if (state == 1)
+                        		{
+                                		smiley[state] = what[i];
+                                		state = 2;
+                        		}
+                        		else
+                                		state = 0;
+                		}
+                		else if ((what[i] == ')') || (what[i] == '*') || (what[i] == '(') ||
+                         		(what[i] == 'p') || (what[i] == 'P') || (what[i] == '$') ||
+                         		(what[i] == '!') || (what[i] == 'D') || (what[i] == 'X') )
+                		{
+                        		if ( (state == 1) && (what[i] == ')') )
+                        		{
+                                		smiley[state] = what[i];
+                                		smiley[state+1] = 0;
+                                		buf2[y - state - 1] = 0;
+                                		y = 0;
+						face = gdk_pixmap_create_from_xpm_d(c->window->window, &mask, &c->window->style->white, smile_happy_xpm);	
+						gtk_html_append_text(GTK_HTML(c->text), buf2, (display_options & OPT_DISP_IGNORE_COLOUR) ? HTML_OPTION_NO_COLOURS : 0);
+						gtk_html_add_pixmap(GTK_HTML(c->text), face, 0);			
+                                		state = 0;
+                        		}
+                        		else if (state == 2)
+                        		{
+                                		smiley[state] = what[i];
+                                		smiley[state+1] = 0;
+                                		buf2[y - state - 1] = 0;
+                                		y = 0;
+
+						if (!strcasecmp(smiley, ":-("))
+						{
+							face = gdk_pixmap_create_from_xpm_d(c->window->window, &mask, &c->window->style->white, smile_sad_xpm);
+						}
+						else if (!strcasecmp(smiley, ";-)"))
+						{
+							face = gdk_pixmap_create_from_xpm_d(c->window->window, &mask, &c->window->style->white, smile_wink_xpm);
+						}
+						else
+						{
+							face = gdk_pixmap_create_from_xpm_d(c->window->window, &mask, &c->window->style->white, smile_happy_xpm);
+						}
+
+						gtk_html_append_text(GTK_HTML(c->text), buf2, (display_options & OPT_DISP_IGNORE_COLOUR) ? HTML_OPTION_NO_COLOURS : 0);
+						gtk_html_add_pixmap(GTK_HTML(c->text), face, 0);
+                                		state = 0;
+                        		}
+                        		else
+                                		state = 0;
+                		}
+               		 	else
+                		{
+                        		state = 0;
+                		}
+        		}
+
+			if (buf2)
+			{
+				buf2[y] = 0;
+				gtk_html_append_text(GTK_HTML(c->text), buf2, (display_options & OPT_DISP_IGNORE_COLOUR) ? HTML_OPTION_NO_COLOURS : 0);
+			}				
+		}
+		else
+		{
+			gtk_html_append_text(GTK_HTML(c->text), what, (display_options & OPT_DISP_IGNORE_COLOUR) ? HTML_OPTION_NO_COLOURS : 0);
+		}
 
                 gtk_html_append_text(GTK_HTML(c->text), "<BR>", 0);
 
@@ -927,7 +1026,7 @@
         if (general_options & OPT_GEN_POPUP_WINDOWS)
                 gdk_window_show(c->window->window);
 
-        
+	g_free(smiley);        
 	g_free(buf);
         g_free(buf2);
 }