Added scrolling of widgets to GTK 2.0.
Removied obsolete ifdef from toolbar code. Updated readme. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16628 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
8805e15544
commit
3fc6e5fa23
@ -7,7 +7,7 @@ wxWindows GUI library.
|
|||||||
wxWindows no longer supports GTK 1.0 (as did some early
|
wxWindows no longer supports GTK 1.0 (as did some early
|
||||||
snapshots) so that you will need GTK 1.2 when using it.
|
snapshots) so that you will need GTK 1.2 when using it.
|
||||||
GTK 1.2.6 or above is recommended although some programs
|
GTK 1.2.6 or above is recommended although some programs
|
||||||
will work with GTK 1.2.3 onwards. There is now beta support
|
will work with GTK 1.2.3 onwards. There is now support
|
||||||
for GTK 2.0.
|
for GTK 2.0.
|
||||||
|
|
||||||
More info about the wxWindows project (and the Windows
|
More info about the wxWindows project (and the Windows
|
||||||
@ -27,6 +27,15 @@ make install
|
|||||||
ldconfig
|
ldconfig
|
||||||
exit
|
exit
|
||||||
|
|
||||||
|
In order to use wxGTK with GTK 2.0 and its unicode
|
||||||
|
support, you need to configure
|
||||||
|
|
||||||
|
./configure --with-gtk --enable-gtk2 --enable-unicode
|
||||||
|
etc.
|
||||||
|
|
||||||
|
Sofar, support for GTK 2.0 has only been tested on
|
||||||
|
Linux with glibc 2.2.
|
||||||
|
|
||||||
When you run into problems, please read the INSTALL.txt and
|
When you run into problems, please read the INSTALL.txt and
|
||||||
follow those instructions. If you still don't have any success,
|
follow those instructions. If you still don't have any success,
|
||||||
please send a bug report to one of our mailing list, INCLUDING
|
please send a bug report to one of our mailing list, INCLUDING
|
||||||
|
@ -396,9 +396,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
|
|||||||
mask = bitmap.GetMask()->GetBitmap();
|
mask = bitmap.GetMask()->GetBitmap();
|
||||||
|
|
||||||
tool_pixmap = gtk_pixmap_new( pixmap, mask );
|
tool_pixmap = gtk_pixmap_new( pixmap, mask );
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
|
||||||
gtk_pixmap_set_build_insensitive( GTK_PIXMAP(tool_pixmap), TRUE );
|
gtk_pixmap_set_build_insensitive( GTK_PIXMAP(tool_pixmap), TRUE );
|
||||||
#endif
|
|
||||||
|
|
||||||
gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
|
gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
|
||||||
|
|
||||||
|
@ -68,19 +68,17 @@ static void gtk_pizza_forall (GtkContainer *container,
|
|||||||
gboolean include_internals,
|
gboolean include_internals,
|
||||||
GtkCallback callback,
|
GtkCallback callback,
|
||||||
gpointer callback_data);
|
gpointer callback_data);
|
||||||
|
|
||||||
static void gtk_pizza_allocate_child (GtkPizza *pizza,
|
static void gtk_pizza_allocate_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child);
|
GtkPizzaChild *child);
|
||||||
|
|
||||||
static void gtk_pizza_position_child (GtkPizza *pizza,
|
|
||||||
GtkPizzaChild *child);
|
|
||||||
#ifndef __WXGTK20__
|
|
||||||
static void gtk_pizza_position_children (GtkPizza *pizza);
|
|
||||||
|
|
||||||
static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
||||||
gpointer cb_data);
|
gpointer cb_data);
|
||||||
static void gtk_pizza_adjust_allocations (GtkPizza *pizza,
|
|
||||||
gint dx,
|
#ifndef __WXGTK20__
|
||||||
gint dy);
|
static void gtk_pizza_position_child (GtkPizza *pizza,
|
||||||
|
GtkPizzaChild *child);
|
||||||
|
static void gtk_pizza_position_children (GtkPizza *pizza);
|
||||||
|
|
||||||
static GdkFilterReturn gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
static GdkFilterReturn gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
@ -351,7 +349,7 @@ gtk_pizza_move (GtkPizza *pizza,
|
|||||||
|
|
||||||
child->x = x;
|
child->x = x;
|
||||||
child->y = y;
|
child->y = y;
|
||||||
|
|
||||||
if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (pizza))
|
if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (pizza))
|
||||||
gtk_widget_queue_resize (widget);
|
gtk_widget_queue_resize (widget);
|
||||||
break;
|
break;
|
||||||
@ -709,7 +707,9 @@ gtk_pizza_size_allocate (GtkWidget *widget,
|
|||||||
child = children->data;
|
child = children->data;
|
||||||
children = children->next;
|
children = children->next;
|
||||||
|
|
||||||
|
#ifndef __WXGTK20__
|
||||||
gtk_pizza_position_child (pizza, child);
|
gtk_pizza_position_child (pizza, child);
|
||||||
|
#endif
|
||||||
gtk_pizza_allocate_child (pizza, child);
|
gtk_pizza_allocate_child (pizza, child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -759,9 +759,11 @@ gtk_pizza_expose (GtkWidget *widget,
|
|||||||
GdkEventExpose *event)
|
GdkEventExpose *event)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
|
#ifndef __WXGTK20__
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
GdkEventExpose child_event;
|
GdkEventExpose child_event;
|
||||||
GList *children;
|
GList *children;
|
||||||
|
#endif
|
||||||
|
|
||||||
g_return_val_if_fail (widget != NULL, FALSE);
|
g_return_val_if_fail (widget != NULL, FALSE);
|
||||||
g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE);
|
g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE);
|
||||||
@ -902,57 +904,6 @@ gtk_pizza_allocate_child (GtkPizza *pizza,
|
|||||||
gtk_widget_size_allocate (child->widget, &allocation);
|
gtk_widget_size_allocate (child->widget, &allocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_pizza_position_child (GtkPizza *pizza,
|
|
||||||
GtkPizzaChild *child)
|
|
||||||
{
|
|
||||||
gint x;
|
|
||||||
gint y;
|
|
||||||
|
|
||||||
x = child->x - pizza->xoffset;
|
|
||||||
y = child->y - pizza->yoffset;
|
|
||||||
|
|
||||||
#ifndef __WXGTK20__
|
|
||||||
if (IS_ONSCREEN (x,y))
|
|
||||||
{
|
|
||||||
if (GTK_WIDGET_MAPPED (pizza) &&
|
|
||||||
GTK_WIDGET_VISIBLE (child->widget))
|
|
||||||
{
|
|
||||||
if (!GTK_WIDGET_MAPPED (child->widget))
|
|
||||||
gtk_widget_map (child->widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GTK_WIDGET_IS_OFFSCREEN (child->widget))
|
|
||||||
GTK_PRIVATE_UNSET_FLAG (child->widget, GTK_IS_OFFSCREEN);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!GTK_WIDGET_IS_OFFSCREEN (child->widget))
|
|
||||||
GTK_PRIVATE_SET_FLAG (child->widget, GTK_IS_OFFSCREEN);
|
|
||||||
|
|
||||||
if (GTK_WIDGET_MAPPED (child->widget))
|
|
||||||
gtk_widget_unmap (child->widget);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef __WXGTK20__
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_pizza_position_children (GtkPizza *pizza)
|
|
||||||
{
|
|
||||||
GList *tmp_list;
|
|
||||||
|
|
||||||
tmp_list = pizza->children;
|
|
||||||
while (tmp_list)
|
|
||||||
{
|
|
||||||
GtkPizzaChild *child = tmp_list->data;
|
|
||||||
tmp_list = tmp_list->next;
|
|
||||||
|
|
||||||
gtk_pizza_position_child (pizza, child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
||||||
gpointer cb_data)
|
gpointer cb_data)
|
||||||
@ -1000,8 +951,55 @@ gtk_pizza_adjust_allocations (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function is used to find events to process while scrolling */
|
#ifndef __WXGTK20__
|
||||||
|
static void
|
||||||
|
gtk_pizza_position_child (GtkPizza *pizza,
|
||||||
|
GtkPizzaChild *child)
|
||||||
|
{
|
||||||
|
gint x;
|
||||||
|
gint y;
|
||||||
|
|
||||||
|
x = child->x - pizza->xoffset;
|
||||||
|
y = child->y - pizza->yoffset;
|
||||||
|
|
||||||
|
if (IS_ONSCREEN (x,y))
|
||||||
|
{
|
||||||
|
if (GTK_WIDGET_MAPPED (pizza) &&
|
||||||
|
GTK_WIDGET_VISIBLE (child->widget))
|
||||||
|
{
|
||||||
|
if (!GTK_WIDGET_MAPPED (child->widget))
|
||||||
|
gtk_widget_map (child->widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GTK_WIDGET_IS_OFFSCREEN (child->widget))
|
||||||
|
GTK_PRIVATE_UNSET_FLAG (child->widget, GTK_IS_OFFSCREEN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!GTK_WIDGET_IS_OFFSCREEN (child->widget))
|
||||||
|
GTK_PRIVATE_SET_FLAG (child->widget, GTK_IS_OFFSCREEN);
|
||||||
|
|
||||||
|
if (GTK_WIDGET_MAPPED (child->widget))
|
||||||
|
gtk_widget_unmap (child->widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_pizza_position_children (GtkPizza *pizza)
|
||||||
|
{
|
||||||
|
GList *tmp_list;
|
||||||
|
|
||||||
|
tmp_list = pizza->children;
|
||||||
|
while (tmp_list)
|
||||||
|
{
|
||||||
|
GtkPizzaChild *child = tmp_list->data;
|
||||||
|
tmp_list = tmp_list->next;
|
||||||
|
|
||||||
|
gtk_pizza_position_child (pizza, child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is used to find events to process while scrolling */
|
||||||
static Bool
|
static Bool
|
||||||
gtk_pizza_expose_predicate (Display *display,
|
gtk_pizza_expose_predicate (Display *display,
|
||||||
XEvent *xevent,
|
XEvent *xevent,
|
||||||
@ -1014,6 +1012,7 @@ gtk_pizza_expose_predicate (Display *display,
|
|||||||
else
|
else
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
|
#endif /* __WXGTK20__ */
|
||||||
|
|
||||||
/* This is the main routine to do the scrolling. Scrolling is
|
/* This is the main routine to do the scrolling. Scrolling is
|
||||||
* done by "Guffaw" scrolling, as in the Mozilla XFE, with
|
* done by "Guffaw" scrolling, as in the Mozilla XFE, with
|
||||||
@ -1030,6 +1029,15 @@ gtk_pizza_expose_predicate (Display *display,
|
|||||||
void
|
void
|
||||||
gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
|
gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
|
||||||
{
|
{
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
pizza->xoffset += dx;
|
||||||
|
pizza->yoffset += dy;
|
||||||
|
|
||||||
|
gtk_pizza_adjust_allocations (pizza, -dx, -dy);
|
||||||
|
|
||||||
|
if (pizza->bin_window)
|
||||||
|
gdk_window_scroll( pizza->bin_window, -dx, -dy );
|
||||||
|
#else
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
XEvent xevent;
|
XEvent xevent;
|
||||||
XID win;
|
XID win;
|
||||||
@ -1161,8 +1169,11 @@ gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* __WXGTK20__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __WXGTK20__
|
||||||
/* The main event filter. Actually, we probably don't really need
|
/* The main event filter. Actually, we probably don't really need
|
||||||
* to install this as a filter at all, since we are calling it
|
* to install this as a filter at all, since we are calling it
|
||||||
* directly above in the expose-handling hack. But in case scrollbars
|
* directly above in the expose-handling hack. But in case scrollbars
|
||||||
@ -1250,7 +1261,6 @@ gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
|
|||||||
|
|
||||||
return GDK_FILTER_CONTINUE;
|
return GDK_FILTER_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __WXGTK20__ */
|
#endif /* __WXGTK20__ */
|
||||||
|
|
||||||
|
|
||||||
|
@ -497,6 +497,14 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
if (g_isIdle)
|
if (g_isIdle)
|
||||||
wxapp_install_idle_handler();
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
// This callback gets called in drawing-idle time under
|
||||||
|
// GTK 2.0, so we don't need to defer anything to idle
|
||||||
|
// time anymore.
|
||||||
|
|
||||||
|
GtkPizza *pizza = GTK_PIZZA( widget );
|
||||||
|
if (gdk_event->window != pizza->bin_window) return FALSE;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (win->GetName())
|
if (win->GetName())
|
||||||
{
|
{
|
||||||
@ -510,16 +518,11 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __WXGTK20__
|
|
||||||
// This callback gets called in drawing-idle time under
|
|
||||||
// GTK 2.0, so we don't need to defer anything to idle
|
|
||||||
// time anymore.
|
|
||||||
|
|
||||||
win->GetUpdateRegion() = wxRegion( gdk_event->region );
|
win->GetUpdateRegion() = wxRegion( gdk_event->region );
|
||||||
|
|
||||||
win->GtkSendPaintEvents();
|
win->GtkSendPaintEvents();
|
||||||
|
|
||||||
// Draw window less widgets
|
// Let parent window draw window less widgets
|
||||||
(* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, gdk_event);
|
(* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, gdk_event);
|
||||||
#else
|
#else
|
||||||
// This gets called immediately after an expose event
|
// This gets called immediately after an expose event
|
||||||
@ -539,8 +542,7 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
// win->GtkUpdate();
|
// win->GtkUpdate();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -4261,21 +4263,13 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
|
|||||||
GetClientSize( &cw, &ch );
|
GetClientSize( &cw, &ch );
|
||||||
m_clearRegion.Intersect( 0, 0, cw, ch );
|
m_clearRegion.Intersect( 0, 0, cw, ch );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
m_clipPaintRegion = TRUE;
|
m_clipPaintRegion = TRUE;
|
||||||
|
|
||||||
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
|
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
|
||||||
|
|
||||||
m_clipPaintRegion = FALSE;
|
m_clipPaintRegion = FALSE;
|
||||||
#else
|
|
||||||
wxCHECK_RET( GTK_PIZZA(m_wxwindow)->bin_window != NULL, wxT("window needs client area for scrolling") );
|
|
||||||
|
|
||||||
gdk_window_scroll( GTK_PIZZA(m_wxwindow)->bin_window, dx, dy );
|
|
||||||
|
|
||||||
GTK_PIZZA(m_wxwindow)->xoffset += dx;
|
|
||||||
GTK_PIZZA(m_wxwindow)->yoffset += dy;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -396,9 +396,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
|
|||||||
mask = bitmap.GetMask()->GetBitmap();
|
mask = bitmap.GetMask()->GetBitmap();
|
||||||
|
|
||||||
tool_pixmap = gtk_pixmap_new( pixmap, mask );
|
tool_pixmap = gtk_pixmap_new( pixmap, mask );
|
||||||
#if (GTK_MINOR_VERSION > 0)
|
|
||||||
gtk_pixmap_set_build_insensitive( GTK_PIXMAP(tool_pixmap), TRUE );
|
gtk_pixmap_set_build_insensitive( GTK_PIXMAP(tool_pixmap), TRUE );
|
||||||
#endif
|
|
||||||
|
|
||||||
gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
|
gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
|
||||||
|
|
||||||
|
@ -68,19 +68,17 @@ static void gtk_pizza_forall (GtkContainer *container,
|
|||||||
gboolean include_internals,
|
gboolean include_internals,
|
||||||
GtkCallback callback,
|
GtkCallback callback,
|
||||||
gpointer callback_data);
|
gpointer callback_data);
|
||||||
|
|
||||||
static void gtk_pizza_allocate_child (GtkPizza *pizza,
|
static void gtk_pizza_allocate_child (GtkPizza *pizza,
|
||||||
GtkPizzaChild *child);
|
GtkPizzaChild *child);
|
||||||
|
|
||||||
static void gtk_pizza_position_child (GtkPizza *pizza,
|
|
||||||
GtkPizzaChild *child);
|
|
||||||
#ifndef __WXGTK20__
|
|
||||||
static void gtk_pizza_position_children (GtkPizza *pizza);
|
|
||||||
|
|
||||||
static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
static void gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
||||||
gpointer cb_data);
|
gpointer cb_data);
|
||||||
static void gtk_pizza_adjust_allocations (GtkPizza *pizza,
|
|
||||||
gint dx,
|
#ifndef __WXGTK20__
|
||||||
gint dy);
|
static void gtk_pizza_position_child (GtkPizza *pizza,
|
||||||
|
GtkPizzaChild *child);
|
||||||
|
static void gtk_pizza_position_children (GtkPizza *pizza);
|
||||||
|
|
||||||
static GdkFilterReturn gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
static GdkFilterReturn gtk_pizza_filter (GdkXEvent *gdk_xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
@ -351,7 +349,7 @@ gtk_pizza_move (GtkPizza *pizza,
|
|||||||
|
|
||||||
child->x = x;
|
child->x = x;
|
||||||
child->y = y;
|
child->y = y;
|
||||||
|
|
||||||
if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (pizza))
|
if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (pizza))
|
||||||
gtk_widget_queue_resize (widget);
|
gtk_widget_queue_resize (widget);
|
||||||
break;
|
break;
|
||||||
@ -709,7 +707,9 @@ gtk_pizza_size_allocate (GtkWidget *widget,
|
|||||||
child = children->data;
|
child = children->data;
|
||||||
children = children->next;
|
children = children->next;
|
||||||
|
|
||||||
|
#ifndef __WXGTK20__
|
||||||
gtk_pizza_position_child (pizza, child);
|
gtk_pizza_position_child (pizza, child);
|
||||||
|
#endif
|
||||||
gtk_pizza_allocate_child (pizza, child);
|
gtk_pizza_allocate_child (pizza, child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -759,9 +759,11 @@ gtk_pizza_expose (GtkWidget *widget,
|
|||||||
GdkEventExpose *event)
|
GdkEventExpose *event)
|
||||||
{
|
{
|
||||||
GtkPizza *pizza;
|
GtkPizza *pizza;
|
||||||
|
#ifndef __WXGTK20__
|
||||||
GtkPizzaChild *child;
|
GtkPizzaChild *child;
|
||||||
GdkEventExpose child_event;
|
GdkEventExpose child_event;
|
||||||
GList *children;
|
GList *children;
|
||||||
|
#endif
|
||||||
|
|
||||||
g_return_val_if_fail (widget != NULL, FALSE);
|
g_return_val_if_fail (widget != NULL, FALSE);
|
||||||
g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE);
|
g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE);
|
||||||
@ -902,57 +904,6 @@ gtk_pizza_allocate_child (GtkPizza *pizza,
|
|||||||
gtk_widget_size_allocate (child->widget, &allocation);
|
gtk_widget_size_allocate (child->widget, &allocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_pizza_position_child (GtkPizza *pizza,
|
|
||||||
GtkPizzaChild *child)
|
|
||||||
{
|
|
||||||
gint x;
|
|
||||||
gint y;
|
|
||||||
|
|
||||||
x = child->x - pizza->xoffset;
|
|
||||||
y = child->y - pizza->yoffset;
|
|
||||||
|
|
||||||
#ifndef __WXGTK20__
|
|
||||||
if (IS_ONSCREEN (x,y))
|
|
||||||
{
|
|
||||||
if (GTK_WIDGET_MAPPED (pizza) &&
|
|
||||||
GTK_WIDGET_VISIBLE (child->widget))
|
|
||||||
{
|
|
||||||
if (!GTK_WIDGET_MAPPED (child->widget))
|
|
||||||
gtk_widget_map (child->widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GTK_WIDGET_IS_OFFSCREEN (child->widget))
|
|
||||||
GTK_PRIVATE_UNSET_FLAG (child->widget, GTK_IS_OFFSCREEN);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!GTK_WIDGET_IS_OFFSCREEN (child->widget))
|
|
||||||
GTK_PRIVATE_SET_FLAG (child->widget, GTK_IS_OFFSCREEN);
|
|
||||||
|
|
||||||
if (GTK_WIDGET_MAPPED (child->widget))
|
|
||||||
gtk_widget_unmap (child->widget);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef __WXGTK20__
|
|
||||||
|
|
||||||
static void
|
|
||||||
gtk_pizza_position_children (GtkPizza *pizza)
|
|
||||||
{
|
|
||||||
GList *tmp_list;
|
|
||||||
|
|
||||||
tmp_list = pizza->children;
|
|
||||||
while (tmp_list)
|
|
||||||
{
|
|
||||||
GtkPizzaChild *child = tmp_list->data;
|
|
||||||
tmp_list = tmp_list->next;
|
|
||||||
|
|
||||||
gtk_pizza_position_child (pizza, child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
gtk_pizza_adjust_allocations_recurse (GtkWidget *widget,
|
||||||
gpointer cb_data)
|
gpointer cb_data)
|
||||||
@ -1000,8 +951,55 @@ gtk_pizza_adjust_allocations (GtkPizza *pizza,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function is used to find events to process while scrolling */
|
#ifndef __WXGTK20__
|
||||||
|
static void
|
||||||
|
gtk_pizza_position_child (GtkPizza *pizza,
|
||||||
|
GtkPizzaChild *child)
|
||||||
|
{
|
||||||
|
gint x;
|
||||||
|
gint y;
|
||||||
|
|
||||||
|
x = child->x - pizza->xoffset;
|
||||||
|
y = child->y - pizza->yoffset;
|
||||||
|
|
||||||
|
if (IS_ONSCREEN (x,y))
|
||||||
|
{
|
||||||
|
if (GTK_WIDGET_MAPPED (pizza) &&
|
||||||
|
GTK_WIDGET_VISIBLE (child->widget))
|
||||||
|
{
|
||||||
|
if (!GTK_WIDGET_MAPPED (child->widget))
|
||||||
|
gtk_widget_map (child->widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GTK_WIDGET_IS_OFFSCREEN (child->widget))
|
||||||
|
GTK_PRIVATE_UNSET_FLAG (child->widget, GTK_IS_OFFSCREEN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!GTK_WIDGET_IS_OFFSCREEN (child->widget))
|
||||||
|
GTK_PRIVATE_SET_FLAG (child->widget, GTK_IS_OFFSCREEN);
|
||||||
|
|
||||||
|
if (GTK_WIDGET_MAPPED (child->widget))
|
||||||
|
gtk_widget_unmap (child->widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_pizza_position_children (GtkPizza *pizza)
|
||||||
|
{
|
||||||
|
GList *tmp_list;
|
||||||
|
|
||||||
|
tmp_list = pizza->children;
|
||||||
|
while (tmp_list)
|
||||||
|
{
|
||||||
|
GtkPizzaChild *child = tmp_list->data;
|
||||||
|
tmp_list = tmp_list->next;
|
||||||
|
|
||||||
|
gtk_pizza_position_child (pizza, child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is used to find events to process while scrolling */
|
||||||
static Bool
|
static Bool
|
||||||
gtk_pizza_expose_predicate (Display *display,
|
gtk_pizza_expose_predicate (Display *display,
|
||||||
XEvent *xevent,
|
XEvent *xevent,
|
||||||
@ -1014,6 +1012,7 @@ gtk_pizza_expose_predicate (Display *display,
|
|||||||
else
|
else
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
|
#endif /* __WXGTK20__ */
|
||||||
|
|
||||||
/* This is the main routine to do the scrolling. Scrolling is
|
/* This is the main routine to do the scrolling. Scrolling is
|
||||||
* done by "Guffaw" scrolling, as in the Mozilla XFE, with
|
* done by "Guffaw" scrolling, as in the Mozilla XFE, with
|
||||||
@ -1030,6 +1029,15 @@ gtk_pizza_expose_predicate (Display *display,
|
|||||||
void
|
void
|
||||||
gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
|
gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
|
||||||
{
|
{
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
pizza->xoffset += dx;
|
||||||
|
pizza->yoffset += dy;
|
||||||
|
|
||||||
|
gtk_pizza_adjust_allocations (pizza, -dx, -dy);
|
||||||
|
|
||||||
|
if (pizza->bin_window)
|
||||||
|
gdk_window_scroll( pizza->bin_window, -dx, -dy );
|
||||||
|
#else
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
XEvent xevent;
|
XEvent xevent;
|
||||||
XID win;
|
XID win;
|
||||||
@ -1161,8 +1169,11 @@ gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* __WXGTK20__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __WXGTK20__
|
||||||
/* The main event filter. Actually, we probably don't really need
|
/* The main event filter. Actually, we probably don't really need
|
||||||
* to install this as a filter at all, since we are calling it
|
* to install this as a filter at all, since we are calling it
|
||||||
* directly above in the expose-handling hack. But in case scrollbars
|
* directly above in the expose-handling hack. But in case scrollbars
|
||||||
@ -1250,7 +1261,6 @@ gtk_pizza_main_filter (GdkXEvent *gdk_xevent,
|
|||||||
|
|
||||||
return GDK_FILTER_CONTINUE;
|
return GDK_FILTER_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* __WXGTK20__ */
|
#endif /* __WXGTK20__ */
|
||||||
|
|
||||||
|
|
||||||
|
@ -497,6 +497,14 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
if (g_isIdle)
|
if (g_isIdle)
|
||||||
wxapp_install_idle_handler();
|
wxapp_install_idle_handler();
|
||||||
|
|
||||||
|
#ifdef __WXGTK20__
|
||||||
|
// This callback gets called in drawing-idle time under
|
||||||
|
// GTK 2.0, so we don't need to defer anything to idle
|
||||||
|
// time anymore.
|
||||||
|
|
||||||
|
GtkPizza *pizza = GTK_PIZZA( widget );
|
||||||
|
if (gdk_event->window != pizza->bin_window) return FALSE;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (win->GetName())
|
if (win->GetName())
|
||||||
{
|
{
|
||||||
@ -510,16 +518,11 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __WXGTK20__
|
|
||||||
// This callback gets called in drawing-idle time under
|
|
||||||
// GTK 2.0, so we don't need to defer anything to idle
|
|
||||||
// time anymore.
|
|
||||||
|
|
||||||
win->GetUpdateRegion() = wxRegion( gdk_event->region );
|
win->GetUpdateRegion() = wxRegion( gdk_event->region );
|
||||||
|
|
||||||
win->GtkSendPaintEvents();
|
win->GtkSendPaintEvents();
|
||||||
|
|
||||||
// Draw window less widgets
|
// Let parent window draw window less widgets
|
||||||
(* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, gdk_event);
|
(* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, gdk_event);
|
||||||
#else
|
#else
|
||||||
// This gets called immediately after an expose event
|
// This gets called immediately after an expose event
|
||||||
@ -539,8 +542,7 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
// win->GtkUpdate();
|
// win->GtkUpdate();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -4261,21 +4263,13 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
|
|||||||
GetClientSize( &cw, &ch );
|
GetClientSize( &cw, &ch );
|
||||||
m_clearRegion.Intersect( 0, 0, cw, ch );
|
m_clearRegion.Intersect( 0, 0, cw, ch );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
m_clipPaintRegion = TRUE;
|
m_clipPaintRegion = TRUE;
|
||||||
|
|
||||||
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
|
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
|
||||||
|
|
||||||
m_clipPaintRegion = FALSE;
|
m_clipPaintRegion = FALSE;
|
||||||
#else
|
|
||||||
wxCHECK_RET( GTK_PIZZA(m_wxwindow)->bin_window != NULL, wxT("window needs client area for scrolling") );
|
|
||||||
|
|
||||||
gdk_window_scroll( GTK_PIZZA(m_wxwindow)->bin_window, dx, dy );
|
|
||||||
|
|
||||||
GTK_PIZZA(m_wxwindow)->xoffset += dx;
|
|
||||||
GTK_PIZZA(m_wxwindow)->yoffset += dy;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user