Here's a patch to add this function (selfexplanatory, no?)
Hope this patch gets in, if not please tell me what you dislike.
BTW: I'm still wondering if you think my idea about StretchBlit should
be done...
Regards Hallvar Helleseth
Index: include/directfb.h
===================================================================
RCS file: /cvs/directfb/DirectFB/include/directfb.h,v
retrieving revision 1.72
diff -c -u -r1.72 directfb.h
--- include/directfb.h 15 Jan 2002 21:33:48 -0000 1.72
+++ include/directfb.h 20 Jan 2002 20:38:38 -0000
@@ -1221,7 +1221,15 @@
IDirectFBWindow **interface
);
-
+ /*
+ * Get the window that has the given window id
+ */
+ DFBResult (*GetWindow) (
+ IDirectFBDisplayLayer *thiz,
+ DFBWindowID id,
+ IDirectFBWindow **interface
+ );
+
/** Cursor handling **/
/*
Index: src/core/windows.c
===================================================================
RCS file: /cvs/directfb/DirectFB/src/core/windows.c,v
retrieving revision 1.44
diff -c -u -r1.44 windows.c
--- src/core/windows.c 15 Jan 2002 21:33:49 -0000 1.44
+++ src/core/windows.c 20 Jan 2002 20:38:38 -0000
@@ -309,6 +309,8 @@
window->stack = stack;
+ window->container = NULL;
+
window->reactor = reactor_new(sizeof(DFBWindowEvent));
return window;
Index: src/core/windows.h
===================================================================
RCS file: /cvs/directfb/DirectFB/src/core/windows.h,v
retrieving revision 1.15
diff -c -u -r1.15 windows.h
--- src/core/windows.h 14 Jan 2002 09:49:35 -0000 1.15
+++ src/core/windows.h 20 Jan 2002 20:38:39 -0000
@@ -71,6 +71,8 @@
CoreWindowStack *stack; /* window stack the window belongs */
FusionReactor *reactor; /* event dispatcher */
+
+ IDirectFBWindow *container /* IDirectFBWindow the window belongs */
};
/*
Index: src/display/idirectfbdisplaylayer.c
===================================================================
RCS file: /cvs/directfb/DirectFB/src/display/idirectfbdisplaylayer.c,v
retrieving revision 1.23
diff -c -u -r1.23 idirectfbdisplaylayer.c
--- src/display/idirectfbdisplaylayer.c 15 Jan 2002 21:33:49 -0000 1.23
+++ src/display/idirectfbdisplaylayer.c 20 Jan 2002 20:38:40 -0000
@@ -398,6 +398,27 @@
}
static DFBResult
+IDirectFBDisplayLayer_GetWindow( IDirectFBDisplayLayer *thiz,
+ DFBWindowID id,
+ IDirectFBWindow **window )
+{
+ CoreWindow **windows;
+ CoreWindow *w;
+ int i=0;
+ INTERFACE_GET_DATA(IDirectFBDisplayLayer)
+
+ windows = dfb_layers->shared->windowstack->windows;
+
+ for(w = windows[i];w;w = windows[i++]) {
+ if(w->id == id) {
+ *window = w->container;
+ return DFB_OK;
+ }
+ }
+ return DFB_IDNOTFOUND;
+}
+
+static DFBResult
IDirectFBDisplayLayer_WarpCursor( IDirectFBDisplayLayer *thiz, int x, int y )
{
INTERFACE_GET_DATA(IDirectFBDisplayLayer)
@@ -530,6 +551,7 @@
thiz->GetColorAdjustment = IDirectFBDisplayLayer_GetColorAdjustment;
thiz->SetColorAdjustment = IDirectFBDisplayLayer_SetColorAdjustment;
thiz->CreateWindow = IDirectFBDisplayLayer_CreateWindow;
+ thiz->GetWindow = IDirectFBDisplayLayer_GetWindow;
thiz->WarpCursor = IDirectFBDisplayLayer_WarpCursor;
thiz->EnableCursor = IDirectFBDisplayLayer_EnableCursor;
thiz->GetCursorPosition = IDirectFBDisplayLayer_GetCursorPosition;
Index: src/windows/idirectfbwindow.c
===================================================================
RCS file: /cvs/directfb/DirectFB/src/windows/idirectfbwindow.c,v
retrieving revision 1.24
diff -c -u -r1.24 idirectfbwindow.c
--- src/windows/idirectfbwindow.c 18 Jan 2002 13:08:09 -0000 1.24
+++ src/windows/idirectfbwindow.c 20 Jan 2002 20:38:40 -0000
@@ -452,7 +452,9 @@
data->ref = 1;
data->window = window;
-
+
+ data->window->container = thiz;
+
reactor_attach( data->window->reactor, IDirectFBWindow_React, data );
dfb_window_init( data->window );