Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz:Nyomtatás linux alatt 2008 jún. 10 20:57 #187

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
EZT a linket most találtam, érdemes megnézni a forrásokat, tanulságos!
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 jún. 07 19:38 #186

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Jelentem, sikerült összehozni leírás alapján egy olyan Cairo-t használó egyszerű dolgot, amely Windows és Linux alatt is változatlanul működik (ha telepítve van a GTK+ és a Cairo a rendszerre)!
 
unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  glib2, gdk2, gtk2, gtkdef, cairo, ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Image1ChangeBounds(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
//ha már nincs a Free Pascalban, hát beleteszem a gdk_cairo_create-t
function gdk_cairo_create(drawable: PgdkDrawable):Pcairo_t; cdecl; external gdklib;
 
var
  Form1: TForm1; 
  ct: Pcairo_t;
  gdio: PGDIObject;
implementation
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  image1.Picture.Bitmap.Canvas.Brush.Color:= clWhite;
  image1.Picture.Bitmap.Width:= 300;
  image1.Picture.Bitmap.Height:=300;
  image1.Picture.Bitmap.Canvas.FillRect(0,0,300,300);
 
end;
 
procedure TForm1.Image1ChangeBounds(Sender: TObject);
begin
  image1.Picture.Bitmap.Canvas.FillRect(0,0,300,300);
  gdio:= PGDIObject(image1.Picture.Bitmap.Handle);
  ct:= gdk_cairo_create(gdio^.GDIBitmapObject);
 
  cairo_move_to (ct, 128.0, 25.6);
  cairo_line_to (ct, 230.4, 230.4);
  cairo_rel_line_to (ct, -102.4, 0.0);
  cairo_curve_to (ct, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0);
  cairo_close_path (ct);
 
  cairo_move_to (ct, 64.0, 25.6);
  cairo_rel_line_to (ct, 51.2, 51.2);
  cairo_rel_line_to (ct, -51.2, 51.2);
  cairo_rel_line_to (ct, -51.2, -51.2);
  cairo_close_path (ct);
 
  cairo_set_line_width (ct, 10.0);
  cairo_set_source_rgb (ct, 0, 0, 1);
  cairo_fill_preserve (ct);
  cairo_set_source_rgb (ct, 0, 0, 0);
  cairo_stroke (ct);
 
  cairo_destroy(ct);
end;
 
 
initialization
  {$I unit1.lrs}
 
end.          

Tesztelve Windows alatt (telepített GTK+ és Cairo) és Linux alatt is.
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 máj. 28 08:25 #175

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
Na eddig jutottam, lefordul, elindul, semmi hibaüzi, de csak egy üres form.
procedure TForm1.Form1Paint(Sender: TObject);
var
  cs: Pcairo_surface_t;
  ct: Pcairo_t;
  dpy: PDisplay;
  window: TWindow;
  screenid: LongInt;
  scr: PScreen;
begin
  dpy := GDK_WINDOW_XDISPLAY(Pointer(PGtkWidget(Form1.Handle)^.window));
  window := GDK_WINDOW_XWINDOW(Pointer(PGtkWidget(Form1.Handle)^.window));
  scr := XDefaultScreenOfDisplay(dpy);
  screenid := XScreenNumberOfScreen(scr);
  cs:= cairo_xlib_surface_create(dpy, window, DefaultVisual(dpy, screenid), 300, 300);
  ct:= cairo_create(cs);
  cairo_set_source_rgb (ct, 0, 1, 1);
 
  cairo_move_to (ct, 128.0, 25.6);
  cairo_line_to (ct, 230.4, 230.4);
  cairo_rel_line_to (ct, -102.4, 0.0);
  cairo_curve_to (ct, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0);
  cairo_close_path (ct);
  cairo_stroke(ct);
 
  cairo_move_to (ct, 64.0, 25.6);
  cairo_rel_line_to (ct, 51.2, 51.2);
  cairo_rel_line_to (ct, -51.2, 51.2);
  cairo_rel_line_to (ct, -51.2, -51.2);
  cairo_close_path (ct);
 
  cairo_set_line_width (ct, 10.0);
  cairo_set_source_rgb (ct, 0, 0, 1);
  cairo_fill_preserve (ct);
  cairo_set_source_rgb (ct, 0, 0, 0);
  cairo_stroke (ct);
 
  cairo_destroy(ct);
  cairo_surface_destroy(cs);
end;
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 máj. 27 06:31 #173

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
Na igen, az xlib_surface_create paraméterei kicsit másak. :(
A display, drawable egyértelmű. A display a default x display, a drawable a komponens.Canvas.Handle, de mi a visual?
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 máj. 27 06:16 #172

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
Ennyi?
Na mindjárt kipróbázom linux alatt :)
Bár 2-3 napja néztem png képpel (ugye bármelyik cairo_surface-t tudom menteni png-be) és sokat javult a kezelése (nem esik szét a kép) viszont eszméletlen lassú.
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 máj. 26 20:57 #171

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Windows alatt már teszteltem is:

...
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, cairo, cairowin32;
...
TForm1 = class(TForm)
PaintBox1: TPaintBox;
procedure PaintBox1Paint(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
...
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
cs: Pcairo_surface_t;
ct: Pcairo_t;
begin
cs:= cairo_win32_surface_create(PaintBox1.Canvas.Handle);
ct:= cairo_create(cs);

cairo_move_to (ct, 128.0, 25.6);
cairo_line_to (ct, 230.4, 230.4);
cairo_rel_line_to (ct, -102.4, 0.0);
cairo_curve_to (ct, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0);
cairo_close_path (ct);

cairo_move_to (ct, 64.0, 25.6);
cairo_rel_line_to (ct, 51.2, 51.2);
cairo_rel_line_to (ct, -51.2, 51.2);
cairo_rel_line_to (ct, -51.2, -51.2);
cairo_close_path (ct);

cairo_set_line_width (ct, 10.0);
cairo_set_source_rgb (ct, 0, 0, 1);
cairo_fill_preserve (ct);
cairo_set_source_rgb (ct, 0, 0, 0);
cairo_stroke (ct);

cairo_destroy(ct);
cairo_surface_destroy(cs);
end;

Enyenlőre, Linux alatt később.
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 máj. 24 14:32 #165

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
csak azt nem tudom, hogyan érhetem egy-egy komponens megfelelő tulajdonságát :(
az igazán csodálatos lenne, ha mondjuk egy paintbox-ba tudnék cairoval rajzolni :)
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 máj. 24 09:24 #164

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
A Gdk a Windowsnál a HDC-t használja, Linux alatt + a GdkDrawable-t, végülis ahogy mondtad. Viszont a Gdk forrásában benne van, hogy a profik C-ben hogyan csinálták meg.
Milyen jó, hogy a nyilt forráskódba bele lehet nézni! :)
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 máj. 24 06:22 #163

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
már átbogarásztam én is, és valóban a 2.8-as gdk-ban van csak.
elvileg a cairo_xlib_... fgv-ket lehetne használni, de nem bírok rájönni, hogy egy form-ba hogy tudnék pakolni tartalmat vele.
Pedig preview-hoz jól jönne. :)
Lazarusban a bitkép kezelése elég ratyi. :(
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 máj. 23 20:03 #162

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Igen a kutya ott van!
A GDK-ba beépített gdk_cairo_create függvény egy burkoló, amely elfedi a Cairo felület és a kontextus létrehozását, ezzel könyebbé téve a Gtk-ból való használatot.
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 máj. 23 19:27 #161

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Igen nincs a Cairo Apiban, bocsesz, köszi!
Ok, akkor megnézem a Gdk forrását, hogy mit és hogyan csinál valójában a gdk_cairo_create függvény, valószínü ott van a kutya elásva.
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 máj. 22 21:22 #160

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
most megnéztem, a cairo api doc-ban sincs gdk_cairo_create!
ez nem a példában deklarált fgv?
x-re az cairo_xlib_... fgv-kel tudsz rajzolni.
egyébként az csinálja a cairo binding-et, aki az órás progit írta.
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 máj. 22 21:07 #159

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
a freepascal extra csomagjai közt van.
egyébként most csinálta meg nemrég a karbantartója a legfrissebb cairo-hoz, és ebben benne van az összes cairo fgv. de ha jól emlékszem a gdk-s fgv-benne voltak a régiben is. Nézd meg a freepascal forrásban, nem a lazarussal jön.
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 máj. 22 20:35 #158

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Ez bizti, mert leszedtem a Lazarus 0.9.25 verziót és az abban lévő cairo unitban nincs benne a gdk_cairo_create csak sima cairo_create!
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 máj. 22 20:13 #157

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
basszus, most nézem mit írsz, a gdk_cairo_create a cairo unitban van.
az az fp extra csomagjai közt.
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 ápr. 12 21:02 #83

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
A probléma abból adódik, hogy a Free Pascal Gtk2 unitjai még csak 2.4-es komatibilisek és a Cairo 2.8-as verziónál lett benne a Gtk-ba (Gdk-ba). A Free Pascal Gtk2 unitjai megemlítik a 2.8-as verziót, de az újabb függvényeket nem tartalmazzák (még a 2.6-osat sem), így az újabb dolgokat is be kell építeni az unitokba (vagy keresni egy olyat, ahol már megvan).
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 ápr. 12 11:58 #82

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
valahogyan a window handle-jéhez kell hozzáférni, és akkor tudod használni a gtk függvényeit, de nekem sem jött össze soha, mondjuk nem is igazán erőltettem. :) [img]
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 ápr. 11 19:09 #81

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Na ez így ebben a formában nem müxik, így keresgélek tovább!
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 ápr. 08 21:18 #79

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Na azt hittem nem ment el az első!
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 ápr. 08 21:16 #78

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Azt sikerült kideríteni, hogy hogyan lehet a Gtk-s widgetet lekérdezni (ha Gtk 2-vel fordítok):

uses
..., Graphics, Dialogs, StdCtrls,
ComCtrls, glib2, gdk2, gtk2, gtkproc, gtkdef, cairo;
...
var
Form1: TForm1;
widget: PGtkWidget;
win: PGdkWindow;
ct: Pcairo_t;
...
widget:= PGtkWidget(GetWidgetInfo(pointer(form1.Handle))^.CoreWidget)^.window;
win:= PGdkWindow(widget);
ct:= cairo_create(win);

Hát ezt fogom tesztelni Linux alatt, csak előtte szunyálok egyet és holnap majd jelentkezem, hogy mi a szitu.
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 ápr. 08 21:07 #77

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Én ilyet találtam, de nem tudom, hogy tud e a cairo rajzolni rá, még tesztelem:
uses ..., glib2, gdk2, gtk2, gtkdef, gtkproc, ...;
...
var
widgetwin: PGdkWindow;
...
widgetwin: PGdkWindow(GetWidgetInfo(pointer(Form1.Handle))^.CoreWidget)^.window;

És a Cairo_Create-nek ezt adnám át (widgetwin-t). A Gdk2 unitban kellene lennie egy Gdk_Cairo_Create függvénynek, de nincs benne (a Gdk 2.8 dokumentációban benne van).
Na mindegy, majd jelenkezem mit sikerült csiholni.
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 ápr. 08 17:01 #74

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
igen, a gtk, ill. az X funkcióit is tudod használni, de hogyan azt nem tudom, sose volt energiám utána járni :)
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 ápr. 08 13:12 #73

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Linux alatt ha gtk2-vel fordítok egy progit, akkor valahogy hozzá lehet férni a widget adataihoz (futásidőben), hogy a cairoval rajzolni lehessen rá? Mert a Gtk2 Cairoval rajzolja ki a widgeteket, ha jól tudom.
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 ápr. 06 19:49 #66

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Valaki a nagyvilágban már csinált ilyesmit: www.youtube.com/watch?v=K-PL6Sf_Ydo
i5 3470
8GB
Win 10
CodeTyphon 7.0

Válasz:Nyomtatás linux alatt 2008 ápr. 06 15:38 #65

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
lehet, de nem ismerem pascalból a megoldást rá. Nem canvasba, hanem egy x window-ba tudsz vele rajzolni. Nekem elég, hogy bármely surface-t tudom png-stream-be írni, ezzel a print preview elfogadhatóan megoldható.
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

Válasz:Nyomtatás linux alatt 2008 ápr. 06 14:48 #64

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Közvetlenül egy Canvasra pl.: form canvasa, nem lehet Cairoval rajzolni?
Nekem egy komponens canvasára kellene rajzolni az egérmutatóval cairo használatával.
Az oké hogy tud image + png + ps + stb., de az állandó másolgatás a form vagy egyéb canvasra nem jó nekem + nagy képnél rossz megoldás.
i5 3470
8GB
Win 10
CodeTyphon 7.0

Nyomtatás linux alatt 2008 márc. 13 16:53 #40

  • hop
  • hop profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 53
  • Köszönetek: 0
A nyomtatás linux alatt mai napi egy több sebből vérző dolog.
Elkezdtem fejleszteni egy egyenlőre egy unitból és néhány osztályból álló stuff-ot, ami cairo-t (cairographics.org) használ ps állomány renderelésre, amit közvetlenül a default CUPS nyomtatóra küld. Bármely más canvas típusú osztályhoz hasonlóan használható.
Erőteljesen beta, de azért ötleteket véleményeket szívesen fogadok. :)
A letöltések közt megtaláljátok.
MSI Megabook M670
Ubuntu 8.04
fpc 2.2.0
lazarus 0.9.25

  • Oldal:
  • 1