Esempio n. 1
0
    def textlinesize(self, string, font):
        ttfont = ttfont_for(font)
        if ttfont is None:
            size = self.draw.textsize(string, font=None)

            font_ratio = font.size * 1.0 / FontMap.BASE_FONTSIZE
            size = Size(int(size[0] * font_ratio), int(size[1] * font_ratio))
        else:
            size = Size(*ttfont.getsize(string))

        return size
Esempio n. 2
0
    def __init__(self, node1, node2):
        super(DiagramEdge, self).__init__(node1, node2)

        self.leftnote = None
        self.leftnotesize = Size(0, 0)
        self.rightnote = None
        self.rightnotesize = Size(0, 0)
        self.textwidth = 0
        self.textheight = 0
        self.order = 0
        self.activate = True
        self.asynchronous = False
        self.diagonal = False
        self.failed = False
        self.return_label = ''
Esempio n. 3
0
    def _scale(cls, value, ratio):
        if ratio == 1:
            return value

        klass = value.__class__
        if klass == XY:
            ret = XY(value.x * ratio, value.y * ratio)
        elif klass == Size:
            ret = Size(value.width * ratio, value.height * ratio)
        elif klass == Box:
            ret = Box(value[0] * ratio, value[1] * ratio,
                      value[2] * ratio, value[3] * ratio)
        elif klass == tuple:
            ret = tuple([cls.scale(x, ratio) for x in value])
        elif klass == list:
            ret = [cls.scale(x, ratio) for x in value]
        elif klass == EdgeLines:
            ret = EdgeLines()
            ret.polylines = cls.scale(value.polylines, ratio)
        elif klass == FontInfo:
            ret = FontInfo(value.familyname, value.path, value.size * ratio)
        elif klass == int:
            ret = value * ratio
        elif klass == str:
            ret = value
        else:
            ret = cls(value, ratio)

        return ret
Esempio n. 4
0
    def __init__(self, node, metrics=None):
        super(Actor, self).__init__(node, metrics)

        m = metrics.cell(node)
        if node.label:
            font = metrics.font_for(self.node)
            textsize = metrics.textsize(node.label, font)
            shortside = min(m.width, m.height - textsize.height)
        else:
            textsize = Size(0, 0)
            shortside = min(m.width, m.height)

        r = self.radius = shortside // 8  # radius of actor's head
        self.center = metrics.cell(node).center

        self.connectors[0] = XY(self.center.x, self.center.y - r * 9 // 2)
        self.connectors[1] = XY(self.center.x + r * 4, self.center.y)
        self.connectors[2] = XY(self.center.x,
                                self.center.y + r * 4 + textsize.height)
        self.connectors[3] = XY(self.center.x - r * 4, self.center.y)

        self.textbox = Box(m.left.x,
                           self.center.y + r * 4,
                           m.right.x,
                           self.connectors[2].y)
Esempio n. 5
0
def textsize(string, font):
    """Measure rendering size (width and height) of line.
       Returned size will not be exactly as rendered text size,
       Because this method does not use fonts to measure size.
    """
    width = (zenkaku_len(string) * font.size +
             hankaku_len(string) * font.size * 0.55)

    return Size(int(math.ceil(width)), font.size)
Esempio n. 6
0
    def textsize(self, text, scaled=False):
        if isinstance(text, string_types):
            textsize = self.drawer.textlinesize(text, self.font)
        else:
            if text:
                size = [self.textsize(s) for s in text]
                width = max(s.width for s in size)
                height = (sum(s.height for s in size) + self.line_spacing *
                          (len(text) - 1))

                textsize = Size(width, height)
            else:
                textsize = Size(0, 0)

        if scaled:
            textsize = Size(textsize.width * self.scale,
                            textsize.height * self.scale)

        return textsize
Esempio n. 7
0
    def pagesize(self, width, height):
        margin = self.metrics.page_margin
        padding = self.metrics.page_padding

        dummy = DiagramNode(None)
        dummy.xy = XY(width - 1, height - 1)
        x, y = self._node_bottomright(dummy, use_padding=False)
        x_span = self.span_width[width]
        y_span = self.span_height[height]
        return Size(x + margin.x + padding[1] + x_span,
                    y + margin.y + padding[2] + y_span)
Esempio n. 8
0
    def __init__(self, filename, **kwargs):
        self.filename = filename
        self.transparency = kwargs.get('transparency')
        self.bgcolor = kwargs.get('color', (256, 256, 256))
        self._image = None
        self.draw = None

        if kwargs.get('parent'):
            self.scale_ratio = kwargs.get('parent').scale_ratio
        else:
            self.scale_ratio = kwargs.get('scale_ratio', 1)

        self.set_canvas_size(Size(1, 1))  # This line make textsize() workable
Esempio n. 9
0
    def func(self, *args, **kwargs):
        args = list(args)

        if kwargs.get('filter') not in ('blur', 'transp-blur'):
            return fn(self, *args, **kwargs)
        else:
            box = get_shape_box(*args)
            args[0] = get_abs_coordinate(box, *args)

            size = Size(box.width + PADDING * 2, box.height + PADDING * 2)
            shadow = create_shadow(self, size, *args, **kwargs)
            xy = XY(box.x1 - PADDING, box.y1 - PADDING)
            self.paste(shadow, xy, shadow)
Esempio n. 10
0
    def test_size_resize(self):
        size = Size(10, 20)

        resized = size.resize(width=50, height=50)
        self.assertEqual((50, 50), resized)

        resized = size.resize(width=50)
        self.assertEqual((50, 100), resized)

        resized = size.resize(height=50)
        self.assertEqual((25, 50), resized)

        resized = size.resize(scale=50)
        self.assertEqual((5, 10), resized)

        resized = size.resize(width=50, scale=50)
        self.assertEqual((25, 50), resized)

        resized = size.resize(height=50, scale=50)
        self.assertEqual((12.5, 25), resized)

        resized = size.resize(width=50, height=50, scale=50)
        self.assertEqual((25, 25), resized)
 def textlinesize(self, string, font, **kwargs):
     return Size(len(string) * 15, 10)
Esempio n. 12
0
 def textlinesize(self, string, font, **kwargs):
     s = self.drawer.textsize(string)
     return Size(s[0], s[1])
Esempio n. 13
0
    def test_size_to_integer_point(self):
        size = Size(1.5, 2.5)

        self.assertEqual((1, 2), size.to_integer_point())
 def textsize(self, text):
     length = len(text)
     return Size(CHAR_WIDTH * length, CHAR_HEIGHT)
Esempio n. 15
0
 def __init__(self, filename, **kwargs):
     self.filename = filename
     self.size = Size(0, 0)
     self.buffer = []
Esempio n. 16
0
    def __init__(self, filename, **kwargs):
        self.filename = filename
        self.canvas = None
        self.fonts = {}

        self.set_canvas_size(Size(1, 1))  # This line make textsize() workable
Esempio n. 17
0
 def textlinesize(self, string, font):
     self.set_font(font)
     width = self.canvas.stringWidth(string, font.path, font.size)
     return Size(int(math.ceil(width)), font.size)