LINUX.ORG.RU

4
Всего сообщений: 42

Файловый диалог на xcb + Cairo

Есть проблема - вызывать файловый диалог из LV2 плагина. В силу специфики этих плагинов, GUI реализован прямо на XCB при помощи Cairo, никаких Qt или GTK нет. А диалог нужен.

Пока задача решается дерганием zenity. Во-первых, это убого. Во-вторых - много проблем, то zenity у пользователя не установлен, то он не работает, то проприетарная DAW, в которую добавили плагин, использует свой GTK, переопределяет через LD_PRELOAD что-то и zenity не запускается.

Поэтому хочется реализовать диалог тоже на голом XCB и Cairo, и решить проблему. Но делать это с нуля очень не хочется, а готовых реализаций в упор не могу найти.

Может кто сталкивался с такими библиотеками или реализациями в проектах, подскажите пожалуйста.

 , ,

curufinwe ()

Зачем нужен USE=X ?

The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by x11-libs/gtk+-3.24.11::gentoo
# required by x11-themes/adwaita-icon-theme-3.32.0::gentoo
# required by x11-libs/gtk+-2.24.32-r1::gentoo
# required by x11-themes/gtk-engines-adwaita-3.28::gentoo
>=x11-libs/cairo-1.16.0-r3 X

Я-то думал, что наступил повсеместный Wayland и теперь X никому не нужен...

Мёржится это всё одной из этих строк:
[ebuild N ] x11-libs/cairo-1.16.0-r3::gentoo USE=«X glib svg (-aqua) -debug (-gles2-only) -opengl -static-libs -utils -valgrind» ABI_X86="(64) -32 (-x32)" 0 KiB
[ebuild N ] x11-libs/gtk+-3.24.11:3::gentoo USE=«X introspection (-aqua) -broadway -cloudprint -colord -cups -examples -gtk-doc {-test} -vim-syntax -wayland -xinerama» ABI_X86="(64) -32 (-x32)" 0 KiB

Где прописан этот X, чтобы его стереть?

 , ,

Einstok_Fair ()

Как внедрить шрифт внутрь pdf-поверхности, используя Cairo API ?

Для хранения в библиотеках принимают только PDF/A с внедрёнными шрифтами.

11 лет назад просили эту фичу: https://lists.cairographics.org/archives/cairo/2008-January/012642.html

Про существование «стандартных» шрифтов (которые, якобы, не нужно внедрять, потому что они есть везде) я знаю. Но хочу, чтобы шрифт был внедрённым всё равно, чтобы наверняка.

«The current implementation produces high-quality PNG, JPEG, TIFF bitmap files, high resolution PDF files with embedded fonts, SVG graphics and PostScript files.»

Рисуя на pdf-поверхности в Cairo, какие функции надо вызывать, чтобы шрифт оказался внутри .pdf-файла внедрённым?

Можно ли считать, что Cairo внедряет шрифты в .pdf всегда? Из какого места в коде Cairo это видно?

 ,

Einstok_Fair ()

В чём разница между Glamor и Cairo?

Зачем нужен Cairo, если есть Glamor?

 ,

Einstok_Fair ()

Рассчет размеров текста в Cairo

Подскажите как можно получить размеры надписи произвольным TrueType шрифтом, которую я в Cairo пытаюсь рисовать?

Высота (которая cairo_font_size), насколько я понимаю, задается в типографских пунктах, т.е. font_size/2.54 это будет примерно один пиксель, а вот как быть с шириной? (В общем случае, когда шрифт не моноширинный и, вероятно, имеет кернинг и я вообще заранее не знаю что за шрифт).

 ,

RiseOfDeath ()

Ищу годную либу для 2D графики

Собственно нужна возможность рисовать что угодно на 2D холсте. Прога пишется на Rust, так что желательно что-то с C-API.

Что есть:

  • Старичок cairo, который, вроде как, даже планируют включить в стандарт C++. Плюсы: везде есть, маленький. Минусы: с распространением могут быть проблемы (попробуй его собери под виндой), примеров маловато.
  • QPainter, ака Qt. Плюсы: я его знаю, он жив, дока. Минусы: жирный, нет биндингов, свои закидоны с отрисовкой.
  • Skia. Плюсы: активно развивается, hi-end, быстрая. Минусы: доки нету, жирная что ужас (Qt отдыхает), нет биндингов.

Мне не нужны виджеты, ибо буду рисовать на холсте и сохранять в файл. Никакого GUI.

Чем более кроссплатформенное - тем лучше.

PS: возможно есть что-то написанное на Rust - не нашел.

 , ,

RazrFalcon ()

ланчер для xfce

привет. я совсем не слежу за развитием гуя. какой ланчер сейчас в дебиане лучше? больше возможностей.
на встроенную панель даже нельзя найти виджет монтора с загрузкой по ядрам. barduck.
авант,кайро,другой?

 , , ,

darkenshvein ()

Cairo, WebKit, а что ещё?

Есть открыто-свободные браузеры, использующие движок CairoGeckocairo: Firefox, Seamonkey... (Не уверен, есть ли живые кроме них, но были, и могут появиться в будущем.)

Есть открыто-свободные браузеры, использующие движок WebKitWebCore, который в WebKit и его форк Blink: Chromium, Epiphany, Midori, qutebrowser, reconq, surf, vimb. Или под Линуксом у них тоже внутри cairo?

А другие движки сопоставимого уровня существуют? Живые?

P.S. В первом варианте смешал в кучу Cairo и WebKit. Спрашиваю именно по библиотекам для преобразования текста, SVG и прочего в графику, а не по всеобъемлющим браузерным движкам.

 , , , ,

question4 ()

Сломал Дебиан библиотекой cairo :(

Всем привет! Хотел скомпилировать emacs 24.5 под дебианом 8(иксы с xfce). Предустановленный был 24.4. Конфигуратор сказал, что для компиляции емакса для работы в иксах мне нужно что-то типа GTK+. Ну ок, пошел на сайт GTK. Начал ставить. Дошел до библиотеки pango, в которой в зависимостях была либа cairo. Поставил cairo. Запускаю iceweasel через быстый запуск(alt + f2) ничего не происходит. Запускаю в терминале, он мне что-то написал(тупая привычка с маздая: не читать, что тебе пишут программы), но я запомнил только то, что там было что-то про cairo. Перезагружаю ноутбук, до запуска lightdm все идет ок. Видно на секунду консольное предложение на вход в систему. А дальше черный экран и мигает подсветка. alt + f{1,2,3...} не работает. Запустился с livecd xubuntu, удалил из /bin/usr/local/lib все, где есть слово cairo но ничего не поменялось. Что сделать, чтобы все заработало? ->/var/log/messages: https://drive.google.com/open?id=0B8LVC6cA8S4vb01naVNsN3lFamc ->/var/log/messages.1: https://drive.google.com/open?id=0B8LVC6cA8S4vaENTNzNCaTVZMjg

 , , ,

cJIoI-I-IHo_BbI6paT ()

deadbeef перестал запускаться

После какого-то обновления перестал запускаться deadbeef.

convgui: gtkui plugin not found
plugin Converter GTK3 UI failed to connect to dependencies, deactivated.
infobar-ng: can't find gtkui plugin
plugin Infobar-ng failed to connect to dependencies, deactivated.
plugin Waveform Seekbar failed to connect to dependencies, deactivated.
plugin Playlist browser GTK3 failed to connect to dependencies, deactivated.
shellexecui: can't find gtkui plugin
plugin Shellexec GTK3 UI failed to connect to dependencies, deactivated.
gtkui plugin compiled for gtk version: 2.24.28
connecting button tray signals
Fontconfig warning: "/etc/fonts/conf.d/50-user.conf", line 14: reading configurations from ~/.fonts.conf is deprecated. please move it to $HOME/.config/fontconfig/fonts.conf manually
deadbeef: cairo-surface.c:928: cairo_surface_reference: Проверочное утверждение «(_cairo_atomic_int_get (&(&surface->ref_count)->ref_count) > 0)» не выполнено.
zsh: abort (core dumped)  deadbeef

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

cairo откатывать к предыдущей версии пытался. Не помогает.

В чём может быть проблема? Кто ещё сталкивался?

UPD: проблема решена (попросил друзей с арчем узнать, которые ещё не обновлялись): причина в librsvg. С предыдущей версией всё работает. Удалять не буду, вдруг кому тоже поможет.

 , ,

Psych218 ()

Сравнение производительности Qt и Cairo. 8 лет спустя.

С тех времён что-то поменялось?

 ,

ados ()

XCB{,+Cairo }

создал окно типа панели.. рисуем срествами (xcb || cairo)

ни с одним, ни с другим не могу решить проблему перерисовки..(после перекрытия окном на «панели» остается «след» от окна)

смотрел исходники панелей и оконных менеджеров.. когда нашел мелкий исходник минипанели, выяснил, что cairo используется в связке с pango, но последний мне не нужен.. текст можно и средствами xcb вывести..

кстати, dwm на xlib не косячит с перерисовкой, dwm на xcb косячит также, как и моя «панель»..

или предложите другое решение.. надоело безрезультатно топтаться на одном месте..

ЗЫ:: конечное приложение будет собрано по кусочкам нескольких..

 , , , ,

TODD ()

cairo abi_x86_32 офигел

лог

emerge --info '=x11-libs/cairo-1.12.18::gentoo'

emerge -pqv '=dev-qt/qtcore-4.8.6-r1::gentoo'

mesa собрана с abi_x86_32, libEGL.so имеется как x86_64, так и x86, но, как видно из лога, cairo пытается использовать x86_64 либу для сборки x86 бинаря.

какого хрена?!

юз opengl мне нужен, без него прекрасно собирается.

 , ,

funeralismatic ()

remmina и cinnamon

Дистрибутив Calculate Linux 14 с последними обновлениями.
При попытке запуска remmina под окружением cinnamon выдается ошибка:

(remmina:18458): GLib-GIO-CRITICAL **: g_loadable_icon_load: assertion 'G_IS_LOADABLE_ICON (icon)' failed

(remmina:18458): Gtk-WARNING **: Error loading theme icon 'gtk-connect' for stock: Не удалось загрузить значок

(remmina:18458): Gtk-CRITICAL **: render_fallback_image: assertion 'pixbuf != NULL' failed

(remmina:18458): GLib-GObject-CRITICAL **: g_object_ref: assertion 'G_IS_OBJECT (object)' failed

(remmina:18458): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_n_channels: assertion 'GDK_IS_PIXBUF (pixbuf)' failed

(remmina:18458): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_height: assertion 'GDK_IS_PIXBUF (pixbuf)' failed

(remmina:18458): GdkPixbuf-CRITICAL **: gdk_pixbuf_get_width: assertion 'GDK_IS_PIXBUF (pixbuf)' failed
**
Gdk:ERROR:gdkcairo.c:193:gdk_cairo_surface_paint_pixbuf: assertion failed: (cairo_image_surface_get_format (surface) == CAIRO_FORMAT_RGB24 || cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32)
Аварийный останов
Под xfce все прекрасно работает.

 , ,

glider ()

Выбор графического тулкита для отображения raw-данных

Доброго дня.

При разработке железа обычно к нему пишу одну-две технологических программок для настройки и управления им на C и GTK (кнопочки/поля ввода/консоль сообщений/gtkdatabox/...), для чего моих скромных навыков вполне хватало.

Сейчас делаем модуль для обработки сигнала РЛС и требуется включить в программку окошко, где будут отображаться сырые данные (bitmap 1024x1440 8-битных точек, обновление раз в 3 секунды) с радиолокационной картинкой. Требуется библиотека, которая сможет справиться с таким потоком, позволять накладывать слои и рисовать поверх простую векторную графику (кружочки/палочки/текст). Было бы здорово, если её можно было бы упихнуть в тоже GTK-окно и получать event-ы (клики мышкой, нажатие кнопок и т.д.).

Вроде бы просится SDL, но его вроде бы не очень просто подружить с GTK. Ещё есть cairo, но оно векторное, - будет ли держать такой поток данных?

Заранее спасибо!

 , ,

nav ()

Cairo, нельзя выбрать текст в ps

Программа рендерит ps и pdf. В pdf текст выбрать и скопировать можно, в ps почему-то нет. Внутри видно, что текст растеризуется и ниже растра еще раз пишется. Просматриваю файлы в Evince. Как заставить cairo не растеризовать текст?

// gcc -Wall -o cairo_print cairo_print.c `pkg-config --cflags --libs cairo`

#include <stdio.h>
#include <cairo.h>
#include <cairo-ps.h>
#include <cairo-pdf.h>

// A4 width, height in points, from GhostView manual:
// http://www.gnu.org/software/gv/manual/html_node/Paper-Keywords-and-paper-size-in-points.html
#define WIDTH  595  
#define HEIGHT 842  

void draw(cairo_t *context, char** argv) {
    cairo_select_font_face(context, "Liberation Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
    cairo_set_font_size(context, 30);
    cairo_move_to(context, WIDTH/2, HEIGHT/2);
    cairo_show_text(context, argv[1]);
}

void end(cairo_surface_t* surface, cairo_t *context) {
    cairo_show_page(context);
    cairo_destroy(context);
    cairo_surface_flush(surface);
    cairo_surface_destroy(surface);
}

int main(int argc, char** argv) {
    if (argc!= 2){
        fprintf (stderr, "usage: %s word\n", argv[0]);
        return 1;
    }

    cairo_surface_t* surface;
    cairo_t *context;

    surface = cairo_ps_surface_create("out.ps", WIDTH, HEIGHT);
    context = cairo_create(surface);
    draw(context, argv);
    end(surface, context);

    surface = cairo_pdf_surface_create("out.pdf", WIDTH, HEIGHT);
    context = cairo_create(surface);
    draw(context, argv);
    end(surface, context);

    return 0;
}

 ,

Gregon ()

awesome + cairo. ЯННП, дайтепример.

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

интересует базовое: черчение линии, окружности, кривых и хорд, заливка, градиенты, обводка, но на простых фигурах, чтобы код был понятен и очевиден, желательно с пояснениями. базу кайры как таковой прочитал, но в осоме ниасилил применить. доки осома открыты, но я ни в зуб ногой.

помнится, что TODD умеет кайро, и рисует просто отлично, следовательно, su - -c "cast TODD".

awesome 3.5.2

 ,

funeralismatic ()

Не собралось. Писать ли багрепорт?

Собираю Cairo с libGLESv2 для вывода. Получаю такое:

  CCLD   cairo-test-suite
/tmp/wayland/lib/libGLESv2.so: undefined reference to `_glapi_Dispatch'
/tmp/wayland/lib/libgbm.so: undefined reference to `gbm_dri_backend'
/tmp/wayland/lib/libGLESv2.so: undefined reference to `_glapi_get_dispatch'
collect2: error: ld returned 1 exit status
Писать баргрепорт или я сам дурак?

 , , , ,

CYB3R ()

Не ищутся пакеты в оверлее.

Доброго времени суток! Не так давно перешёл на генту и пока с ней разбираюсь. Захотел установить cairo-dock. Делаю всё по мануалу , но на моменте установки cairo и cairo-plugins, вылазит ошибка, что пакеты не найдены. При поиске через emerge тоже не ищет. Куда копать? Буду благодарен за любые подсказки :) Дистр: Gentoo 3.10-7, архитектура x64.

 , ,

Flexo ()

Как в этом вашем GTK+ принято делать?

Понадобилось написать простое графическое приложение, ну я тут же взял OpenGL и начал что-то клепать. Быстро надоело.
Решил заюзать что-то убердесктопное, выбор пал на Cairo.
Взял java-gnome, попытался собрать экзампл. Пример использует некий EventExpose, которого нет ни в библиотеке, ни в документации к ней.
Бегло пробежав по документации, я быстро переписал этот пример таким образом:

 /*
  * java-gnome, a UI library for writing GTK and GNOME programs from Java!
  *
  * Copyright © 2007-2010 Operational Dynamics Consulting, Pty Ltd and Others
  *
  * The code in this file, and the program it is a part of, is made available
  * to you by its authors as open source software: you can redistribute it
  * and/or modify it under the terms of the GNU General Public License version
  * 2 ("GPL") as published by the Free Software Foundation.
  *
  * This program is distributed in the hope that it will be useful, but WITHOUT
  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  * FITNESS FOR A PARTICULAR PURPOSE. See the GPL for more details.
  *
  * You should have received a copy of the GPL along with this program. If not,
  * see http://www.gnu.org/licenses/. The authors of this program may be
  * contacted through http://java-gnome.sourceforge.net/.
  */ 
 package cairo;
 
 import org.freedesktop.cairo.Context;
 import org.freedesktop.cairo.LinearPattern;
 import org.freedesktop.cairo.Pattern;
 import org.freedesktop.cairo.RadialPattern;
 import org.gnome.gdk.Event;
 import org.gnome.gtk.DrawingArea;
 import org.gnome.gtk.Gtk;
 import org.gnome.gtk.Widget;
 import org.gnome.gtk.Window;
 
 /**
  * Exercise drawing with the Cairo API. If you are rendering a custom Widget
  * or otherwise drawing stuff with Cairo that is to be presented by GTK, you
  * are expected to do this in the Widget.ExposeEvent handler for that Widget.
  * 
  * @author Andrew Cowie
  * @author Carl Worth
  * @author Dmitry Golovin
  */
 public class ExampleDrawing
 {
     public static void main(String[] args) {
         final Window w;
         final DrawingArea d;
 
         Gtk.init(args);
 
         w = new Window();
         w.setTitle("Drawing");
         w.setDefaultSize(150, 150);
 
         d = new DrawingArea();
         w.add(d);
         w.showAll();
 
         d.connect(new Widget.Draw() {
             public boolean onDraw(Widget source, Context cr) {
                 final Pattern linear, radial;
 
                 /*
                  * Now, finally do some drawing:
                  */
 
                 cr.setSource(1.0, 0.1, 0.0, 1.0);
                 cr.moveTo(10, 40);
                 cr.lineTo(120, 145);
                 cr.stroke();
 
                 /*
                  * If youre used to using RGB triplets, just normalize them to
                  * the 0.0 to 1.0 range by dividing by 255. It's all the same
                  * to Cairo, really.
                  */
 
                 cr.setSource(225 / 255.0, 148 / 255.0, 11 / 255.0, 1.0);
                 cr.rectangle(70, 70, 20, 40);
                 cr.fill();
 
                 /*
                  * Now a much more complicated example of drawing: a linear
                  * colour gradiant with a radial alpha mask.
                  */
 
                 linear = new LinearPattern(0, 0, 150, 150);
                 linear.addColorStopRGB(0.0, 0.0, 0.3, 0.8);
                 linear.addColorStopRGB(1.0, 0.0, 0.8, 0.3);
 
                 radial = new RadialPattern(75, 75, 15, 75, 75, 60);
                 radial.addColorStopRGBA(0, 0.0, 0.0, 0.0, 0.0);
                 radial.addColorStopRGBA(1, 0.0, 0.0, 0.0, 1.0);
 
                 cr.setSource(linear);
                 cr.mask(radial);
 
                 return true;
             }
         });
 
         /*
          * And that's it. Conclude with connecting the usual tear-down
          * handler, and then fire up the main loop.
          */
 
         w.connect(new Window.DeleteEvent() {
             public boolean onDeleteEvent(Widget source, Event event) {
                 Gtk.mainQuit();
                 return false;
             }
         });
 
         Gtk.main();
     }
 }
Может, я сделал не по канонам? Как делать правильно?

 , , , ,

CYB3R ()