Beispiel #1
0
 def on_bridge_ready(self):
     f = QApplication.instance().font()
     fi = QFontInfo(f)
     family = f.family()
     if family in ('.AppleSystemUIFont', 'MS Shell Dlg 2'):
         family = 'system-ui'
     ui_data = {
         'all_font_families':
         QFontDatabase().families(),
         'ui_font_family':
         family,
         'ui_font_sz':
         '{}px'.format(fi.pixelSize()),
         'show_home_page_on_ready':
         self.show_home_page_on_ready,
         'system_colors':
         system_colors(),
         'QT_VERSION':
         QT_VERSION,
         'short_time_fmt':
         QLocale.system().timeFormat(QLocale.FormatType.ShortFormat),
     }
     self.bridge.create_view(vprefs['session_data'],
                             vprefs['local_storage'],
                             field_metadata.all_metadata(), ui_data)
     for func, args in iteritems(self.pending_bridge_ready_actions):
         getattr(self.bridge, func)(*args)
    def do_paint(self, painter, option, index):
        text = str(index.data(Qt.DisplayRole) or '')
        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)
Beispiel #3
0
 def on_bridge_ready(self):
     f = QApplication.instance().font()
     self.bridge.create_view(
         vprefs['session_data'], QFontDatabase().families(), field_metadata.all_metadata(),
         f.family(), f.pointSize())
     for func, args in iteritems(self.pending_bridge_ready_actions):
         getattr(self.bridge, func)(*args)
Beispiel #4
0
 def on_bridge_ready(self):
     f = QApplication.instance().font()
     fi = QFontInfo(f)
     self.bridge.create_view(
         vprefs['session_data'], vprefs['local_storage'], QFontDatabase().families(), field_metadata.all_metadata(),
         f.family(), '{}px'.format(fi.pixelSize()), self.show_home_page_on_ready)
     for func, args in iteritems(self.pending_bridge_ready_actions):
         getattr(self.bridge, func)(*args)
def main():
    app = QtWidgets.QApplication(sys.argv)
    fontDB = QFontDatabase()
    fontDB.applicationFontFamilies(
        fontDB.addApplicationFont(":/res/Harmattan.ttf"))
    application = AppWindowByHaies()
    application.show()
    app.exec_()
Beispiel #6
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
Beispiel #7
0
    def test_qt(self):
        from PyQt5.Qt import QImageReader, QNetworkAccessManager, QFontDatabase
        from calibre.utils.img import image_from_data, image_to_data, test
        # Ensure that images can be read before QApplication is constructed.
        # Note that this requires QCoreApplication.libraryPaths() to return the
        # path to the Qt plugins which it always does in the frozen build,
        # because the QT_PLUGIN_PATH env var is set. On non-frozen builds,
        # it should just work because the hard-coded paths of the Qt
        # installation should work. If they do not, then it is a distro
        # problem.
        fmts = set(
            map(lambda x: x.data().decode('utf-8'),
                QImageReader.supportedImageFormats()))
        testf = {'jpg', 'png', 'svg', 'ico', 'gif'}
        self.assertEqual(
            testf.intersection(fmts), testf,
            "Qt doesn't seem to be able to load some of its image plugins. Available plugins: %s"
            % fmts)
        data = P('images/blank.png', allow_user_override=False, data=True)
        img = image_from_data(data)
        image_from_data(
            P('catalog/mastheadImage.gif',
              allow_user_override=False,
              data=True))
        for fmt in 'png bmp jpeg'.split():
            d = image_to_data(img, fmt=fmt)
            image_from_data(d)
        # Run the imaging tests
        test()

        from calibre.gui2 import Application
        os.environ.pop('DISPLAY', None)
        has_headless = isosx or islinux
        app = Application([], headless=has_headless)
        self.assertGreaterEqual(
            len(QFontDatabase().families()), 5,
            'The QPA headless plugin is not able to locate enough system fonts via fontconfig'
        )
        if has_headless:
            from calibre.ebooks.covers import create_cover
            create_cover('xxx', ['yyy'])
        na = QNetworkAccessManager()
        self.assertTrue(hasattr(na, 'sslErrors'),
                        'Qt not compiled with openssl')
        from PyQt5.QtWebKitWidgets import QWebView
        if iswindows:
            from PyQt5.Qt import QtWin
            QtWin
        QWebView()
        del QWebView
        del na
        del app
Beispiel #8
0
 def on_bridge_ready(self):
     f = QApplication.instance().font()
     fi = QFontInfo(f)
     ui_data = {
         'all_font_families': QFontDatabase().families(),
         'ui_font_family': f.family(),
         'ui_font_sz': '{}px'.format(fi.pixelSize()),
         'show_home_page_on_ready': self.show_home_page_on_ready,
         'system_colors': system_colors(),
     }
     self.bridge.create_view(vprefs['session_data'],
                             vprefs['local_storage'],
                             field_metadata.all_metadata(), ui_data)
     for func, args in iteritems(self.pending_bridge_ready_actions):
         getattr(self.bridge, func)(*args)
Beispiel #9
0
def apply_theme(app):
    app.setStyle('Fusion')

    # Font
    font_database = QFontDatabase()
    font_database.addApplicationFont('source/ui/noto.ttf')
    app.setFont(QFont('Noto Sans CJK TC Regular', weight=QFont.Normal))

    # QSS
    with open('source/ui/style.qss') as stylesheet:
        app.setStyleSheet(stylesheet.read())

    # palette
    new_palette = QPalette()

    # base
    new_palette.setColor(QPalette.WindowText, QColor('#ABAEB0'))
    new_palette.setColor(QPalette.Button, QColor('#262f36'))
    new_palette.setColor(QPalette.Light, QColor('#D5D6D7'))
    new_palette.setColor(QPalette.Midlight, QColor('#05796E'))
    new_palette.setColor(QPalette.Dark, QColor('#1E272E'))
    new_palette.setColor(QPalette.Text, QColor('#ABAEB0'))
    new_palette.setColor(QPalette.BrightText, QColor('#e6e6e6'))
    new_palette.setColor(QPalette.ButtonText, QColor('#ABAEB0'))
    new_palette.setColor(QPalette.Base, QColor('#384047'))
    new_palette.setColor(QPalette.Window, QColor('#2B343B'))
    new_palette.setColor(QPalette.Shadow, QColor('#181F24'))
    new_palette.setColor(QPalette.Highlight, QColor('#07A092'))
    new_palette.setColor(QPalette.HighlightedText, QColor('#e6e6e6'))
    new_palette.setColor(QPalette.Link, QColor('#07A092'))
    new_palette.setColor(QPalette.AlternateBase, QColor('#262f36'))
    new_palette.setColor(QPalette.ToolTipBase, QColor(53, 53, 53))
    new_palette.setColor(QPalette.ToolTipText, QColor('#828588'))

    # disabled
    new_palette.setColor(QPalette.Disabled, QPalette.WindowText,
                         QColor(127, 127, 127))
    new_palette.setColor(QPalette.Disabled, QPalette.Text,
                         QColor(127, 127, 127))
    new_palette.setColor(QPalette.Disabled, QPalette.ButtonText,
                         QColor(127, 127, 127))
    new_palette.setColor(QPalette.Disabled, QPalette.Highlight,
                         QColor(80, 80, 80))
    new_palette.setColor(QPalette.Disabled, QPalette.HighlightedText,
                         QColor(127, 127, 127))
    app.setPalette(new_palette)
Beispiel #10
0
    def load():
        Storage.DATABASE = QFontDatabase()

        if not Storage.USER_PREFERENCES_DIR.exists():
            Storage.USER_PREFERENCES_DIR.mkdir()

        Storage.load_page_data()

        Storage.SOUNDS = {
            "tap":
            QSound(
                Storage.resolve_audio(
                    "navigation_forward-selection-minimal.wav"))
        }

        if Storage.USER_DATA_FILE.exists():
            with open(Storage.USER_DATA_FILE, "r") as file:
                Storage.USER_DATA = msgpack.load(file)
Beispiel #11
0
def test_qt():
    from calibre.gui2 import Application
    from PyQt5.Qt import (QImageReader, QNetworkAccessManager, QFontDatabase)
    from PyQt5.QtWebKitWidgets import QWebView
    os.environ.pop('DISPLAY', None)
    app = Application([], headless=islinux)
    if len(QFontDatabase().families()) < 5:
        raise RuntimeError('The QPA headless plugin is not able to locate enough system fonts via fontconfig')
    fmts = set(map(unicode, QImageReader.supportedImageFormats()))
    testf = set(['jpg', 'png', 'mng', 'svg', 'ico', 'gif'])
    if testf.intersection(fmts) != testf:
        raise RuntimeError(
            "Qt doesn't seem to be able to load its image plugins")
    QWebView()
    del QWebView
    na = QNetworkAccessManager()
    if not hasattr(na, 'sslErrors'):
        raise RuntimeError('Qt not compiled with openssl')
    del na
    del app
    print ('Qt OK!')
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.WritingSystem.Vietnamese)
    except ValueError:
        pass

    system = QFontDatabase.WritingSystem.Any

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

    if not systems:
        return system, has_latin

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

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

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

    return system, has_latin
    def __init__(self,
                 str,
                 owner: LabeledObject,
                 owner_widget: GraphItem,
                 parent=None,
                 flags=Qt.WindowFlags()):
        super().__init__(str, parent=parent, flags=flags)
        self.__owner = owner
        self.__owner_widget = owner_widget
        font_database = QFontDatabase()

        # Build absolute path to prevent problems on macOS
        path = os.path.join(os.path.dirname(__file__),
                            "../ressources/fonts/lmroman8-regular.otf")
        font_id = font_database.addApplicationFont(path)
        if (font_id == -1):
            raise IOError("Font could not be loaded")
        font_name = QFontDatabase.applicationFontFamilies(font_id)[0]
        font = QFont(font_name, 16)
        self.setFont(font)
        self.adjustSize()
        self.__reposition()
Beispiel #14
0
    def __init__(self,
                 master_password=None,
                 urls=(),
                 new_instance=False,
                 shutdown=False,
                 restart_state=None,
                 no_session=False,
                 run_local_server=True):
        if not isosx:  # OS X turns this on automatically
            for v in ('QT_AUTO_SCREEN_SCALE_FACTOR', 'QT_SCALE_FACTOR',
                      'QT_SCREEN_SCALE_FACTORS', 'QT_DEVICE_PIXEL_RATIO'):
                if os.environ.get(v):
                    break
            else:
                QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        QApplication.__init__(self, [appname, '-name', appname])
        self.setAttribute(Qt.AA_UseHighDpiPixmaps)
        self.setOrganizationName('kovidgoyal')
        self.setApplicationName(appname)
        self.setApplicationVersion(str_version)
        self.no_session = no_session
        self.handle_unix_signals()
        if not QSslSocket.supportsSsl():
            raise SystemExit('Qt has been compiled without SSL support!')
        from .config import font_families, font_sizes
        ff = font_families().get('sans-serif') or 'default'
        if ff == 'default':
            ff = font_families().get('default') or 'default'
        f = self.font()
        if ff != 'default':
            f.setFamily(ff)
            fs = font_sizes().get('default-size')
            try:
                f.setPixelSize(int(fs))
            except Exception:
                pass
        self.setFont(f)
        self.password_loaded.connect(self.on_password_load,
                                     type=Qt.QueuedConnection)
        if master_password is not None:
            password_db.start_load(master_password, self.password_loaded.emit)
        elif restart_state and 'key' in restart_state:
            password_db.start_load(restart_state.pop('key'),
                                   self.password_loaded.emit,
                                   pw_is_key=True)

        self.lastWindowClosed.connect(self.shutdown)
        if run_local_server:
            self.run_local_server(urls, new_instance, shutdown)
        sys.excepthook = self.on_unhandled_error
        self.windows = []
        f = self.font()
        if (f.family(), f.pointSize()) == (
                'Sans Serif',
                9):  # Hard coded Qt settings, no user preference detected
            f.setPointSize(10)
            if 'Ubuntu' in QFontDatabase().families():
                f.setFamily('Ubuntu')
            self.setFont(f)
        self.downloads = Downloads(self)
        self.disk_cache = create_favicon_cache()
        self.key_filter = KeyFilter(self)
        self.installEventFilter(self.key_filter)