updated mininum dfb to 0.9.24 added more directfb wrapper functions
2006-06-14 Michael Emmel <mike.emmel@gmail.com> * configure.in: updated mininum dfb to 0.9.24 * gdk/directfb/gdkdirectfb.h: added more directfb wrapper functions * gdk/directfb/gdkdrawable-directfb.c: wrapper functions and patch from Claudio Ciccani <klan@users.sf.net> to use a subsurface for cairo * gdk/directfb/gdkvisual-directfb.c: changed initalization sequence * gdk/directfb/gdkwindow-directfb.c: corrected reparent for toplevels * gdk/directfb/gdkdisplay-directfb.c: changed initilization sequence to a more rational order
This commit is contained in:
parent
67b0b64653
commit
0799004f58
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2006-06-14 Michael Emmel <mike.emmel@gmail.com>
|
||||||
|
* configure.in: updated mininum dfb to 0.9.24
|
||||||
|
* gdk/directfb/gdkdirectfb.h: added more directfb wrapper functions
|
||||||
|
* gdk/directfb/gdkdrawable-directfb.c: wrapper functions and patch from
|
||||||
|
Claudio Ciccani <klan@users.sf.net> to use a subsurface for cairo
|
||||||
|
* gdk/directfb/gdkvisual-directfb.c: changed initalization sequence
|
||||||
|
* gdk/directfb/gdkwindow-directfb.c: corrected reparent for toplevels
|
||||||
|
* gdk/directfb/gdkdisplay-directfb.c: changed initilization sequence
|
||||||
|
to a more rational order
|
||||||
|
|
||||||
2006-06-14 Federico Mena Quintero <federico@novell.com>
|
2006-06-14 Federico Mena Quintero <federico@novell.com>
|
||||||
|
|
||||||
* perf/gtkwidgetprofiler.c (gtk_widget_profiler_profile_expose):
|
* perf/gtkwidgetprofiler.c (gtk_widget_profiler_profile_expose):
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2006-06-14 Michael Emmel <mike.emmel@gmail.com>
|
||||||
|
* configure.in: updated mininum dfb to 0.9.24
|
||||||
|
* gdk/directfb/gdkdirectfb.h: added more directfb wrapper functions
|
||||||
|
* gdk/directfb/gdkdrawable-directfb.c: wrapper functions and patch from
|
||||||
|
Claudio Ciccani <klan@users.sf.net> to use a subsurface for cairo
|
||||||
|
* gdk/directfb/gdkvisual-directfb.c: changed initalization sequence
|
||||||
|
* gdk/directfb/gdkwindow-directfb.c: corrected reparent for toplevels
|
||||||
|
* gdk/directfb/gdkdisplay-directfb.c: changed initilization sequence
|
||||||
|
to a more rational order
|
||||||
|
|
||||||
2006-06-14 Federico Mena Quintero <federico@novell.com>
|
2006-06-14 Federico Mena Quintero <federico@novell.com>
|
||||||
|
|
||||||
* perf/gtkwidgetprofiler.c (gtk_widget_profiler_profile_expose):
|
* perf/gtkwidgetprofiler.c (gtk_widget_profiler_profile_expose):
|
||||||
|
@ -1406,7 +1406,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$gdktarget" = "xdirectfb"; then
|
if test "x$gdktarget" = "xdirectfb"; then
|
||||||
DIRECTFB_REQUIRED_VERSION=0.9.21
|
DIRECTFB_REQUIRED_VERSION=0.9.24
|
||||||
AC_MSG_CHECKING(for DirectFB)
|
AC_MSG_CHECKING(for DirectFB)
|
||||||
|
|
||||||
if $PKG_CONFIG --atleast-version $DIRECTFB_REQUIRED_VERSION directfb ; then
|
if $PKG_CONFIG --atleast-version $DIRECTFB_REQUIRED_VERSION directfb ; then
|
||||||
|
@ -36,8 +36,6 @@
|
|||||||
#include <cairo.h>
|
#include <cairo.h>
|
||||||
#include <directfb.h>
|
#include <directfb.h>
|
||||||
#include "gdk/gdkprivate.h"
|
#include "gdk/gdkprivate.h"
|
||||||
//#include "gdk/gdkwindow.h"
|
|
||||||
#include "gdkdisplay-directfb.h"
|
|
||||||
|
|
||||||
/* macro for a safe call to DirectFB functions */
|
/* macro for a safe call to DirectFB functions */
|
||||||
#define DFBCHECK(x...) \
|
#define DFBCHECK(x...) \
|
||||||
@ -85,6 +83,11 @@ GdkWindow * gdk_directfb_window_new (GdkWindow *parent,
|
|||||||
|
|
||||||
GdkVisual * gdk_directfb_visual_by_format (DFBSurfacePixelFormat pixel_format);
|
GdkVisual * gdk_directfb_visual_by_format (DFBSurfacePixelFormat pixel_format);
|
||||||
|
|
||||||
|
IDirectFBWindow *gdk_directfb_window_lookup(GdkWindow *window);
|
||||||
|
IDirectFBSurface *gdk_directfb_surface_lookup(GdkWindow *window);
|
||||||
|
GdkWindow *gdk_directfb_create_child_window(GdkWindow *parent,
|
||||||
|
IDirectFBSurface *subsurface);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GDK_DIRECTFB_H__ */
|
#endif /* __GDK_DIRECTFB_H__ */
|
||||||
|
@ -104,7 +104,6 @@ GdkDisplay * gdk_display_open (const gchar *display_name)
|
|||||||
}
|
}
|
||||||
_gdk_display = g_object_new(GDK_TYPE_DISPLAY_DFB,NULL);
|
_gdk_display = g_object_new(GDK_TYPE_DISPLAY_DFB,NULL);
|
||||||
_gdk_display->directfb=directfb;
|
_gdk_display->directfb=directfb;
|
||||||
_gdk_events_init ();
|
|
||||||
|
|
||||||
ret = directfb->GetDisplayLayer (directfb, DLID_PRIMARY, &layer);
|
ret = directfb->GetDisplayLayer (directfb, DLID_PRIMARY, &layer);
|
||||||
if (ret != DFB_OK)
|
if (ret != DFB_OK)
|
||||||
@ -115,7 +114,6 @@ GdkDisplay * gdk_display_open (const gchar *display_name)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
layer->EnableCursor (layer, 1);
|
|
||||||
|
|
||||||
ret=directfb->GetInputDevice (directfb, DIDID_KEYBOARD, &keyboard);
|
ret=directfb->GetInputDevice (directfb, DIDID_KEYBOARD, &keyboard);
|
||||||
|
|
||||||
@ -131,16 +129,19 @@ GdkDisplay * gdk_display_open (const gchar *display_name)
|
|||||||
|
|
||||||
_gdk_screen = g_object_new (GDK_TYPE_SCREEN, NULL);
|
_gdk_screen = g_object_new (GDK_TYPE_SCREEN, NULL);
|
||||||
|
|
||||||
_gdk_windowing_window_init ();
|
|
||||||
|
|
||||||
_gdk_visual_init ();
|
_gdk_visual_init ();
|
||||||
|
|
||||||
gdk_screen_set_default_colormap (_gdk_screen,
|
gdk_screen_set_default_colormap (_gdk_screen,
|
||||||
gdk_screen_get_system_colormap (_gdk_screen));
|
gdk_screen_get_system_colormap (_gdk_screen));
|
||||||
|
_gdk_windowing_window_init ();
|
||||||
_gdk_windowing_image_init ();
|
_gdk_windowing_image_init ();
|
||||||
|
|
||||||
_gdk_input_init ();
|
_gdk_input_init ();
|
||||||
_gdk_dnd_init ();
|
_gdk_dnd_init ();
|
||||||
|
|
||||||
|
_gdk_events_init ();
|
||||||
|
layer->EnableCursor (layer, 1);
|
||||||
|
|
||||||
g_signal_emit_by_name (gdk_display_manager_get (),
|
g_signal_emit_by_name (gdk_display_manager_get (),
|
||||||
"display_opened", _gdk_display);
|
"display_opened", _gdk_display);
|
||||||
|
|
||||||
|
@ -1076,14 +1076,16 @@ gdk_directfb_ref_cairo_surface (GdkDrawable *drawable)
|
|||||||
g_return_val_if_fail (GDK_IS_DRAWABLE_IMPL_DIRECTFB (drawable), NULL);
|
g_return_val_if_fail (GDK_IS_DRAWABLE_IMPL_DIRECTFB (drawable), NULL);
|
||||||
|
|
||||||
GdkDrawableImplDirectFB *impl = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
|
GdkDrawableImplDirectFB *impl = GDK_DRAWABLE_IMPL_DIRECTFB (drawable);
|
||||||
IDirectFB *dfb = GDK_DISPLAY_DFB(gdk_drawable_get_display(drawable))->directfb;
|
IDirectFB *dfb = GDK_DISPLAY_DFB(gdk_drawable_get_display(drawable))->directfb;
|
||||||
if (!impl->cairo_surface) {
|
if (!impl->cairo_surface) {
|
||||||
impl->cairo_surface = cairo_directfb_surface_create(dfb ,impl->surface);
|
IDirectFBSurface *surface;
|
||||||
cairo_surface_set_user_data (impl->cairo_surface,
|
if (impl->surface->GetSubSurface (impl->surface, NULL, &surface) == DFB_OK) {
|
||||||
&gdk_directfb_cairo_key,drawable,
|
impl->cairo_surface = cairo_directfb_surface_create (dfb, surface);
|
||||||
gdk_directfb_cairo_surface_destroy);
|
cairo_surface_set_user_data (impl->cairo_surface,
|
||||||
//XXX!!! MAJOR HACK so cairo coexists with direct drawing
|
&gdk_directfb_cairo_key, drawable,
|
||||||
//impl->surface->Unlock( impl->surface );
|
gdk_directfb_cairo_surface_destroy);
|
||||||
|
surface->Release (surface);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
cairo_surface_reference (impl->cairo_surface);
|
cairo_surface_reference (impl->cairo_surface);
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ static DFBSurfacePixelFormat formats[] =
|
|||||||
DSPF_RGB332
|
DSPF_RGB332
|
||||||
};
|
};
|
||||||
|
|
||||||
static GdkVisual * system_visual = NULL;
|
GdkVisual * system_visual = NULL;
|
||||||
static GdkVisualDirectFB * visuals[G_N_ELEMENTS (formats) + 1] = { NULL };
|
static GdkVisualDirectFB * visuals[G_N_ELEMENTS (formats) + 1] = { NULL };
|
||||||
static gint available_depths[G_N_ELEMENTS (formats) + 1] = {0};
|
static gint available_depths[G_N_ELEMENTS (formats) + 1] = {0};
|
||||||
static GdkVisualType available_types[G_N_ELEMENTS (formats) + 1] = {0};
|
static GdkVisualType available_types[G_N_ELEMENTS (formats) + 1] = {0};
|
||||||
@ -110,7 +110,7 @@ gdk_visual_get_type (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_gdk_visual_init (void)
|
_gdk_visual_init ()
|
||||||
{
|
{
|
||||||
DFBResult ret;
|
DFBResult ret;
|
||||||
DFBDisplayLayerConfig dlc;
|
DFBDisplayLayerConfig dlc;
|
||||||
@ -118,11 +118,10 @@ _gdk_visual_init (void)
|
|||||||
IDirectFBSurface *dest;
|
IDirectFBSurface *dest;
|
||||||
gint i, c;
|
gint i, c;
|
||||||
|
|
||||||
GdkWindowImplDirectFB *root_impl = GDK_WINDOW_IMPL_DIRECTFB (
|
|
||||||
GDK_WINDOW_OBJECT(_gdk_parent_root)->impl);
|
|
||||||
|
|
||||||
_gdk_display->layer->GetConfiguration (_gdk_display->layer, &dlc);
|
_gdk_display->layer->GetConfiguration (_gdk_display->layer, &dlc);
|
||||||
|
g_assert( dlc.pixelformat != DSPF_UNKNOWN);
|
||||||
|
|
||||||
dest = gdk_display_dfb_create_surface(_gdk_display,dlc.pixelformat,8,8);
|
dest = gdk_display_dfb_create_surface(_gdk_display,dlc.pixelformat,8,8);
|
||||||
g_assert (dest != NULL);
|
g_assert (dest != NULL);
|
||||||
|
|
||||||
@ -152,13 +151,9 @@ _gdk_visual_init (void)
|
|||||||
|
|
||||||
dest->GetAccelerationMask (dest, src, &acc);
|
dest->GetAccelerationMask (dest, src, &acc);
|
||||||
|
|
||||||
if (acc & DFXL_BLIT)
|
if (acc & DFXL_BLIT || formats[i] == dlc.pixelformat)
|
||||||
{
|
{
|
||||||
visuals[c] = gdk_directfb_visual_create (formats[i]);
|
|
||||||
|
|
||||||
if (formats[i] == root_impl->drawable.format)
|
|
||||||
system_visual = GDK_VISUAL (visuals[c]);
|
system_visual = GDK_VISUAL (visuals[c]);
|
||||||
|
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,17 +162,20 @@ _gdk_visual_init (void)
|
|||||||
|
|
||||||
dest->Release (dest);
|
dest->Release (dest);
|
||||||
|
|
||||||
|
//fallback to ARGB
|
||||||
if (!system_visual)
|
if (!system_visual)
|
||||||
{
|
{
|
||||||
visuals[c] = gdk_directfb_visual_create (root_impl->drawable.format);
|
for (i = 0; i < G_N_ELEMENTS (formats); i++) {
|
||||||
system_visual = GDK_VISUAL (visuals[c]);
|
if (formats[i] == DSPF_ARGB ) {
|
||||||
|
if( visuals[i] == NULL )
|
||||||
|
visuals[i] = gdk_directfb_visual_create (formats[i]);
|
||||||
|
system_visual = visuals[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_assert (system_visual);
|
g_assert (system_visual != NULL);
|
||||||
/*
|
|
||||||
Now we can set up the system colormap
|
|
||||||
*/
|
|
||||||
gdk_drawable_set_colormap (GDK_DRAWABLE (_gdk_parent_root),gdk_colormap_get_system());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
@ -195,6 +193,7 @@ gdk_visual_get_best_type (void)
|
|||||||
GdkVisual*
|
GdkVisual*
|
||||||
gdk_screen_get_system_visual (GdkScreen *screen)
|
gdk_screen_get_system_visual (GdkScreen *screen)
|
||||||
{
|
{
|
||||||
|
g_assert( system_visual);
|
||||||
return system_visual;
|
return system_visual;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
#include "gdkdirectfb.h"
|
#include "gdkdirectfb.h"
|
||||||
#include "gdkprivate-directfb.h"
|
#include "gdkprivate-directfb.h"
|
||||||
|
#include "gdkdisplay-directfb.h"
|
||||||
|
|
||||||
#include "gdkregion-generic.h"
|
#include "gdkregion-generic.h"
|
||||||
|
|
||||||
@ -160,7 +161,6 @@ gdk_window_impl_directfb_finalize (GObject *object)
|
|||||||
{
|
{
|
||||||
gdk_directfb_window_id_table_remove (impl->dfb_id);
|
gdk_directfb_window_id_table_remove (impl->dfb_id);
|
||||||
/* native window resource must be release before we can finalize !*/
|
/* native window resource must be release before we can finalize !*/
|
||||||
/*impl->window->Release (impl->window);*/
|
|
||||||
impl->window = NULL;
|
impl->window = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,6 +218,7 @@ create_directfb_window (GdkWindowImplDirectFB *impl,
|
|||||||
if (ret != DFB_OK)
|
if (ret != DFB_OK)
|
||||||
{
|
{
|
||||||
DirectFBError ("gdk_window_new: Layer->CreateWindow failed", ret);
|
DirectFBError ("gdk_window_new: Layer->CreateWindow failed", ret);
|
||||||
|
g_assert (0);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,10 +270,11 @@ _gdk_windowing_window_init (void)
|
|||||||
DFBWindowDescription desc;
|
DFBWindowDescription desc;
|
||||||
desc.flags = 0;
|
desc.flags = 0;
|
||||||
/*XXX I must do this now its a bug ALPHA ROOT*/
|
/*XXX I must do this now its a bug ALPHA ROOT*/
|
||||||
#if 1
|
|
||||||
desc.flags |= DWDESC_CAPS;
|
desc.flags = DWDESC_CAPS;
|
||||||
desc.caps = DWCAPS_ALPHACHANNEL;
|
desc.caps = 0;
|
||||||
#endif
|
desc.caps |= DWCAPS_NODECORATION;
|
||||||
|
desc.caps |= DWCAPS_ALPHACHANNEL;
|
||||||
desc.flags |= ( DWDESC_WIDTH | DWDESC_HEIGHT |
|
desc.flags |= ( DWDESC_WIDTH | DWDESC_HEIGHT |
|
||||||
DWDESC_POSX | DWDESC_POSY );
|
DWDESC_POSX | DWDESC_POSY );
|
||||||
desc.posx = 0;
|
desc.posx = 0;
|
||||||
@ -285,6 +287,10 @@ _gdk_windowing_window_init (void)
|
|||||||
}
|
}
|
||||||
impl->drawable.surface->GetPixelFormat(impl->drawable.surface,&impl->drawable.format);
|
impl->drawable.surface->GetPixelFormat(impl->drawable.surface,&impl->drawable.format);
|
||||||
private->depth = DFB_BITS_PER_PIXEL(impl->drawable.format);
|
private->depth = DFB_BITS_PER_PIXEL(impl->drawable.format);
|
||||||
|
/*
|
||||||
|
Now we can set up the system colormap
|
||||||
|
*/
|
||||||
|
gdk_drawable_set_colormap (GDK_DRAWABLE (_gdk_parent_root),gdk_colormap_get_system());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1281,7 +1287,7 @@ gdk_window_move_resize (GdkWindow *window,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//XXX BROKE if top LEVEL WINDOW ~~~
|
||||||
void
|
void
|
||||||
gdk_window_reparent (GdkWindow *window,
|
gdk_window_reparent (GdkWindow *window,
|
||||||
GdkWindow *new_parent,
|
GdkWindow *new_parent,
|
||||||
@ -1291,6 +1297,9 @@ gdk_window_reparent (GdkWindow *window,
|
|||||||
GdkWindowObject *window_private;
|
GdkWindowObject *window_private;
|
||||||
GdkWindowObject *parent_private;
|
GdkWindowObject *parent_private;
|
||||||
GdkWindowObject *old_parent_private;
|
GdkWindowObject *old_parent_private;
|
||||||
|
GdkWindowImplDirectFB *impl;
|
||||||
|
GdkWindowImplDirectFB *parent_impl;
|
||||||
|
GdkVisual *visual;
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
|
|
||||||
@ -1303,6 +1312,12 @@ gdk_window_reparent (GdkWindow *window,
|
|||||||
window_private = (GdkWindowObject *) window;
|
window_private = (GdkWindowObject *) window;
|
||||||
old_parent_private = (GdkWindowObject *) window_private->parent;
|
old_parent_private = (GdkWindowObject *) window_private->parent;
|
||||||
parent_private = (GdkWindowObject *) new_parent;
|
parent_private = (GdkWindowObject *) new_parent;
|
||||||
|
parent_impl = GDK_WINDOW_IMPL_DIRECTFB (parent_private->impl);
|
||||||
|
visual = gdk_drawable_get_visual (window);
|
||||||
|
|
||||||
|
/* already parented */
|
||||||
|
if( window_private->parent == (GdkWindowObject *)new_parent )
|
||||||
|
return;
|
||||||
|
|
||||||
window_private->parent = (GdkWindowObject *) new_parent;
|
window_private->parent = (GdkWindowObject *) new_parent;
|
||||||
|
|
||||||
@ -1312,9 +1327,66 @@ gdk_window_reparent (GdkWindow *window,
|
|||||||
g_list_remove (old_parent_private->children, window);
|
g_list_remove (old_parent_private->children, window);
|
||||||
}
|
}
|
||||||
|
|
||||||
parent_private->children = g_list_prepend (parent_private->children, window);
|
parent_private->children = g_list_prepend (parent_private->children, window);
|
||||||
|
|
||||||
gdk_window_move_resize (window, x, y, -1, -1);
|
impl = GDK_WINDOW_IMPL_DIRECTFB (window_private->impl);
|
||||||
|
|
||||||
|
if( impl->drawable.surface ) {
|
||||||
|
impl->drawable.surface->Release (impl->drawable.surface);
|
||||||
|
impl->drawable.surface = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( impl->window != NULL ) {
|
||||||
|
gdk_directfb_window_id_table_remove (impl->dfb_id);
|
||||||
|
impl->window->SetOpacity (impl->window,0);
|
||||||
|
impl->window->Close(impl->window);
|
||||||
|
impl->window->Release(impl->window);
|
||||||
|
impl->window = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
//create window were a child of the root now
|
||||||
|
if( window_private->parent == (GdkWindowObject *)_gdk_parent_root) {
|
||||||
|
DFBWindowDescription desc;
|
||||||
|
DFBWindowOptions window_options = DWOP_NONE;
|
||||||
|
desc.flags = DWDESC_CAPS;
|
||||||
|
if( window_private->input_only ) {
|
||||||
|
desc.caps = DWCAPS_INPUTONLY;
|
||||||
|
} else {
|
||||||
|
desc.flags |= DWDESC_PIXELFORMAT;
|
||||||
|
desc.pixelformat = ((GdkVisualDirectFB *) visual)->format;
|
||||||
|
if (DFB_PIXELFORMAT_HAS_ALPHA (desc.pixelformat)) {
|
||||||
|
desc.flags |= DWDESC_CAPS;
|
||||||
|
desc.caps = DWCAPS_ALPHACHANNEL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( window_private->window_type == GDK_WINDOW_CHILD )
|
||||||
|
window_private->window_type = GDK_WINDOW_TOPLEVEL;
|
||||||
|
desc.flags |= ( DWDESC_WIDTH | DWDESC_HEIGHT |
|
||||||
|
DWDESC_POSX | DWDESC_POSY );
|
||||||
|
desc.posx = x;
|
||||||
|
desc.posy = y;
|
||||||
|
desc.width = impl->drawable.width;
|
||||||
|
desc.height = impl->drawable.height;
|
||||||
|
if (!create_directfb_window (impl, &desc, window_options))
|
||||||
|
{
|
||||||
|
g_assert(0);
|
||||||
|
_gdk_window_destroy (window, FALSE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* we hold a reference count on ourselves */
|
||||||
|
g_object_ref (window);
|
||||||
|
impl->window->GetID (impl->window, &impl->dfb_id);
|
||||||
|
gdk_directfb_window_id_table_insert (impl->dfb_id, window);
|
||||||
|
gdk_directfb_event_windows_add (window);
|
||||||
|
} else {
|
||||||
|
DFBRectangle rect = { x, y, impl->drawable.width,
|
||||||
|
impl->drawable.height};
|
||||||
|
impl->window = NULL;
|
||||||
|
parent_impl->drawable.surface->GetSubSurface (
|
||||||
|
parent_impl->drawable.surface,
|
||||||
|
&rect,
|
||||||
|
&impl->drawable.surface);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -2411,19 +2483,155 @@ gdk_window_get_frame_extents (GdkWindow *window,
|
|||||||
rect->height = impl->height;
|
rect->height = impl->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a directfb window and a subsurface of that window
|
||||||
|
* create a gdkwindow chaild wrapper
|
||||||
|
*/
|
||||||
|
GdkWindow *gdk_directfb_create_child_window(GdkWindow *parent,
|
||||||
|
IDirectFBSurface *subsurface)
|
||||||
|
{
|
||||||
|
GdkWindow *window;
|
||||||
|
GdkWindowObject *private;
|
||||||
|
GdkWindowObject *parent_private;
|
||||||
|
GdkWindowImplDirectFB *impl;
|
||||||
|
GdkWindowImplDirectFB *parent_impl;
|
||||||
|
gint x,y,w,h;
|
||||||
|
|
||||||
|
g_return_val_if_fail (parent != NULL, NULL);
|
||||||
|
|
||||||
|
window = g_object_new (GDK_TYPE_WINDOW, NULL);
|
||||||
|
private = GDK_WINDOW_OBJECT (window);
|
||||||
|
parent_private = GDK_WINDOW_OBJECT (parent);
|
||||||
|
parent_impl = GDK_WINDOW_IMPL_DIRECTFB (parent_private->impl);
|
||||||
|
private->parent = parent_private;
|
||||||
|
|
||||||
|
subsurface->GetPosition(subsurface,&x,&y);
|
||||||
|
subsurface->GetSize(subsurface,&w,&h);
|
||||||
|
|
||||||
|
impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl);
|
||||||
|
impl->drawable.wrapper = GDK_DRAWABLE (window);
|
||||||
|
|
||||||
|
private->x = x;
|
||||||
|
private->y = y;
|
||||||
|
|
||||||
|
_gdk_directfb_calc_abs (window);
|
||||||
|
|
||||||
|
impl->drawable.width = w;
|
||||||
|
impl->drawable.height = h;
|
||||||
|
private->window_type = GDK_WINDOW_CHILD;
|
||||||
|
impl->drawable.surface = subsurface;
|
||||||
|
impl->drawable.format = parent_impl->drawable.format;
|
||||||
|
private->depth = parent_private->depth;
|
||||||
|
gdk_drawable_set_colormap (GDK_DRAWABLE (window),
|
||||||
|
gdk_drawable_get_colormap (parent));
|
||||||
|
gdk_window_set_cursor (window, NULL);
|
||||||
|
parent_private->children = g_list_prepend (parent_private->children,window);
|
||||||
|
/*we hold a reference count on ourselves */
|
||||||
|
g_object_ref (window);
|
||||||
|
|
||||||
|
return window;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The wrapping is not perfect since directfb does not give full access
|
||||||
|
* to the current state of a window event mask etc need to fix dfb
|
||||||
|
*/
|
||||||
GdkWindow *
|
GdkWindow *
|
||||||
gdk_window_foreign_new_for_display (GdkDisplay* display,GdkNativeWindow anid)
|
gdk_window_foreign_new_for_display (GdkDisplay* display,GdkNativeWindow anid)
|
||||||
{
|
{
|
||||||
GdkWindow *window;
|
GdkWindow *window = NULL;
|
||||||
|
GdkWindow *parent =NULL;
|
||||||
|
GdkWindowObject *private =NULL;
|
||||||
|
GdkWindowObject *parent_private =NULL;
|
||||||
|
GdkWindowImplDirectFB *parent_impl =NULL;
|
||||||
|
GdkWindowImplDirectFB *impl =NULL;
|
||||||
|
DFBWindowOptions options;
|
||||||
|
DFBResult ret;
|
||||||
|
GdkDisplayDFB * gdkdisplay = _gdk_display;
|
||||||
|
IDirectFBWindow *dfbwindow;
|
||||||
|
|
||||||
window = gdk_window_lookup (anid);
|
window = gdk_window_lookup (anid);
|
||||||
|
|
||||||
if (window)
|
if (window) {
|
||||||
|
g_object_ref (window);
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
if( display != NULL )
|
||||||
|
gdkdisplay = GDK_DISPLAY_DFB(display);
|
||||||
|
|
||||||
|
ret = gdkdisplay->layer->GetWindow (gdkdisplay->layer,
|
||||||
|
(DFBWindowID)anid,&dfbwindow);
|
||||||
|
|
||||||
|
if (ret != DFB_OK) {
|
||||||
|
DirectFBError ("gdk_window_new: Layer->GetWindow failed", ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent = _gdk_parent_root;
|
||||||
|
|
||||||
|
if(parent) {
|
||||||
|
parent_private = GDK_WINDOW_OBJECT (parent);
|
||||||
|
parent_impl = GDK_WINDOW_IMPL_DIRECTFB (parent_private->impl);
|
||||||
|
}
|
||||||
|
|
||||||
|
window = g_object_new (GDK_TYPE_WINDOW, NULL);
|
||||||
|
/* we hold a reference count on ourselves */
|
||||||
g_object_ref (window);
|
g_object_ref (window);
|
||||||
|
private = GDK_WINDOW_OBJECT (window);
|
||||||
|
private->parent = parent_private;
|
||||||
|
private->window_type = GDK_WINDOW_TOPLEVEL;
|
||||||
|
impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl);
|
||||||
|
|
||||||
return window;
|
impl->drawable.wrapper = GDK_DRAWABLE (window);
|
||||||
|
impl->window = dfbwindow;
|
||||||
|
dfbwindow->GetOptions(dfbwindow,&options);
|
||||||
|
dfbwindow->GetPosition(dfbwindow,&private->x,&private->y);
|
||||||
|
dfbwindow->GetSize(dfbwindow,&impl->drawable.width,&impl->drawable.height);
|
||||||
|
|
||||||
|
|
||||||
|
private->input_only = FALSE;
|
||||||
|
|
||||||
|
if( dfbwindow->GetSurface (dfbwindow, &impl->drawable.surface) == DFB_UNSUPPORTED ){
|
||||||
|
private->input_only = TRUE;
|
||||||
|
impl->drawable.surface = NULL;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Position ourselevs
|
||||||
|
*/
|
||||||
|
_gdk_directfb_calc_abs (window);
|
||||||
|
|
||||||
|
/* We default to all events least surprise to the user
|
||||||
|
* minus the poll for motion events
|
||||||
|
*/
|
||||||
|
gdk_window_set_events (window, (GDK_ALL_EVENTS_MASK ^ GDK_POINTER_MOTION_HINT_MASK));
|
||||||
|
|
||||||
|
if (impl->drawable.surface)
|
||||||
|
{
|
||||||
|
impl->drawable.surface->GetPixelFormat (impl->drawable.surface,
|
||||||
|
&impl->drawable.format);
|
||||||
|
|
||||||
|
private->depth = DFB_BITS_PER_PIXEL(impl->drawable.format);
|
||||||
|
if( parent )
|
||||||
|
gdk_drawable_set_colormap (GDK_DRAWABLE (window), gdk_drawable_get_colormap (parent));
|
||||||
|
else
|
||||||
|
gdk_drawable_set_colormap (GDK_DRAWABLE (window), gdk_colormap_get_system());
|
||||||
|
}
|
||||||
|
|
||||||
|
//can be null for the soft cursor window itself when
|
||||||
|
//running a gtk directfb wm
|
||||||
|
if( gdk_display_get_default() != NULL ) {
|
||||||
|
gdk_window_set_cursor (window,NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parent_private)
|
||||||
|
parent_private->children = g_list_prepend (parent_private->children,
|
||||||
|
window);
|
||||||
|
impl->dfb_id = (DFBWindowID)anid;
|
||||||
|
gdk_directfb_window_id_table_insert (impl->dfb_id, window);
|
||||||
|
gdk_directfb_event_windows_add (window);
|
||||||
|
|
||||||
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
GdkWindow *
|
GdkWindow *
|
||||||
@ -2438,13 +2646,30 @@ gdk_window_lookup (GdkNativeWindow anid)
|
|||||||
return gdk_directfb_window_id_table_lookup ((DFBWindowID) anid);
|
return gdk_directfb_window_id_table_lookup ((DFBWindowID) anid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IDirectFBWindow *gdk_directfb_window_lookup(GdkWindow *window )
|
||||||
|
{
|
||||||
|
GdkWindowObject *private;
|
||||||
|
GdkWindowImplDirectFB *impl;
|
||||||
|
g_return_val_if_fail (GDK_IS_WINDOW (window),NULL);
|
||||||
|
private = GDK_WINDOW_OBJECT (window);
|
||||||
|
impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl);
|
||||||
|
return impl->window;
|
||||||
|
}
|
||||||
|
|
||||||
|
IDirectFBSurface *gdk_directfb_surface_lookup(GdkWindow *window)
|
||||||
|
{
|
||||||
|
GdkWindowObject *private;
|
||||||
|
GdkWindowImplDirectFB *impl;
|
||||||
|
g_return_val_if_fail (GDK_IS_WINDOW (window),NULL);
|
||||||
|
private = GDK_WINDOW_OBJECT (window);
|
||||||
|
impl = GDK_WINDOW_IMPL_DIRECTFB (private->impl);
|
||||||
|
return impl->drawable.surface;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gdk_window_fullscreen (GdkWindow *window)
|
gdk_window_fullscreen (GdkWindow *window)
|
||||||
{
|
{
|
||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
|
|
||||||
g_warning ("gdk_window_fullscreen() not implemented.\n");
|
g_warning ("gdk_window_fullscreen() not implemented.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2452,8 +2677,7 @@ void
|
|||||||
gdk_window_unfullscreen (GdkWindow *window)
|
gdk_window_unfullscreen (GdkWindow *window)
|
||||||
{
|
{
|
||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
|
/* g_warning ("gdk_window_unfullscreen() not implemented.\n");*/
|
||||||
/* g_warning ("gdk_window_unfullscreen() not implemented.\n");*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user