Может кто-нибудь, пожалуйста, покажет мне минимальный рабочий пример использования языка C для Каира с Gtk3, чтобы нарисовать одну строку в GtkDrawingArea
. Я попытался изменить testcairo.c
в папке тестов Gtk3, но я не могу заставить его работать. Пожалуйста, не предлагайте обучающие материалы на Каирском сайте; Zetcode.com или gnome.org, которые либо не используются с Gtk3, либо не являются минимальными рабочими примерами.Как нарисовать линию в GtkDrawingArea с использованием Cairo с Gtk3
ответ
У меня есть. Главное отличие состоит в том, что для gtk + 3 вы должны рисовать из обработчика сигнала «draw». С gtk + 2 это происходит из обработчика сигнала «expose-event». Вот минимальный рабочий пример: http://www.gtkforums.com/viewtopic.php?f=3&t=988&p=195286=Drawing+with+Cairo+in+GTK3#p195286
Это очень помогло. Я хотел бы упомянуть, что если вы используете сигнал «draw», учебник в ZetCode.com теперь обновляется. – zehelvion
Я не понимаю, почему это не сработает, оно должно работать.
http://developer.gnome.org/gtk3/3.2/GtkDrawingArea.html
Как вы можете видеть, gtk2 с Каиром почти то же самый с GTK3 годами.
Вот полный рабочий пример:
//Make sure gtk3-devel is installed (in Fedora #dnf install gtk3-devel)
//In Ubuntu: $ sudo apt install libgtk-3-dev
//To compile:
//gcc draw.c `pkg-config --cflags gtk+-3.0 --libs gtk+-3.0` -o draw
#include <gtk/gtk.h>
//------------------------------------------------------------------
gboolean draw_callback(GtkWidget *widget,cairo_t *cr,gpointer data)
{
guint width,height;
GdkRGBA color;
GtkStyleContext *context;
context=gtk_widget_get_style_context(widget);
width=gtk_widget_get_allocated_width(widget);
height=gtk_widget_get_allocated_height(widget);
gtk_render_background(context,cr,0,0,width,height);
cairo_arc(cr,width/2.0,height/2.0,MIN(width,height)/2.0,0,2*G_PI);
gtk_style_context_get_color(context,gtk_style_context_get_state
(context),&color);
gdk_cairo_set_source_rgba(cr,&color);
gdk_cairo_set_source_rgba(cr,&color);
cairo_fill (cr);
return FALSE;
}
//-------------------------------------------------------------------
gint main(int argc,char *argv[])
{
GtkWidget *window,*drawing_area;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);
drawing_area=gtk_drawing_area_new();
gtk_container_add (GTK_CONTAINER (window),drawing_area);
gtk_widget_set_size_request(drawing_area,200,100);
g_signal_connect(G_OBJECT(drawing_area),"draw",
G_CALLBACK(draw_callback),NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
//----------------------------------------------------------------
// compila con valac --pkg gtk+-3.0 nombre_archivo.gs
uses
Gtk
Cairo
init
Gtk.init (ref args)
var TestCairo = new Ventana()
TestCairo.show_all()
Gtk.main()
class Ventana : Window
area: Gtk.DrawingArea
init
title = "Test Genie + GTK + Cairo"
set_default_size (400, 400)
window_position = WindowPosition.CENTER
destroy.connect(Gtk.main_quit)
// área de dibujo
area: Gtk.DrawingArea = new Gtk.DrawingArea()
// conecta el área de dibujo al método dibujar
area.draw.connect (dibujar)
// añade el área de dibujo a la ventana
add (area)
def dibujar (context : Context) : bool
context.set_source_rgba (1, 0, 0, 1)
context.set_line_width (2)
context.move_to (200, 100)
context.line_to (200, 300)
context.move_to (100, 200)
context.line_to (300, 200)
context.stroke()
return true
Больше примеров Genie + Gtk + Каир в http://genie.webierta.skn1.com
- 1. используя cairo с gtk3
- 2. Matplotlib backend GTK3 Agg с использованием Cairo?
- 3. GtkDrawingArea с использованием Cairo не применяется в Windows 7
- 4. Как правильно нарисовать линию в Cairo gtk3.0 после нажатия кнопки
- 5. Как рисовать с помощью Skia в контексте Cairo в Gtk3
- 6. Область рисования с использованием cairo
- 7. Как нарисовать GdkPixbuf с использованием GTK3 и PyGObject
- 8. Как нарисовать линию с JavaFX
- 9. Как нарисовать линию с прикосновением?
- 10. Как сделать базовую анимацию только с GTK3, C и Cairo
- 11. Сглаживание шрифта с использованием cairo
- 12. Как нарисовать многоточечную линию с использованием UIBezierPath с градиентом
- 13. Как нарисовать линию с анимацией в PyQt4
- 14. GTK3 cairo g_signal_connect: Dont get the point
- 15. Gtk2 GtkDrawingArea Cairo настойчивость чертежа при прокрутке вне диапазона
- 16. нарисовать полупрозрачную линию с ImageMagick
- 17. Как нарисовать линию субпикселей
- 18. Как нарисовать такую линию?
- 19. Как нарисовать линию на iPhone?
- 20. Как нарисовать линию с использованием jQuery и холста HTML5
- 21. Как нарисовать округлую линию заканчивается использованием Matplotlib
- 22. Как нарисовать линию 1 пикселя с использованием холста Javafx?
- 23. Как нарисовать горизонтальную линию с использованием Highcharts DotNet C#
- 24. Как нарисовать линию со стрелкой?
- 25. Как нарисовать пунктирную линию?
- 26. Cairo и Gdk.Window с Gtk.DrawingArea с использованием python gobject-introspection и gtk3
- 27. нарисовать линию в XNA с использованием поплавка значений
- 28. Как нарисовать вертикальную линию с углублением?
- 29. Как нарисовать линию в VB.NET
- 30. Как нарисовать плавную линию с антиалиасами
никто не может помочь Вот ? – mike