提交 ea3140fd 编写于 作者: 之一Yo's avatar 之一Yo

添加 gallery 主页界面

上级 0c04b4f6
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
</a> </a>
</p> </p>
![Interface](docs/source/_static/Interface.png) ![Interface](docs/source/_static/Interface.jpg)
## Install ## Install
...@@ -38,7 +38,7 @@ pip install "PyQt-Fluent-Widgets[full]" ...@@ -38,7 +38,7 @@ pip install "PyQt-Fluent-Widgets[full]"
## Run Example ## Run Example
After installing PyQt-Fluent-Widgets package using pip, you can run any demo in the examples directory, for example: After installing PyQt-Fluent-Widgets package using pip, you can run any demo in the examples directory, for example:
```python ```python
cd examples/settings cd examples/gallery
python demo.py python demo.py
``` ```
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
</p> </p>
<p align="center"> <p align="center">
<img src="./_static/Interface.png" alt="Interface"> <img src="./_static/Interface.jpg" alt="Interface">
</p> </p>
......
...@@ -13,6 +13,6 @@ pip install "PyQt-Fluent-Widgets[full]" ...@@ -13,6 +13,6 @@ pip install "PyQt-Fluent-Widgets[full]"
### Run example ### Run example
After installing PyQt-Fluent-Widgets package using pip, you can run any demo in the examples directory, for example: After installing PyQt-Fluent-Widgets package using pip, you can run any demo in the examples directory, for example:
```python ```python
cd examples/settings cd examples/gallery
python demo.py python demo.py
``` ```
\ No newline at end of file
...@@ -4,7 +4,7 @@ import sys ...@@ -4,7 +4,7 @@ import sys
from PyQt5.QtGui import QColor from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QApplication
from qfluentwidgets.components.widgets.label import AcrylicLabel from qfluentwidgets.components.widgets.acrylic_label import AcrylicLabel
app = QApplication(sys.argv) app = QApplication(sys.argv)
......
...@@ -42,8 +42,8 @@ YEAR = 2023 ...@@ -42,8 +42,8 @@ YEAR = 2023
AUTHOR = "zhiyiYo" AUTHOR = "zhiyiYo"
VERSION = "v0.4.2" VERSION = "v0.4.2"
HELP_URL = "https://pyqt-fluent-widgets.readthedocs.io" HELP_URL = "https://pyqt-fluent-widgets.readthedocs.io"
REPO_URL = "https://github.com/zhiyiYo/PyQt-Fluent-Widgets"
EXAMPLE_URL = "https://github.com/zhiyiYo/PyQt-Fluent-Widgets/tree/master/examples" EXAMPLE_URL = "https://github.com/zhiyiYo/PyQt-Fluent-Widgets/tree/master/examples"
DOCUMENT_URL = "https://github.com/zhiyiYo/PyQt-Fluent-Widgets/issues"
FEEDBACK_URL = "https://github.com/zhiyiYo/PyQt-Fluent-Widgets/issues" FEEDBACK_URL = "https://github.com/zhiyiYo/PyQt-Fluent-Widgets/issues"
RELEASE_URL = "https://github.com/zhiyiYo/PyQt-Fluent-Widgets/releases/latest" RELEASE_URL = "https://github.com/zhiyiYo/PyQt-Fluent-Widgets/releases/latest"
......
...@@ -8,11 +8,12 @@ class Icon(FluentIconBase, Enum): ...@@ -8,11 +8,12 @@ class Icon(FluentIconBase, Enum):
HOME = "Home" HOME = "Home"
CHAT = "Chat" CHAT = "Chat"
CODE = "Code"
MENU = "Menu" MENU = "Menu"
ALBUM = "Album" ALBUM = "Album"
SCROLL = "Scroll" SCROLL = "Scroll"
LAYOUT = "Layout" LAYOUT = "Layout"
GITHUB = "Github" GITHUB = "GitHub"
MESSAGE = "Message" MESSAGE = "Message"
CHECKBOX = "CheckBox" CHECKBOX = "CheckBox"
DOCUMENT = "Document" DOCUMENT = "Document"
......
# coding: utf-8
from PyQt5.QtCore import QObject, pyqtSignal
class SignalBus(QObject):
""" Signal bus """
switchToSampleCard = pyqtSignal(str, int)
signalBus = SignalBus()
\ No newline at end of file
# coding:utf-8
from PyQt5.QtCore import Qt, pyqtSignal, QUrl
from PyQt5.QtGui import QPixmap, QDesktopServices
from PyQt5.QtWidgets import QFrame, QLabel, QVBoxLayout, QWidget, QHBoxLayout
from qfluentwidgets import IconWidget, FluentIcon, TextWrap, isDarkTheme, ScrollArea
from ..common.config import cfg
class LinkCard(QFrame):
def __init__(self, icon, title, content, url, parent=None):
super().__init__(parent=parent)
self.url = QUrl(url)
self.setFixedSize(198, 220)
self.iconWidget = IconWidget(icon, self)
self.titleLabel = QLabel(title, self)
self.contentLabel = QLabel(TextWrap.wrap(content, 28, False)[0], self)
self.urlWidget = IconWidget(FluentIcon.LINK, self)
self.__initWidget()
def __initWidget(self):
self.setCursor(Qt.PointingHandCursor)
self.iconWidget.setFixedSize(54, 54)
self.urlWidget.setFixedSize(16, 16)
self.vBoxLayout = QVBoxLayout(self)
self.vBoxLayout.setSpacing(0)
self.vBoxLayout.setContentsMargins(24, 24, 0, 13)
self.vBoxLayout.addWidget(self.iconWidget)
self.vBoxLayout.addSpacing(16)
self.vBoxLayout.addWidget(self.titleLabel)
self.vBoxLayout.addSpacing(8)
self.vBoxLayout.addWidget(self.contentLabel)
self.vBoxLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
self.urlWidget.move(170, 192)
self.titleLabel.setObjectName('titleLabel')
self.contentLabel.setObjectName('contentLabel')
def mouseReleaseEvent(self, e):
super().mouseReleaseEvent(e)
QDesktopServices.openUrl(self.url)
class LinkCardView(ScrollArea):
""" Link card view """
def __init__(self, parent=None):
super().__init__(parent, Qt.Horizontal)
self.view = QWidget(self)
self.hBoxLayout = QHBoxLayout(self.view)
self.hBoxLayout.setContentsMargins(36, 0, 0, 0)
self.hBoxLayout.setSpacing(12)
self.hBoxLayout.setAlignment(Qt.AlignLeft)
self.setWidget(self.view)
self.setWidgetResizable(True)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.view.setObjectName('view')
self.__setQss()
cfg.themeChanged.connect(self.__setQss)
def addCard(self, icon, title, content, url):
""" add link card """
card = LinkCard(icon, title, content, url, self.view)
self.hBoxLayout.addWidget(card, 0, Qt.AlignLeft)
def __setQss(self):
color = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{color}/link_card.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
# coding:utf-8
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QFrame, QLabel, QVBoxLayout, QHBoxLayout
from qfluentwidgets import IconWidget, TextWrap, FlowLayout, isDarkTheme
from ..common.signal_bus import signalBus
from ..common.config import cfg
class SampleCard(QFrame):
""" Sample card """
def __init__(self, icon, title, content, routeKey, index, parent=None):
super().__init__(parent=parent)
self.index = index
self.routekey = routeKey
self.iconWidget = IconWidget(icon, self)
self.titleLabel = QLabel(title, self)
self.contentLabel = QLabel(TextWrap.wrap(content, 46, False)[0], self)
self.hBoxLayout = QHBoxLayout(self)
self.vBoxLayout = QVBoxLayout()
self.setFixedSize(360, 90)
self.iconWidget.setFixedSize(48, 48)
self.hBoxLayout.setSpacing(28)
self.hBoxLayout.setContentsMargins(20, 0, 0, 0)
self.vBoxLayout.setSpacing(2)
self.vBoxLayout.setContentsMargins(0, 0, 0, 0)
self.vBoxLayout.setAlignment(Qt.AlignVCenter)
self.hBoxLayout.setAlignment(Qt.AlignVCenter)
self.hBoxLayout.addWidget(self.iconWidget)
self.hBoxLayout.addLayout(self.vBoxLayout)
self.vBoxLayout.addStretch(1)
self.vBoxLayout.addWidget(self.titleLabel)
self.vBoxLayout.addWidget(self.contentLabel)
self.vBoxLayout.addStretch(1)
self.titleLabel.setObjectName('titleLabel')
self.contentLabel.setObjectName('contentLabel')
def mouseReleaseEvent(self, e):
super().mouseReleaseEvent(e)
signalBus.switchToSampleCard.emit(self.routekey, self.index)
class SampleCardView(QWidget):
""" Sample card view """
def __init__(self, title: str, parent=None):
super().__init__(parent=parent)
self.titleLabel = QLabel(title, self)
self.vBoxLayout = QVBoxLayout(self)
self.flowLayout = FlowLayout()
self.vBoxLayout.setContentsMargins(36, 0, 36, 0)
self.vBoxLayout.setSpacing(10)
self.flowLayout.setContentsMargins(0, 0, 0, 0)
self.flowLayout.setHorizontalSpacing(12)
self.flowLayout.setVerticalSpacing(12)
self.vBoxLayout.addWidget(self.titleLabel)
self.vBoxLayout.addLayout(self.flowLayout, 1)
self.titleLabel.setObjectName('viewTitleLabel')
self.__setQss()
cfg.themeChanged.connect(self.__setQss)
def addSampleCard(self, icon, title, content, routeKey, index):
""" add sample card """
card = SampleCard(icon, title, content, routeKey, index, self)
self.flowLayout.addWidget(card)
def __setQss(self):
theme = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{theme}/sample_card.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
...@@ -218,6 +218,59 @@ ...@@ -218,6 +218,59 @@
<translation>D4C</translation> <translation>D4C</translation>
</message> </message>
</context> </context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../view/main_window.py" line="116"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/main_window.py" line="124"/>
<source>Basic input</source>
<translation type="unfinished">基本輸入</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="131"/>
<source>Dialogs</source>
<translation type="unfinished">對話框</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="138"/>
<source>Layout</source>
<translation type="unfinished">布局</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="145"/>
<source>Menus</source>
<translation type="unfinished">菜單</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="152"/>
<source>Material</source>
<translation type="unfinished">材料</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="159"/>
<source>Scrolling</source>
<translation type="unfinished">滾動</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="166"/>
<source>Status &amp; info</source>
<translation type="unfinished">狀態和信息</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="227"/>
<source>This is a help message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/main_window.py" line="227"/>
<source>You clicked a customized navigation widget. You can add more custom widgets by calling `NavigationInterface.addWidget()` 😉</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MaterialInterface</name> <name>MaterialInterface</name>
<message> <message>
...@@ -297,7 +350,7 @@ ...@@ -297,7 +350,7 @@
<context> <context>
<name>ScrollInterface</name> <name>ScrollInterface</name>
<message> <message>
<location filename="../../view/scroll_interface.py" line="35"/> <location filename="../../view/scroll_interface.py" line="36"/>
<source>Smooth scroll area</source> <source>Smooth scroll area</source>
<translation>平滑滾動區域</translation> <translation>平滑滾動區域</translation>
</message> </message>
......
...@@ -218,6 +218,59 @@ ...@@ -218,6 +218,59 @@
<translation>D4C</translation> <translation>D4C</translation>
</message> </message>
</context> </context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../view/main_window.py" line="116"/>
<source>Home</source>
<translation>主页</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="124"/>
<source>Basic input</source>
<translation>基本输入</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="131"/>
<source>Dialogs</source>
<translation>对话框</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="138"/>
<source>Layout</source>
<translation>布局</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="145"/>
<source>Menus</source>
<translation>菜单</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="152"/>
<source>Material</source>
<translation>材料</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="159"/>
<source>Scrolling</source>
<translation>滚动</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="166"/>
<source>Status &amp; info</source>
<translation>状态和信息</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="227"/>
<source>This is a help message</source>
<translation>一条友善的提示</translation>
</message>
<message>
<location filename="../../view/main_window.py" line="227"/>
<source>You clicked a customized navigation widget. You can add more custom widgets by calling `NavigationInterface.addWidget()` 😉</source>
<translation>你点击了一个自定义的导航项你可以通过 `NavigationInterface.addWidget()` 添加更多的自定义导航项</translation>
</message>
</context>
<context> <context>
<name>MaterialInterface</name> <name>MaterialInterface</name>
<message> <message>
...@@ -297,7 +350,7 @@ ...@@ -297,7 +350,7 @@
<context> <context>
<name>ScrollInterface</name> <name>ScrollInterface</name>
<message> <message>
<location filename="../../view/scroll_interface.py" line="35"/> <location filename="../../view/scroll_interface.py" line="36"/>
<source>Smooth scroll area</source> <source>Smooth scroll area</source>
<translation>平滑滚动区域</translation> <translation>平滑滚动区域</translation>
</message> </message>
...@@ -490,7 +543,7 @@ ...@@ -490,7 +543,7 @@
<message> <message>
<location filename="../../view/status_info_interface.py" line="44"/> <location filename="../../view/status_info_interface.py" line="44"/>
<source>Label with a ToolTip</source> <source>Label with a ToolTip</source>
<translation>标签的工具提示</translation> <translation>多看一眼就会爆炸</translation>
</message> </message>
<message> <message>
<location filename="../../view/status_info_interface.py" line="47"/> <location filename="../../view/status_info_interface.py" line="47"/>
......
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M384 1728 l0 -448 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -455 q0 -63 25.5 -120 q25.5 -57 68 -99.5 q42.5 -42.5 99.5 -68 q57 -25.5 120 -25.5 q29 0 50 16.5 q21 16.5 21 47.5 q0 26 -19 45 q-19 19 -45 19 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 448 q0 76 -33.5 143.5 q-33.5 67.5 -94.5 112.5 q61 45 94.5 112.5 q33.5 67.5 33.5 143.5 l0 448 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 q26 0 45 19 q19 19 19 45 q0 31 -21 47.5 q-21 16.5 -50 16.5 q-65 0 -122 -26 q-57 -26 -99.5 -70 q-42.5 -44 -67 -102 q-24.5 -58 -24.5 -122 ZM1280 1984 q0 -26 19 -45 q19 -19 45 -19 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -448 q0 -76 33.5 -143.5 q33.5 -67.5 94.5 -112.5 q-61 -45 -94.5 -112.5 q-33.5 -67.5 -33.5 -143.5 l0 -448 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -31 21 -47.5 q21 -16.5 50 -16.5 q65 0 122 26 q57 26 99.5 70 q42.5 44 67 102 q24.5 58 24.5 122 l0 448 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 455 q0 63 -25.5 120 q-25.5 57 -68 99.5 q-42.5 42.5 -99.5 68 q-57 25.5 -120 25.5 q-29 0 -50 -16.5 q-21 -16.5 -21 -47.5 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M384 1728 l0 -448 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -455 q0 -63 25.5 -120 q25.5 -57 68 -99.5 q42.5 -42.5 99.5 -68 q57 -25.5 120 -25.5 q29 0 50 16.5 q21 16.5 21 47.5 q0 26 -19 45 q-19 19 -45 19 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 448 q0 76 -33.5 143.5 q-33.5 67.5 -94.5 112.5 q61 45 94.5 112.5 q33.5 67.5 33.5 143.5 l0 448 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 q26 0 45 19 q19 19 19 45 q0 31 -21 47.5 q-21 16.5 -50 16.5 q-65 0 -122 -26 q-57 -26 -99.5 -70 q-42.5 -44 -67 -102 q-24.5 -58 -24.5 -122 ZM1280 1984 q0 -26 19 -45 q19 -19 45 -19 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -448 q0 -76 33.5 -143.5 q33.5 -67.5 94.5 -112.5 q-61 -45 -94.5 -112.5 q-33.5 -67.5 -33.5 -143.5 l0 -448 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -31 21 -47.5 q21 -16.5 50 -16.5 q65 0 122 26 q57 26 99.5 70 q42.5 44 67 102 q24.5 58 24.5 122 l0 448 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 455 q0 63 -25.5 120 q-25.5 57 -68 99.5 q-42.5 42.5 -99.5 68 q-57 25.5 -120 25.5 q-29 0 -50 -16.5 q-21 -16.5 -21 -47.5 Z"/></svg>
\ No newline at end of file
...@@ -32,8 +32,9 @@ ExampleCard>#card { ...@@ -32,8 +32,9 @@ ExampleCard>#card {
} }
ExampleCard>#titleLabel { ExampleCard>#titleLabel {
font: 14px 'Segoe UI SemiBold', 'Microsoft YaHei'; font: 14px 'Segoe UI Light', 'Microsoft YaHei';
background-color: transparent; background-color: transparent;
font-weight: 700;
color: white; color: white;
} }
......
SettingInterface,
#view {
background-color: transparent;
}
QScrollArea {
border: none;
background-color: transparent;
}
BannerWidget > #galleryLabel {
font: 42px 'Segoe UI', 'Microsoft YaHei';
font-weight: bold;
background-color: transparent;
color: white;
padding-left: 28px;
}
QScrollBar {
background: transparent;
width: 4px;
margin-top: 32px;
margin-bottom: 0;
padding-right: 2px;
}
/*隐藏上箭头*/
QScrollBar::sub-line {
background: transparent;
}
/*隐藏下箭头*/
QScrollBar::add-line {
background: transparent;
}
QScrollBar::handle {
background: rgb(122, 122, 122);
border: 2px solid rgb(128, 128, 128);
border-radius: 1px;
min-height: 32px;
}
QScrollBar::add-page:vertical,
QScrollBar::sub-page:vertical {
background: none;
}
\ No newline at end of file
LinkCard {
border: 1px solid rgb(46, 46, 46);
border-radius: 10px;
background-color: rgba(39, 39, 39, 0.95);
}
LinkCard:hover {
background-color: rgba(39, 39, 39, 0.93);
border: 1px solid rgb(66, 66, 66);
}
#titleLabel {
font: 18px 'Segoe UI', 'Microsoft YaHei';
color: white;
}
#contentLabel {
font: 12px 'Segoe UI', 'Microsoft YaHei';
color: rgb(208, 208, 208);
}
LinkCardView {
background-color: transparent;
border: none;
}
#view {
background-color: transparent;
}
\ No newline at end of file
SampleCard {
border: 1px solid rgb(35, 35, 35);
border-radius: 6px;
background-color: rgb(50, 50, 50);
}
SampleCard:hover {
background-color: rgb(62, 62, 62);
border-color: rgb(37, 37, 37);
}
#titleLabel {
color: white;
font: 14px 'Segoe UI', 'Microsoft YaHei';
font-weight: bold;
}
#contentLabel {
color: rgb(208, 208, 208);
font: 12px 'Segoe UI', 'Microsoft YaHei';
}
#viewTitleLabel {
color: white;
font: 20px "Segoe UI SemiBold", "Microsoft YaHei";
}
\ No newline at end of file
...@@ -29,7 +29,8 @@ ExampleCard > #card { ...@@ -29,7 +29,8 @@ ExampleCard > #card {
} }
ExampleCard > #titleLabel { ExampleCard > #titleLabel {
font: 14px 'Segoe UI SemiBold', 'Microsoft YaHei'; font: 14px 'Segoe UI Light', 'Microsoft YaHei';
font-weight: 700;
background-color: transparent; background-color: transparent;
color: black; color: black;
} }
......
SettingInterface,
#view {
background-color: transparent;
}
QScrollArea {
border: none;
background-color: transparent;
}
BannerWidget > #galleryLabel {
font: 42px 'Segoe UI SemiBold', 'Microsoft YaHei SemiBold';
background-color: transparent;
color: black;
padding-left: 28px;
}
QScrollBar {
background: transparent;
width: 4px;
margin-top: 32px;
margin-bottom: 0;
padding-right: 2px;
}
/*隐藏上箭头*/
QScrollBar::sub-line {
background: transparent;
}
/*隐藏下箭头*/
QScrollBar::add-line {
background: transparent;
}
QScrollBar::handle {
background: rgb(122, 122, 122);
border: 2px solid rgb(128, 128, 128);
border-radius: 1px;
min-height: 32px;
}
QScrollBar::add-page:vertical,
QScrollBar::sub-page:vertical {
background: none;
}
\ No newline at end of file
LinkCard {
border: 1px solid rgb(234, 234, 234);
border-radius: 10px;
background-color: rgba(249, 249, 249, 0.95);
}
LinkCard:hover {
background-color: rgba(249, 249, 249, 0.93);
border: 1px solid rgb(220, 220, 220);
}
#titleLabel {
font: 18px 'Segoe UI', 'Microsoft YaHei';
color: black;
}
#contentLabel {
font: 12px 'Segoe UI', 'Microsoft YaHei';
color: rgb(93, 93, 93);
}
LinkCardView {
background-color: transparent;
border: none;
}
#view {
background-color: transparent;
}
\ No newline at end of file
SampleCard {
border: 1px solid rgb(234, 234, 234);
border-radius: 6px;
background-color: rgb(253, 253, 253);
}
SampleCard:hover {
background-color: rgb(251, 251, 251);
border-color: rgb(177, 177, 177);
}
#titleLabel {
color: black;
font: 14px 'Segoe UI', 'Microsoft YaHei';
font-weight: bold;
}
#contentLabel {
color: rgb(118, 118, 118);
font: 12px 'Segoe UI', 'Microsoft YaHei';
}
#viewTitleLabel {
color: black;
font: 20px "Segoe UI SemiBold", "Microsoft YaHei";
}
\ No newline at end of file
...@@ -97,7 +97,7 @@ class BasicInputInterface(GalleryInterface): ...@@ -97,7 +97,7 @@ class BasicInputInterface(GalleryInterface):
slider = Slider(Qt.Horizontal) slider = Slider(Qt.Horizontal)
slider.setRange(0, 100) slider.setRange(0, 100)
slider.setValue(30) slider.setValue(30)
slider.setFixedWidth(200) slider.setMinimumWidth(200)
self.addExampleCard( self.addExampleCard(
self.tr('A simple horizontal slider'), self.tr('A simple horizontal slider'),
slider, slider,
......
...@@ -6,7 +6,7 @@ from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QFrame ...@@ -6,7 +6,7 @@ from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QFrame
from qfluentwidgets import (ScrollArea, PushButton, ToolButton, FluentIcon, from qfluentwidgets import (ScrollArea, PushButton, ToolButton, FluentIcon,
isDarkTheme, IconWidget, Theme, ToolTipFilter) isDarkTheme, IconWidget, Theme, ToolTipFilter)
from ..common.icon import Icon from ..common.icon import Icon
from ..common.config import cfg, FEEDBACK_URL, DOCUMENT_URL, EXAMPLE_URL from ..common.config import cfg, FEEDBACK_URL, HELP_URL, EXAMPLE_URL
class ToolBar(QWidget): class ToolBar(QWidget):
...@@ -49,7 +49,8 @@ class ToolBar(QWidget): ...@@ -49,7 +49,8 @@ class ToolBar(QWidget):
self.buttonLayout.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) self.buttonLayout.setAlignment(Qt.AlignVCenter | Qt.AlignLeft)
self.themeButton.installEventFilter(ToolTipFilter(self.themeButton)) self.themeButton.installEventFilter(ToolTipFilter(self.themeButton))
self.feedbackButton.installEventFilter(ToolTipFilter(self.feedbackButton)) self.feedbackButton.installEventFilter(
ToolTipFilter(self.feedbackButton))
self.themeButton.setToolTip(self.tr('Toggle theme')) self.themeButton.setToolTip(self.tr('Toggle theme'))
self.feedbackButton.setToolTip(self.tr('Send feedback')) self.feedbackButton.setToolTip(self.tr('Send feedback'))
...@@ -58,7 +59,7 @@ class ToolBar(QWidget): ...@@ -58,7 +59,7 @@ class ToolBar(QWidget):
self.themeButton.clicked.connect(self.toggleTheme) self.themeButton.clicked.connect(self.toggleTheme)
self.documentButton.clicked.connect( self.documentButton.clicked.connect(
lambda: QDesktopServices.openUrl(QUrl(DOCUMENT_URL))) lambda: QDesktopServices.openUrl(QUrl(HELP_URL)))
self.sourceButton.clicked.connect( self.sourceButton.clicked.connect(
lambda: QDesktopServices.openUrl(QUrl(EXAMPLE_URL))) lambda: QDesktopServices.openUrl(QUrl(EXAMPLE_URL)))
self.feedbackButton.clicked.connect( self.feedbackButton.clicked.connect(
...@@ -82,7 +83,8 @@ class ExampleCard(QWidget): ...@@ -82,7 +83,8 @@ class ExampleCard(QWidget):
self.sourceWidget = QFrame(self.card) self.sourceWidget = QFrame(self.card)
self.sourcePath = sourcePath self.sourcePath = sourcePath
self.sourcePathLabel = QLabel(self.tr('Source code'), self.sourceWidget) self.sourcePathLabel = QLabel(
self.tr('Source code'), self.sourceWidget)
self.linkIcon = IconWidget(FluentIcon.LINK, self.sourceWidget) self.linkIcon = IconWidget(FluentIcon.LINK, self.sourceWidget)
self.vBoxLayout = QVBoxLayout(self) self.vBoxLayout = QVBoxLayout(self)
...@@ -182,6 +184,11 @@ class GalleryInterface(ScrollArea): ...@@ -182,6 +184,11 @@ class GalleryInterface(ScrollArea):
self.vBoxLayout.addWidget(card, 0, Qt.AlignTop) self.vBoxLayout.addWidget(card, 0, Qt.AlignTop)
return card return card
def scrollToCard(self, index: int):
""" scroll to example card """
w = self.vBoxLayout.itemAt(index).widget()
self.verticalScrollBar().setValue(w.y())
def resizeEvent(self, e): def resizeEvent(self, e):
super().resizeEvent(e) super().resizeEvent(e)
self.toolBar.resize(self.width(), self.toolBar.height()) self.toolBar.resize(self.width(), self.toolBar.height())
......
# coding:utf-8
import json
from PyQt5.QtCore import Qt, pyqtSignal, QRectF
from PyQt5.QtGui import QPixmap, QPainter, QColor, QBrush, QPainterPath
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel
from qfluentwidgets import ScrollArea, isDarkTheme, FluentIcon
from ..common.config import cfg, HELP_URL, REPO_URL, EXAMPLE_URL, FEEDBACK_URL
from ..common.icon import Icon
from ..components.link_card import LinkCardView
from ..components.sample_card import SampleCardView
class BannerWidget(QWidget):
""" Banner widget """
def __init__(self, parent=None):
super().__init__(parent=parent)
self.setFixedHeight(336)
self.vBoxLayout = QVBoxLayout(self)
self.galleryLabel = QLabel('Fluent Gallery', self)
self.banner = QPixmap('app/resource/images/header1.png')
self.linkCardView = LinkCardView(self)
self.galleryLabel.setObjectName('galleryLabel')
self.vBoxLayout.setSpacing(0)
self.vBoxLayout.setContentsMargins(0, 20, 0, 0)
self.vBoxLayout.addWidget(self.galleryLabel)
self.vBoxLayout.addWidget(self.linkCardView, 1, Qt.AlignBottom)
self.vBoxLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
self.linkCardView.addCard(
'app/resource/images/logo.png',
self.tr('Getting started'),
self.tr('An overview of app development options and samples.'),
HELP_URL
)
self.linkCardView.addCard(
Icon.GITHUB,
self.tr('GitHub repo'),
self.tr(
'The latest fluent design controls and styles for your applications.'),
REPO_URL
)
self.linkCardView.addCard(
Icon.CODE,
self.tr('Code samples'),
self.tr(
'Find samples that demonstrate specific tasks, features and APIs.'),
EXAMPLE_URL
)
self.linkCardView.addCard(
FluentIcon.FEEDBACK,
self.tr('Send feedback'),
self.tr('Help us improve PyQt-Fluent-Widgets by providing feedback.'),
FEEDBACK_URL
)
def paintEvent(self, e):
super().paintEvent(e)
painter = QPainter(self)
painter.setRenderHints(
QPainter.SmoothPixmapTransform | QPainter.Antialiasing)
painter.setPen(Qt.NoPen)
path = QPainterPath()
path.setFillRule(Qt.WindingFill)
w, h = self.width(), 200
path.addRoundedRect(QRectF(0, 0, w, h), 10, 10)
path.addRect(QRectF(0, h-50, 50, 50))
path.addRect(QRectF(w-50, 0, 50, 50))
path.addRect(QRectF(w-50, h-50, 50, 50))
path = path.simplified()
# draw background color
painter.fillPath(path, QColor(206, 216, 228))
# draw banner image
pixmap = self.banner.scaled(
self.size(), transformMode=Qt.SmoothTransformation)
path.addRect(QRectF(0, h, w, self.height() - h))
painter.fillPath(path, QBrush(pixmap))
class HomeInterface(ScrollArea):
""" Home interface """
def __init__(self, parent=None):
super().__init__(parent=parent)
self.banner = BannerWidget(self)
self.view = QWidget(self)
self.vBoxLayout = QVBoxLayout(self.view)
self.__initWidget()
self.loadSamples()
def __initWidget(self):
self.__setQss()
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setWidget(self.view)
self.setWidgetResizable(True)
self.vBoxLayout.setContentsMargins(0, 0, 0, 36)
self.vBoxLayout.setSpacing(40)
self.vBoxLayout.addWidget(self.banner)
self.vBoxLayout.setAlignment(Qt.AlignTop)
cfg.themeChanged.connect(self.__setQss)
def __setQss(self):
self.view.setObjectName('view')
theme = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{theme}/home_interface.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
def loadSamples(self):
""" load samples """
basicInputView = SampleCardView(
self.tr("Basic input samples"), self.view)
basicInputView.addSampleCard(
icon="app/resource/images/controls/Button.png",
title="Button",
content=self.tr(
"A control that responds to user input and emit clicked signal."),
routeKey="basicInputInterface",
index=0
)
basicInputView.addSampleCard(
icon="app/resource/images/controls/CheckBox.png",
title="CheckBox",
content=self.tr("A control that a user can select or clear."),
routeKey="basicInputInterface",
index=4
)
basicInputView.addSampleCard(
icon="app/resource/images/controls/ComboBox.png",
title="ComboBox",
content=self.tr(
"A drop-down list of items a user can select from."),
routeKey="basicInputInterface",
index=6
)
basicInputView.addSampleCard(
icon="app/resource/images/controls/RadioButton.png",
title="RadioButton",
content=self.tr(
"A control that allows a user to select a single option from a group of options."),
routeKey="basicInputInterface",
index=7
)
basicInputView.addSampleCard(
icon="app/resource/images/controls/Slider.png",
title="Slider",
content=self.tr(
"A control that lets the user select from a range of values by moving a Thumb control along a track."),
routeKey="basicInputInterface",
index=8
)
basicInputView.addSampleCard(
icon="app/resource/images/controls/ToggleSwitch.png",
title="SwitchButton",
content=self.tr(
"A switch that can be toggled between 2 states."),
routeKey="basicInputInterface",
index=9
)
self.vBoxLayout.addWidget(basicInputView)
dialogView = SampleCardView(self.tr('Dialog samples'), self.view)
dialogView.addSampleCard(
icon="app/resource/images/controls/Flyout.png",
title="Dialog",
content=self.tr("A frameless message dialog."),
routeKey="dialogInterface",
index=0
)
dialogView.addSampleCard(
icon="app/resource/images/controls/ContentDialog.png",
title="MessageBox",
content=self.tr("A message dialog with mask."),
routeKey="dialogInterface",
index=1
)
dialogView.addSampleCard(
icon="app/resource/images/controls/ColorPicker.png",
title="ColorDialog",
content=self.tr("A dialog that allows user to select color."),
routeKey="dialogInterface",
index=2
)
self.vBoxLayout.addWidget(dialogView)
layoutView = SampleCardView(self.tr('Layout samples'), self.view)
layoutView.addSampleCard(
icon="app/resource/images/controls/Grid.png",
title="FlowLayout",
content=self.tr(
"A layout arranges components in a left-to-right flow, wrapping to the next row when the current row is full."),
routeKey="layoutInterface",
index=0
)
self.vBoxLayout.addWidget(layoutView)
materialView = SampleCardView(self.tr('Material samples'), self.view)
materialView.addSampleCard(
icon="app/resource/images/controls/Acrylic.png",
title="AcrylicLabel",
content=self.tr(
"A translucent material recommended for panel background."),
routeKey="materialInterface",
index=0
)
self.vBoxLayout.addWidget(materialView)
menuView = SampleCardView(self.tr('Menu samples'), self.view)
menuView.addSampleCard(
icon="app/resource/images/controls/MenuFlyout.png",
title="RoundMenu",
content=self.tr(
"Shows a contextual list of simple commands or options."),
routeKey="menuInterface",
index=0
)
self.vBoxLayout.addWidget(menuView)
scrollView = SampleCardView(self.tr('Scrolling samples'), self.view)
scrollView.addSampleCard(
icon="app/resource/images/controls/ScrollViewer.png",
title="ScrollArea",
content=self.tr(
"A container control that lets the user pan and zoom its content smoothly."),
routeKey="scrollInterface",
index=0
)
self.vBoxLayout.addWidget(scrollView)
stateInfoView = SampleCardView(self.tr('Scrolling samples'), self.view)
stateInfoView.addSampleCard(
icon="app/resource/images/controls/ProgressRing.png",
title="StateToolTip",
content=self.tr(
"Shows the apps progress on a task,or that the app is performing ongoing work that does block user interaction."),
routeKey="statusInfoInterface",
index=0
)
stateInfoView.addSampleCard(
icon="app/resource/images/controls/ToolTip.png",
title="ToolTip",
content=self.tr(
"Displays information for an element in a pop-up window."),
routeKey="statusInfoInterface",
index=1
)
self.vBoxLayout.addWidget(stateInfoView)
# coding: utf-8 # coding: utf-8
from typing import List
from PyQt5.QtCore import Qt, pyqtSignal, QEasingCurve from PyQt5.QtCore import Qt, pyqtSignal, QEasingCurve
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QHBoxLayout, QFrame, QWidget from PyQt5.QtWidgets import QApplication, QHBoxLayout, QFrame, QWidget
...@@ -9,6 +10,8 @@ from qfluentwidgets import FluentIcon as FIF ...@@ -9,6 +10,8 @@ from qfluentwidgets import FluentIcon as FIF
from qframelesswindow import FramelessWindow from qframelesswindow import FramelessWindow
from .title_bar import CustomTitleBar from .title_bar import CustomTitleBar
from .gallery_interface import GalleryInterface
from .home_interface import HomeInterface
from .basic_input_interface import BasicInputInterface from .basic_input_interface import BasicInputInterface
from .dialog_interface import DialogInterface from .dialog_interface import DialogInterface
from .layout_interface import LayoutInterface from .layout_interface import LayoutInterface
...@@ -19,6 +22,7 @@ from .status_info_interface import StatusInfoInterface ...@@ -19,6 +22,7 @@ from .status_info_interface import StatusInfoInterface
from .setting_interface import SettingInterface, cfg from .setting_interface import SettingInterface, cfg
from ..components.avatar_widget import AvatarWidget from ..components.avatar_widget import AvatarWidget
from ..common.icon import Icon from ..common.icon import Icon
from ..common.signal_bus import signalBus
class StackedWidget(QFrame): class StackedWidget(QFrame):
...@@ -42,10 +46,12 @@ class StackedWidget(QFrame): ...@@ -42,10 +46,12 @@ class StackedWidget(QFrame):
self.view.addWidget(widget) self.view.addWidget(widget)
def setCurrentWidget(self, widget, popOut=False): def setCurrentWidget(self, widget, popOut=False):
widget.verticalScrollBar().setValue(0)
if not popOut: if not popOut:
self.view.setCurrentWidget(widget, duration=300) self.view.setCurrentWidget(widget, duration=300)
else: else:
self.view.setCurrentWidget(widget, True, False, 200, QEasingCurve.InQuad) self.view.setCurrentWidget(
widget, True, False, 200, QEasingCurve.InQuad)
def setCurrentIndex(self, index, popOut=False): def setCurrentIndex(self, index, popOut=False):
self.setCurrentWidget(self.view.widget(index), popOut) self.setCurrentWidget(self.view.widget(index), popOut)
...@@ -63,20 +69,22 @@ class MainWindow(FramelessWindow): ...@@ -63,20 +69,22 @@ class MainWindow(FramelessWindow):
self.navigationInterface = NavigationInterface(self, True, True) self.navigationInterface = NavigationInterface(self, True, True)
# create sub interface # create sub interface
self.homeInterface = HomeInterface(self)
self.basicInputInterface = BasicInputInterface(self) self.basicInputInterface = BasicInputInterface(self)
self.dialogInterface = DialogInterface(self) self.dialogInterface = DialogInterface(self)
self.layoutInterface = LayoutInterface(self) self.layoutInterface = LayoutInterface(self)
self.menuInterface = MenuInterface(self) self.menuInterface = MenuInterface(self)
self.materialInterface = MaterialInterface(self) self.materialInterface = MaterialInterface(self)
self.scrollInterface= ScrollInterface(self) self.scrollInterface = ScrollInterface(self)
self.statusInfoInterface = StatusInfoInterface(self) self.statusInfoInterface = StatusInfoInterface(self)
self.settingInterface = SettingInterface(self) self.settingInterface = SettingInterface(self)
self.stackWidget.addWidget(self.homeInterface)
self.stackWidget.addWidget(self.basicInputInterface) self.stackWidget.addWidget(self.basicInputInterface)
self.stackWidget.addWidget(self.dialogInterface) self.stackWidget.addWidget(self.dialogInterface)
self.stackWidget.addWidget(self.layoutInterface) self.stackWidget.addWidget(self.layoutInterface)
self.stackWidget.addWidget(self.menuInterface)
self.stackWidget.addWidget(self.materialInterface) self.stackWidget.addWidget(self.materialInterface)
self.stackWidget.addWidget(self.menuInterface)
self.stackWidget.addWidget(self.scrollInterface) self.stackWidget.addWidget(self.scrollInterface)
self.stackWidget.addWidget(self.statusInfoInterface) self.stackWidget.addWidget(self.statusInfoInterface)
self.stackWidget.addWidget(self.settingInterface) self.stackWidget.addWidget(self.settingInterface)
...@@ -99,12 +107,15 @@ class MainWindow(FramelessWindow): ...@@ -99,12 +107,15 @@ class MainWindow(FramelessWindow):
self.widgetLayout.addWidget(self.stackWidget) self.widgetLayout.addWidget(self.stackWidget)
self.widgetLayout.setContentsMargins(0, 48, 0, 0) self.widgetLayout.setContentsMargins(0, 48, 0, 0)
signalBus.switchToSampleCard.connect(self.switchToSample)
self.navigationInterface.displayModeChanged.connect( self.navigationInterface.displayModeChanged.connect(
self.titleBar.raise_) self.titleBar.raise_)
self.titleBar.raise_() self.titleBar.raise_()
def initNavigation(self): def initNavigation(self):
self.basicInputInterface.setObjectName('basicInterface') self.homeInterface.setObjectName('homeInterface')
self.basicInputInterface.setObjectName('basicInputInterface')
self.dialogInterface.setObjectName('dialogInterface') self.dialogInterface.setObjectName('dialogInterface')
self.layoutInterface.setObjectName('layoutInterface') self.layoutInterface.setObjectName('layoutInterface')
self.menuInterface.setObjectName('menuInterface') self.menuInterface.setObjectName('menuInterface')
...@@ -113,11 +124,12 @@ class MainWindow(FramelessWindow): ...@@ -113,11 +124,12 @@ class MainWindow(FramelessWindow):
self.scrollInterface.setObjectName('scrollInterface') self.scrollInterface.setObjectName('scrollInterface')
self.settingInterface.setObjectName('settingsInterface') self.settingInterface.setObjectName('settingsInterface')
# add navigation items
self.navigationInterface.addItem( self.navigationInterface.addItem(
routeKey='Home', routeKey=self.homeInterface.objectName(),
icon=Icon.HOME, icon=Icon.HOME,
text=self.tr('Home'), text=self.tr('Home'),
onClick=print onClick=lambda t: self.switchTo(self.homeInterface, t)
) )
self.navigationInterface.addSeparator() self.navigationInterface.addSeparator()
...@@ -142,13 +154,6 @@ class MainWindow(FramelessWindow): ...@@ -142,13 +154,6 @@ class MainWindow(FramelessWindow):
onClick=lambda t: self.switchTo(self.layoutInterface, t), onClick=lambda t: self.switchTo(self.layoutInterface, t),
position=NavigationItemPostion.SCROLL position=NavigationItemPostion.SCROLL
) )
self.navigationInterface.addItem(
routeKey=self.menuInterface.objectName(),
icon=Icon.MENU,
text=self.tr('Menus'),
onClick=lambda t: self.switchTo(self.menuInterface, t),
position=NavigationItemPostion.SCROLL
)
self.navigationInterface.addItem( self.navigationInterface.addItem(
routeKey=self.materialInterface.objectName(), routeKey=self.materialInterface.objectName(),
icon=FIF.PALETTE, icon=FIF.PALETTE,
...@@ -156,6 +161,13 @@ class MainWindow(FramelessWindow): ...@@ -156,6 +161,13 @@ class MainWindow(FramelessWindow):
onClick=lambda t: self.switchTo(self.materialInterface, t), onClick=lambda t: self.switchTo(self.materialInterface, t),
position=NavigationItemPostion.SCROLL position=NavigationItemPostion.SCROLL
) )
self.navigationInterface.addItem(
routeKey=self.menuInterface.objectName(),
icon=Icon.MENU,
text=self.tr('Menus'),
onClick=lambda t: self.switchTo(self.menuInterface, t),
position=NavigationItemPostion.SCROLL
)
self.navigationInterface.addItem( self.navigationInterface.addItem(
routeKey=self.scrollInterface.objectName(), routeKey=self.scrollInterface.objectName(),
icon=Icon.SCROLL, icon=Icon.SCROLL,
...@@ -189,16 +201,16 @@ class MainWindow(FramelessWindow): ...@@ -189,16 +201,16 @@ class MainWindow(FramelessWindow):
#!IMPORTANT: don't forget to set the default route key if you enable the return button #!IMPORTANT: don't forget to set the default route key if you enable the return button
self.navigationInterface.setDefaultRouteKey( self.navigationInterface.setDefaultRouteKey(
self.basicInputInterface.objectName()) self.homeInterface.objectName())
self.stackWidget.currentWidgetChanged.connect( self.stackWidget.currentWidgetChanged.connect(
lambda w: self.navigationInterface.setCurrentItem(w.objectName())) lambda w: self.navigationInterface.setCurrentItem(w.objectName()))
self.navigationInterface.setCurrentItem( self.navigationInterface.setCurrentItem(
self.basicInputInterface.objectName()) self.homeInterface.objectName())
self.stackWidget.setCurrentIndex(0) self.stackWidget.setCurrentIndex(0)
def initWindow(self): def initWindow(self):
self.resize(1000, 780) self.resize(960, 780)
self.setMinimumWidth(580) self.setMinimumWidth(580)
self.setWindowIcon(QIcon('app/resource/images/logo.png')) self.setWindowIcon(QIcon('app/resource/images/logo.png'))
self.setWindowTitle('PyQt-Fluent-Widgets') self.setWindowTitle('PyQt-Fluent-Widgets')
...@@ -225,8 +237,16 @@ class MainWindow(FramelessWindow): ...@@ -225,8 +237,16 @@ class MainWindow(FramelessWindow):
def showMessageBox(self): def showMessageBox(self):
w = MessageBox( w = MessageBox(
'This is a help message', self.tr('This is a help message'),
'You clicked a customized navigation widget. You can add more custom widgets by calling `NavigationInterface.addWidget()` 😉', self.tr('You clicked a customized navigation widget. You can add more custom widgets by calling `NavigationInterface.addWidget()` 😉'),
self self
) )
w.exec() w.exec()
def switchToSample(self, routeKey, index):
""" switch to sample """
interfaces = self.findChildren(GalleryInterface)
for w in interfaces:
if w.objectName() == routeKey:
w.scrollToCard(index)
self.stackWidget.setCurrentWidget(w)
# coding:utf-8 # coding:utf-8
from PyQt5.QtGui import QColor from PyQt5.QtGui import QColor
from qfluentwidgets.components.widgets.label import AcrylicLabel from qfluentwidgets.components.widgets.acrylic_label import AcrylicLabel
from qfluentwidgets import FluentIcon as FIF from qfluentwidgets import FluentIcon as FIF
from .gallery_interface import GalleryInterface from .gallery_interface import GalleryInterface
......
# coding:utf-8 # coding:utf-8
from PyQt5.QtCore import Qt, QEasingCurve from PyQt5.QtCore import Qt, QEasingCurve
from PyQt5.QtGui import QPixmap from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel from PyQt5.QtWidgets import QWidget
from qfluentwidgets import ScrollArea, SmoothScrollArea, ToolTipFilter from qfluentwidgets import ScrollArea, SmoothScrollArea, ToolTipFilter, PixmapLabel
from .gallery_interface import GalleryInterface from .gallery_interface import GalleryInterface
from ..common.translator import Translator from ..common.translator import Translator
...@@ -20,21 +20,21 @@ class ScrollInterface(GalleryInterface): ...@@ -20,21 +20,21 @@ class ScrollInterface(GalleryInterface):
) )
w = ScrollArea() w = ScrollArea()
label = QLabel(self) label = PixmapLabel(self)
label.setPixmap(QPixmap("app/resource/images/chidanta2.jpg").scaled( label.setPixmap(QPixmap("app/resource/images/chidanta2.jpg").scaled(
775, 1229, Qt.KeepAspectRatio, Qt.SmoothTransformation 775, 1229, Qt.KeepAspectRatio, Qt.SmoothTransformation
)) ))
label.installEventFilter(ToolTipFilter(label, showDelay=500))
label.setToolTip(self.tr('Chitanda Eru is too hot 🥵'))
label.setToolTipDuration(2000)
w.horizontalScrollBar().setValue(0) w.horizontalScrollBar().setValue(0)
w.setWidget(label) w.setWidget(label)
w.setFixedSize(780, 420) w.setFixedSize(780, 420)
w.setObjectName('imageViewer') w.setObjectName('imageViewer')
self.addExampleCard( card = self.addExampleCard(
self.tr('Smooth scroll area'), self.tr('Smooth scroll area'),
w, w,
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/scroll_area/demo.py', 'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/scroll_area/demo.py',
) )
card.card.installEventFilter(ToolTipFilter(card.card, showDelay=500))
card.card.setToolTip(self.tr('Chitanda Eru is too hot 🥵'))
card.card.setToolTipDuration(2000)
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel from PyQt5.QtWidgets import QWidget, QLabel
from qfluentwidgets import StateToolTip, ToolTipFilter, PushButton from qfluentwidgets import StateToolTip, ToolTipFilter, PushButton, PixmapLabel
from .gallery_interface import GalleryInterface from .gallery_interface import GalleryInterface
from ..common.translator import Translator from ..common.translator import Translator
...@@ -37,13 +37,13 @@ class StatusInfoInterface(GalleryInterface): ...@@ -37,13 +37,13 @@ class StatusInfoInterface(GalleryInterface):
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/tool_tip/demo.py' 'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/tool_tip/demo.py'
) )
label = QLabel() label = PixmapLabel()
label.setPixmap(QPixmap('app/resource/images/kunkun.png').scaled( label.setPixmap(QPixmap('app/resource/images/kunkun.png').scaled(
200, 200, Qt.KeepAspectRatio, Qt.SmoothTransformation)) 160, 160, Qt.KeepAspectRatio, Qt.SmoothTransformation))
label.installEventFilter(ToolTipFilter(label, showDelay=500)) label.installEventFilter(ToolTipFilter(label, showDelay=500))
label.setToolTip(self.tr('Label with a ToolTip')) label.setToolTip(self.tr('Label with a ToolTip'))
label.setToolTipDuration(2000) label.setToolTipDuration(2000)
label.setFixedSize(200, 200) label.setFixedSize(160, 160)
self.addExampleCard( self.addExampleCard(
self.tr('A label with a ToolTip'), self.tr('A label with a ToolTip'),
label, label,
......
SOURCES += app/view/main_window/main_window.py \ SOURCES += app/view/main_window.py \
app/view/setting_interface.py \ app/view/setting_interface.py \
app/view/basic_input_interface.py \ app/view/basic_input_interface.py \
app/view/dialog_interface.py \ app/view/dialog_interface.py \
......
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M429.71 2048 q-85.71 0 -163.99 -34.86 q-78.29 -34.86 -137.15 -93.72 q-58.86 -58.86 -93.72 -137.14 q-34.85 -78.28 -34.85 -163.99 l0 -1188.58 q0 -85.71 34.85 -163.99 q34.85 -78.29 93.72 -137.15 q58.86 -58.86 137.15 -93.72 q78.28 -34.85 163.99 -34.85 l1188.58 0 q85.71 0 163.99 34.85 q78.29 34.85 137.14 93.72 q58.86 58.86 93.72 137.15 q34.86 78.28 34.86 163.99 l0 1188.58 q0 85.71 -34.86 163.99 q-34.86 78.29 -93.72 137.14 q-58.86 58.86 -137.14 93.72 q-78.28 34.86 -163.99 34.86 l-1188.58 0 ZM1614.86 1901.71 q57.14 0 109.14 -23.43 q52 -23.42 91.43 -62.86 q39.43 -39.43 62.86 -91.43 q23.43 -52 23.43 -109.14 l0 -1181.72 q0 -57.14 -23.43 -109.14 q-23.42 -52 -62.86 -91.43 q-39.43 -39.43 -91.43 -62.86 q-52 -23.42 -109.14 -23.42 l-1181.72 0 q-57.14 0 -109.14 23.42 q-52 23.43 -91.43 62.86 q-39.43 39.43 -62.86 91.43 q-23.42 52 -23.42 109.14 l0 1181.72 q0 57.14 23.42 109.14 q23.43 52 62.86 91.43 q39.43 39.43 91.43 62.86 q52 23.43 109.14 23.43 l1181.72 0 ZM292.57 1024 q0 -152 57.15 -285.14 q57.14 -133.14 156.57 -232.57 q99.43 -99.43 232.57 -156.57 q133.14 -57.15 285.14 -57.15 q152 0 285.14 57.15 q133.14 57.14 232.57 156.57 q99.42 99.43 156.57 232.57 q57.14 133.14 57.14 285.14 q0 152 -57.14 285.14 q-57.14 133.14 -156.57 232.57 q-99.43 99.42 -232.57 156.57 q-133.14 57.14 -285.14 57.14 q-152 0 -285.14 -57.14 q-133.14 -57.14 -232.57 -156.57 q-99.43 -99.43 -156.57 -232.57 q-57.15 -133.14 -57.15 -285.14 ZM1609.14 1024 l0 -11.43 q0 -118.86 -47.42 -223.43 q-47.43 -104.57 -128 -182.29 q-80.58 -77.72 -186.29 -122.86 q-105.72 -45.14 -223.43 -45.14 q-121.14 0 -228 45.71 q-106.86 45.71 -186.29 125.14 q-79.42 79.43 -125.14 186.29 q-45.71 106.86 -45.71 228 q0 121.14 45.71 228 q45.71 106.86 125.14 186.28 q79.43 79.43 186.29 125.14 q106.86 45.71 228 45.71 q121.14 0 228 -45.71 q106.86 -45.72 186.28 -125.14 q79.43 -79.42 125.14 -186.28 q45.71 -106.86 45.71 -228 ZM877.71 1024 q0 -30.86 11.43 -57.14 q11.43 -26.28 31.43 -46.28 q20 -20 46.28 -31.43 q26.28 -11.43 57.14 -11.43 q29.71 0 56.57 11.43 q26.86 11.43 46.86 31.43 q20 20 31.43 46.86 q11.43 26.86 11.43 56.57 q0 30.86 -11.43 57.14 q-11.43 26.29 -31.43 46.29 q-20 20 -46.29 31.43 q-26.29 11.43 -57.14 11.43 q-30.86 0 -57.72 -11.43 q-26.86 -11.43 -46.28 -30.86 q-19.43 -19.43 -30.86 -46.29 q-11.43 -26.86 -11.43 -57.71 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M429.71 2048 q-85.71 0 -163.99 -34.86 q-78.29 -34.86 -137.15 -93.72 q-58.86 -58.86 -93.72 -137.14 q-34.85 -78.28 -34.85 -163.99 l0 -1188.58 q0 -85.71 34.85 -163.99 q34.85 -78.29 93.72 -137.15 q58.86 -58.86 137.15 -93.72 q78.28 -34.85 163.99 -34.85 l1188.58 0 q85.71 0 163.99 34.85 q78.29 34.85 137.14 93.72 q58.86 58.86 93.72 137.15 q34.86 78.28 34.86 163.99 l0 1188.58 q0 85.71 -34.86 163.99 q-34.86 78.29 -93.72 137.14 q-58.86 58.86 -137.14 93.72 q-78.28 34.86 -163.99 34.86 l-1188.58 0 ZM1614.86 1901.71 q57.14 0 109.14 -23.43 q52 -23.42 91.43 -62.86 q39.43 -39.43 62.86 -91.43 q23.43 -52 23.43 -109.14 l0 -1181.72 q0 -57.14 -23.43 -109.14 q-23.42 -52 -62.86 -91.43 q-39.43 -39.43 -91.43 -62.86 q-52 -23.42 -109.14 -23.42 l-1181.72 0 q-57.14 0 -109.14 23.42 q-52 23.43 -91.43 62.86 q-39.43 39.43 -62.86 91.43 q-23.42 52 -23.42 109.14 l0 1181.72 q0 57.14 23.42 109.14 q23.43 52 62.86 91.43 q39.43 39.43 91.43 62.86 q52 23.43 109.14 23.43 l1181.72 0 ZM292.57 1024 q0 -152 57.15 -285.14 q57.14 -133.14 156.57 -232.57 q99.43 -99.43 232.57 -156.57 q133.14 -57.15 285.14 -57.15 q152 0 285.14 57.15 q133.14 57.14 232.57 156.57 q99.42 99.43 156.57 232.57 q57.14 133.14 57.14 285.14 q0 152 -57.14 285.14 q-57.14 133.14 -156.57 232.57 q-99.43 99.42 -232.57 156.57 q-133.14 57.14 -285.14 57.14 q-152 0 -285.14 -57.14 q-133.14 -57.14 -232.57 -156.57 q-99.43 -99.43 -156.57 -232.57 q-57.15 -133.14 -57.15 -285.14 ZM1609.14 1024 l0 -11.43 q0 -118.86 -47.42 -223.43 q-47.43 -104.57 -128 -182.29 q-80.58 -77.72 -186.29 -122.86 q-105.72 -45.14 -223.43 -45.14 q-121.14 0 -228 45.71 q-106.86 45.71 -186.29 125.14 q-79.42 79.43 -125.14 186.29 q-45.71 106.86 -45.71 228 q0 121.14 45.71 228 q45.71 106.86 125.14 186.28 q79.43 79.43 186.29 125.14 q106.86 45.71 228 45.71 q121.14 0 228 -45.71 q106.86 -45.72 186.28 -125.14 q79.43 -79.42 125.14 -186.28 q45.71 -106.86 45.71 -228 ZM877.71 1024 q0 -30.86 11.43 -57.14 q11.43 -26.28 31.43 -46.28 q20 -20 46.28 -31.43 q26.28 -11.43 57.14 -11.43 q29.71 0 56.57 11.43 q26.86 11.43 46.86 31.43 q20 20 31.43 46.86 q11.43 26.86 11.43 56.57 q0 30.86 -11.43 57.14 q-11.43 26.29 -31.43 46.29 q-20 20 -46.29 31.43 q-26.29 11.43 -57.14 11.43 q-30.86 0 -57.72 -11.43 q-26.86 -11.43 -46.28 -30.86 q-19.43 -19.43 -30.86 -46.29 q-11.43 -26.86 -11.43 -57.71 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M384 1433 q-11 4 -37 13 q-26 9 -59.5 20.5 q-33.5 11.5 -69.5 23.5 q-36 12 -68 22.5 q-32 10.5 -55.5 17 q-23.5 6.5 -30.5 6.5 q-27 0 -45.5 -19.5 q-18.5 -19.5 -18.5 -45.5 q0 -7 6 -31.5 q6 -24.5 15.5 -58 q9.5 -33.5 20.5 -72 q11 -38.5 21.5 -73.5 q10.5 -35 19 -62 q8.5 -27 11.5 -38 q-94 -173 -94 -368 q0 -106 27.5 -204 q27.5 -98 77.5 -183.5 q50 -85.5 120 -155.5 q70 -70 155.5 -120 q85.5 -50 183.5 -77.5 q98 -27.5 204 -27.5 q159 0 298.5 60.5 q139.5 60.5 244 165 q104.5 104.5 165 244 q60.5 139.5 60.5 298.5 q0 106 -27.5 204 q-27.5 98 -77.5 183.5 q-50 85.5 -120 155.5 q-70 70 -155.5 120 q-85.5 50 -183.5 77.5 q-98 27.5 -204 27.5 q-101 0 -198.5 -26 q-97.5 -26 -185.5 -77 ZM1408 768 q0 -133 -50 -249.5 q-50 -116.5 -137 -203.5 q-87 -87 -203.5 -137 q-116.5 -50 -249.5 -50 q-133 0 -249.5 50 q-116.5 50 -203.5 137 q-87 87 -137 203.5 q-50 116.5 -50 249.5 q0 91 23.5 169 q23.5 78 65.5 158 q5 8 7 15.5 q2 7.5 2 17.5 q0 8 -4 26.5 q-4 18.5 -10.5 42 q-6.5 23.5 -14.5 50 q-8 26.5 -15.5 51 q-7.5 24.5 -13.5 45 q-6 20.5 -9 30.5 q14 -4 48 -16.5 q34 -12.5 71.5 -25 q37.5 -12.5 69.5 -22.5 q32 -10 42 -10 q19 0 36 10 q42 24 82 42 q40 18 81.5 31 q41.5 13 85.5 19.5 q44 6.5 93 6.5 q133 0 249.5 -50 q116.5 -50 203.5 -137 q87 -87 137 -203.5 q50 -116.5 50 -249.5 ZM576 704 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l384 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-384 0 ZM607 1649 q79 15 161 15 q93 122 225.5 189 q132.5 67 286.5 67 q49 0 92.5 -6.5 q43.5 -6.5 85 -19 q41.5 -12.5 82 -31 q40.5 -18.5 82.5 -42.5 q17 -10 36 -10 q10 0 42 10 q32 10 69.5 22.5 q37.5 12.5 71.5 25 q34 12.5 48 16.5 q-3 -10 -9 -30.5 q-6 -20.5 -13.5 -45 q-7.5 -24.5 -15.5 -51 q-8 -26.5 -14.5 -50 q-6.5 -23.5 -10.5 -42 q-4 -18.5 -4 -26.5 q0 -10 2 -17.5 q2 -7.5 7 -15.5 q21 -40 37.5 -79 q16.5 -39 28 -79 q11.5 -40 17.5 -81.5 q6 -41.5 6 -87.5 q0 -75 -17.5 -147.5 q-17.5 -72.5 -50.5 -138.5 q-33 -66 -80.5 -123.5 q-47.5 -57.5 -107.5 -102.5 q0 -79 -14 -161 q91 49 164.5 121 q73.5 72 125.5 159 q52 87 80 186 q28 99 28 202 q0 100 -22.5 192.5 q-22.5 92.5 -70.5 180.5 q3 11 11.5 38.5 q8.5 27.5 18.5 62.5 q10 35 21.5 73.5 q11.5 38.5 20.5 72 q9 33.5 15 57.5 q6 24 6 31 q0 26 -18.5 45.5 q-18.5 19.5 -45.5 19.5 q-7 0 -30.5 -6.5 q-23.5 -6.5 -55 -17 q-31.5 -10.5 -68 -22.5 q-36.5 -12 -69.5 -23.5 q-33 -11.5 -59 -20.5 q-26 -9 -37 -13 q-94 53 -190 78 q-96 25 -203 25 q-103 0 -201.5 -28.5 q-98.5 -28.5 -185 -80.5 q-86.5 -52 -158 -126 q-71.5 -74 -120.5 -164 ZM576 960 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l256 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-256 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M384 1433 q-11 4 -37 13 q-26 9 -59.5 20.5 q-33.5 11.5 -69.5 23.5 q-36 12 -68 22.5 q-32 10.5 -55.5 17 q-23.5 6.5 -30.5 6.5 q-27 0 -45.5 -19.5 q-18.5 -19.5 -18.5 -45.5 q0 -7 6 -31.5 q6 -24.5 15.5 -58 q9.5 -33.5 20.5 -72 q11 -38.5 21.5 -73.5 q10.5 -35 19 -62 q8.5 -27 11.5 -38 q-94 -173 -94 -368 q0 -106 27.5 -204 q27.5 -98 77.5 -183.5 q50 -85.5 120 -155.5 q70 -70 155.5 -120 q85.5 -50 183.5 -77.5 q98 -27.5 204 -27.5 q159 0 298.5 60.5 q139.5 60.5 244 165 q104.5 104.5 165 244 q60.5 139.5 60.5 298.5 q0 106 -27.5 204 q-27.5 98 -77.5 183.5 q-50 85.5 -120 155.5 q-70 70 -155.5 120 q-85.5 50 -183.5 77.5 q-98 27.5 -204 27.5 q-101 0 -198.5 -26 q-97.5 -26 -185.5 -77 ZM1408 768 q0 -133 -50 -249.5 q-50 -116.5 -137 -203.5 q-87 -87 -203.5 -137 q-116.5 -50 -249.5 -50 q-133 0 -249.5 50 q-116.5 50 -203.5 137 q-87 87 -137 203.5 q-50 116.5 -50 249.5 q0 91 23.5 169 q23.5 78 65.5 158 q5 8 7 15.5 q2 7.5 2 17.5 q0 8 -4 26.5 q-4 18.5 -10.5 42 q-6.5 23.5 -14.5 50 q-8 26.5 -15.5 51 q-7.5 24.5 -13.5 45 q-6 20.5 -9 30.5 q14 -4 48 -16.5 q34 -12.5 71.5 -25 q37.5 -12.5 69.5 -22.5 q32 -10 42 -10 q19 0 36 10 q42 24 82 42 q40 18 81.5 31 q41.5 13 85.5 19.5 q44 6.5 93 6.5 q133 0 249.5 -50 q116.5 -50 203.5 -137 q87 -87 137 -203.5 q50 -116.5 50 -249.5 ZM576 704 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l384 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-384 0 ZM607 1649 q79 15 161 15 q93 122 225.5 189 q132.5 67 286.5 67 q49 0 92.5 -6.5 q43.5 -6.5 85 -19 q41.5 -12.5 82 -31 q40.5 -18.5 82.5 -42.5 q17 -10 36 -10 q10 0 42 10 q32 10 69.5 22.5 q37.5 12.5 71.5 25 q34 12.5 48 16.5 q-3 -10 -9 -30.5 q-6 -20.5 -13.5 -45 q-7.5 -24.5 -15.5 -51 q-8 -26.5 -14.5 -50 q-6.5 -23.5 -10.5 -42 q-4 -18.5 -4 -26.5 q0 -10 2 -17.5 q2 -7.5 7 -15.5 q21 -40 37.5 -79 q16.5 -39 28 -79 q11.5 -40 17.5 -81.5 q6 -41.5 6 -87.5 q0 -75 -17.5 -147.5 q-17.5 -72.5 -50.5 -138.5 q-33 -66 -80.5 -123.5 q-47.5 -57.5 -107.5 -102.5 q0 -79 -14 -161 q91 49 164.5 121 q73.5 72 125.5 159 q52 87 80 186 q28 99 28 202 q0 100 -22.5 192.5 q-22.5 92.5 -70.5 180.5 q3 11 11.5 38.5 q8.5 27.5 18.5 62.5 q10 35 21.5 73.5 q11.5 38.5 20.5 72 q9 33.5 15 57.5 q6 24 6 31 q0 26 -18.5 45.5 q-18.5 19.5 -45.5 19.5 q-7 0 -30.5 -6.5 q-23.5 -6.5 -55 -17 q-31.5 -10.5 -68 -22.5 q-36.5 -12 -69.5 -23.5 q-33 -11.5 -59 -20.5 q-26 -9 -37 -13 q-94 53 -190 78 q-96 25 -203 25 q-103 0 -201.5 -28.5 q-98.5 -28.5 -185 -80.5 q-86.5 -52 -158 -126 q-71.5 -74 -120.5 -164 ZM576 960 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l256 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-256 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve">
<path fill="#000000" d="M251 2048 q-50 0 -95.5 -20.5 q-45.5 -20.5 -80 -55 q-34.5 -34.5 -55 -80 q-20.5 -45.5 -20.5 -95.5 l0 -1546 q0 -50 20.5 -95.5 q20.5 -45.5 55 -80 q34.5 -34.5 80 -55 q45.5 -20.5 95.5 -20.5 l1546 0 q50 0 95.5 20.5 q45.5 20.5 80 55 q34.5 34.5 55 80 q20.5 45.5 20.5 95.5 l0 1546 q0 50 -20.5 95.5 q-20.5 45.5 -55 80 q-34.5 34.5 -80 55 q-45.5 20.5 -95.5 20.5 l-1546 0 ZM1792 1920 q27 0 50 -10 q23 -10 40.5 -27.5 q17.5 -17.5 27.5 -40.5 q10 -23 10 -50 l0 -1536 q0 -26 -10 -49.5 q-10 -23.5 -27.5 -41 q-17.5 -17.5 -41 -27.5 q-23.5 -10 -49.5 -10 l-1536 0 q-27 0 -50 10 q-23 10 -40.5 27.5 q-17.5 17.5 -27.5 40.5 q-10 23 -10 50 l0 1536 q0 27 10 50.5 q10 23.5 27 40.5 q17 17 40.5 27 q23.5 10 50.5 10 l1536 0 ZM384 960 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 l339 338 l723 -722 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 q0 26 -19 45 l-768 768 q-19 19 -45 19 q-26 0 -45 -19 l-384 -384 q-19 -19 -19 -45 Z"/>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve">
<path fill="#ffffff" d="M251 2048 q-50 0 -95.5 -20.5 q-45.5 -20.5 -80 -55 q-34.5 -34.5 -55 -80 q-20.5 -45.5 -20.5 -95.5 l0 -1546 q0 -50 20.5 -95.5 q20.5 -45.5 55 -80 q34.5 -34.5 80 -55 q45.5 -20.5 95.5 -20.5 l1546 0 q50 0 95.5 20.5 q45.5 20.5 80 55 q34.5 34.5 55 80 q20.5 45.5 20.5 95.5 l0 1546 q0 50 -20.5 95.5 q-20.5 45.5 -55 80 q-34.5 34.5 -80 55 q-45.5 20.5 -95.5 20.5 l-1546 0 ZM1792 1920 q27 0 50 -10 q23 -10 40.5 -27.5 q17.5 -17.5 27.5 -40.5 q10 -23 10 -50 l0 -1536 q0 -26 -10 -49.5 q-10 -23.5 -27.5 -41 q-17.5 -17.5 -41 -27.5 q-23.5 -10 -49.5 -10 l-1536 0 q-27 0 -50 10 q-23 10 -40.5 27.5 q-17.5 17.5 -27.5 40.5 q-10 23 -10 50 l0 1536 q0 27 10 50.5 q10 23.5 27 40.5 q17 17 40.5 27 q23.5 10 50.5 10 l1536 0 ZM384 960 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 l339 338 l723 -722 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 q0 26 -19 45 l-768 768 q-19 19 -45 19 q-26 0 -45 -19 l-384 -384 q-19 -19 -19 -45 Z"/>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M384 1728 l0 -448 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -455 q0 -63 25.5 -120 q25.5 -57 68 -99.5 q42.5 -42.5 99.5 -68 q57 -25.5 120 -25.5 q29 0 50 16.5 q21 16.5 21 47.5 q0 26 -19 45 q-19 19 -45 19 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 448 q0 76 -33.5 143.5 q-33.5 67.5 -94.5 112.5 q61 45 94.5 112.5 q33.5 67.5 33.5 143.5 l0 448 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 q26 0 45 19 q19 19 19 45 q0 31 -21 47.5 q-21 16.5 -50 16.5 q-65 0 -122 -26 q-57 -26 -99.5 -70 q-42.5 -44 -67 -102 q-24.5 -58 -24.5 -122 ZM1280 1984 q0 -26 19 -45 q19 -19 45 -19 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -448 q0 -76 33.5 -143.5 q33.5 -67.5 94.5 -112.5 q-61 -45 -94.5 -112.5 q-33.5 -67.5 -33.5 -143.5 l0 -448 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -31 21 -47.5 q21 -16.5 50 -16.5 q65 0 122 26 q57 26 99.5 70 q42.5 44 67 102 q24.5 58 24.5 122 l0 448 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 455 q0 63 -25.5 120 q-25.5 57 -68 99.5 q-42.5 42.5 -99.5 68 q-57 25.5 -120 25.5 q-29 0 -50 -16.5 q-21 -16.5 -21 -47.5 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M384 1728 l0 -448 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -455 q0 -63 25.5 -120 q25.5 -57 68 -99.5 q42.5 -42.5 99.5 -68 q57 -25.5 120 -25.5 q29 0 50 16.5 q21 16.5 21 47.5 q0 26 -19 45 q-19 19 -45 19 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 448 q0 76 -33.5 143.5 q-33.5 67.5 -94.5 112.5 q61 45 94.5 112.5 q33.5 67.5 33.5 143.5 l0 448 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 q26 0 45 19 q19 19 19 45 q0 31 -21 47.5 q-21 16.5 -50 16.5 q-65 0 -122 -26 q-57 -26 -99.5 -70 q-42.5 -44 -67 -102 q-24.5 -58 -24.5 -122 ZM1280 1984 q0 -26 19 -45 q19 -19 45 -19 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -448 q0 -76 33.5 -143.5 q33.5 -67.5 94.5 -112.5 q-61 -45 -94.5 -112.5 q-33.5 -67.5 -33.5 -143.5 l0 -448 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -31 21 -47.5 q21 -16.5 50 -16.5 q65 0 122 26 q57 26 99.5 70 q42.5 44 67 102 q24.5 58 24.5 122 l0 448 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 455 q0 63 -25.5 120 q-25.5 57 -68 99.5 q-42.5 42.5 -99.5 68 q-57 25.5 -120 25.5 q-29 0 -50 -16.5 q-21 -16.5 -21 -47.5 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M960 192 l0 -128 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 l0 128 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 ZM512 448 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 l-128 -128 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 l128 128 q19 19 19 45 ZM1728 256 q26 0 45 19 q19 19 19 45 q0 26 -19 45 l-128 128 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 l128 -128 q19 -19 45 -19 ZM1536 1024 l0 10 q0 104 -41.5 195.5 q-41.5 91.5 -112 159.5 q-70.5 68 -163 107.5 q-92.5 39.5 -195.5 39.5 q-106 0 -199.5 -40 q-93.5 -40 -163 -109.5 q-69.5 -69.5 -109.5 -163 q-40 -93.5 -40 -199.5 q0 -106 40 -199.5 q40 -93.5 109.5 -163 q69.5 -69.5 163 -109.5 q93.5 -40 199.5 -40 q106 0 199.5 40 q93.5 40 163 109.5 q69.5 69.5 109.5 163 q40 93.5 40 199.5 ZM1024 1408 l8 0 q78 0 146.5 -31 q68.5 -31 119.5 -84 q51 -53 80.5 -122.5 q29.5 -69.5 29.5 -146.5 q0 -77 -29.5 -146.5 q-29.5 -69.5 -80.5 -122.5 q-51 -53 -119.5 -84 q-68.5 -31 -146.5 -31 l-8 0 l0 768 ZM192 960 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-128 0 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l128 0 ZM1984 960 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-128 0 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l128 0 ZM448 1536 q26 0 45 19 q19 19 19 45 q0 26 -19 45 l-128 128 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 l128 -128 q19 -19 45 -19 ZM1792 1728 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 l-128 -128 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 l128 128 q19 19 19 45 ZM1088 1856 l0 128 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 l0 -128 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M960 192 l0 -128 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 l0 128 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 ZM512 448 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 l-128 -128 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 l128 128 q19 19 19 45 ZM1728 256 q26 0 45 19 q19 19 19 45 q0 26 -19 45 l-128 128 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 l128 -128 q19 -19 45 -19 ZM1536 1024 l0 10 q0 104 -41.5 195.5 q-41.5 91.5 -112 159.5 q-70.5 68 -163 107.5 q-92.5 39.5 -195.5 39.5 q-106 0 -199.5 -40 q-93.5 -40 -163 -109.5 q-69.5 -69.5 -109.5 -163 q-40 -93.5 -40 -199.5 q0 -106 40 -199.5 q40 -93.5 109.5 -163 q69.5 -69.5 163 -109.5 q93.5 -40 199.5 -40 q106 0 199.5 40 q93.5 40 163 109.5 q69.5 69.5 109.5 163 q40 93.5 40 199.5 ZM1024 1408 l8 0 q78 0 146.5 -31 q68.5 -31 119.5 -84 q51 -53 80.5 -122.5 q29.5 -69.5 29.5 -146.5 q0 -77 -29.5 -146.5 q-29.5 -69.5 -80.5 -122.5 q-51 -53 -119.5 -84 q-68.5 -31 -146.5 -31 l-8 0 l0 768 ZM192 960 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-128 0 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l128 0 ZM1984 960 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-128 0 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l128 0 ZM448 1536 q26 0 45 19 q19 19 19 45 q0 26 -19 45 l-128 128 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 l128 -128 q19 -19 45 -19 ZM1792 1728 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 l-128 -128 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 l128 128 q19 19 19 45 ZM1088 1856 l0 128 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 l0 -128 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M1792 784 l0 1008 q0 53 -20 99.5 q-20 46.5 -55 81.5 q-35 35 -81.5 55 q-46.5 20 -99.5 20 l-1024 0 q-53 0 -99.5 -20 q-46.5 -20 -81.5 -55 q-35 -35 -55 -81.5 q-20 -46.5 -20 -99.5 l0 -1536 q0 -53 20 -99.5 q20 -46.5 55 -81.5 q35 -35 81.5 -55 q46.5 -20 99.5 -20 l496 0 q51 0 98 19.5 q47 19.5 83 55.5 l528 528 q36 36 55.5 83 q19.5 47 19.5 98 ZM1664 784 q0 -4 0 -8 q0 -4 -1 -8 l-383 0 q-53 0 -99.5 -20 q-46.5 -20 -81.5 -55 q-35 -35 -55 -81.5 q-20 -46.5 -20 -99.5 l0 -383 q-4 -1 -8 -1 q-4 0 -8 0 l-496 0 q-27 0 -50 10 q-23 10 -40.5 27.5 q-17.5 17.5 -27.5 40.5 q-10 23 -10 50 l0 1536 q0 27 10 50.5 q10 23.5 27 40.5 q17 17 40.5 27 q23.5 10 50.5 10 l1024 0 q27 0 50 -10 q23 -10 40.5 -27.5 q17.5 -17.5 27.5 -40.5 q10 -23 10 -50 l0 -1008 ZM1574 640 l-422 -422 l0 294 q0 27 10 50.5 q10 23.5 27 40.5 q17 17 40.5 27 q23.5 10 50.5 10 l294 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M1792 784 l0 1008 q0 53 -20 99.5 q-20 46.5 -55 81.5 q-35 35 -81.5 55 q-46.5 20 -99.5 20 l-1024 0 q-53 0 -99.5 -20 q-46.5 -20 -81.5 -55 q-35 -35 -55 -81.5 q-20 -46.5 -20 -99.5 l0 -1536 q0 -53 20 -99.5 q20 -46.5 55 -81.5 q35 -35 81.5 -55 q46.5 -20 99.5 -20 l496 0 q51 0 98 19.5 q47 19.5 83 55.5 l528 528 q36 36 55.5 83 q19.5 47 19.5 98 ZM1664 784 q0 -4 0 -8 q0 -4 -1 -8 l-383 0 q-53 0 -99.5 -20 q-46.5 -20 -81.5 -55 q-35 -35 -55 -81.5 q-20 -46.5 -20 -99.5 l0 -383 q-4 -1 -8 -1 q-4 0 -8 0 l-496 0 q-27 0 -50 10 q-23 10 -40.5 27.5 q-17.5 17.5 -27.5 40.5 q-10 23 -10 50 l0 1536 q0 27 10 50.5 q10 23.5 27 40.5 q17 17 40.5 27 q23.5 10 50.5 10 l1024 0 q27 0 50 -10 q23 -10 40.5 -27.5 q17.5 -17.5 27.5 -40.5 q10 -23 10 -50 l0 -1008 ZM1574 640 l-422 -422 l0 294 q0 27 10 50.5 q10 23.5 27 40.5 q17 17 40.5 27 q23.5 10 50.5 10 l294 0 Z"/></svg>
\ No newline at end of file
<svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#24292f"/></svg>
\ No newline at end of file
<svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#fff"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve">.
<path fill="#000000" d="M340.62 2048 q-56.59 0 -106.24 -21.36 q-49.65 -21.36 -87.03 -58.73 q-37.37 -37.38 -58.73 -87.03 q-21.36 -49.65 -21.36 -106.24 l0 -831.8 q0 -40.58 16.02 -79.02 q16.02 -38.44 43.78 -66.2 l728.22 -727.16 q34.17 -34.17 77.42 -52.32 q43.25 -18.15 91.29 -18.15 q48.05 0 91.3 18.15 q43.24 18.15 77.41 52.32 l728.22 727.16 q27.77 27.76 43.79 66.2 q16.01 38.44 16.01 79.02 l0 831.8 q0 56.59 -21.36 106.24 q-21.36 49.65 -58.73 87.03 q-37.38 37.38 -87.03 58.73 q-49.65 21.36 -106.24 21.36 l-410.03 0 q-28.83 0 -53.92 -10.68 q-25.09 -10.68 -43.24 -28.83 q-18.15 -18.15 -28.83 -43.25 q-10.67 -25.09 -10.67 -53.92 l0 -546.7 l-273.36 0 l0 546.7 q0 28.83 -10.68 53.39 q-10.67 24.56 -29.36 43.24 q-18.69 18.69 -43.25 29.37 q-24.56 10.68 -53.39 10.68 l-410.03 0 ZM750.65 1911.32 l0 -546.7 q0 -28.83 10.68 -53.39 q10.67 -24.56 29.37 -43.24 q18.69 -18.69 43.24 -29.36 q24.56 -10.67 53.39 -10.67 l273.36 0 q27.76 0 52.85 10.67 q25.09 10.67 43.78 29.36 q18.69 18.68 29.37 43.78 q10.67 25.1 10.67 52.86 l0 546.7 l410.03 0 q28.83 0 53.39 -10.67 q24.56 -10.67 43.24 -29.36 q18.69 -18.68 29.36 -43.24 q10.67 -24.56 10.67 -53.39 l0 -831.8 q0 -27.76 -20.28 -48.05 l-727.16 -728.23 q-29.9 -29.89 -72.61 -29.89 q-42.71 0 -72.61 29.89 l-727.16 728.23 q-20.28 20.29 -20.28 48.05 l0 831.8 q0 28.83 10.68 53.92 q10.68 25.09 28.83 43.24 q18.16 18.15 43.25 28.83 q25.09 10.67 53.92 10.67 l410.03 0 Z"/>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve">.
<path fill="#ffffff" d="M340.62 2048 q-56.59 0 -106.24 -21.36 q-49.65 -21.36 -87.03 -58.73 q-37.37 -37.38 -58.73 -87.03 q-21.36 -49.65 -21.36 -106.24 l0 -831.8 q0 -40.58 16.02 -79.02 q16.02 -38.44 43.78 -66.2 l728.22 -727.16 q34.17 -34.17 77.42 -52.32 q43.25 -18.15 91.29 -18.15 q48.05 0 91.3 18.15 q43.24 18.15 77.41 52.32 l728.22 727.16 q27.77 27.76 43.79 66.2 q16.01 38.44 16.01 79.02 l0 831.8 q0 56.59 -21.36 106.24 q-21.36 49.65 -58.73 87.03 q-37.38 37.38 -87.03 58.73 q-49.65 21.36 -106.24 21.36 l-410.03 0 q-28.83 0 -53.92 -10.68 q-25.09 -10.68 -43.24 -28.83 q-18.15 -18.15 -28.83 -43.25 q-10.67 -25.09 -10.67 -53.92 l0 -546.7 l-273.36 0 l0 546.7 q0 28.83 -10.68 53.39 q-10.67 24.56 -29.36 43.24 q-18.69 18.69 -43.25 29.37 q-24.56 10.68 -53.39 10.68 l-410.03 0 ZM750.65 1911.32 l0 -546.7 q0 -28.83 10.68 -53.39 q10.67 -24.56 29.37 -43.24 q18.69 -18.69 43.24 -29.36 q24.56 -10.67 53.39 -10.67 l273.36 0 q27.76 0 52.85 10.67 q25.09 10.67 43.78 29.36 q18.69 18.68 29.37 43.78 q10.67 25.1 10.67 52.86 l0 546.7 l410.03 0 q28.83 0 53.39 -10.67 q24.56 -10.67 43.24 -29.36 q18.69 -18.68 29.36 -43.24 q10.67 -24.56 10.67 -53.39 l0 -831.8 q0 -27.76 -20.28 -48.05 l-727.16 -728.23 q-29.9 -29.89 -72.61 -29.89 q-42.71 0 -72.61 29.89 l-727.16 728.23 q-20.28 20.29 -20.28 48.05 l0 831.8 q0 28.83 10.68 53.92 q10.68 25.09 28.83 43.24 q18.16 18.15 43.25 28.83 q25.09 10.67 53.92 10.67 l410.03 0 Z"/>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M1690.29 0 q72 0 137.14 29.14 q65.14 29.14 113.71 77.72 q48.57 48.57 77.72 113.71 q29.14 65.14 29.14 137.14 l0 1332.58 q0 72 -29.14 137.14 q-29.14 65.14 -77.72 113.71 q-48.57 48.57 -113.71 77.72 q-65.14 29.14 -137.14 29.14 l-1332.58 0 q-72 0 -137.14 -29.14 q-65.14 -29.14 -113.71 -77.72 q-48.57 -48.57 -77.72 -113.71 q-29.14 -65.14 -29.14 -137.14 l0 -1332.58 q0 -72 29.14 -137.14 q29.14 -65.14 77.72 -113.71 q48.57 -48.57 113.71 -77.72 q65.14 -29.14 137.14 -29.14 l1332.58 0 ZM365.71 146.29 q-44.57 0 -84.57 17.14 q-40 17.14 -70.28 47.42 q-30.28 30.28 -47.42 70.28 q-17.14 40 -17.14 84.57 l0 950.86 l1024 0 l0 -1170.28 l-804.58 0 ZM1901.71 365.71 q0 -44.57 -17.14 -84.57 q-17.14 -40 -47.43 -70.28 q-30.29 -30.28 -70.29 -47.42 q-40 -17.14 -84.57 -17.14 l-365.72 0 l0 438.85 l585.14 0 l0 -219.43 ZM1901.71 731.43 l-585.14 0 l0 585.14 l585.14 0 l0 -585.14 ZM146.29 1682.29 q0 44.57 17.14 84.57 q17.14 40 47.42 70.29 q30.28 30.29 70.28 47.43 q40 17.14 84.57 17.14 l365.72 0 l0 -438.85 l-585.14 0 l0 219.43 ZM1682.29 1901.71 q44.57 0 84.57 -17.14 q40 -17.14 70.29 -47.43 q30.29 -30.29 47.43 -70.29 q17.14 -40 17.14 -84.57 l0 -219.43 l-1024 0 l0 438.85 l804.58 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M1690.29 0 q72 0 137.14 29.14 q65.14 29.14 113.71 77.72 q48.57 48.57 77.72 113.71 q29.14 65.14 29.14 137.14 l0 1332.58 q0 72 -29.14 137.14 q-29.14 65.14 -77.72 113.71 q-48.57 48.57 -113.71 77.72 q-65.14 29.14 -137.14 29.14 l-1332.58 0 q-72 0 -137.14 -29.14 q-65.14 -29.14 -113.71 -77.72 q-48.57 -48.57 -77.72 -113.71 q-29.14 -65.14 -29.14 -137.14 l0 -1332.58 q0 -72 29.14 -137.14 q29.14 -65.14 77.72 -113.71 q48.57 -48.57 113.71 -77.72 q65.14 -29.14 137.14 -29.14 l1332.58 0 ZM365.71 146.29 q-44.57 0 -84.57 17.14 q-40 17.14 -70.28 47.42 q-30.28 30.28 -47.42 70.28 q-17.14 40 -17.14 84.57 l0 950.86 l1024 0 l0 -1170.28 l-804.58 0 ZM1901.71 365.71 q0 -44.57 -17.14 -84.57 q-17.14 -40 -47.43 -70.28 q-30.29 -30.28 -70.29 -47.42 q-40 -17.14 -84.57 -17.14 l-365.72 0 l0 438.85 l585.14 0 l0 -219.43 ZM1901.71 731.43 l-585.14 0 l0 585.14 l585.14 0 l0 -585.14 ZM146.29 1682.29 q0 44.57 17.14 84.57 q17.14 40 47.42 70.29 q30.28 30.29 70.28 47.43 q40 17.14 84.57 17.14 l365.72 0 l0 -438.85 l-585.14 0 l0 219.43 ZM1682.29 1901.71 q44.57 0 84.57 -17.14 q40 -17.14 70.29 -47.43 q30.29 -30.29 47.43 -70.29 q17.14 -40 17.14 -84.57 l0 -219.43 l-1024 0 l0 438.85 l804.58 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M448 2048 q-39 0 -74 -15 q-35 -15 -61.5 -41.5 q-26.5 -26.5 -41.5 -61.5 q-15 -35 -15 -74 l0 -1536 q0 -39 15 -74 q15 -35 41.5 -61.5 q26.5 -26.5 61.5 -41.5 q35 -15 74 -15 l203 0 q10 -29 28 -52.5 q18 -23.5 42 -40.5 q24 -17 52 -26 q28 -9 59 -9 l384 0 q31 0 59 9 q28 9 52 26 q24 17 42 40.5 q18 23.5 28 52.5 l203 0 q39 0 74 15 q35 15 61.5 41.5 q26.5 26.5 41.5 61.5 q15 35 15 74 l0 1536 q0 39 -15 74 q-15 35 -41.5 61.5 q-26.5 26.5 -61.5 41.5 q-35 15 -74 15 l-1152 0 ZM1216 256 q26 0 45 -19 q19 -19 19 -45 q0 -26 -19 -45 q-19 -19 -45 -19 l-384 0 q-26 0 -45 19 q-19 19 -19 45 q0 26 19 45 q19 19 45 19 l384 0 ZM1600 1920 q26 0 45 -19 q19 -19 19 -45 l0 -1536 q0 -26 -19 -45 q-19 -19 -45 -19 l-203 0 q-10 29 -28 52.5 q-18 23.5 -42 40 q-24 16.5 -52.5 26 q-28.5 9.5 -58.5 9.5 l-384 0 q-30 0 -58 -9.5 q-28 -9.5 -52 -26 q-24 -16.5 -42.5 -40 q-18.5 -23.5 -28.5 -52.5 l-203 0 q-26 0 -45 19 q-19 19 -19 45 l0 1536 q0 26 19 45 q19 19 45 19 l1152 0 ZM512 832 q0 -27 10 -50 q10 -23 27.5 -40.5 q17.5 -17.5 40.5 -27.5 q23 -10 50 -10 q26 0 49.5 10 q23.5 10 41 27.5 q17.5 17.5 27.5 41 q10 23.5 10 49.5 q0 27 -10 50 q-10 23 -27.5 40.5 q-17.5 17.5 -40.5 27.5 q-23 10 -50 10 q-27 0 -50.5 -10 q-23.5 -10 -40.5 -27 q-17 -17 -27 -40.5 q-10 -23.5 -10 -50.5 ZM960 896 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l512 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-512 0 ZM512 1216 q0 -27 10 -50 q10 -23 27.5 -40.5 q17.5 -17.5 40.5 -27.5 q23 -10 50 -10 q26 0 49.5 10 q23.5 10 41 27.5 q17.5 17.5 27.5 41 q10 23.5 10 49.5 q0 27 -10 50 q-10 23 -27.5 40.5 q-17.5 17.5 -40.5 27.5 q-23 10 -50 10 q-27 0 -50.5 -10 q-23.5 -10 -40.5 -27 q-17 -17 -27 -40.5 q-10 -23.5 -10 -50.5 ZM960 1280 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l512 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-512 0 ZM512 1600 q0 -27 10 -50 q10 -23 27.5 -40.5 q17.5 -17.5 40.5 -27.5 q23 -10 50 -10 q26 0 49.5 10 q23.5 10 41 27.5 q17.5 17.5 27.5 41 q10 23.5 10 49.5 q0 27 -10 50 q-10 23 -27.5 40.5 q-17.5 17.5 -40.5 27.5 q-23 10 -50 10 q-27 0 -50.5 -10 q-23.5 -10 -40.5 -27 q-17 -17 -27 -40.5 q-10 -23.5 -10 -50.5 ZM960 1664 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l512 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-512 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M448 2048 q-39 0 -74 -15 q-35 -15 -61.5 -41.5 q-26.5 -26.5 -41.5 -61.5 q-15 -35 -15 -74 l0 -1536 q0 -39 15 -74 q15 -35 41.5 -61.5 q26.5 -26.5 61.5 -41.5 q35 -15 74 -15 l203 0 q10 -29 28 -52.5 q18 -23.5 42 -40.5 q24 -17 52 -26 q28 -9 59 -9 l384 0 q31 0 59 9 q28 9 52 26 q24 17 42 40.5 q18 23.5 28 52.5 l203 0 q39 0 74 15 q35 15 61.5 41.5 q26.5 26.5 41.5 61.5 q15 35 15 74 l0 1536 q0 39 -15 74 q-15 35 -41.5 61.5 q-26.5 26.5 -61.5 41.5 q-35 15 -74 15 l-1152 0 ZM1216 256 q26 0 45 -19 q19 -19 19 -45 q0 -26 -19 -45 q-19 -19 -45 -19 l-384 0 q-26 0 -45 19 q-19 19 -19 45 q0 26 19 45 q19 19 45 19 l384 0 ZM1600 1920 q26 0 45 -19 q19 -19 19 -45 l0 -1536 q0 -26 -19 -45 q-19 -19 -45 -19 l-203 0 q-10 29 -28 52.5 q-18 23.5 -42 40 q-24 16.5 -52.5 26 q-28.5 9.5 -58.5 9.5 l-384 0 q-30 0 -58 -9.5 q-28 -9.5 -52 -26 q-24 -16.5 -42.5 -40 q-18.5 -23.5 -28.5 -52.5 l-203 0 q-26 0 -45 19 q-19 19 -19 45 l0 1536 q0 26 19 45 q19 19 45 19 l1152 0 ZM512 832 q0 -27 10 -50 q10 -23 27.5 -40.5 q17.5 -17.5 40.5 -27.5 q23 -10 50 -10 q26 0 49.5 10 q23.5 10 41 27.5 q17.5 17.5 27.5 41 q10 23.5 10 49.5 q0 27 -10 50 q-10 23 -27.5 40.5 q-17.5 17.5 -40.5 27.5 q-23 10 -50 10 q-27 0 -50.5 -10 q-23.5 -10 -40.5 -27 q-17 -17 -27 -40.5 q-10 -23.5 -10 -50.5 ZM960 896 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l512 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-512 0 ZM512 1216 q0 -27 10 -50 q10 -23 27.5 -40.5 q17.5 -17.5 40.5 -27.5 q23 -10 50 -10 q26 0 49.5 10 q23.5 10 41 27.5 q17.5 17.5 27.5 41 q10 23.5 10 49.5 q0 27 -10 50 q-10 23 -27.5 40.5 q-17.5 17.5 -40.5 27.5 q-23 10 -50 10 q-27 0 -50.5 -10 q-23.5 -10 -40.5 -27 q-17 -17 -27 -40.5 q-10 -23.5 -10 -50.5 ZM960 1280 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l512 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-512 0 ZM512 1600 q0 -27 10 -50 q10 -23 27.5 -40.5 q17.5 -17.5 40.5 -27.5 q23 -10 50 -10 q26 0 49.5 10 q23.5 10 41 27.5 q17.5 17.5 27.5 41 q10 23.5 10 49.5 q0 27 -10 50 q-10 23 -27.5 40.5 q-17.5 17.5 -40.5 27.5 q-23 10 -50 10 q-27 0 -50.5 -10 q-23.5 -10 -40.5 -27 q-17 -17 -27 -40.5 q-10 -23.5 -10 -50.5 ZM960 1664 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l512 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-512 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M0 1984 q0 -26 8.5 -54 q8.5 -28 14.5 -53 q23 -95 48 -188 q25 -93 48 -188 q-59 -110 -89 -230 q-30 -120 -30 -245 q0 -141 36.5 -272.5 q36.5 -131.5 103 -245.5 q66.5 -114 160 -207.5 q93.5 -93.5 207.5 -160.5 q114 -67 245 -103.5 q131 -36.5 272 -36.5 q141 0 271.5 36.5 q130.5 36.5 244.5 103.5 q114 67 207.5 160 q93.5 93 160.5 207 q67 114 103.5 244.5 q36.5 130.5 36.5 271.5 q0 140 -36.5 270.5 q-36.5 130.5 -102.5 244.5 q-66 114 -159 208 q-93 94 -206.5 161 q-113.5 67 -243.5 104 q-130 37 -271 37 q-124 0 -244 -28.5 q-120 -28.5 -230 -85.5 l-476 112 q-10 2 -15 2 q-27 0 -45.5 -18.5 q-18.5 -18.5 -18.5 -45.5 ZM1020 1920 q124 0 239 -32 q115 -32 215 -90 q100 -58 182.5 -139.5 q82.5 -81.5 141 -181.5 q58.5 -100 90.5 -215 q32 -115 32 -239 q0 -124 -32 -238.5 q-32 -114.5 -90.5 -213.5 q-58.5 -99 -140.5 -181 q-82 -82 -182 -140 q-100 -58 -214.5 -90 q-114.5 -32 -237.5 -32 q-123 0 -237.5 32 q-114.5 32 -214 90 q-99.5 58 -181 139.5 q-81.5 81.5 -140 180.5 q-58.5 99 -90.5 213.5 q-32 114.5 -32 237.5 q0 65 8 120 q8 55 23 107.5 q15 52.5 36 104.5 q21 52 48 109 q8 16 8 31 q0 11 -6 41 q-6 30 -16 69 q-10 39 -21.5 84 q-11.5 45 -22.5 86 q-11 41 -20 74.5 q-9 33.5 -13 49.5 q68 -16 134.5 -32 q66.5 -16 134.5 -33 q34 -8 71 -19 q37 -11 72 -11 q8 0 15 2.5 q7 2.5 15 5.5 q54 25 104.5 45.5 q50.5 20.5 101.5 34.5 q51 14 105 22 q54 8 115 8 ZM704 896 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l640 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-640 0 ZM704 1280 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l384 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-384 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M0 1984 q0 -26 8.5 -54 q8.5 -28 14.5 -53 q23 -95 48 -188 q25 -93 48 -188 q-59 -110 -89 -230 q-30 -120 -30 -245 q0 -141 36.5 -272.5 q36.5 -131.5 103 -245.5 q66.5 -114 160 -207.5 q93.5 -93.5 207.5 -160.5 q114 -67 245 -103.5 q131 -36.5 272 -36.5 q141 0 271.5 36.5 q130.5 36.5 244.5 103.5 q114 67 207.5 160 q93.5 93 160.5 207 q67 114 103.5 244.5 q36.5 130.5 36.5 271.5 q0 140 -36.5 270.5 q-36.5 130.5 -102.5 244.5 q-66 114 -159 208 q-93 94 -206.5 161 q-113.5 67 -243.5 104 q-130 37 -271 37 q-124 0 -244 -28.5 q-120 -28.5 -230 -85.5 l-476 112 q-10 2 -15 2 q-27 0 -45.5 -18.5 q-18.5 -18.5 -18.5 -45.5 ZM1020 1920 q124 0 239 -32 q115 -32 215 -90 q100 -58 182.5 -139.5 q82.5 -81.5 141 -181.5 q58.5 -100 90.5 -215 q32 -115 32 -239 q0 -124 -32 -238.5 q-32 -114.5 -90.5 -213.5 q-58.5 -99 -140.5 -181 q-82 -82 -182 -140 q-100 -58 -214.5 -90 q-114.5 -32 -237.5 -32 q-123 0 -237.5 32 q-114.5 32 -214 90 q-99.5 58 -181 139.5 q-81.5 81.5 -140 180.5 q-58.5 99 -90.5 213.5 q-32 114.5 -32 237.5 q0 65 8 120 q8 55 23 107.5 q15 52.5 36 104.5 q21 52 48 109 q8 16 8 31 q0 11 -6 41 q-6 30 -16 69 q-10 39 -21.5 84 q-11.5 45 -22.5 86 q-11 41 -20 74.5 q-9 33.5 -13 49.5 q68 -16 134.5 -32 q66.5 -16 134.5 -33 q34 -8 71 -19 q37 -11 72 -11 q8 0 15 2.5 q7 2.5 15 5.5 q54 25 104.5 45.5 q50.5 20.5 101.5 34.5 q51 14 105 22 q54 8 115 8 ZM704 896 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l640 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-640 0 ZM704 1280 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 l384 0 q26 0 45 19 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 l-384 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" transform="translate(0, 250)" d="M640 218 l0 1254 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 l0 -1254 l-403 403 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 l509 -509 q11 -11 22 -16.5 q11 -5.5 26 -5.5 q15 0 26 5.5 q11 5.5 22 16.5 l509 509 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 l-403 -403 ZM2048 960 q0 26 -19 45 l-509 509 q-11 11 -21.5 16.5 q-10.5 5.5 -26.5 5.5 q-16 0 -26.5 -5.5 q-10.5 -5.5 -21.5 -16.5 l-509 -509 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 l403 402 l0 -1253 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 l0 1253 l403 -402 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" transform="translate(0, 250)" d="M640 218 l0 1254 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 l0 -1254 l-403 403 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 q0 -26 19 -45 l509 -509 q11 -11 22 -16.5 q11 -5.5 26 -5.5 q15 0 26 5.5 q11 5.5 22 16.5 l509 509 q19 19 19 45 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 l-403 -403 ZM2048 960 q0 26 -19 45 l-509 509 q-11 11 -21.5 16.5 q-10.5 5.5 -26.5 5.5 q-16 0 -26.5 -5.5 q-10.5 -5.5 -21.5 -16.5 l-509 -509 q-19 -19 -19 -45 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 l403 402 l0 -1253 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 l0 1253 l403 -402 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16">
<g>
<path id="path1" transform="rotate(0,8,8) translate(0,0) scale(0.03125,0.03125) " fill="#FFFFFF" d="M478,315.25L508.5,324.75 505.18359375,335.072265625 501.484375,345.1640625 497.40234375,355.025390625 492.9375,364.65625 488.08984375,374.056640625 482.859375,383.2265625 477.24609375,392.166015625 471.25,400.875 458.3359375,417.4609375 444.34375,432.84375 429.2734375,447.0234375 413.125,460 396.015625,471.6796875 378.0625,481.96875 359.265625,490.8671875 339.625,498.375 329.541015625,501.568359375 319.3515625,504.3359375 309.056640625,506.677734375 298.65625,508.59375 288.150390625,510.083984375 277.5390625,511.1484375 266.822265625,511.787109375 256,512 238.984375,511.46875 222.1875,509.875 205.609375,507.21875 189.25,503.5 173.2265625,498.7734375 157.65625,493.09375 142.5390625,486.4609375 127.875,478.875 113.710929870605,470.375 100.093742370605,461 87.0234375,450.75 74.5,439.625 62.65625,427.6796875 51.625,414.96875 41.40625,401.4921875 32,387.25 32,448 0,448 0,320 128,320 128,352 49,352 56.8203086853027,366.2734375 65.53125,379.84375 75.1328125,392.7109375 85.625,404.875 96.8828125,416.25 108.78125,426.75 121.3203125,436.375 134.5,445.125 148.2421875,452.96875 162.46875,459.875 177.1796875,465.84375 192.375,470.875 207.9296875,474.8671875 223.71875,477.71875 239.7421875,479.4296875 256,480 275.0546875,479.2578125 293.71875,477.03125 311.9921875,473.3203125 329.875,468.125 347.171875,461.578125 363.6875,453.8125 379.421875,444.828125 394.375,434.625 408.46875,423.265625 421.625,410.8125 433.84375,397.265625 445.125,382.625 455.2890625,367.0234375 464.15625,350.59375 471.7265625,333.3359375 478,315.25z M256,0L273.015625,0.531251430511475 289.8125,2.12500381469727 306.390625,4.78125429153442 322.75,8.5 338.7734375,13.2265758514404 354.34375,18.9062690734863 369.4609375,25.5390777587891 384.125,33.125 398.2890625,41.6250190734863 411.90625,51.0000267028809 424.9765625,61.2500228881836 437.5,72.375 449.34375,84.3203201293945 460.374969482422,97.0312576293945 470.593719482422,110.5078125 480,124.75 480,64 512,64 512,192 384,192 384,160 463,160 455.1796875,145.7265625 446.46875,132.15625 436.8671875,119.2890625 426.375,107.125 415.1171875,95.75 403.21875,85.25 390.6796875,75.6250076293945 377.5,66.875 363.7578125,59.0312614440918 349.53125,52.1250114440918 334.8203125,46.1562576293945 319.625,41.125 304.0703125,37.1328239440918 288.28125,34.2812690734863 272.2578125,32.5703277587891 256,32 236.945297241211,32.7422065734863 218.281234741211,34.9687767028809 200.007797241211,38.6797103881836 182.125,43.875 164.828125,50.4218864440918 148.3125,58.1875114440918 132.578125,67.1718826293945 117.625,77.375 103.53125,88.7343826293945 90.375,101.187507629395 78.15625,114.734375 66.875,129.375 56.7109375,144.9765625 47.84375,161.40625 40.2734375,178.6640625 34,196.75 3.5,187.25 6.81640625,176.984375 10.515625,166.9375 14.59765625,157.109375 19.0625,147.5 23.91015625,138.109375 29.140625,128.9375 34.75390625,119.984375 40.75,111.25 53.6640625,94.609375 67.65625,79.1875 82.7265625,64.984375 98.875,52 115.984375,40.3203125 133.9375,30.0312538146973 152.734375,21.1328163146973 172.375,13.625 182.458984375,10.4316463470459 192.6484375,7.66407108306885 202.943359375,5.32227468490601 213.34375,3.40625762939453 223.849609375,1.91602098941803 234.4609375,0.851565361022949 245.177734375,0.212891459465027 256,0z" />
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" viewBox="0 0 16 16">
<g>
<path id="path1" transform="rotate(0,8,8) translate(0,0) scale(0.03125,0.03125) " fill="#FFFFFF" d="M478,315.25L508.5,324.75 505.18359375,335.072265625 501.484375,345.1640625 497.40234375,355.025390625 492.9375,364.65625 488.08984375,374.056640625 482.859375,383.2265625 477.24609375,392.166015625 471.25,400.875 458.3359375,417.4609375 444.34375,432.84375 429.2734375,447.0234375 413.125,460 396.015625,471.6796875 378.0625,481.96875 359.265625,490.8671875 339.625,498.375 329.541015625,501.568359375 319.3515625,504.3359375 309.056640625,506.677734375 298.65625,508.59375 288.150390625,510.083984375 277.5390625,511.1484375 266.822265625,511.787109375 256,512 238.984375,511.46875 222.1875,509.875 205.609375,507.21875 189.25,503.5 173.2265625,498.7734375 157.65625,493.09375 142.5390625,486.4609375 127.875,478.875 113.710929870605,470.375 100.093742370605,461 87.0234375,450.75 74.5,439.625 62.65625,427.6796875 51.625,414.96875 41.40625,401.4921875 32,387.25 32,448 0,448 0,320 128,320 128,352 49,352 56.8203086853027,366.2734375 65.53125,379.84375 75.1328125,392.7109375 85.625,404.875 96.8828125,416.25 108.78125,426.75 121.3203125,436.375 134.5,445.125 148.2421875,452.96875 162.46875,459.875 177.1796875,465.84375 192.375,470.875 207.9296875,474.8671875 223.71875,477.71875 239.7421875,479.4296875 256,480 275.0546875,479.2578125 293.71875,477.03125 311.9921875,473.3203125 329.875,468.125 347.171875,461.578125 363.6875,453.8125 379.421875,444.828125 394.375,434.625 408.46875,423.265625 421.625,410.8125 433.84375,397.265625 445.125,382.625 455.2890625,367.0234375 464.15625,350.59375 471.7265625,333.3359375 478,315.25z M256,0L273.015625,0.531251430511475 289.8125,2.12500381469727 306.390625,4.78125429153442 322.75,8.5 338.7734375,13.2265758514404 354.34375,18.9062690734863 369.4609375,25.5390777587891 384.125,33.125 398.2890625,41.6250190734863 411.90625,51.0000267028809 424.9765625,61.2500228881836 437.5,72.375 449.34375,84.3203201293945 460.374969482422,97.0312576293945 470.593719482422,110.5078125 480,124.75 480,64 512,64 512,192 384,192 384,160 463,160 455.1796875,145.7265625 446.46875,132.15625 436.8671875,119.2890625 426.375,107.125 415.1171875,95.75 403.21875,85.25 390.6796875,75.6250076293945 377.5,66.875 363.7578125,59.0312614440918 349.53125,52.1250114440918 334.8203125,46.1562576293945 319.625,41.125 304.0703125,37.1328239440918 288.28125,34.2812690734863 272.2578125,32.5703277587891 256,32 236.945297241211,32.7422065734863 218.281234741211,34.9687767028809 200.007797241211,38.6797103881836 182.125,43.875 164.828125,50.4218864440918 148.3125,58.1875114440918 132.578125,67.1718826293945 117.625,77.375 103.53125,88.7343826293945 90.375,101.187507629395 78.15625,114.734375 66.875,129.375 56.7109375,144.9765625 47.84375,161.40625 40.2734375,178.6640625 34,196.75 3.5,187.25 6.81640625,176.984375 10.515625,166.9375 14.59765625,157.109375 19.0625,147.5 23.91015625,138.109375 29.140625,128.9375 34.75390625,119.984375 40.75,111.25 53.6640625,94.609375 67.65625,79.1875 82.7265625,64.984375 98.875,52 115.984375,40.3203125 133.9375,30.0312538146973 152.734375,21.1328163146973 172.375,13.625 182.458984375,10.4316463470459 192.6484375,7.66407108306885 202.943359375,5.32227468490601 213.34375,3.40625762939453 223.849609375,1.91602098941803 234.4609375,0.851565361022949 245.177734375,0.212891459465027 256,0z" />
</g>
</svg>
因为 它太大了无法显示 source diff 。你可以改为 查看blob
...@@ -79,6 +79,30 @@ ...@@ -79,6 +79,30 @@
<file>images/icons/Menu_white.svg</file> <file>images/icons/Menu_white.svg</file>
<file>images/icons/Return_black.svg</file> <file>images/icons/Return_black.svg</file>
<file>images/icons/Return_white.svg</file> <file>images/icons/Return_white.svg</file>
<file>images/icons/Sync_black.svg</file>
<file>images/icons/Sync_white.svg</file>
<file>images/icons/GitHub_black.svg</file>
<file>images/icons/GitHub_white.svg</file>
<file>images/icons/Home_black.svg</file>
<file>images/icons/Home_white.svg</file>
<file>images/icons/Chat_black.svg</file>
<file>images/icons/Chat_white.svg</file>
<file>images/icons/Message_black.svg</file>
<file>images/icons/Message_white.svg</file>
<file>images/icons/Layout_black.svg</file>
<file>images/icons/Layout_white.svg</file>
<file>images/icons/Album_black.svg</file>
<file>images/icons/Album_white.svg</file>
<file>images/icons/CheckBox_black.svg</file>
<file>images/icons/CheckBox_white.svg</file>
<file>images/icons/Scroll_black.svg</file>
<file>images/icons/Scroll_white.svg</file>
<file>images/icons/Document_black.svg</file>
<file>images/icons/Document_white.svg</file>
<file>images/icons/Constract_black.svg</file>
<file>images/icons/Constract_white.svg</file>
<file>images/icons/Code_black.svg</file>
<file>images/icons/Code_white.svg</file>
<file>images/state_tool_tip/close_normal.svg</file> <file>images/state_tool_tip/close_normal.svg</file>
<file>images/state_tool_tip/close_hover.svg</file> <file>images/state_tool_tip/close_hover.svg</file>
<file>images/state_tool_tip/close_pressed.svg</file> <file>images/state_tool_tip/close_pressed.svg</file>
......
...@@ -156,6 +156,10 @@ class FluentIcon(FluentIconBase, Enum): ...@@ -156,6 +156,10 @@ class FluentIcon(FluentIconBase, Enum):
INFO = "Info" INFO = "Info"
ZOOM = "Zoom" ZOOM = "Zoom"
MENU = "Menu" MENU = "Menu"
HOME = "Home"
CHAT = "Chat"
CODE = "Code"
SYNC = "Sync"
CLOSE = "Close" CLOSE = "Close"
MOVIE = "Movie" MOVIE = "Movie"
BRUSH = "Brush" BRUSH = "Brush"
...@@ -163,18 +167,26 @@ class FluentIcon(FluentIconBase, Enum): ...@@ -163,18 +167,26 @@ class FluentIcon(FluentIconBase, Enum):
VIDEO = "Video" VIDEO = "Video"
EMBED = "Embed" EMBED = "Embed"
PASTE = "Paste" PASTE = "Paste"
ALBUM = "Album"
CANCEL = "Cancel" CANCEL = "Cancel"
FOLDER = "Folder" FOLDER = "Folder"
SCROLL = "Scroll"
LAYOUT = "Layout"
GITHUB = "GitHub"
SEARCH = "Search" SEARCH = "Search"
UPDATE = "Update" UPDATE = "Update"
RETURN = "Return" RETURN = "Return"
SETTING = "Setting" SETTING = "Setting"
PALETTE = "Palette" PALETTE = "Palette"
MESSAGE = "Message"
FEEDBACK = "Feedback" FEEDBACK = "Feedback"
MINIMIZE = "Minimize" MINIMIZE = "Minimize"
CHECKBOX = "CheckBox"
DOCUMENT = "Document"
LANGUAGE = "Language" LANGUAGE = "Language"
DOWNLOAD = "Download" DOWNLOAD = "Download"
QUESTION = "Question" QUESTION = "Question"
CONSTRACT = "Constract"
ALIGNMENT = "Alignment" ALIGNMENT = "Alignment"
PENCIL_INK = "PencilInk" PENCIL_INK = "PencilInk"
FOLDER_ADD = "FolderAdd" FOLDER_ADD = "FolderAdd"
......
...@@ -9,4 +9,5 @@ from .tool_tip import ToolTip, ToolTipFilter ...@@ -9,4 +9,5 @@ from .tool_tip import ToolTip, ToolTipFilter
from .button import PrimaryPushButton, PushButton, RadioButton, HyperlinkButton, ToolButton from .button import PrimaryPushButton, PushButton, RadioButton, HyperlinkButton, ToolButton
from .line_edit import LineEdit from .line_edit import LineEdit
from .check_box import CheckBox from .check_box import CheckBox
from .icon_widget import IconWidget from .icon_widget import IconWidget
\ No newline at end of file from .label import PixmapLabel
\ No newline at end of file
# coding:utf-8
import warnings
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QBrush, QColor, QImage, QPainter, QPixmap
from PyQt5.QtWidgets import QLabel
try:
from ...common.image_utils import gaussianBlur
except ImportError as e:
warnings.warn(
'`AcrylicLabel` is not supported in current qfluentwidgets, use `pip install PyQt-Fluent-Widgets[full]` to enable it.')
def gaussianBlur(imagePath, blurRadius=18, brightFactor=1, blurPicSize=None):
return QPixmap(imagePath)
class BlurCoverThread(QThread):
""" Blur album cover thread """
blurFinished = pyqtSignal(QPixmap)
def __init__(self, parent=None):
super().__init__(parent)
self.imagePath = ""
self.blurRadius = 7
self.maxSize = None
def run(self):
if not self.imagePath:
return
pixmap = gaussianBlur(
self.imagePath, self.blurRadius, 0.85, self.maxSize)
self.blurFinished.emit(pixmap)
def blur(self, imagePath: str, blurRadius=6, maxSize: tuple = (450, 450)):
self.imagePath = imagePath
self.blurRadius = blurRadius
self.maxSize = maxSize or self.maxSize
self.start()
class AcrylicTextureLabel(QLabel):
""" Acrylic texture label """
def __init__(self, tintColor: QColor, luminosityColor: QColor, noiseOpacity=0.03, parent=None):
"""
Parameters
----------
tintColor: QColor
RGB tint color
luminosityColor: QColor
luminosity layer color
noiseOpacity: float
noise layer opacity
parent:
parent window
"""
super().__init__(parent=parent)
self.tintColor = QColor(tintColor)
self.luminosityColor = QColor(luminosityColor)
self.noiseOpacity = noiseOpacity
self.noiseImage = QImage(':/qfluentwidgets/images/acrylic/noise.png')
self.setAttribute(Qt.WA_TranslucentBackground)
def setTintColor(self, color: QColor):
self.tintColor = color
self.update()
def paintEvent(self, e):
acrylicTexture = QImage(64, 64, QImage.Format_ARGB32_Premultiplied)
# paint luminosity layer
acrylicTexture.fill(self.luminosityColor)
# paint tint color
painter = QPainter(acrylicTexture)
painter.fillRect(acrylicTexture.rect(), self.tintColor)
# paint noise
painter.setOpacity(self.noiseOpacity)
painter.drawImage(acrylicTexture.rect(), self.noiseImage)
acrylicBrush = QBrush(acrylicTexture)
painter = QPainter(self)
painter.fillRect(self.rect(), acrylicBrush)
class AcrylicLabel(QLabel):
""" Acrylic label """
def __init__(self, blurRadius: int, tintColor: QColor, luminosityColor=QColor(255, 255, 255, 0),
maxBlurSize: tuple = None, parent=None):
"""
Parameters
----------
blurRadius: int
blur radius
tintColor: QColor
tint color
luminosityColor: QColor
luminosity layer color
maxBlurSize: tuple
maximum image size
parent:
parent window
"""
super().__init__(parent=parent)
self.imagePath = ''
self.blurPixmap = QPixmap()
self.blurRadius = blurRadius
self.maxBlurSize = maxBlurSize
self.acrylicTextureLabel = AcrylicTextureLabel(
tintColor, luminosityColor, parent=self)
self.blurThread = BlurCoverThread(self)
self.blurThread.blurFinished.connect(self.__onBlurFinished)
def __onBlurFinished(self, blurPixmap: QPixmap):
""" blur finished slot """
self.blurPixmap = blurPixmap
self.setPixmap(self.blurPixmap)
self.adjustSize()
def setImage(self, imagePath: str):
""" set the image to be blurred """
self.imagePath = imagePath
self.blurThread.blur(imagePath, self.blurRadius, self.maxBlurSize)
def setTintColor(self, color: QColor):
self.acrylicTextureLabel.setTintColor(color)
def resizeEvent(self, e):
super().resizeEvent(e)
self.acrylicTextureLabel.resize(self.size())
if not self.blurPixmap.isNull() and self.blurPixmap.size() != self.size():
self.setPixmap(self.blurPixmap.scaled(
self.size(), Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation))
# coding:utf-8 # coding:utf-8
import warnings from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap, QPainter
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QBrush, QColor, QImage, QPainter, QPixmap
from PyQt5.QtWidgets import QLabel from PyQt5.QtWidgets import QLabel
try:
from ...common.image_utils import gaussianBlur
except ImportError as e:
warnings.warn('`AcrylicLabel` is not supported in current qfluentwidgets, use `pip install PyQt-Fluent-Widgets[full]` to enable it.')
def gaussianBlur(imagePath, blurRadius=18, brightFactor=1, blurPicSize=None):
return QPixmap(imagePath)
class BlurCoverThread(QThread):
""" Blur album cover thread """
blurFinished = pyqtSignal(QPixmap) class PixmapLabel(QLabel):
""" Label for high dpi pixmap """
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self.imagePath = "" self.__pixmap = QPixmap()
self.blurRadius = 7
self.maxSize = None
def run(self):
if not self.imagePath:
return
pixmap = gaussianBlur(
self.imagePath, self.blurRadius, 0.85, self.maxSize)
self.blurFinished.emit(pixmap)
def blur(self, imagePath: str, blurRadius=6, maxSize: tuple = (450, 450)):
self.imagePath = imagePath
self.blurRadius = blurRadius
self.maxSize = maxSize or self.maxSize
self.start()
def setPixmap(self, pixmap: QPixmap):
class AcrylicTextureLabel(QLabel): self.__pixmap = pixmap
""" Acrylic texture label """ self.setFixedSize(pixmap.size())
def __init__(self, tintColor: QColor, luminosityColor: QColor, noiseOpacity=0.03, parent=None):
"""
Parameters
----------
tintColor: QColor
RGB tint color
luminosityColor: QColor
luminosity layer color
noiseOpacity: float
noise layer opacity
parent:
parent window
"""
super().__init__(parent=parent)
self.tintColor = QColor(tintColor)
self.luminosityColor = QColor(luminosityColor)
self.noiseOpacity = noiseOpacity
self.noiseImage = QImage(':/qfluentwidgets/images/acrylic/noise.png')
self.setAttribute(Qt.WA_TranslucentBackground)
def setTintColor(self, color: QColor):
self.tintColor = color
self.update() self.update()
def paintEvent(self, e): def pixmap(self):
acrylicTexture = QImage(64, 64, QImage.Format_ARGB32_Premultiplied) return self.__pixmap
# paint luminosity layer
acrylicTexture.fill(self.luminosityColor)
# paint tint color def paintEvent(self, e):
painter = QPainter(acrylicTexture) if self.__pixmap.isNull():
painter.fillRect(acrylicTexture.rect(), self.tintColor) return
# paint noise
painter.setOpacity(self.noiseOpacity)
painter.drawImage(acrylicTexture.rect(), self.noiseImage)
acrylicBrush = QBrush(acrylicTexture)
painter = QPainter(self) painter = QPainter(self)
painter.fillRect(self.rect(), acrylicBrush) painter.setRenderHints(QPainter.Antialiasing |
QPainter.SmoothPixmapTransform)
painter.setPen(Qt.NoPen)
class AcrylicLabel(QLabel): painter.drawPixmap(self.rect(), self.__pixmap)
""" Acrylic label """
def __init__(self, blurRadius: int, tintColor: QColor, luminosityColor=QColor(255, 255, 255, 0),
maxBlurSize: tuple = None, parent=None):
"""
Parameters
----------
blurRadius: int
blur radius
tintColor: QColor
tint color
luminosityColor: QColor
luminosity layer color
maxBlurSize: tuple
maximum image size
parent:
parent window
"""
super().__init__(parent=parent)
self.imagePath = ''
self.blurPixmap = QPixmap()
self.blurRadius = blurRadius
self.maxBlurSize = maxBlurSize
self.acrylicTextureLabel = AcrylicTextureLabel(
tintColor, luminosityColor, parent=self)
self.blurThread = BlurCoverThread(self)
self.blurThread.blurFinished.connect(self.__onBlurFinished)
def __onBlurFinished(self, blurPixmap: QPixmap):
""" blur finished slot """
self.blurPixmap = blurPixmap
self.setPixmap(self.blurPixmap)
self.adjustSize()
def setImage(self, imagePath: str):
""" set the image to be blurred """
self.imagePath = imagePath
self.blurThread.blur(imagePath, self.blurRadius, self.maxBlurSize)
def setTintColor(self, color: QColor):
self.acrylicTextureLabel.setTintColor(color)
def resizeEvent(self, e):
super().resizeEvent(e)
self.acrylicTextureLabel.resize(self.size())
if not self.blurPixmap.isNull() and self.blurPixmap.size() != self.size():
self.setPixmap(self.blurPixmap.scaled(
self.size(), Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation))
...@@ -19,7 +19,7 @@ class ScrollArea(QScrollArea): ...@@ -19,7 +19,7 @@ class ScrollArea(QScrollArea):
scroll orientation scroll orientation
""" """
super().__init__(parent) super().__init__(parent)
self.smoothScroll = SmoothScroll(self) self.smoothScroll = SmoothScroll(self, orient)
def setSmoothMode(self, mode): def setSmoothMode(self, mode):
""" set smooth mode """ set smooth mode
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册