From: Robert Roebling Date: Sat, 25 Nov 2000 20:07:21 +0000 (+0000) Subject: Small mods to wxCanvas. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f03b31e838a1b140fb926f9089d71ad0e01ba0b5?ds=inline Small mods to wxCanvas. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8815 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/contrib/samples/canvas/simple/simple.cpp b/contrib/samples/canvas/simple/simple.cpp index 796339e384..3ee80e97b0 100644 --- a/contrib/samples/canvas/simple/simple.cpp +++ b/contrib/samples/canvas/simple/simple.cpp @@ -47,28 +47,29 @@ MyFrame::MyFrame( wxWindow *parent, wxWindowID id, const wxString &title, CreateMyMenuBar(); CreateStatusBar(1); - SetStatusText( "Welcome!" ); + SetStatusText( "Welcome to wxCanvas sample!" ); SetIcon(wxICON(mondrian)); - // wxCanvas from here - + // Create wxCanvasAdmin and wxCanvas. m_admin = new wxCanvasAdmin; wxCanvas *canvas = new wxCanvas( m_admin, this, -1 ); + + canvas->SetScroll( 0, 0, 400, 600 ); + canvas->SetMappingScroll( 0, 0, 400, 600, FALSE ); + + // The wxCanvasAdmin need to know about all Admin wxCanvas objects. m_admin->Append( canvas ); + + // One wxCanvas is the active one (current rendering and current + // world coordinates). m_admin->SetActive( canvas ); - + // One object group is the root in every canvas. wxCanvasObjectGroup *root = new wxCanvasObjectGroup(0,0); root->DeleteContents( TRUE ); - wxCanvasRect *rect; - - rect = new wxCanvasRect( 120,10,120,140 ); - rect->SetBrush( *wxRED_BRUSH ); - root->Append( rect ); - -/* + // Bunch of rects and images. wxBitmap bitmap( smile_xpm ); wxImage image( bitmap ); @@ -92,8 +93,12 @@ MyFrame::MyFrame( wxWindow *parent, wxWindowID id, const wxString &title, r->SetBrush( *wxRED_BRUSH ); root->Append( r ); } -*/ + // This will call all object and children recursivly so + // all know what their wxCanvasAdmin is. Call at the end. + root->SetAdmin( m_admin ); + + // One object group is the root object. canvas->SetRoot( root ); } diff --git a/contrib/src/canvas/canvas.cpp b/contrib/src/canvas/canvas.cpp index 12ff75ff0b..57898d1fe8 100644 --- a/contrib/src/canvas/canvas.cpp +++ b/contrib/src/canvas/canvas.cpp @@ -50,6 +50,7 @@ FT_Library g_freetypeLibrary; //---------------------------------------------------------------------------- // wxCanvasObject //---------------------------------------------------------------------------- + wxCanvasObject::wxCanvasObject() { // the default event handler is just this object @@ -367,9 +368,11 @@ wxCanvasObject* wxCanvasObject::IsHitWorld( double x, double y, double margin ) if ((x >= m_bbox.GetMinX()-margin) && (x <= m_bbox.GetMaxX()+margin) && (y >= m_bbox.GetMinY()-margin) && - (y <= m_bbox.GetMaxY()+margin) - ) + (y <= m_bbox.GetMaxY()+margin)) + { return this; + } + return (wxCanvasObject*) NULL; } @@ -377,6 +380,7 @@ wxCanvasObject* wxCanvasObject::Contains( wxCanvasObject* obj ) { if (obj == this) return this; + return (wxCanvasObject*) NULL; } @@ -392,7 +396,7 @@ void wxCanvasObject::ReleaseMouse() bool wxCanvasObject::IsCapturedMouse() { - return m_admin->GetActive()->GetCaptured()==this; + return (m_admin->GetActive()->GetCaptured() == this); } @@ -510,7 +514,9 @@ void wxCanvasObjectGroup::Prepend( wxCanvasObject* obj ) { m_objects.Insert( obj ); if (m_objects.First()) + { m_bbox.Expand(obj->GetBbox()); + } else { m_bbox.SetValid(FALSE); @@ -522,7 +528,9 @@ void wxCanvasObjectGroup::Append( wxCanvasObject* obj ) { m_objects.Append( obj ); if (m_objects.First()) + { m_bbox.Expand(obj->GetBbox()); + } else { m_bbox.SetValid(FALSE); @@ -535,7 +543,9 @@ void wxCanvasObjectGroup::Insert( size_t before, wxCanvasObject* obj ) m_objects.Insert( before, obj ); m_bbox.SetValid(FALSE); if (m_objects.First()) + { m_bbox.Expand(obj->GetBbox()); + } else { m_bbox.SetValid(FALSE); @@ -657,7 +667,7 @@ void wxCanvasObjectGroup::WriteSVG( wxTextOutputStream &stream ) { } -wxCanvasObject* wxCanvasObjectGroup::IsHitWorld( double x, double y, double margin ) +wxCanvasObject* wxCanvasObjectGroup::IsHitWorld( double x, double y, double margin ) { //KKKfirst check if within bbox //will only work if they are always uptodate @@ -711,8 +721,6 @@ int wxCanvasObjectGroup::IndexOf( wxCanvasObject* obj ) return m_objects.IndexOf( obj ); } - - //---------------------------------------------------------------------------- // wxCanvasObjectRef //---------------------------------------------------------------------------- @@ -720,7 +728,7 @@ int wxCanvasObjectGroup::IndexOf( wxCanvasObject* obj ) wxCanvasObjectRef::wxCanvasObjectRef(double x, double y, wxCanvasObject* obj) : wxCanvasObject() { - lworld.Translate(x,y); + lworld.Translate(x,y); m_obj = obj; m_bbox.SetValid(FALSE); @@ -1421,12 +1429,10 @@ wxCanvasImage::wxCanvasImage( const wxImage &image, double x, double y, double w m_image = image; - m_orgw=m_image.GetWidth(); - m_orgh=m_image.GetHeight(); + m_orgw = m_image.GetWidth(); + m_orgh = m_image.GetHeight(); m_isImage = TRUE; - m_visible = FALSE; -//KKK m_visible=TRUE; CalcBoundingBox(); } @@ -1439,8 +1445,8 @@ void wxCanvasImage::TransLate( double x, double y ) void wxCanvasImage::CalcBoundingBox() { - m_bbox.SetMin( m_x , m_y); - m_bbox.SetMax( m_x + m_width , m_y + m_height); + m_bbox.SetMin( m_x, m_y ); + m_bbox.SetMax( m_x + m_width, m_y + m_height ); } void wxCanvasImage::Render(wxTransformMatrix* cworld, int clip_x, int clip_y, int clip_width, int clip_height ) @@ -1902,7 +1908,7 @@ wxCanvas::wxCanvas( wxCanvasAdmin* admin, wxWindow *parent, wxWindowID id, m_background = *wxWHITE; m_lastMouse = (wxCanvasObject*)NULL; m_captureMouse = (wxCanvasObject*)NULL; - m_frozen = TRUE; + m_frozen = FALSE; m_oldDeviceX = 0; m_oldDeviceY = 0; m_scrolled=FALSE; @@ -2607,11 +2613,13 @@ void wxCanvas::SetMappingScroll( double vx1, double vy1, double vx2, double v // make mappingmatrix m_mapping_matrix.Identity(); if (!border) + { // translate the drawing to 0,0 if (m_yaxis) m_mapping_matrix.Translate(-m_virt_minX,-m_virt_maxY); else m_mapping_matrix.Translate(-m_virt_minX,-m_virt_minY); + } else { // make a small white border around the drawing @@ -2673,17 +2681,17 @@ void wxCanvas::SetScroll(double vx1,double vy1,double vx2,double vy2) double dmvx = m_virtm_maxX - m_virtm_minX; double dmvy = m_virtm_maxY - m_virtm_minY; - SetScrollbar(wxHORIZONTAL,(m_virt_minX-m_virtm_minX)/dmvx *1000,dvx/dmvx *1000,1000,true); + SetScrollbar(wxHORIZONTAL,(m_virt_minX-m_virtm_minX)/dmvx *1000,dvx/dmvx *1000,1000,FALSE); if (m_yaxis) { - SetScrollbar(wxVERTICAL,(m_virtm_maxY-m_virt_maxY)/dmvy *1000,dvy/dmvy *1000,1000,true); + SetScrollbar(wxVERTICAL,(m_virtm_maxY-m_virt_maxY)/dmvy *1000,dvy/dmvy *1000,1000,FALSE); } else { - SetScrollbar(wxVERTICAL,(m_virt_minY-m_virtm_minY)/dmvy *1000,dvy/dmvy *1000,1000,true); + SetScrollbar(wxVERTICAL,(m_virt_minY-m_virtm_minY)/dmvy *1000,dvy/dmvy *1000,1000,FALSE); } - m_scrolled=true; + m_scrolled=TRUE; } // coordinates conversions