Module concur.extra_widgets.draggable

Add dragging functionality to any Widget.

Useful for e.g. control points in images. Buttons work well as the base widget, but most graphical widgets can be used, apart from the concur.draw ones.

Expand source code
""" Add dragging functionality to any Widget.

Useful for e.g. control points in images. Buttons work well as the base widget, but most graphical
widgets can be used, apart from the `concur.draw` ones. """


import imgui


def draggable(name, widget, tag=None):
    """Add draggable functionality to a widget. Emits (dx, dy) when dragged. The underlying widget works as usual.

    Returned values are equal to the mouse position difference from the previous frame.
    """
    io = imgui.get_io()
    while True:
        try:
            imgui.begin_group()
            next(widget)
        except StopIteration as e:
            return e.value
        finally:
            imgui.end_group()
        if imgui.is_item_active() and (io.mouse_delta[0] or io.mouse_delta[1]):
            return tag if tag is not None else name, io.mouse_delta
        yield

Functions

def draggable(name, widget, tag=None)

Add draggable functionality to a widget. Emits (dx, dy) when dragged. The underlying widget works as usual.

Returned values are equal to the mouse position difference from the previous frame.

Expand source code
def draggable(name, widget, tag=None):
    """Add draggable functionality to a widget. Emits (dx, dy) when dragged. The underlying widget works as usual.

    Returned values are equal to the mouse position difference from the previous frame.
    """
    io = imgui.get_io()
    while True:
        try:
            imgui.begin_group()
            next(widget)
        except StopIteration as e:
            return e.value
        finally:
            imgui.end_group()
        if imgui.is_item_active() and (io.mouse_delta[0] or io.mouse_delta[1]):
            return tag if tag is not None else name, io.mouse_delta
        yield