Рисование с Каиром в MonoDevelop на Windows - PullRequest
0 голосов
/ 02 марта 2012

Я устанавливаю MonoDevelop, GTK # и прочее. Я открываю некоторые учебные пособия по Каиру (следуя совету, данному здесь ). Я создаю новый проект GTK # в MonoDevelop и добавляю библиотеку Cairo к ссылкам. Используя этого урока , я создаю событие expose для DrawingArea в простой форме GTK. Код следующий:

protected void OnDrawingAreaExposed (object obj, Gtk.ExposeEventArgs args)
{
    DrawingArea drawArea = (DrawingArea)obj;
    Cairo.Context ctx = Gdk.CairoHelper.Create(drawArea.GdkWindow);

    PointD p1,p2,p3,p4;

    p1 = new PointD (10,10);
    p2 = new PointD(100,100);

    ctx.MoveTo(p1);
    ctx.LineTo(p2);

    ((IDisposable)ctx).Dispose();
}

Когда запущено приложение, ничего не нарисовано. Хорошо, я предполагаю, что cairo lib не установлен в системе. Я загружаю его с GTK + страница , помещаю в папку, где лежит исполняемый файл проекта - и ЧЕЛОВЕК! - приложение вылетает (System.DllNotFoundException). В результате всего вышесказанного у меня возник вопрос: можно ли использовать Cairo в приложениях Mono на Winows?

P.S. Позже добавлю скриншот окна ошибки, если это поможет.

Ответы [ 2 ]

1 голос
/ 17 мая 2012

Я думаю, ты пропустил несколько шагов.

Попробуйте добавить это между ctx.LineTo(p2); и ((IDisposable)ctx).Dispose();:

// give a color to line (red in this case)
ctx.Color = new Color (1,0,0);
// this is line type
ctx.Stroke ();

((IDisposable) ctx.Target).Dispose ();                                      
1 голос
/ 04 марта 2012

Вы не должны пытаться скопировать скомпилированные библиотеки cairo в папку bin.Mono (или MonoDevelop - не уверен в этой части) поставляется с необходимыми библиотеками.Вы просто добавляете их, нажимая на папку References и затем Edit References (аналогично Visual Studio).

Проблема в редакторе пользовательского интерфейса GTK MonoDevelop.Там нет возможности добавить пользовательский виджет, хотя я считаю, что это обычная задача.Если вы хотите сделать это, вам придется взломать для файла, сгенерированного этим редактором (файл, называемый вашим классом окна, в папке gtk-gui ).Скажем, если у вас есть класс CairoCanvas, который наследует класс виджета Gtk.DrawingArea - вы просто находите строку, например this.drawingarea1 = new global::Gtk.DrawingArea(), и меняете ее на this.drawingarea1 = new CairoCanvas(), не забывая, конечно, добавить директиву using YourProjectName; вверх.Каждый раз, когда вы изменяете что-то в своем графическом интерфейсе, файл будет восстановлен.Итак, вы переходите к этому файлу, видите, что, изменив его, нажмите кнопку «Сохранить изменения», чтобы сохранить свою работу.Затем перестройте свой проект еще раз, и все.

Я с радостью надеюсь, что этот ответ поможет некоторым новичкам Mono.И я надеюсь отпраздновать тот день, когда сообщество MonoDevelop (это OSS, не так ли?) Реализует эту недостающую функциональность.

...