[Mono-list] using gdi+ with gtk#

Miguel de Icaza miguel@ximian.com
Thu, 27 May 2004 18:07:22 -0400


--=-YG1vOL3ryCg//wl/t3rU
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Hello,

> Im making a little html renderer with gdi+
> (http://www.compona.com/xhtmlrender10.gif)
> Now I want to try to host this renderer in gtk#
> so I wonder if its possible to display a gdi+ image on a gtk#
> container?

Yes, it is possible.

We should get this into a library, but for now this will do it:

Compile like this:

mcs -r:System.Drawing -pkg:gtk-sharp DrawingSample.cs sysdraw.cs

Miguel

--=-YG1vOL3ryCg//wl/t3rU
Content-Disposition: attachment; filename=DrawingSample.cs
Content-Transfer-Encoding: base64
Content-Type: text/x-csharp; name=DrawingSample.cs; charset=iso-8859-1

Ly8NCi8vIFNhbXBsZSBwcm9ncmFtIGRlbW9zdHJhdGluZyB1c2luZyBDYWlybyB3aXRoIEd0ayMN
Ci8vDQp1c2luZyBHdGs7DQp1c2luZyBTeXN0ZW07DQp1c2luZyBTeXN0ZW0uRHJhd2luZzsNCg0K
Y2xhc3MgWCB7DQoJc3RhdGljIERyYXdpbmdBcmVhIGEsIGI7DQoJDQoJc3RhdGljIHZvaWQgTWFp
biAoKQ0KCXsNCgkJQXBwbGljYXRpb24uSW5pdCAoKTsNCgkJR3RrLldpbmRvdyB3ID0gbmV3IEd0
ay5XaW5kb3cgKCJIZWxsbyIpOw0KDQoJCWEgPSBuZXcgUHJldHR5R3JhcGhpYyAoKTsNCg0KI2lm
IGZhbHNlDQoJCWIgPSBuZXcgRHJhd2luZ0FyZWEgKCk7DQoJCWIuRXhwb3NlRXZlbnQgKz0gQ2ly
Y2xlc0V4cG9zZUhhbmRsZXI7DQoJCWIuU2l6ZUFsbG9jYXRlZCArPSBTaXplQWxsb2NhdGVkSGFu
ZGxlcjsNCiNlbmRpZg0KCQkNCgkJQm94IGJveCA9IG5ldyBIQm94ICh0cnVlLCAwKTsNCgkJYm94
LkFkZCAoYSk7DQoJCS8vYm94LkFkZCAoYik7DQoJCXcuQWRkIChib3gpOw0KCQkNCgkJdy5TaG93
QWxsICgpOw0KCQlBcHBsaWNhdGlvbi5SdW4gKCk7DQoJfQ0KDQoJc3RhdGljIHZvaWQgQ2lyY2xl
c0V4cG9zZUhhbmRsZXIgKG9iamVjdCBvYmosIEV4cG9zZUV2ZW50QXJncyBhcmdzKQ0KCXsNCgl9
DQoJDQojaWYgZmFsc2UNCglzdGF0aWMgUmVjdGFuZ2xlIHJlY3Q7DQoJCQ0KCXN0YXRpYyB2b2lk
IFNpemVBbGxvY2F0ZWRIYW5kbGVyIChvYmplY3Qgb2JqLCBTaXplQWxsb2NhdGVkQXJncyBhcmdz
KQ0KCXsNCgkJcmVjdCA9IGFyZ3MuQWxsb2NhdGlvbjsNCgl9DQoNCglzdGF0aWMgdm9pZCBDaXJj
bGVzRXhwb3NlSGFuZGxlciAob2JqZWN0IG9iaiwgRXhwb3NlRXZlbnRBcmdzIGFyZ3MpDQoJew0K
CQlSZWN0YW5nbGUgYXJlYSA9IGFyZ3MuRXZlbnQuYXJlYTsNCgkJR2RrLldpbmRvdyB3aW5kb3cg
PSBhcmdzLkV2ZW50LndpbmRvdzsNCgkJUGl4bWFwIHAgPSBuZXcgUGl4bWFwICh3aW5kb3csIGFy
ZWEud2lkdGgsIGFyZWEuaGVpZ2h0LCAtMSk7DQoNCgkJaW50IHgsIHk7DQoJCS8vQ2Fpcm8uT2Jq
ZWN0IG8gPSBwLkNhaXJvR3JhcGhpY3MgKCk7DQoJCXVzaW5nIChDYWlyby5HcmFwaGljcyBvID0g
d2luZG93LkNhaXJvR3JhcGhpY3MgKG91dCB4LCBvdXQgeSkpDQoJCXsNCgkJCW8uVHJhbnNsYXRl
ICgtYXJlYS54LCAtYXJlYS55KTsNCgkJCURyYXdDaXJjbGVzIChvLCByZWN0KTsNCgkJCQ0KCQkJ
Ly91c2luZyAoR2RrLkdDIGdjID0gbmV3IEdkay5HQyAod2luZG93KSl7DQoJCQkvL3dpbmRvdy5E
cmF3RHJhd2FibGUgKGdjLCBwLCAwLCAwLCBhcmVhLngsIGFyZWEueSwgYXJlYS5oZWlnaHQsIGFy
ZWEud2lkdGgpOw0KCQkJLy99DQoJCX0NCgl9DQoJDQoJc3RhdGljIHZvaWQgRHJhd0NpcmNsZXMg
KENhaXJvLkdyYXBoaWNzIG8sIEdkay5SZWN0YW5nbGUgcmVjdCkNCgl7DQoJCUZpbGxDaGVja3Mg
KG8sIHJlY3QpOw0KCX0NCg0KCWNvbnN0IGludCBDUyA9IDMyOw0KDQoJc3RhdGljIHZvaWQgRmls
bENoZWNrcyAoQ2Fpcm8uR3JhcGhpY3MgbywgR2RrLlJlY3RhbmdsZSByZWN0KQ0KCXsNCgkJU3Vy
ZmFjZSBjaGVjazsNCgkJLy8gRHJhdyB0aGUgY2hlY2sNCgkJby5TYXZlICgpOw0KCQl1c2luZyAo
Y2hlY2sgPSBTdXJmYWNlLkNyZWF0ZVNpbWlsYXIgKG8uVGFyZ2V0U3VyZmFjZSwgRm9ybWF0LlJH
QjI0LCAyICogQ1MsIDIgKiBDUykpew0KI2lmIHRydWUNCgkJCW8uU2F2ZSAoKTsNCgkJCWNoZWNr
LlJlcGVhdCA9IDE7DQoJCQkNCgkJCW8uVGFyZ2V0U3VyZmFjZSA9IGNoZWNrOw0KCQkJby5PcGVy
YXRvciA9IE9wZXJhdG9yLlNyYzsNCgkJCW8uU2V0UkdCQ29sb3IgKDAuNCwgMC40LCAwLjQpOw0K
CQkJDQoJCQkvLyBDbGVhciB0aGUgYmFja2dyb3VuZA0KCQkJby5SZWN0YW5nbGUgKDAsIDAsIDIq
Q1MsIDIqQ1MpOw0KCQkJby5GaWxsICgpOw0KCQkJby5TZXRSR0JDb2xvciAoMC43LCAwLjcsIDAu
Nyk7DQoJCQlvLlJlY3RhbmdsZSAoMCwgQ1MsIENTLCBDUyAqMik7DQoJCQlvLkZpbGwgKCk7DQoJ
CQlvLlJlY3RhbmdsZSAoQ1MsIDAsIENTKjIsIENTKTsNCgkJCW8uRmlsbCAoKTsNCgkJCW8uUmVz
dG9yZSAoKTsNCg0KCQkJLy8gRmlsbCB0aGUgc3VyZmFjZSB3aXRoIHRoZSBjaGVjaw0KCQkJby5T
ZXRQYXR0ZXJuIChjaGVjayk7DQoJCQlvLlJlY3RhbmdsZSAoMCwgMCwgcmVjdC53aWR0aCwgcmVj
dC5oZWlnaHQpOw0KCQkJby5GaWxsICgpOw0KI2VuZGlmDQoJCX0NCgkJby5SZXN0b3JlICgpOw0K
CQlvLlNldFJHQkNvbG9yICgxLCAwLCAwKTsNCgkJby5BbHBoYSA9IDAuNTsNCgkJQ29uc29sZS5X
cml0ZUxpbmUgKHJlY3QpOw0KCQlvLk1vdmVUbyAoMCwgMCk7DQoJCW8uTGluZVRvIChyZWN0Lndp
ZHRoLCByZWN0LmhlaWdodCk7DQoJCW8uU3Ryb2tlICgpOw0KCX0NCiNlbmRpZg0KfQ0KDQpjbGFz
cyBQcmV0dHlHcmFwaGljIDogRHJhd2luZ0FyZWEgew0KDQoJcHJvdGVjdGVkIG92ZXJyaWRlIGJv
b2wgT25FeHBvc2VFdmVudCAoR2RrLkV2ZW50RXhwb3NlIGFyZ3MpDQoJew0KCQlHZGsuV2luZG93
IHdpbiA9IGFyZ3MuV2luZG93Ow0KCQlHZGsuUmVjdGFuZ2xlIGFyZWEgPSBhcmdzLkFyZWE7DQoN
CgkJd2luLkRyYXdSZWN0YW5nbGUgKFN0eWxlLkJhc2VHQyAoU3RhdGVUeXBlLkFjdGl2ZSksIHRy
dWUsIGFyZWEpOw0KCQkNCgkJdXNpbmcgKEdyYXBoaWNzIGcgPSBHZGsuR3JhcGhpY3MuRnJvbURy
YXdhYmxlIChhcmdzLldpbmRvdykpew0KCQkJUGVuIHAgPSBuZXcgUGVuIChDb2xvci5CbHVlLCAy
LjBmKTsNCg0KCQkJZm9yIChpbnQgaSA9IDA7IGkgPCA2MDA7IGkgKz0gMzApDQoJCQkJZm9yIChp
bnQgaiA9IDA7IGogPCA2MDA7IGogKz0gMzApDQoJCQkJCWcuRHJhd0xpbmUgKHAsIGksIDAsIDAs
IGopOw0KCQl9DQoJCXJldHVybiB0cnVlOw0KCX0NCn0NCg==

--=-YG1vOL3ryCg//wl/t3rU
Content-Disposition: attachment; filename=sysdraw.cs
Content-Transfer-Encoding: base64
Content-Type: text/x-csharp; name=sysdraw.cs; charset=iso-8859-1

dXNpbmcgU3lzdGVtOw0KdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247DQp1c2luZyBTeXN0ZW0uUnVu
dGltZS5JbnRlcm9wU2VydmljZXM7DQoNCm5hbWVzcGFjZSBHZGsgew0KCXB1YmxpYyBjbGFzcyBH
cmFwaGljcyB7DQoJCQ0KCQlbRGxsSW1wb3J0KCJsaWJnZGstd2luMzItMi4wLTAuZGxsIildDQoJ
CWludGVybmFsIHN0YXRpYyBleHRlcm4gSW50UHRyIGdka194MTFfZHJhd2FibGVfZ2V0X3hkaXNw
bGF5IChJbnRQdHIgcmF3KTsNCgkJDQoJCVtEbGxJbXBvcnQoImxpYmdkay13aW4zMi0yLjAtMC5k
bGwiKV0NCgkJaW50ZXJuYWwgc3RhdGljIGV4dGVybiBJbnRQdHIgZ2RrX3gxMV9kcmF3YWJsZV9n
ZXRfeGlkIChJbnRQdHIgcmF3KTsNCgkJDQoJCXB1YmxpYyBzdGF0aWMgU3lzdGVtLkRyYXdpbmcu
R3JhcGhpY3MgRnJvbURyYXdhYmxlIChHZGsuRHJhd2FibGUgZHJhd2FibGUpDQoJCXsNCgkJCUlu
dFB0ciB4X2RyYXdhYmxlOw0KCQkJaW50IHhfb2ZmID0gMCwgeV9vZmYgPSAwOw0KCQkJCQ0KCQkJ
DQoJCQlpZiAoZHJhd2FibGUgaXMgR2RrLldpbmRvdyl7DQoJCQkJKChHZGsuV2luZG93KSBkcmF3
YWJsZSkuR2V0SW50ZXJuYWxQYWludEluZm8ob3V0IGRyYXdhYmxlLCBvdXQgeF9vZmYsIG91dCB5
X29mZik7DQoJCQl9IA0KCQkJeF9kcmF3YWJsZSA9IGRyYXdhYmxlLkhhbmRsZTsNCgkJCQ0KCQkJ
SW50UHRyIGRpc3BsYXkgPSBnZGtfeDExX2RyYXdhYmxlX2dldF94ZGlzcGxheSAoeF9kcmF3YWJs
ZSk7DQoJCQkNCgkJCVR5cGUgZ3JhcGhpY3MgPSB0eXBlb2YgKFN5c3RlbS5EcmF3aW5nLkdyYXBo
aWNzKTsNCgkJCU1ldGhvZEluZm8gbWkgPSBncmFwaGljcy5HZXRNZXRob2QgKCJGcm9tWERyYXdh
YmxlIiwgQmluZGluZ0ZsYWdzLlN0YXRpYyB8IEJpbmRpbmdGbGFncy5Ob25QdWJsaWMpOw0KCQkJ
aWYgKG1pID09IG51bGwpDQoJCQkJdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uICgi
SW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBJIGNhbiBub3QgZ2V0IGEgZ3JhcGhpY3MgZnJvbSBhIGRy
YXdhYmxlIik7DQoJCQlvYmplY3QgW10gYXJncyA9IG5ldyBvYmplY3QgWzJdIHsgKEludFB0cikg
Z2RrX3gxMV9kcmF3YWJsZV9nZXRfeGlkIChkcmF3YWJsZS5IYW5kbGUpLCAoSW50UHRyKSBkaXNw
bGF5IH07DQoJCQlvYmplY3QgciA9IG1pLkludm9rZSAobnVsbCwgYXJncyk7DQoJCQlTeXN0ZW0u
RHJhd2luZy5HcmFwaGljcyBnID0gKFN5c3RlbS5EcmF3aW5nLkdyYXBoaWNzKSByOw0KDQoJCQln
LlRyYW5zbGF0ZVRyYW5zZm9ybSAoLXhfb2ZmLCAteV9vZmYpOw0KDQoJCQlyZXR1cm4gZzsNCgkJ
fQ0KCX0NCg0KfQ0K

--=-YG1vOL3ryCg//wl/t3rU--