Exemplo n.º 1
0
    def draw_text(self, g: Graphics, component: Label, font: FontFace,
                  color: RGBA) -> None:
        text = component.text
        size = component.text_size

        extents = component.context.toolkit.fonts.text_extent(text, font, size)
        padding = component.resolve_insets(StyleKeys.Padding).value_or(
            Insets(0, 0, 0, 0))

        (x, y, w, h) = component.bounds.tuple

        rh = self._ratio_for_align[component.text_align]
        rv = self._ratio_for_align[component.text_vertical_align]

        tx = (w - extents.width - padding.left -
              padding.right) * rh + x + padding.left
        ty = (h - extents.height - padding.top -
              padding.bottom) * rv + extents.height + y + padding.top

        g.set_font_face(font)
        g.set_font_size(size)

        # FIXME: Temporary workaround until we get a better way of handling text shadows.
        if component.shadow:
            g.move_to(tx + 1, ty + 1)

            g.set_source_rgba(0, 0, 0, 0.8)
            g.show_text(text)

        g.move_to(tx, ty)

        g.set_source_rgba(color.r, color.g, color.b, color.a)
        g.show_text(text)
Exemplo n.º 2
0
 def set(self, ctx: Context):
     """
     Set this font to get used on the given context.
     :param ctx:
     """
     ctx.select_font_face(self.name,
                          cairo.FONT_SLANT_ITALIC if self.italic else cairo.FONT_SLANT_NORMAL,
                          cairo.FONT_WEIGHT_BOLD if self.bold else cairo.FONT_WEIGHT_NORMAL)
     ctx.set_font_size(self.size)
 def _generate_layer(self, transcription, page, layer):
     surface = PDFSurface(layer, *page.page_size)
     context = Context(surface)
     # context.select_font_face('Georgia')
     context.set_source_rgba(1, 1, 1, 1 / 256)  # almost invisible
     context.set_font_size(2)
     for line_ink, line_transcription in zip(page.lines, transcription):
         ink, transformation = writing.normalized(line_ink)
         context.save()
         context.transform(
             Matrix(*(Transformation.translation(
                 0, page.page_size[1]).parameter)))
         context.transform(Matrix(*(Transformation.mirror(0).parameter)))
         context.transform(Matrix(*((~transformation).parameter)))
         context.transform(Matrix(*(Transformation.mirror(0).parameter)))
         HANDWRITING_WIDTH = ink.boundary_box[1]
         TYPEWRITING_WIDTH = context.text_extents(line_transcription)[2]
         context.scale(HANDWRITING_WIDTH / TYPEWRITING_WIDTH, 1)
         context.move_to(0, 0)
         context.show_text(line_transcription)
         context.restore()
     context.stroke()
     context.show_page()
     surface.flush()
Exemplo n.º 4
0
        if True:
            canvas.write_to_png(f"{board_name}_bg.png")
            canvas = None

            from PIL import Image
            Image.open(f"{board_name}_bg.png").save(f"{board_name}_bg.jpg")

            canvas = ImageSurface(bg.get_format(), w_p, h)
            ctx = Context(canvas)

        # add labels
        ctx.set_operator(OPERATOR_OVER)

        ctx.select_font_face("Roboto", FONT_SLANT_NORMAL, FONT_WEIGHT_BOLD)
        ctx.set_font_size(FONT_SIZE)

        labels = base_labels + variant_info

        for pass_ in range(2):
            for pin_list, type, note in labels:
                text = f"{pin_list}: {note}" if note else pin_list

                pin_names = pin_list.split("+")

                # calculate label size
                (x_bearing, y_bearing, width, height, x_advance,
                 y_advance) = ctx.text_extents(text)

                label_width = width + 2 * label_pad[0]
                label_height = height + 2 * label_pad[1]