Exemplo n.º 1
0
def default_font_family():
    global _dff
    if _dff is None:
        families = set(map(unicode, QFontDatabase().families()))
        for x in ('Ubuntu Mono', 'Consolas', 'Liberation Mono'):
            if x in families:
                _dff = x
                break
        if _dff is None:
            _dff = 'Courier New'
    return _dff
Exemplo n.º 2
0
 def __init__(self, *args):
     QAbstractListModel.__init__(self, *args)
     from calibre.utils.fonts import fontconfig
     try:
         self.families = fontconfig.find_font_families()
     except:
         self.families = []
         print 'WARNING: Could not load fonts'
         traceback.print_exc()
     # Restrict to Qt families as Qt tends to crash
     qt_families = set([unicode(x) for x in QFontDatabase().families()])
     self.families = list(qt_families.intersection(set(self.families)))
     self.families.sort()
     self.families[:0] = [_('None')]
     self.font = QFont('Verdana' if iswindows else 'sansserif')
Exemplo n.º 3
0
    def do_paint(self, painter, option, index):
        text = unicode(index.data(Qt.DisplayRole).toString())
        font = QFont(option.font)
        font.setPointSize(QFontInfo(font).pointSize() * 1.5)
        font2 = QFont(font)
        font2.setFamily(text)

        system, has_latin = writing_system_for_font(font2)
        if has_latin:
            font = font2

        r = option.rect

        if option.state & QStyle.State_Selected:
            painter.setPen(QPen(option.palette.highlightedText(), 0))

        if (option.direction == Qt.RightToLeft):
            r.setRight(r.right() - 4)
        else:
            r.setLeft(r.left() + 4)

        painter.setFont(font)
        painter.drawText(r,
                         Qt.AlignVCenter | Qt.AlignLeading | Qt.TextSingleLine,
                         text)

        if (system != QFontDatabase.Any):
            w = painter.fontMetrics().width(text + "  ")
            painter.setFont(font2)
            sample = QFontDatabase().writingSystemSample(system)
            if (option.direction == Qt.RightToLeft):
                r.setRight(r.right() - w)
            else:
                r.setLeft(r.left() + w)
            painter.drawText(
                r, Qt.AlignVCenter | Qt.AlignLeading | Qt.TextSingleLine,
                sample)
Exemplo n.º 4
0
def writing_system_for_font(font):
    has_latin = True
    systems = QFontDatabase().writingSystems(font.family())

    # this just confuses the algorithm below. Vietnamese is Latin with lots of
    # special chars
    try:
        systems.remove(QFontDatabase.Vietnamese)
    except ValueError:
        pass

    system = QFontDatabase.Any

    if (QFontDatabase.Latin not in systems):
        has_latin = False
        # we need to show something
        if systems:
            system = systems[-1]
    else:
        systems.remove(QFontDatabase.Latin)

    if not systems:
        return system, has_latin

    if (len(systems) == 1 and systems[0] > QFontDatabase.Cyrillic):
        return systems[0], has_latin

    if (len(systems) <= 2 and systems[-1] > QFontDatabase.Armenian
            and systems[-1] < QFontDatabase.Vietnamese):
        return systems[-1], has_latin

    if (len(systems) <= 5 and systems[-1] >= QFontDatabase.SimplifiedChinese
            and systems[-1] <= QFontDatabase.Korean):
        system = systems[-1]

    return system, has_latin