Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Здравствуйте, Ильгиз. Математика - царица наук (Карл Гаусс). Изучение математики начинается с детского сада, когда нас учат считать и выполнять простые арифметические операции. Любой, даже самый простейший алгоритм будет связан с арифметическими...
Я хотел узнать математика это обязательно в программирование. Пять лет назад просто из любопытства я увлекся HTML потом изучил CSS и JvaScript потом изучил PHP и Java. Как то не задумывался и начал смотреть форумы и узнал что без математики не...
Все верно, но так же необходимо зайти в: Компоновщик -> Ввод -> Дополнительные зависимости Здесь необходимо нажать изменить и в Дополнительные зависимости прописать это: SDL2.lib SDL2main.lib SDL2test.lib Без этого не заработает. (MVS 2015)
Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)

Счетчики и рейтинг

Яндекс.Метрика Рейтинг@Mail.ru
Среда программирования: 
Code Blocks + MinGW

Чтобы приступить к процессу рисования в окне, желательно создать приложение-шаблон, имеющее область для рисования и кнопку, по нажатию на которую будет выполняться алгоритм прорисовки изображения.

Виджет, определяющий область рисования, называется drawing_area и создается функцией gtk_drawing_area_new()

GtkWidget* gtk_drawing_area_new(void);

Размер виджета по умолчанию может быть определён вызовом:

void  gtk_drawing_area_size (GtkDrawingArea  *darea,
                             gint             width,
                             gint             height);

Этот размер может быть изменён вызовом функции gtk_widget_set_size_request(), а размер определённый с помощью этой функции может быть изменен пользователем с помощью простого увеличения или уменьшения окна содержащего область рисования.

Второй виджет, который будем использовать в приложении, - это кнопка. Создать
его можно с помощью функции gtk_button_new_with_label();

GtkWidget* gtk_button_new_with_label (const gchar *label);

За расположение элементов на форме отвечает специальный виджет - упаковочный контейнер. Существует два вида упаковочных невидимых контейнеров для размещения виджетов, горизонтальный и вертикальный. Когда используется горизонтальный контейнер, объекты внутри него могут располагаться с права налево, или наоборот в зависимости от использованных вызовов. В вертикальном контейнере виджеты располагаются сверху вниз или снизу вверх. Создать его можно функцией

GtkWidget* gtk_box_new (GtkOrientation orientation,
                        gint           spacing);

За порядок отвечают функции gtk_box_pack_start() и gtk_box_pack_end(). Функция gtk_box_pack_start() размещает объекты сверху вниз в вертикальных контейнерах и слева направо в горизонтальных, а функция gtk_box_pack_end() соответственно снизу вверх и справа налево.

Таким образом полный код создания приложения-шаблона будет выглядеть так:

#include <gtk/gtk.h> // подключаем GTK+
 
/* Функция, вызываемая на событие нажатия кнопки */
void button_click (GtkButton *button, gpointer data)
{
  /* Действия, выполняемые на нажатие кнопки */
}
 
/* Основная функция с которой стартует выполнение программы */
int main( int argc, char *argv[])
{
    /* запустить GTK+ */
    gtk_init(&argc, &argv);
 
    /* создать новый виджет - окно и установить свойства*/
    GtkWidget *window;
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 500);
    gtk_window_set_title(GTK_WINDOW(window), "Template");
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    /* Событие, которое отрабатывает на закрытие окна */
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
    /* создать виджет - вертикального расположения элементов   */
    GtkWidget *vbox;
    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1);
    gtk_container_add(GTK_CONTAINER (window), vbox);
 
    /* создать виджет - область для рисования   */
    GtkWidget *drawing_area;
    drawing_area = gtk_drawing_area_new();
    /* разместить область в верхней части окна*/
    gtk_box_pack_start (GTK_BOX(vbox), drawing_area, TRUE, TRUE, 5);
 
    /* создать виджет - кнопка   */
    GtkWidget *button;
    button = gtk_button_new_with_label("Draw");
    gtk_container_set_border_width (GTK_CONTAINER (button), 10);
    /* разместить кнопку в нижней части окна*/
    gtk_box_pack_end (GTK_BOX(vbox), button, FALSE, FALSE, 10);
    /* Событие, которое отрабатывает на нажатие кнопки */
    g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(button_click), NULL);
 
    /* отобразить окно и все его виджеты */
    gtk_widget_show_all(window);
 
    /* передаём управление GTK+ */
    gtk_main();
 
    return 0;
}