Advertisement
Guest User

Untitled

a guest
Feb 17th, 2011
598
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.96 KB | None | 0 0
  1. <source lang="cpp">
  2. /* Example1.cpp */
  3. #include <cairo.h>
  4. #include <gtk/gtk.h>
  5.  
  6. #define UI_FILE "mainForm.glade"
  7.  
  8. // описание виджетов
  9. GtkBuilder *builder;
  10. GtkWidget *topWindow;
  11. GtkRadioButton *rbutRectangle, *rbutEllipse, *rbutTriangle;
  12. GtkDrawingArea *drawingarea;
  13.  
  14. // описание обработчиков сигналов
  15. extern "C" void topWindow_destroy_cb (GtkObject *object, gpointer user_data);
  16. extern "C" gboolean drawingarea_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data);
  17. extern "C" void rbutton_toggled_cb (GtkObject *object);
  18.  
  19. int main( int argc, char **argv )
  20. {
  21.     GError *error = NULL;
  22.  
  23.     // инициализация GTK+
  24.     gtk_init( &argc, &argv );
  25.  
  26.    // создание нового GtkBuilder объекта
  27.     builder = gtk_builder_new();
  28.  
  29.     // загрузка пользовательского интерфеса из файла, который мы создали в Glade
  30.     if( ! gtk_builder_add_from_file( builder, UI_FILE, &error ) )
  31.     {
  32.         g_warning( "%s", error->message );
  33.         g_free( error );
  34.         return( 1 );
  35.     }
  36.  
  37.    // связывание наших виджетов с описаннимем виджетов в GladeXML
  38.    topWindow = GTK_WIDGET(gtk_builder_get_object(builder, "topWindow"));
  39.    rbutRectangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutRectangle"));
  40.    rbutEllipse = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutEllipse"));
  41.    rbutTriangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutTriangle"));
  42.    drawingarea = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "drawingarea"));
  43.  
  44.    // связываем сигналы с объектами графического интерфейса
  45.    gtk_builder_connect_signals (builder, NULL);  
  46.  
  47.    // освобождение памяти
  48.    g_object_unref( G_OBJECT( builder ) );
  49.  
  50.    // Показываем форму и виджеты на ней
  51.    gtk_widget_show( topWindow );
  52.  
  53.    // запуск главного цикла приложения
  54.    gtk_main();
  55.  
  56.    return( 0 );
  57. }
  58.  
  59. // закрытие приложения
  60. void topWindow_destroy_cb (GtkObject *object, gpointer user_data)
  61. {
  62.  // завершаем главный цикл приложения
  63.  gtk_main_quit();
  64. }
  65.  
  66. // перерисовка холста
  67. gboolean drawingarea_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
  68. {
  69.   cairo_t *cr;
  70.  
  71.   cr = gdk_cairo_create (widget->window);
  72.   cairo_set_line_width (cr, 7);
  73.   cairo_set_source_rgb (cr, 0, 0, 0);
  74.  
  75.    // переключатель установлен на прямоугольник
  76.    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutRectangle)))
  77.    {  
  78.     // рисуем прямоугольник
  79.     cairo_rectangle (cr, 20, 20, 200, 100);
  80.     cairo_stroke_preserve(cr);
  81.     cairo_set_source_rgb(cr, 0, 0.8, 0);
  82.    }
  83.  
  84.    // переключатель установлен на эллипс
  85.    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutEllipse)))
  86.    {
  87.     // рисуем эллипс
  88.     cairo_arc(cr, 150, 100, 90, 0, 2 * 3.14);
  89.     cairo_stroke_preserve(cr);
  90.     cairo_set_source_rgb(cr, 0.8, 0, 0);
  91.    }
  92.  
  93.    // переключатель установлен на треугольник
  94.    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutTriangle)))
  95.    {
  96.     // рисуем треугольник
  97.     cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
  98.     cairo_move_to (cr, 40, 40);
  99.     cairo_line_to (cr, 200, 40);
  100.     cairo_line_to (cr, 120, 160);
  101.     cairo_line_to (cr, 40, 40);
  102.     cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND);
  103.     cairo_stroke_preserve(cr);
  104.     cairo_set_source_rgb(cr, 0.8, 0, 0.8);
  105.    }
  106.  
  107.   cairo_fill(cr);
  108.  
  109.   cairo_destroy(cr);
  110.  
  111.   return FALSE;
  112. }
  113.  
  114. void rbutton_toggled_cb (GtkObject *object)
  115. {
  116.  // перерисовка drawingarea
  117.  gtk_widget_queue_draw (GTK_WIDGET(drawingarea));
  118. }
  119. </source>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement