X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3d2d8da1d89c195cb44f95f267989118e205c7bf..a95e38c03464c854af73b960b17db12624bd8f8c:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 805201a26c..befad324ff 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -612,11 +612,8 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp { DEBUG_MAIN_THREAD - if (!win->m_hasVMT) - return; - /* - if (win->GetName() == wxT("columntitles")) + if (win->GetName() == wxT("grid window")) { wxPrintf( wxT("OnExpose from ") ); if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) @@ -637,6 +634,9 @@ static void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExp if (gdk_event->count > 0) return; + if (!win->m_hasVMT) + return; + wxEraseEvent eevent( win->GetId() ); eevent.SetEventObject( win ); win->GetEventHandler()->ProcessEvent(eevent); @@ -659,9 +659,12 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), if (g_isIdle) wxapp_install_idle_handler(); + + if ((rect->x == 0) && (rect->y == 0) && (rect->width <= 1) && (rect->height <= 1)) + return; /* - if ((win->GetName() == wxT("columntitles")) && (rect->x == 2)) + if (win->GetName() == wxT("grid window")) { wxPrintf( wxT("OnDraw from ") ); if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) @@ -676,6 +679,9 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height ); + if (!win->m_hasVMT) + return; + wxEraseEvent eevent( win->GetId() ); eevent.SetEventObject( win ); win->GetEventHandler()->ProcessEvent(eevent); @@ -3438,6 +3444,60 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) ) wxCHECK_RET( m_widget != NULL, wxT("invalid window") ); wxCHECK_RET( m_wxwindow != NULL, wxT("window needs client area for scrolling") ); + + if ((dx == 0) && (dy == 0)) return; gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy ); + +/* + if (m_children.GetCount() > 0) + { + gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy ); + } + else + { + GtkPizza *pizza = GTK_PIZZA(m_wxwindow); + + pizza->xoffset -= dx; + pizza->yoffset -= dy; + + GdkGC *m_scrollGC = gdk_gc_new( pizza->bin_window ); + gdk_gc_set_exposures( m_scrollGC, TRUE ); + + int cw = 0; + int ch = 0; + GetClientSize( &cw, &ch ); + int w = cw - abs(dx); + int h = ch - abs(dy); + + if ((h < 0) || (w < 0)) + { + Refresh(); + } + else + { + int s_x = 0; + int s_y = 0; + if (dx < 0) s_x = -dx; + if (dy < 0) s_y = -dy; + int d_x = 0; + int d_y = 0; + if (dx > 0) d_x = dx; + if (dy > 0) d_y = dy; + + gdk_window_copy_area( pizza->bin_window, m_scrollGC, d_x, d_y, + pizza->bin_window, s_x, s_y, w, h ); + + wxRect rect; + if (dx < 0) rect.x = cw+dx; else rect.x = 0; + if (dy < 0) rect.y = ch+dy; else rect.y = 0; + if (dy != 0) rect.width = cw; else rect.width = abs(dx); + if (dx != 0) rect.height = ch; else rect.height = abs(dy); + + Refresh( TRUE, &rect ); + } + + gdk_gc_unref( m_scrollGC ); + } +*/ }