Added wxRegion::Offset(x,y)

Go to plan B: wxWindow::Scroll() now moved the
    m_updateRegion for later processing.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13930 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2002-01-30 17:25:18 +00:00
parent a2717c3d0c
commit 35917d228a
9 changed files with 57 additions and 46 deletions

View File

@@ -1,6 +1,19 @@
*** wxWindows 2.3.3 ***
New behaviour for wxWindow::Refresh() as it now produces a
delayed refresh. Call the new wxWindow::Update() to force
an immediate update.
Support for more SGI hardware (12-bit mode among others).
Changed wxDC::Blit() to honour source DC's logical coordinates.
Implemented wxIdleEvent::RequestMore() for simple background
tasks (unlike thread work).
Various updates to wxHTML.
Some wxFont changes for better mixing of native fonts
and wxFont's accessors.

View File

@@ -67,6 +67,8 @@ public:
void Clear();
bool Offset( wxCoord x, wxCoord y );
bool Union( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
bool Union( const wxRect& rect );
bool Union( const wxRegion& region );

View File

@@ -67,6 +67,8 @@ public:
void Clear();
bool Offset( wxCoord x, wxCoord y );
bool Union( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
bool Union( const wxRect& rect );
bool Union( const wxRegion& region );

View File

@@ -516,6 +516,16 @@ wxRect wxRegion::GetBox() const
return wxRect( x, y, w, h );
}
bool wxRegion::Offset( wxCoord x, wxCoord y )
{
if (!m_refData)
return FALSE;
gdk_region_offset( M_REGIONDATA->m_region, x, y );
return TRUE;
}
bool wxRegion::Empty() const
{
if (!m_refData)

View File

@@ -320,9 +320,6 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
int noUnitsX, int noUnitsY,
int xPos, int yPos, bool noRefresh )
{
// Update any invalidates areas before the get moved/scrolled.
Update();
int old_x = m_xScrollPixelsPerLine * m_xScrollPosition;
int old_y = m_yScrollPixelsPerLine * m_yScrollPosition;
@@ -358,9 +355,6 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
void wxScrolledWindow::AdjustScrollbars()
{
// Update any invalidates areas before the get moved/scrolled.
Update();
int w, h;
m_targetWindow->GetClientSize( &w, &h );
@@ -435,9 +429,6 @@ void wxScrolledWindow::OnScroll(wxScrollWinEvent& event)
int nScrollInc = CalcScrollInc(event);
if (nScrollInc == 0) return;
// Update any invalidates areas before the get moved/scrolled.
Update();
if (orient == wxHORIZONTAL)
{
int newPos = m_xScrollPosition + nScrollInc;
@@ -482,9 +473,6 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos )
if (((x_pos == -1) || (x_pos == m_xScrollPosition)) &&
((y_pos == -1) || (y_pos == m_yScrollPosition))) return;
// Update any invalidates areas before the get moved/scrolled.
Update();
if ((x_pos != -1) && (m_xScrollPixelsPerLine))
{
int max = (int)(m_hAdjust->upper - m_hAdjust->page_size + 0.5);
@@ -537,9 +525,6 @@ void wxScrolledWindow::GtkVScroll( float value )
if (y_pos == m_yScrollPosition)
return;
// Update any invalidates areas before the get moved/scrolled.
Update();
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
GtkRange *range = GTK_RANGE(scrolledWindow->vscrollbar);
@@ -567,9 +552,6 @@ void wxScrolledWindow::GtkHScroll( float value )
if (x_pos == m_xScrollPosition)
return;
// Update any invalidates areas before the get moved/scrolled.
Update();
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
GtkRange *range = GTK_RANGE(scrolledWindow->hscrollbar);
@@ -714,11 +696,6 @@ void wxScrolledWindow::SetScrollPos( int orient, int pos, bool refresh )
wxCHECK_RET( m_wxwindow != NULL, wxT("window needs client area for scrolling") );
// Update any invalidates areas before the get moved/scrolled.
// We ignore the refresh parameter here because it is meant
// to control the behaviour AFTER scrolling happens.
Update();
if (orient == wxHORIZONTAL)
{
int max = (int)(m_hAdjust->upper - m_hAdjust->page_size + 0.5);

View File

@@ -4091,6 +4091,16 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
// No scrolling requested.
if ((dx == 0) && (dy == 0)) return;
if (!m_updateRegion.IsEmpty())
{
m_updateRegion.Offset( dx, dy );
int cw = 0;
int ch = 0;
GetClientSize( &cw, &ch );
m_updateRegion.Intersect( 0, 0, cw, ch );
}
#if 1
m_clipPaintRegion = TRUE;

View File

@@ -516,6 +516,16 @@ wxRect wxRegion::GetBox() const
return wxRect( x, y, w, h );
}
bool wxRegion::Offset( wxCoord x, wxCoord y )
{
if (!m_refData)
return FALSE;
gdk_region_offset( M_REGIONDATA->m_region, x, y );
return TRUE;
}
bool wxRegion::Empty() const
{
if (!m_refData)

View File

@@ -320,9 +320,6 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
int noUnitsX, int noUnitsY,
int xPos, int yPos, bool noRefresh )
{
// Update any invalidates areas before the get moved/scrolled.
Update();
int old_x = m_xScrollPixelsPerLine * m_xScrollPosition;
int old_y = m_yScrollPixelsPerLine * m_yScrollPosition;
@@ -358,9 +355,6 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
void wxScrolledWindow::AdjustScrollbars()
{
// Update any invalidates areas before the get moved/scrolled.
Update();
int w, h;
m_targetWindow->GetClientSize( &w, &h );
@@ -435,9 +429,6 @@ void wxScrolledWindow::OnScroll(wxScrollWinEvent& event)
int nScrollInc = CalcScrollInc(event);
if (nScrollInc == 0) return;
// Update any invalidates areas before the get moved/scrolled.
Update();
if (orient == wxHORIZONTAL)
{
int newPos = m_xScrollPosition + nScrollInc;
@@ -482,9 +473,6 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos )
if (((x_pos == -1) || (x_pos == m_xScrollPosition)) &&
((y_pos == -1) || (y_pos == m_yScrollPosition))) return;
// Update any invalidates areas before the get moved/scrolled.
Update();
if ((x_pos != -1) && (m_xScrollPixelsPerLine))
{
int max = (int)(m_hAdjust->upper - m_hAdjust->page_size + 0.5);
@@ -537,9 +525,6 @@ void wxScrolledWindow::GtkVScroll( float value )
if (y_pos == m_yScrollPosition)
return;
// Update any invalidates areas before the get moved/scrolled.
Update();
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
GtkRange *range = GTK_RANGE(scrolledWindow->vscrollbar);
@@ -567,9 +552,6 @@ void wxScrolledWindow::GtkHScroll( float value )
if (x_pos == m_xScrollPosition)
return;
// Update any invalidates areas before the get moved/scrolled.
Update();
GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(m_widget);
GtkRange *range = GTK_RANGE(scrolledWindow->hscrollbar);
@@ -714,11 +696,6 @@ void wxScrolledWindow::SetScrollPos( int orient, int pos, bool refresh )
wxCHECK_RET( m_wxwindow != NULL, wxT("window needs client area for scrolling") );
// Update any invalidates areas before the get moved/scrolled.
// We ignore the refresh parameter here because it is meant
// to control the behaviour AFTER scrolling happens.
Update();
if (orient == wxHORIZONTAL)
{
int max = (int)(m_hAdjust->upper - m_hAdjust->page_size + 0.5);

View File

@@ -4091,6 +4091,16 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
// No scrolling requested.
if ((dx == 0) && (dy == 0)) return;
if (!m_updateRegion.IsEmpty())
{
m_updateRegion.Offset( dx, dy );
int cw = 0;
int ch = 0;
GetClientSize( &cw, &ch );
m_updateRegion.Intersect( 0, 0, cw, ch );
}
#if 1
m_clipPaintRegion = TRUE;