#include <gtk/gtk.h>
#include <string.h>

 GtkTextBuffer *t;
 GdkPixbuf *pixbuf[2];

 void		charger_pixbuf	();
 static void	Txt_Validate	(GtkWidget *w, GtkWidget *entry);
 void		add_text	(gchar *msg, gchar *couleur);
 void		add_img		(gchar *img);

/* =============================================================================
 * Point d' entrée
==============================================================================*/
int main(int argc, char **argv)
{
  GtkWidget *fen, *vbox, *TextView, *Txt;
   GdkColor color;

  gtk_init(&argc, &argv);

  fen = gtk_window_new       (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_default_size(GTK_WINDOW(fen), 400, 200);
  gtk_window_set_position    (GTK_WINDOW(fen), GTK_WIN_POS_CENTER_ALWAYS);
  g_signal_connect(G_OBJECT(fen), "destroy", G_CALLBACK(gtk_main_quit), NULL);

  vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (fen), vbox);

  TextView = gtk_text_view_new();
    t = gtk_text_view_get_buffer (GTK_TEXT_VIEW (TextView));
    gtk_box_pack_start (GTK_BOX (vbox), TextView, TRUE, TRUE, 0);

  Txt = gtk_entry_new ();
    gtk_entry_set_max_length (GTK_ENTRY (Txt), 255);
    gdk_color_parse ("#4D425E", &color);
    gtk_widget_modify_base (TextView, GTK_STATE_NORMAL, &color);
    gtk_entry_set_text(GTK_ENTRY (Txt), "eh:)oh:(:p");
    g_signal_connect (G_OBJECT(Txt), "activate",
                      G_CALLBACK(Txt_Validate),(gpointer)Txt);
    gtk_box_pack_start (GTK_BOX (vbox), Txt, FALSE, TRUE, 0);

  gtk_widget_show_all(fen);
  charger_pixbuf();
  gtk_main();

  return 0;
}
/*==============================================================================
  Presser Entrée pour envoyer un msg
 =============================================================================*/
static void Txt_Validate(GtkWidget *w, GtkWidget *entry)
{
  add_text ((gchar *)gtk_entry_get_text(GTK_ENTRY(entry)), "orange");
  gtk_entry_set_text (GTK_ENTRY(entry),"");
}
/*==============================================================================
  Ajoute du texte en couleur au TextView, et émoticones
==============================================================================*/
void add_text(gchar *msg, gchar *couleur)
{
  GtkTextTag *tag;
  GtkTextIter i;
  gint n,k,b=0;

  gchar mot[255]; //tampon d'injection
  gchar *sm = "()p"; // 16: de 0 à 15
          gtk_text_buffer_get_end_iter(t, &i);
  tag = gtk_text_buffer_create_tag(t, NULL, "foreground", couleur, NULL);
  for (n=0; n<strlen(msg); n++)
  {
    if (msg[n]==':')
    {
      for (k=0; k<3; k++)
      {
        if (msg[n+1]==sm[k])
        {
          if (b)
          {
           mot[b]=0; b=0;
           gtk_text_buffer_insert_with_tags(t, &i, mot, -1, tag, NULL);
          }
          gtk_text_buffer_insert_pixbuf (t, &i, pixbuf[k]);
          n++;
        }
      }
    }
    else mot[b++]=msg[n];
  }
  if (b>1)
  {
   mot[b]=0;
   gtk_text_buffer_insert_with_tags(t, &i, mot, -1, tag, NULL);
  }
  gtk_text_buffer_insert (t, &i, "\n", -1);

/*
  gtk_text_buffer_get_end_iter(t, &i);
  tag = gtk_text_buffer_create_tag(t, NULL, "foreground", couleur, NULL);
  gtk_text_buffer_insert_with_tags(t, &i, msg,-1, tag,NULL);
  gtk_text_buffer_insert (t, &i, "\n", -1);
*/
}
/* =============================================================================
   Charger Pixbuf
==============================================================================*/
void charger_pixbuf()
{
 // $ gdk-pixbuf-csource --raw --name=myimage_inline 1.png >> 1.c

 static const guint8 imglol[] ={
  "GdkP"	/* Pixbuf magic (0x47646b50) */
  "\0\0\2\360"	/* length: header (24) + pixel_data (728) */
  "\1\1\0\2"	/* pixdata_type (0x1010002) */
  "\0\0\0""4"	/* rowstride (52) */
  "\0\0\0\15"	/* width (13) */
  "\0\0\0\16"	/* height (14) */
  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
  "\0""8^z\377Jy\230\3778d\201\377\377\377\377\0\377\377\377\0\377\377\377"
  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\1\32-\377"
  "P\211\265\377\255\324\360\377\272\342\373\377\274\343\373\377\272\337"
  "\367\377\255\327\362\377P\213\267\377\1\35""0\377\377\377\377\0\377\377"
  "\377\0\377\377\377\0\1\25'\3775\202\301\377\225\315\363\377\230\325\373"
  "\377\230\323\371\377\230\317\364\377\230\311\356\377\230\312\360\377"
  "\225\315\363\3775\226\325\377\1\40""2\377\377\377\377\0\377\377\377\0"
  "\0N\222\377M\235\336\377X\221\267\377>l\210\377]\226\277\377r\267\353"
  "\377a\225\277\377>`|\377T\204\250\377M\254\355\377\0n\263\377\377\377"
  "\377\0\0""6`\377\0\201\336\377*\245\363\377']\177\377F\246\345\377'Z"
  "|\377L\245\346\377(Y|\377F\231\327\377&Uv\377*\220\336\377\0\204\342"
  "\377\0;e\377\0Dx\377\0\221\357\377\5\236\372\377\24s\262\377&\230\350"
  "\377\35~\303\377&\227\346\377\35\210\316\377&\234\354\377\24v\265\377"
  "\5\177\333\377\0q\317\377\0x\377\0Y\217\377"
  "\0\230\366\377\0\205\343\377\0}\332\377\0o\315\377\0p\316\377\0\200\336"
  "\377\0\215\353\377\0\217\355\377\0\201\337\377\0r\320\377\0h\306\377"
  "\0""9o\377\0X\216\377\3t\276\377F~\246\377H\177\250\377H{\244\377H\200"
  "\251\377H\202\253\377H\204\255\377H\177\247\377Hy\242\377H{\244\377\14"
  "\\\240\377\0>s\377\377\377\377\0\2`\246\377\313\316\320\377\377\377\377"
  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
  "\377\377\377\377\377\377\377\377\343\344\345\377\14c\237\377\377\377"
  "\377\0\377\377\377\0\0""2[\377:m\226\377\344\346\347\377\376\376\376"
  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
  "\356\357\357\377T\177\233\377\1""9`\377\377\377\377\0\377\377\377\0\377"
  "\377\377\0\10\77l\377@q\231\377\240\252\262\377\345\347\352\377\360\362"
  "\363\377\351\353\355\377\254\264\272\377N\177\237\377\22Ov\377\377\377"
  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\25;Z\377"
  ".n\236\377A\177\253\377W\206\252\377G\200\250\3776v\240\377\"Hc\377\377"
  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0""6"
  "66\377666\377///\377\"',\377\36.:\377#(,\377///\377666\377666\377\377"
  "\377\377\0\377\377\377\0"};
  pixbuf[0] = gdk_pixbuf_new_from_inline (728,imglol,TRUE,NULL);

 static const guint8 imgtux[] ={
  "GdkP"	/* Pixbuf magic (0x47646b50) */
  "\0\0\4\30"	/* length: header (24) + pixel_data (1024) */
  "\1\1\0\2"	/* pixdata_type (0x1010002) */
  "\0\0\0@"	/* rowstride (64) */
  "\0\0\0\20"	/* width (16) */
  "\0\0\0\20"	/* height (16) */
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\4\1\2\2\4\15\3\3"
  "\5\17\6\6\10\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\2\2\1\1\3P\1\1\3\342\12\12\13"
  "\354\23\23\23\217\2\2\5\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\2\20\14\14\15\271\16\16\17"
  "\377\35\35\36\377\16\16\17\372\1\1\3L\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\33GEC\312^W\77"
  "\377so^\377332\377\1\1\3z\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\1\33XF\32\306\315\246\26\377"
  "\310\251!\377I>\35\377\6\6\7\231\0\0\0\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\4%ZSC\321\304\247W\377"
  "\317\267z\377yul\377\16\16\17\330\2\2\3&\0\0\0\1\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\2\6\30\30\31\203\257\257\256"
  "\373\354\354\351\377\367\366\364\377\313\313\311\377\27\27\30\376\1\1"
  "\3\231\1\1\2\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
  "\1\5\5\6""4556\355\343\343\341\377\372\372\371\377\372\372\370\377\350"
  "\350\347\377aaa\377\11\11\12\371\1\1\3T\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\1\5\17\17\20\212\233\233\232\377\374\374\372\377"
  "\372\372\370\377\375\375\373\377\375\375\373\377\271\271\270\377\26\26"
  "\27\377\3\3\5\257\0\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12"
  "\10\2\37&#\32\341\312\311\307\377\373\373\371\377\370\370\367\377\375"
  "\375\373\377\375\375\373\377\305\304\300\377\27\27\30\377\5\5\6\314\0"
  "\0\1\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\266\204\11\30\261\203\11w\302"
  "\225\17\365\247\231n\377\347\347\346\377\372\372\371\377\375\375\373"
  "\377\372\371\365\377\301\250[\377#\34\13\377[H\14\326@3\4\36\0\0\0\1"
  "\0\0\0\0\0\0\0\0\0\0\0\1\266\205\12]\355\265\13\374\364\274\14\377\275"
  "\224\16\377{wi\377\374\374\372\377\375\375\373\377\345\343\336\377\322"
  "\244*\377\275\214\11\377\340\253\12\366\277\223\12hsW\10\4\0\0\0\0\0"
  "\0\0\0\0\0\0\5\241t\7\177\357\265\14\377\364\274\14\377\357\271\14\377"
  "\272\240R\377\310\310\307\377\266\266\265\377]YS\377\302\222\16\377\363"
  "\273\14\377\352\263\13\370\310\227\13\247V@\5\15\0\0\0\0\0\0\0\0\0\0"
  "\0\6^C\4U\213d\6\270\246y\7\340\301\214\11\365yT\10\353\26\26\26\311"
  "\15\15\15\304\17\12\3\315\235p\7\363\272\210\10\355kM\5\233\35\25\1\77"
  "\0\0\0\12\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\33\2\1\0C\12\7\0`!\26\1~\25\15"
  "\1q\0\0\0R\0\0\0L\1\1\0W\"\27\1}!\26\1p\2\1\0:\0\0\0\24\0\0\0\2\0\0\0"
  "\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\14\0\0\0\27\0\0\0\"\0\0\0\35\0\0\0\21"
  "\0\0\0\16\0\0\0\24\0\0\0\40\0\0\0\34\0\0\0\13\0\0\0\1\0\0\0\0\0\0\0\0"};
  pixbuf[1] = gdk_pixbuf_new_from_inline (1024,imgtux,TRUE,NULL);

 static const guint8 imgwin[] ={
  "GdkP"	/* Pixbuf magic (0x47646b50) */
  "\0\0\3\330"	/* length: header (24) + pixel_data (960) */
  "\1\1\0\2"	/* pixdata_type (0x1010002) */
  "\0\0\0@"	/* rowstride (64) */
  "\0\0\0\20"	/* width (16) */
  "\0\0\0\17"	/* height (15) */
  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\226A\377"
  "\366\317\260\377\362\276\231\377\346\302\262\377\377\377\377\0\377\377"
  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\337g\27"
  "\377\376\243R\377\377\226A\377\377i\5\377\343K\0\377\210$\11\377\377"
  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\225Y1\377\377\204"
  ")\377\377\247_\377\377\202/\377\372^\0\377\330B\0\377\177\32\14\377\377"
  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\334t/\377\377\223"
  ";\377\377\245]\377\377w\35\377\362U\0\377\316:\0\377\377\377\377\0\377"
  "\377\377\0e\207\0\377o\253\6\377\215\316\35\377\225\325(\377\210\323"
  "\4\377t\250\34\377\377\377\377\0ukg\377\370p\25\377\377\236O\377\377"
  "\236O\377\377o\17\377\346Q\0\377\276)\1\377\377\377\377\0Pw\2\377f\226"
  "\0\377z\300\0\377\265\3775\377\257\377%\377\202\324\0\377s\2249\377\377"
  "\377\377\0\222fM\377\377\207\35\377\377\260[\377\376\227<\377\377g\1"
  "\377\342J\0\377\224\32\6\377\377\377\377\0\\{\0\377o\242\0\377\221\334"
  "\0\377\302\377K\377\246\377\13\377|\303\0\377\377\377\377\0\377\377\377"
  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
  "\0\2505\10\377\377\377\377\0\377\377\377\0b\206\0\377m\254\0\377\251"
  "\377\3\377\302\377K\377\223\350\0\377h\242\2\377\377\377\377\0\377\377"
  "\377\0=^\263\377p\234\354\377\230\273\375\377z\245\375\377Hu\366\377"
  "\377\377\377\0\377\377\377\0Kr\7\377h\230\0\377y\276\0\377\260\377\27"
  "\377\271\3773\377\222\346\0\377Z\204\10\377\377\377\377\0;Eg\377Uy\377"
  "\377\235\257\377\377\223\252\377\377m\214\377\377;W\377\377\6\27\357"
  "\377\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0f\277\6\377"
  "O\235\11\377Bf\17\377\377\377\377\0\377\377\377\0AY\246\377e\206\377"
  "\377\243\266\377\377\207\236\377\377c\204\377\377+D\377\377\12\30\245"
  "\377\377\377\377\0\252\211\2\377\243z\13\377\377\377\377\0\377\377\377"
  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0Hf\330\377"
  "{\227\377\377\243\266\377\377{\227\377\377Ss\377\377\37""4\377\377\377"
  "\377\377\0\377\377\377\0\254\212\0\377\336\254\0\377\377\333I\377\377"
  "\345U\377\377\322\1\377\377\377\377\0\377\377\377\0\377\377\377\0Su\365"
  "\377\231\261\377\377\243\273\377\377u\225\377\377Ki\377\377\12\32\367"
  "\377\377\377\377\0\232\177\3\377\272\225\0\377\352\266\0\377\377\337"
  "o\377\377\330=\377\377\306\1\377td\26\377\377\377\377\0\377\377\377\0"
  "Zy\336\377F[\304\3770A\232\377\33;\307\377;T\353\377\7\26\316\377\377"
  "\377\377\0\235\202\0\377\306\236\0\377\377\307\5\377\377\343\201\377"
  "\377\314\31\377\365\276\0\377\377\377\377\0\377\377\377\0\377\377\377"
  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
  "\0\377\377\377\0\377\377\377\0\251\213\0\377\326\246\0\377\377\315\37"
  "\377\377\346o\377\377\314\1\377\322\244\4\377\377\377\377\0\377\377\377"
  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
  "\0\377\377\377\0\377\377\377\0\377\377\377\0\274\2458\377\346\271\37"
  "\377\362\317-\377\362\330C\377\341\266\"\377\226\210P\377\377\377\377"
  "\0\377\377\377\0\377\377\377\0"};
  pixbuf[2] = gdk_pixbuf_new_from_inline (960,imgwin,TRUE,NULL);

  
  // besoin d'exporter en png?
  //gdk_pixbuf_save (pixbuf[1], "test1.png", "png", NULL, NULL);
  // préfères jpg?
  //gdk_pixbuf_save (pixbuf[1], "test.jpg", "jpeg", NULL, "quality", "100", NULL);
  // ico?
  //gdk_pixbuf_save (pixbuf[1], "test.ico", "ico", NULL, "depth", "32", NULL);
}