Source code for timelinelib.canvas.eventboxdrawers.handlerect

# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018  Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Timeline is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Timeline.  If not, see <http://www.gnu.org/licenses/>.


import wx

from timelinelib.canvas.drawing.utils import black_solid_pen
from timelinelib.canvas.drawing.utils import black_solid_brush

LEFT_HANDLE = 'left'
MIDDLE_HANDLE = 'middle'
RIGHT_HANDLE = 'right'


[docs]class HandleRect(wx.Rect): """ This class represents the little squared rectangle showing up when an event is selected. It's a handle with which you can resize or move the event. """ SIZE = 4
[docs] def __init__(self, rect, pos=MIDDLE_HANDLE): wx.Rect.__init__(self, wx.Point(0, 0), wx.Size(self.SIZE, self.SIZE)) {LEFT_HANDLE: self._translate_to_left_edge, MIDDLE_HANDLE: self._translate_to_middle, RIGHT_HANDLE: self._translate_to_right_edge}[pos](rect)
def _translate_to_left_edge(self, rect): """ Translate the handle rectangle to the left edge of the given rectangle (rect.X, rect.Y) +------------------+ (x,y) | | +---+ | | | ------------- |---------- Center line +---+ | | | +------------------+ """ x = (2 * (rect.x - self.x) - self.width) // 2 self.Offset(x, self._get_y(rect)) def _translate_to_right_edge(self, rect): x = (2 * (rect.GetTopRight().x - self.x) - self.width) // 2 self.Offset(x, self._get_y(rect)) def _translate_to_middle(self, rect): x = (self.x + rect.GetTopLeft().x + rect.GetTopRight().x - self.width) // 2 self.Offset(x, self._get_y(rect))
[docs] def draw(self, dc): dc.SetPen(black_solid_pen(1)) dc.SetBrush(black_solid_brush()) dc.DrawRectangle(self)
def _get_y(self, rect): return (self.y + rect.GetTopLeft().y + rect.GetBottomLeft().y - self.height) // 2