More refreshes are deferred to idle time.
Corrected redraw areas of native widgets if underlying wxWindows have been exposed. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14076 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -800,10 +800,7 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
gdk_event->area.width,
|
gdk_event->area.width,
|
||||||
gdk_event->area.height );
|
gdk_event->area.height );
|
||||||
|
|
||||||
// Actually send the various events based on the
|
// Actual redrawing takes place in idle time.
|
||||||
// current update region.
|
|
||||||
if (gdk_event->count == 0)
|
|
||||||
win->GtkSendPaintEvents();
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -898,10 +895,9 @@ static void gtk_window_draw_callback( GtkWidget *widget,
|
|||||||
|
|
||||||
win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
|
win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
|
||||||
|
|
||||||
// Actually send the various events based on the
|
// Actual redrawing takes place in idle time.
|
||||||
// current update region.
|
|
||||||
win->GtkSendPaintEvents();
|
|
||||||
|
|
||||||
|
#ifndef __WXUNIVERSAL__
|
||||||
// Redraw child widgets
|
// Redraw child widgets
|
||||||
GList *children = pizza->children;
|
GList *children = pizza->children;
|
||||||
while (children)
|
while (children)
|
||||||
@@ -915,6 +911,7 @@ static void gtk_window_draw_callback( GtkWidget *widget,
|
|||||||
gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ );
|
gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -3417,34 +3414,49 @@ void wxWindowGTK::GtkSendPaintEvents()
|
|||||||
|
|
||||||
m_clipPaintRegion = FALSE;
|
m_clipPaintRegion = FALSE;
|
||||||
|
|
||||||
|
#ifndef __WXUNIVERSAL__
|
||||||
|
// The following code will result in all window-less widgets
|
||||||
|
// being redrawn because the wxWindows class is allowed to
|
||||||
|
// paint over the window-less widgets.
|
||||||
|
|
||||||
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
||||||
if (g_list_length(pizza->children) > 0)
|
|
||||||
|
GList *children = pizza->children;
|
||||||
|
while (children)
|
||||||
{
|
{
|
||||||
// The following code will result in all window-less widgets
|
GtkPizzaChild *child = (GtkPizzaChild*) children->data;
|
||||||
// being redrawn because the wxWindows class is allowed to
|
children = children->next;
|
||||||
// paint over the window-less widgets.
|
|
||||||
GList *children = pizza->children;
|
|
||||||
while (children)
|
|
||||||
{
|
|
||||||
GtkPizzaChild *child = (GtkPizzaChild*) children->data;
|
|
||||||
children = children->next;
|
|
||||||
|
|
||||||
if (GTK_WIDGET_NO_WINDOW (child->widget) &&
|
if (GTK_WIDGET_NO_WINDOW (child->widget) &&
|
||||||
GTK_WIDGET_DRAWABLE (child->widget))
|
GTK_WIDGET_DRAWABLE (child->widget))
|
||||||
|
{
|
||||||
|
// Get intersection of widget area and update region
|
||||||
|
wxRegion region( m_updateRegion );
|
||||||
|
|
||||||
|
GdkEventExpose gdk_event;
|
||||||
|
gdk_event.type = GDK_EXPOSE;
|
||||||
|
gdk_event.window = pizza->bin_window;
|
||||||
|
gdk_event.count = 0;
|
||||||
|
|
||||||
|
wxRegionIterator upd( m_updateRegion );
|
||||||
|
while (upd)
|
||||||
{
|
{
|
||||||
// Get intersection of widget area and update region
|
GdkRectangle rect;
|
||||||
wxRegion region( m_updateRegion );
|
rect.x = upd.GetX();
|
||||||
region.Intersect( child->widget->allocation.x,
|
rect.y = upd.GetY();
|
||||||
child->widget->allocation.y,
|
rect.width = upd.GetWidth();
|
||||||
child->widget->allocation.width,
|
rect.height = upd.GetHeight();
|
||||||
child->widget->allocation.height );
|
|
||||||
|
|
||||||
// Redraw the whole widget anyway
|
if (gtk_widget_intersect (child->widget, &rect, &gdk_event.area))
|
||||||
if (!region.IsEmpty())
|
{
|
||||||
gtk_widget_draw( child->widget, NULL );
|
gtk_widget_event (child->widget, (GdkEvent*) &gdk_event);
|
||||||
|
}
|
||||||
|
|
||||||
|
upd ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
m_updateRegion.Clear();
|
m_updateRegion.Clear();
|
||||||
}
|
}
|
||||||
@@ -3583,7 +3595,7 @@ GtkStyle *wxWindowGTK::GetWidgetStyle()
|
|||||||
|
|
||||||
void wxWindowGTK::SetWidgetStyle()
|
void wxWindowGTK::SetWidgetStyle()
|
||||||
{
|
{
|
||||||
#if DISABLE_STYLE_IF_BROKEN_THEM
|
#if DISABLE_STYLE_IF_BROKEN_THEME
|
||||||
if (m_widget->style->engine_data)
|
if (m_widget->style->engine_data)
|
||||||
{
|
{
|
||||||
static bool s_warningPrinted = FALSE;
|
static bool s_warningPrinted = FALSE;
|
||||||
|
@@ -800,10 +800,7 @@ static int gtk_window_expose_callback( GtkWidget *widget,
|
|||||||
gdk_event->area.width,
|
gdk_event->area.width,
|
||||||
gdk_event->area.height );
|
gdk_event->area.height );
|
||||||
|
|
||||||
// Actually send the various events based on the
|
// Actual redrawing takes place in idle time.
|
||||||
// current update region.
|
|
||||||
if (gdk_event->count == 0)
|
|
||||||
win->GtkSendPaintEvents();
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -898,10 +895,9 @@ static void gtk_window_draw_callback( GtkWidget *widget,
|
|||||||
|
|
||||||
win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
|
win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
|
||||||
|
|
||||||
// Actually send the various events based on the
|
// Actual redrawing takes place in idle time.
|
||||||
// current update region.
|
|
||||||
win->GtkSendPaintEvents();
|
|
||||||
|
|
||||||
|
#ifndef __WXUNIVERSAL__
|
||||||
// Redraw child widgets
|
// Redraw child widgets
|
||||||
GList *children = pizza->children;
|
GList *children = pizza->children;
|
||||||
while (children)
|
while (children)
|
||||||
@@ -915,6 +911,7 @@ static void gtk_window_draw_callback( GtkWidget *widget,
|
|||||||
gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ );
|
gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -3417,34 +3414,49 @@ void wxWindowGTK::GtkSendPaintEvents()
|
|||||||
|
|
||||||
m_clipPaintRegion = FALSE;
|
m_clipPaintRegion = FALSE;
|
||||||
|
|
||||||
|
#ifndef __WXUNIVERSAL__
|
||||||
|
// The following code will result in all window-less widgets
|
||||||
|
// being redrawn because the wxWindows class is allowed to
|
||||||
|
// paint over the window-less widgets.
|
||||||
|
|
||||||
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
|
||||||
if (g_list_length(pizza->children) > 0)
|
|
||||||
|
GList *children = pizza->children;
|
||||||
|
while (children)
|
||||||
{
|
{
|
||||||
// The following code will result in all window-less widgets
|
GtkPizzaChild *child = (GtkPizzaChild*) children->data;
|
||||||
// being redrawn because the wxWindows class is allowed to
|
children = children->next;
|
||||||
// paint over the window-less widgets.
|
|
||||||
GList *children = pizza->children;
|
|
||||||
while (children)
|
|
||||||
{
|
|
||||||
GtkPizzaChild *child = (GtkPizzaChild*) children->data;
|
|
||||||
children = children->next;
|
|
||||||
|
|
||||||
if (GTK_WIDGET_NO_WINDOW (child->widget) &&
|
if (GTK_WIDGET_NO_WINDOW (child->widget) &&
|
||||||
GTK_WIDGET_DRAWABLE (child->widget))
|
GTK_WIDGET_DRAWABLE (child->widget))
|
||||||
|
{
|
||||||
|
// Get intersection of widget area and update region
|
||||||
|
wxRegion region( m_updateRegion );
|
||||||
|
|
||||||
|
GdkEventExpose gdk_event;
|
||||||
|
gdk_event.type = GDK_EXPOSE;
|
||||||
|
gdk_event.window = pizza->bin_window;
|
||||||
|
gdk_event.count = 0;
|
||||||
|
|
||||||
|
wxRegionIterator upd( m_updateRegion );
|
||||||
|
while (upd)
|
||||||
{
|
{
|
||||||
// Get intersection of widget area and update region
|
GdkRectangle rect;
|
||||||
wxRegion region( m_updateRegion );
|
rect.x = upd.GetX();
|
||||||
region.Intersect( child->widget->allocation.x,
|
rect.y = upd.GetY();
|
||||||
child->widget->allocation.y,
|
rect.width = upd.GetWidth();
|
||||||
child->widget->allocation.width,
|
rect.height = upd.GetHeight();
|
||||||
child->widget->allocation.height );
|
|
||||||
|
|
||||||
// Redraw the whole widget anyway
|
if (gtk_widget_intersect (child->widget, &rect, &gdk_event.area))
|
||||||
if (!region.IsEmpty())
|
{
|
||||||
gtk_widget_draw( child->widget, NULL );
|
gtk_widget_event (child->widget, (GdkEvent*) &gdk_event);
|
||||||
|
}
|
||||||
|
|
||||||
|
upd ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
m_updateRegion.Clear();
|
m_updateRegion.Clear();
|
||||||
}
|
}
|
||||||
@@ -3583,7 +3595,7 @@ GtkStyle *wxWindowGTK::GetWidgetStyle()
|
|||||||
|
|
||||||
void wxWindowGTK::SetWidgetStyle()
|
void wxWindowGTK::SetWidgetStyle()
|
||||||
{
|
{
|
||||||
#if DISABLE_STYLE_IF_BROKEN_THEM
|
#if DISABLE_STYLE_IF_BROKEN_THEME
|
||||||
if (m_widget->style->engine_data)
|
if (m_widget->style->engine_data)
|
||||||
{
|
{
|
||||||
static bool s_warningPrinted = FALSE;
|
static bool s_warningPrinted = FALSE;
|
||||||
|
Reference in New Issue
Block a user