Advertisement
Guest User

Untitled

a guest
Apr 25th, 2010
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.69 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <gtk/gtk.h>
  3.  
  4. /* Cria pixbuf a partir de um arquivo */
  5. GdkPixbuf *create_pixbuf_from_file(const gchar * filename) {
  6.     GdkPixbuf *pixbuf;
  7.     GError *error = NULL;
  8.     pixbuf = gdk_pixbuf_new_from_file(filename, &error);
  9.     if(!pixbuf) {
  10.         fprintf(stderr, "%s\n", error->message);
  11.         g_error_free(error);
  12.     }
  13.  
  14.     return pixbuf;
  15. }
  16.  
  17. /* Cria pixbuf a partir de um buffer */
  18. GdkPixbuf *create_pixbuf_from_buffer(const gchar * buffer) {
  19.     GdkPixbuf *pixbuf;
  20.     GError *error = NULL;
  21.     int width  = 640;
  22.     int height = 480;
  23.     pixbuf = gdk_pixbuf_new_from_data(buffer,
  24.                                       GDK_COLORSPACE_RGB,
  25.                                       FALSE,
  26.                                       8,
  27.                                       width,
  28.                                       height,
  29.                                       width * 3, // 3 bits por pixel
  30.                                       NULL,
  31.                                       NULL );
  32.     if(!pixbuf) {
  33.         fprintf(stderr, "%s\n", error->message);
  34.         g_error_free(error);
  35.     }
  36.  
  37.     return pixbuf;
  38. }
  39.  
  40. expose_event_callback (GtkWidget *widget, GdkEventExpose * event, gpointer data) {
  41.     gdk_draw_pixbuf (widget->window,
  42.                   widget->style->fg_gc[GTK_WIDGET_STATE (widget)], //Graphic Context
  43.                   pixbuf,
  44.                   0, 0, -1, -1,
  45.                   0, 64 * 360);
  46.     return TRUE;
  47. };
  48.  
  49. int main (int argc, char *argv[])
  50. {
  51.   /*Containers*/
  52.   GtkWidget *win = NULL;
  53.   GtkWidget *vbox;
  54.  
  55.   /*Menu*/
  56.   GtkWidget *menubarPrincipal;
  57.   GtkWidget *menuDropDown;
  58.   GtkWidget *arquivo;
  59.   GtkWidget *sair;
  60.  
  61.   GtkWidget *drwArea;
  62.  
  63.   /* Inicializa GTK+ */
  64.   g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
  65.   gtk_init (&argc, &argv);
  66.   g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
  67.  
  68.   /* Cria janela principal */
  69.   win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  70.   gtk_container_set_border_width (GTK_CONTAINER (win), 8);
  71.   gtk_window_set_title (GTK_WINDOW (win), "Watcher");
  72.   gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
  73.   gtk_window_maximize(GTK_WINDOW (win));
  74.   gtk_window_set_icon(GTK_WINDOW (win), create_pixbuf_from_file("images/icons/web.png"));
  75.   //gtk_widget_realize (win);
  76.  
  77.  
  78.  
  79.   /* Cria caixa vertical do menu principal */
  80.   vbox = gtk_vbox_new(FALSE, 0);
  81.   gtk_container_add(GTK_CONTAINER(win), vbox);
  82.  
  83.   /*Cria os menus*/
  84.   menubarPrincipal = gtk_menu_bar_new();
  85.   menuDropDown = gtk_menu_new();
  86.  
  87.   /*Cria os itens de menu */
  88.   // 1 - Menu principal
  89.   arquivo = gtk_menu_item_new_with_label("Arquivo");
  90.   // 2 - Submenus
  91.   sair = gtk_menu_item_new_with_label("Sair");
  92.  
  93.   /*Aplica menus dropDown nos menus principais*/
  94.   gtk_menu_item_set_submenu(GTK_MENU_ITEM(arquivo), menuDropDown);
  95.  
  96.   /* Posiciona os itens de menu no menuShell */
  97.   gtk_menu_shell_append(GTK_MENU_SHELL(menuDropDown), sair);
  98.   gtk_menu_shell_append(GTK_MENU_SHELL(menubarPrincipal), arquivo);
  99.  
  100.   /*Empacota tudo na caixa vertical*/
  101.   gtk_box_pack_start(GTK_BOX(vbox), menubarPrincipal, FALSE, FALSE, 0);
  102.  
  103.   /*Cria a Drawing Area */
  104.   drwArea = gtk_drawing_area_new();
  105.   gtk_widget_set_size_request(drwArea, 640, 480);
  106.  
  107.   gtk_container_add(GTK_CONTAINER(win), drwArea);
  108.  
  109.   /* Conecta os sinais aos eventos */
  110.   g_signal_connect (win, "destroy", gtk_main_quit, NULL);
  111.  
  112.   g_signal_connect(G_OBJECT(sair), "activate",
  113.         G_CALLBACK(gtk_main_quit), NULL);
  114.  
  115.   g_signal_connect(G_OBJECT(drwArea), "expose_event",
  116.         G_CALLBACK(expose_event_callback), NULL);
  117.  
  118.   /* Enter the main loop */
  119.   gtk_widget_show_all (win);
  120.   gtk_main ();
  121.   return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement