cmake-d/samples/minwin_gtk/minwin/peer.d
2007-08-28 16:16:58 +00:00

54 lines
1.3 KiB
D

/* MinWin Peer module
*
* Mixin templates to simplify peer management
*
* Written by Ben Hinkle and released to the public domain, as
* explained at http://creativecommons.org/licenses/publicdomain
* Report comments and bugs at dsource: http://www.dsource.org/projects/minwin
*/
module minwin.peer;
version (MinWin32) {
private import minwin.mswindows;
alias HWND PeerForAdd;
alias PeerForAdd WindowChildPeer;
} else version (GTK) {
private import minwin.gtk;
alias GtkWidget* PeerForAdd;
alias PeerForAdd WindowChildPeer;
}
// possible values for hasPeer property
enum {
NO_PEER, // object has no peer
FOREIGN_PEER, // peer is not owned by object
OWNS_PEER // object owns peer
}
template PeerMixin() {
~this() {
disposePeer();
}
int hasPeer;
}
template SimplePeerMixin() {
~this() {
disposePeer();
}
int hasPeer;
void dispose() { disposePeer(); }
void disposePeer() {
if (hasPeer == OWNS_PEER) {
version (MinWin32) {
int ok = DeleteObject(peer);
sysAssert(ok != false, "Failed to dispose peer Font");
} else version (GTK) {
g_object_unref(cast(GObject*)peer);
}
}
hasPeer = NO_PEER;
}
}