Playing with scrolling, als fixed redraw
bug in wxGrid (outer regions). You must not to maths with update regions within an scroll related OnPaint(). Everything else is allowed. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6224 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
956ddeca4a
commit
8e217128a0
@ -61,6 +61,8 @@ public:
|
||||
|
||||
void OnAbout( wxCommandEvent &event );
|
||||
void OnQuit( wxCommandEvent &event );
|
||||
void OnDeleteAll( wxCommandEvent &event );
|
||||
void OnInsertNew( wxCommandEvent &event );
|
||||
|
||||
MyCanvas *m_canvas;
|
||||
wxTextCtrl *m_log;
|
||||
@ -265,10 +267,14 @@ void MyCanvas::OnScroll( wxScrollWinEvent &event )
|
||||
|
||||
const int ID_QUIT = 108;
|
||||
const int ID_ABOUT = 109;
|
||||
const int ID_DELETE_ALL = 110;
|
||||
const int ID_INSERT_NEW = 111;
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
|
||||
|
||||
BEGIN_EVENT_TABLE(MyFrame,wxFrame)
|
||||
EVT_MENU (ID_DELETE_ALL, MyFrame::OnDeleteAll)
|
||||
EVT_MENU (ID_INSERT_NEW, MyFrame::OnInsertNew)
|
||||
EVT_MENU (ID_ABOUT, MyFrame::OnAbout)
|
||||
EVT_MENU (ID_QUIT, MyFrame::OnQuit)
|
||||
END_EVENT_TABLE()
|
||||
@ -278,6 +284,8 @@ MyFrame::MyFrame()
|
||||
wxPoint(20,20), wxSize(470,500) )
|
||||
{
|
||||
wxMenu *file_menu = new wxMenu();
|
||||
file_menu->Append( ID_DELETE_ALL, "Delete all");
|
||||
file_menu->Append( ID_INSERT_NEW, "Insert new");
|
||||
file_menu->Append( ID_ABOUT, "&About..");
|
||||
file_menu->Append( ID_QUIT, "E&xit\tAlt-X");
|
||||
|
||||
@ -306,6 +314,16 @@ MyFrame::MyFrame()
|
||||
SetSizer( topsizer );
|
||||
}
|
||||
|
||||
void MyFrame::OnDeleteAll( wxCommandEvent &WXUNUSED(event) )
|
||||
{
|
||||
m_canvas->DestroyChildren();
|
||||
}
|
||||
|
||||
void MyFrame::OnInsertNew( wxCommandEvent &WXUNUSED(event) )
|
||||
{
|
||||
(void)new wxButton( m_canvas, -1, "Hello", wxPoint(100,100) );
|
||||
}
|
||||
|
||||
void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) )
|
||||
{
|
||||
Close( TRUE );
|
||||
|
@ -4955,6 +4955,7 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & reg )
|
||||
|
||||
int top, bottom, left, right;
|
||||
|
||||
#ifndef __WXGTK__
|
||||
if (reg.IsEmpty())
|
||||
{
|
||||
int cw, ch;
|
||||
@ -4972,6 +4973,12 @@ void wxGrid::DrawAllGridLines( wxDC& dc, const wxRegion & reg )
|
||||
CalcUnscrolledPosition( x, y, &left, &top );
|
||||
CalcUnscrolledPosition( x + w, y + h, &right, &bottom );
|
||||
}
|
||||
#else
|
||||
int cw, ch;
|
||||
m_gridWin->GetClientSize(&cw, &ch);
|
||||
CalcUnscrolledPosition( 0, 0, &left, &top );
|
||||
CalcUnscrolledPosition( cw, ch, &right, &bottom );
|
||||
#endif
|
||||
|
||||
// avoid drawing grid lines past the last row and col
|
||||
//
|
||||
|
@ -186,6 +186,9 @@ gtk_pizza_init (GtkPizza *pizza)
|
||||
pizza->height = 20;
|
||||
|
||||
pizza->bin_window = NULL;
|
||||
|
||||
pizza->xoffset = 0;
|
||||
pizza->yoffset = 0;
|
||||
|
||||
pizza->configure_serial = 0;
|
||||
pizza->scroll_x = 0;
|
||||
|
@ -3444,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 );
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
@ -186,6 +186,9 @@ gtk_pizza_init (GtkPizza *pizza)
|
||||
pizza->height = 20;
|
||||
|
||||
pizza->bin_window = NULL;
|
||||
|
||||
pizza->xoffset = 0;
|
||||
pizza->yoffset = 0;
|
||||
|
||||
pizza->configure_serial = 0;
|
||||
pizza->scroll_x = 0;
|
||||
|
@ -3444,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 );
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user