Функции gdk_pixbuf в среде GTK1 в FPC

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Функции gdk_pixbuf в среде GTK1 в FPC

Сообщение betatester » 17.11.2007 14:40:14

Проблема

В FPC 2.2.0 в файле /fpcsrc/packages/extra/gtk/gdk/gdkpixbuf.pp описаны следующие функции
Код: Выделить всё
  {$IfNDef XLIB_SUPPORT}

    { Rendering to a TGDKDrawable  }

    procedure gdk_pixbuf_render_threshold_alpha(pixbuf:PGdkPixbuf; bitmap:PGdkBitmap; src_x:longint; src_y:longint; dest_x:longint;
              dest_y:longint; width:longint; height:longint; alpha_threshold:longint);cdecl; external libgdkpixbuf name 'gdk_pixbuf_render_threshold_alpha';
    procedure gdk_pixbuf_render_to_drawable(pixbuf:PGdkPixbuf; Drawable:PGDKDrawable; GC:PGDKGC; src_x:longint; src_y:longint;
              dest_x:longint; dest_y:longint; width:longint; height:longint; dither:TGDKRGBDither;
              x_dither:longint; y_dither:longint);cdecl; external libgdkpixbuf name 'gdk_pixbuf_render_to_drawable';
    procedure gdk_pixbuf_render_to_drawable_alpha(pixbuf:PGdkPixbuf; Drawable:PGDKDrawable; src_x:longint; src_y:longint; dest_x:longint;
              dest_y:longint; width:longint; height:longint; alpha_mode:TGdkPixbufAlphaMode; alpha_threshold:longint;
              dither:TGDKRGBDither; x_dither:longint; y_dither:longint);cdecl; external libgdkpixbuf name 'gdk_pixbuf_render_to_drawable_alpha';
    procedure gdk_pixbuf_render_pixmap_and_mask(pixbuf:PGdkPixbuf; Pixmap_return:PPGDKPixmap; mask_return:PPGdkBitmap; alpha_threshold:longint);cdecl; external libgdkpixbuf name 'gdk_pixbuf_render_pixmap_and_mask';

    { Fetching a region from a TDrawable  }
    function gdk_pixbuf_get_from_drawable(dest:PGdkPixbuf; src:PGDKDrawable; cmap:PGDKColormap; src_x:longint; src_y:longint;
               dest_x:longint; dest_y:longint; width:longint; height:longint):PGdkPixbuf;cdecl; external libgdkpixbuf name 'gdk_pixbuf_get_from_drawable';

  {$EndIf}


Они ссылаются на библиотеку libgdk_pixbuf.so из поставки GTK1.
Проблема в том, что в Gentoo такой библиотеки нету - вообще нету в стандартной поставке - gdk_pixbuf/GTK1 больше Gentoo не поддерживается.
Функции, перечисленные выше есть в стандартной библиотеке libgdk-x11-2.0.so (т.е. стандартная библиотека GDK/GTK2). Для того, чтобы файл /fpcsrc/packages/extra/gtk/gdk/gdkpixbuf.pp скомпилился и можно было работать с функциями gdk_pixbuf, указанный выше фрагмент нужно переделать вот к такому виду:
Код: Выделить всё
{$IfNDef XLIB_SUPPORT}

    { Rendering to a TGDKDrawable  }

    procedure gdk_pixbuf_render_threshold_alpha(pixbuf:PGdkPixbuf; bitmap:PGdkBitmap; src_x:longint; src_y:longint; dest_x:longint;
              dest_y:longint; width:longint; height:longint; alpha_threshold:longint);cdecl; external 'libgdk-x11-2.0.so' name 'gdk_pixbuf_render_threshold_alpha';
    procedure gdk_pixbuf_render_to_drawable(pixbuf:PGdkPixbuf; Drawable:PGDKDrawable; GC:PGDKGC; src_x:longint; src_y:longint;
              dest_x:longint; dest_y:longint; width:longint; height:longint; dither:TGDKRGBDither;
              x_dither:longint; y_dither:longint);cdecl; external 'libgdk-x11-2.0.so' name 'gdk_pixbuf_render_to_drawable';
    procedure gdk_pixbuf_render_to_drawable_alpha(pixbuf:PGdkPixbuf; Drawable:PGDKDrawable; src_x:longint; src_y:longint; dest_x:longint;
              dest_y:longint; width:longint; height:longint; alpha_mode:TGdkPixbufAlphaMode; alpha_threshold:longint;
              dither:TGDKRGBDither; x_dither:longint; y_dither:longint);cdecl; external 'libgdk-x11-2.0.so' name 'gdk_pixbuf_render_to_drawable_alpha';
    procedure gdk_pixbuf_render_pixmap_and_mask(pixbuf:PGdkPixbuf; Pixmap_return:PPGDKPixmap; mask_return:PPGdkBitmap; alpha_threshold:longint);cdecl; external 'libgdk-x11-2.0.so' name 'gdk_pixbuf_render_pixmap_and_mask';

    { Fetching a region from a TDrawable  }
    function gdk_pixbuf_get_from_drawable(dest:PGdkPixbuf; src:PGDKDrawable; cmap:PGDKColormap; src_x:longint; src_y:longint;
               dest_x:longint; dest_y:longint; width:longint; height:longint):PGdkPixbuf;cdecl; external 'libgdk-x11-2.0.so' name 'gdk_pixbuf_get_from_drawable';

  {$EndIf}


Собственно - все... Хотя решение парадоксальное - получается, что скомпилированная под GTK1 программа требует наличия GTK2.
betatester
постоялец
 
Сообщения: 276
Зарегистрирован: 27.04.2007 22:21:45

Сообщение ViTality » 27.11.2007 10:48:09

а еще можно просто сделать симлинк
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение Matich » 27.11.2007 14:35:00

У меня тоже Gentoo.
Похлжую проблему решил без переделывания кода.
Решилось всё установкой вручную.

Код: Выделить всё
./configure
make
make install
Matich
новенький
 
Сообщения: 50
Зарегистрирован: 25.07.2007 21:42:57

Сообщение betatester » 27.11.2007 16:00:31

ViTality

Понимаете, не получится сделать симлинк. Дело в том, что в Gentoo уже есть libgdk_pixbuf.so, который ссылается на libgdk_pixbuf-2.0.so.0 и часть pixbuf функций в нем есть - только те, что перечислены, перенесены в libgdk-x11-2.0.so.
betatester
постоялец
 
Сообщения: 276
Зарегистрирован: 27.04.2007 22:21:45

Сообщение betatester » 27.11.2007 16:02:26

Matich

Я тоже так делал по началу - а потом посмотрел на дату последнего выпуска gdk_pixbuf для GTK1 и понял, что дело плохо. :wink:
betatester
постоялец
 
Сообщения: 276
Зарегистрирован: 27.04.2007 22:21:45

Сообщение Matich » 28.11.2007 00:24:07

betatester,
В этом случае надо попинать разработчиков, чтоб избавлялись от старья =)
Matich
новенький
 
Сообщения: 50
Зарегистрирован: 25.07.2007 21:42:57


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru