From 808ed53f83b9756f5559b494b849c74b7a03ca0e Mon Sep 17 00:00:00 2001 From: Murray Stevenson <50844517+murraystevenson@users.noreply.github.com> Date: Sun, 3 Mar 2024 13:22:08 -0800 Subject: [PATCH] fixup! GafferUI : Add DragEditGadget Draw line in gadget space --- src/GafferUI/DragEditGadget.cpp | 40 +++++++++++++-------------------- src/GafferUI/DragEditGadget.h | 4 +++- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/GafferUI/DragEditGadget.cpp b/src/GafferUI/DragEditGadget.cpp index c86c2dffc8a..c2f2dac4457 100644 --- a/src/GafferUI/DragEditGadget.cpp +++ b/src/GafferUI/DragEditGadget.cpp @@ -147,7 +147,7 @@ const char *translucentConstantFragSource() GAFFER_GRAPHCOMPONENT_DEFINE_TYPE( DragEditGadget ); DragEditGadget::DragEditGadget() - : Gadget( "DragEditGadget" ), m_mode( None ), m_editable( false ) + : Gadget( "DragEditGadget" ), m_mode( None ), m_editable( false ), m_dragPositions( new V3fVectorData ) { buttonPressSignal().connect( boost::bind( &DragEditGadget::buttonPress, this, ::_1, ::_2 ) ); buttonReleaseSignal().connect( boost::bind( &DragEditGadget::buttonRelease, this, ::_1, ::_2 ) ); @@ -191,18 +191,17 @@ void DragEditGadget::renderLayer( Layer layer, const Style *style, RenderReason return; } - const ViewportGadget *viewportGadget = ancestor(); - ViewportGadget::RasterScope rasterScope( viewportGadget ); - if( isSelectionRender( reason ) ) { + const ViewportGadget *viewportGadget = ancestor(); + ViewportGadget::RasterScope rasterScope( viewportGadget ); // We render a selection overlay over the entire viewport to intercept all events. glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); style->renderSolidRectangle( Box2f( V2f( 0, 0 ), viewportGadget->getViewport() ) ); return; } - if( m_dragPositions.size() > 1 ) + if( m_dragPositions->readable().size() > 1 ) { // Render a curve to represent the dragged cursor trail. State::bindBaseState(); @@ -220,16 +219,9 @@ void DragEditGadget::renderLayer( Layer layer, const Style *style, RenderReason ); IntVectorDataPtr vertsPerCurve = new IntVectorData(); - vertsPerCurve->writable().push_back( m_dragPositions.size() ); + vertsPerCurve->writable().push_back( m_dragPositions->readable().size() ); IECoreGL::CurvesPrimitivePtr curves = new IECoreGL::CurvesPrimitive( CubicBasisf::linear(), false, vertsPerCurve ); - V3fVectorDataPtr verts = new V3fVectorData(); - - for( const auto &p : m_dragPositions ) - { - const auto r = viewportGadget->gadgetToRasterSpace( V3f( p.x, p.y, 0 ), graphGadget() ); - verts->writable().emplace_back( V3f( r.x, r.y, 0.0f ) ); - } - curves->addPrimitiveVariable( "P", IECoreScene::PrimitiveVariable( IECoreScene::PrimitiveVariable::Vertex, verts ) ); + curves->addPrimitiveVariable( "P", IECoreScene::PrimitiveVariable( IECoreScene::PrimitiveVariable::Vertex, m_dragPositions ) ); group->addChild( curves ); group->render( glState ); @@ -280,7 +272,7 @@ bool DragEditGadget::keyRelease( GadgetPtr gadget, const KeyEvent &event ) { m_mode = None; Pointer::setCurrent( "" ); - m_dragPositions.clear(); + m_dragPositions->writable().clear(); dirty( DirtyType::Render ); return true; @@ -308,7 +300,7 @@ bool DragEditGadget::buttonPress( GadgetPtr gadget, const ButtonEvent &event ) } if( event.buttons == ButtonEvent::Left && m_editable ) { - m_dragPositions.emplace_back( V2f( i.x, i.y ) ); + m_dragPositions->writable().push_back( i ); } return true; @@ -327,7 +319,7 @@ bool DragEditGadget::buttonRelease( GadgetPtr gadget, const ButtonEvent &event ) m_mergeGroupId++; } - m_dragPositions.clear(); + m_dragPositions->writable().clear(); dirty( DirtyType::Render ); return true; @@ -367,7 +359,7 @@ bool DragEditGadget::dragMove( GadgetPtr gadget, const DragDropEvent &event ) } if( m_mode != None && m_editable ) { - m_dragPositions.emplace_back( V2f( i.x, i.y ) ); + m_dragPositions->writable().push_back( i ); dirty( DirtyType::Render ); } @@ -382,7 +374,7 @@ bool DragEditGadget::dragEnd( GadgetPtr gadget, const DragDropEvent &event ) m_mergeGroupId++; } - m_dragPositions.clear(); + m_dragPositions->writable().clear(); dirty( DirtyType::Render ); return true; @@ -400,19 +392,19 @@ std::string DragEditGadget::undoMergeGroup() const void DragEditGadget::disconnectConnectionGadgets() { - if( m_dragPositions.empty() ) + if( m_dragPositions->readable().empty() ) { return; } const ViewportGadget *viewportGadget = ancestor(); std::vector rasterLines; - V2f lineStart = m_dragPositions.front(); - for( const auto &lineEnd : m_dragPositions ) + V3f lineStart = m_dragPositions->readable().front(); + for( const auto &lineEnd : m_dragPositions->readable() ) { rasterLines.emplace_back( LineSegment2f( - viewportGadget->gadgetToRasterSpace( V3f( lineStart.x, lineStart.y, 0 ), graphGadget() ), - viewportGadget->gadgetToRasterSpace( V3f( lineEnd.x, lineEnd.y, 0 ), graphGadget() ) + viewportGadget->gadgetToRasterSpace( lineStart, graphGadget() ), + viewportGadget->gadgetToRasterSpace( lineEnd, graphGadget() ) ) ); lineStart = lineEnd; } diff --git a/src/GafferUI/DragEditGadget.h b/src/GafferUI/DragEditGadget.h index 6c5125e1572..0e1e658b51c 100644 --- a/src/GafferUI/DragEditGadget.h +++ b/src/GafferUI/DragEditGadget.h @@ -38,6 +38,8 @@ #include "GafferUI/Gadget.h" +#include "IECore/VectorTypedData.h" + namespace GafferUI { @@ -99,7 +101,7 @@ class GAFFERUI_API DragEditGadget : public Gadget Mode m_mode; bool m_editable; int m_mergeGroupId; - std::vector m_dragPositions; + IECore::V3fVectorDataPtr m_dragPositions; };