Skip to content

Commit

Permalink
fixup! GafferUI : Add DragEditGadget
Browse files Browse the repository at this point in the history
Draw line in gadget space
  • Loading branch information
murraystevenson committed Mar 5, 2024
1 parent 4f28af2 commit 808ed53
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 25 deletions.
40 changes: 16 additions & 24 deletions src/GafferUI/DragEditGadget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 ) );
Expand Down Expand Up @@ -191,18 +191,17 @@ void DragEditGadget::renderLayer( Layer layer, const Style *style, RenderReason
return;
}

const ViewportGadget *viewportGadget = ancestor<ViewportGadget>();
ViewportGadget::RasterScope rasterScope( viewportGadget );

if( isSelectionRender( reason ) )
{
const ViewportGadget *viewportGadget = ancestor<ViewportGadget>();
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();
Expand All @@ -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 );
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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 );
}

Expand All @@ -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;
Expand All @@ -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<ViewportGadget>();
std::vector<LineSegment2f> 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;
}
Expand Down
4 changes: 3 additions & 1 deletion src/GafferUI/DragEditGadget.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@

#include "GafferUI/Gadget.h"

#include "IECore/VectorTypedData.h"

namespace GafferUI
{

Expand Down Expand Up @@ -99,7 +101,7 @@ class GAFFERUI_API DragEditGadget : public Gadget
Mode m_mode;
bool m_editable;
int m_mergeGroupId;
std::vector<Imath::V2f> m_dragPositions;
IECore::V3fVectorDataPtr m_dragPositions;

};

Expand Down

0 comments on commit 808ed53

Please sign in to comment.