def __init__(self, dark): self.figure = Figure(figsize=(0, 1000), dpi=75, facecolor='w', edgecolor='k') self.axes = self.figure.add_axes([0.12, 0.08, 0.75, 0.90]) self.figure.patch.set_alpha(0) self.axes.margins(0, 0.05) self.axes.ticklabel_format(useOffset=False) self.axes.xaxis.set_major_locator( MultipleLocatorWithMargin(600, 0, 0.03)) self.axes.xaxis.set_major_formatter( ticker.FuncFormatter(lambda x, pos: "{}m".format(int(x / 60)))) if dark: self.axes.patch.set_facecolor('black') FigureCanvas.__init__(self, self.figure) self.set_size_request(400, 300) self.lines = {} self.texts = {}
def __init__(self, timeline, binding): figure = Figure() FigureCanvas.__init__(self, figure) Loggable.__init__(self) self.__timeline = timeline self.__source = binding.props.control_source self.__source.connect("value-added", self.__controlSourceChangedCb) self.__source.connect("value-removed", self.__controlSourceChangedCb) self.__source.connect("value-changed", self.__controlSourceChangedCb) self.__propertyName = binding.props.name self.__paramspec = binding.pspec self.get_style_context().add_class("KeyframeCurve") self.__ylim_min, self.__ylim_max = KeyframeCurve.YLIM_OVERRIDES.get( binding.pspec, (0.0, 1.0)) # Curve values, basically separating source.get_values() timestamps # and values. self.__line_xs = [] self.__line_ys = [] # axisbg to None for transparency self.__ax = figure.add_axes([0, 0, 1, 1], axisbg='None') # Clear the Axes object. self.__ax.cla() # FIXME: drawing a grid and ticks would be nice, but # matplotlib is too slow for now. self.__ax.grid(False) self.__ax.tick_params(axis='both', which='both', bottom='off', top='off', right='off', left='off') # This seems to also be necessary for transparency .. figure.patch.set_visible(False) # The PathCollection object holding the keyframes dots. sizes = [50] self.__keyframes = self.__ax.scatter([], [], marker='D', s=sizes, c=KEYFRAME_NODE_COLOR, zorder=2) # matplotlib weirdness, simply here to avoid a warning .. self.__keyframes.set_picker(True) # The Line2D object holding the lines between keyframes. self.__line = self.__ax.plot([], [], alpha=KEYFRAME_LINE_ALPHA, c=KEYFRAME_LINE_COLOR, linewidth=KEYFRAME_LINE_HEIGHT, zorder=1)[0] self.__updatePlots() # Drag and drop logic # Whether the clicked keyframe or line has been dragged. self.__dragged = False # The inpoint of the clicked keyframe. self.__offset = None # The (offset, value) of both keyframes of the clicked keyframe line. self.__clicked_line = () # Whether the mouse events go to the keyframes logic. self.handling_motion = False self.__hovered = False # Whether a keyframe has just been removed. self.__keyframe_removed = False self.connect("motion-notify-event", self.__gtkMotionEventCb) self.connect("event", self._eventCb) self.connect("notify::height-request", self.__heightRequestCb) self.mpl_connect('button_press_event', self.__mplButtonPressEventCb) self.mpl_connect('button_release_event', self.__mplButtonReleaseEventCb) self.mpl_connect('motion_notify_event', self.__mplMotionEventCb)
def __init__(self, timeline, binding): figure = Figure() FigureCanvas.__init__(self, figure) Loggable.__init__(self) self.__timeline = timeline self.__source = binding.props.control_source self.__source.connect("value-added", self.__controlSourceChangedCb) self.__source.connect("value-removed", self.__controlSourceChangedCb) self.__source.connect("value-changed", self.__controlSourceChangedCb) self.__propertyName = binding.props.name self.__resetTooltip() self.get_style_context().add_class("KeyframeCurve") self.__ylim_min, self.__ylim_max = KeyframeCurve.YLIM_OVERRIDES.get( binding.pspec, (0.0, 1.0)) # Curve values, basically separating source.get_values() timestamps # and values. self.__line_xs = [] self.__line_ys = [] # axisbg to None for transparency self.__ax = figure.add_axes([0, 0, 1, 1], axisbg='None') self.__ax.cla() # FIXME: drawing a grid and ticks would be nice, but # matplotlib is too slow for now. self.__ax.grid(False) self.__ax.tick_params(axis='both', which='both', bottom='off', top='off', right='off', left='off') # This seems to also be necessary for transparency .. figure.patch.set_visible(False) # The actual Line2D object self.__line = None # The PathCollection as returned by scatter sizes = [50] self.__keyframes = self.__ax.scatter([], [], marker='D', s=sizes, c=KEYFRAME_NODE_COLOR, zorder=2) # matplotlib weirdness, simply here to avoid a warning .. self.__keyframes.set_picker(True) self.__line = self.__ax.plot([], [], alpha=KEYFRAME_LINE_ALPHA, c=KEYFRAME_LINE_COLOR, linewidth=KEYFRAME_LINE_HEIGHT, zorder=1)[0] self.__updatePlots() # Drag and drop logic self.__dragged = False self.__offset = None self.handling_motion = False self.__hovered = False self.connect("motion-notify-event", self.__gtkMotionEventCb) self.connect("event", self._eventCb) self.connect("notify::height-request", self.__heightRequestCb) self.mpl_connect('button_press_event', self.__mplButtonPressEventCb) self.mpl_connect('button_release_event', self.__mplButtonReleaseEventCb) self.mpl_connect('motion_notify_event', self.__mplMotionEventCb)
def __init__(self, timeline, binding): figure = Figure() FigureCanvas.__init__(self, figure) Loggable.__init__(self) self.__timeline = timeline self.__source = binding.props.control_source self.__propertyName = binding.props.name self.__resetTooltip() # Curve values, basically separating source.get_values() timestamps # and values. self.__line_xs = [] self.__line_ys = [] # axisbg to None for transparency self.__ax = figure.add_axes([0, 0, 1, 1], axisbg='None') self.__ax.cla() # FIXME: drawing a grid and ticks would be nice, but # matplotlib is too slow for now. self.__ax.grid(False) self.__ax.tick_params(axis='both', which='both', bottom='off', top='off', right='off', left='off') # This seems to also be necessary for transparency .. figure.patch.set_visible(False) # The actual Line2D object self.__line = None # The PathCollection as returned by scatter self.__keyframes = None sizes = [50] colors = ['r'] self.__keyframes = self.__ax.scatter([], [], marker='D', s=sizes, c=colors, zorder=2) # matplotlib weirdness, simply here to avoid a warning .. self.__keyframes.set_picker(True) self.__line = self.__ax.plot([], [], linewidth=1.0, zorder=1)[0] self.__updatePlots() # Drag and drop logic self.__dragged = False self.__offset = None self.handling_motion = False self.__hovered = False self.connect("motion-notify-event", self.__gtkMotionEventCb) self.connect("event", self._eventCb) self.mpl_connect('button_press_event', self.__mplButtonPressEventCb) self.mpl_connect( 'button_release_event', self.__mplButtonReleaseEventCb) self.mpl_connect('motion_notify_event', self.__mplMotionEventCb)