Esempio n. 1
0
    def render(self, text, _, color):
        if self.font is None:
            return "", (0, 0)

        fm = QFontMetrics(self.font)
        rect = fm.boundingRect(text)
        im = QImage(
            rect.x() + rect.width(),
            rect.height(),
            QImage.Format_ARGB32_Premultiplied,
        )
        im.fill(QColor(0, 0, 0, 0))
        painter = QPainter()
        painter.begin(im)
        painter.setPen(QPen(QColor(*color)))
        painter.setFont(self.font)
        painter.drawText(QPoint(0 - rect.x(), 0 - rect.y()), text)
        painter.end()

        bits = im.bits()
        try:
            pixels = bits.tobytes()
        except AttributeError:
            bits.setsize(im.byteCount())
            pixels = bytes(bits)
        return pixels, (rect.x() + rect.width(), rect.height())
Esempio n. 2
0
    def __init__(self, parent, *, argv, columns=80, rows=24):
        super().__init__(parent)
        self.font = ui.Font("Roboto Mono", 14)
        self.set_background_color(ui.Color(*COLOR))
        self.text_color = ui.Color(0xFF, 0xFF, 0xFF)

        self.input_thread = None
        self.output_thread = None
        self.output.connect(self.__on_output)

        self._completed = False
        self.exited.connect(self.__on_exited)

        self.line_buffer = []
        self.lines = []
        # for _ in range(25):
        self._new_line()
        self.cx = 0
        self.cy = 0

        # self.execute(["version"])
        # self.execute(["python", "-i"])
        self.process = None
        self.execute(argv)

        # FIXME: Using Qt directly
        from fsui.qt import Qt, QPainter, QPixmap

        self._widget.setFocusPolicy(Qt.StrongFocus)

        painter = QPainter()
        pixmap = QPixmap(100, 100)
        painter.begin(pixmap)
        painter.setFont(self.font.qfont())
        size = painter.boundingRect(
            0, 0, 10000, 1000, Qt.AlignLeft | Qt.AlignTop, " " * columns
        )
        painter.end()
        print(size)
        self.line_width = size.width()
        self.line_height = size.height()

        self.set_min_size((self.line_width, self.line_height * rows))