New Non-DTK store client prototype
65
CMakeLists.txt
Normal file
@ -0,0 +1,65 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(spark_store)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
|
||||
set(QT_VERSION 5)
|
||||
set(REQUIRED_LIBS Core Gui Widgets)
|
||||
set(REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Widgets)
|
||||
|
||||
include_directories(inc)
|
||||
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
set(SOURCE_FILES
|
||||
src/main.cpp
|
||||
resource/resource.qrc
|
||||
gui/spkwindow.cpp
|
||||
inc/spkwindow.h
|
||||
gui/spktitlebar.cpp
|
||||
inc/spktitlebar.h
|
||||
inc/spkui_general.h
|
||||
gui/spkui_general.cpp
|
||||
inc/deepinplatform.h
|
||||
src/spklogging.cpp
|
||||
inc/spklogging.h
|
||||
inc/spkuimsg.h
|
||||
src/spkuimsg.cpp
|
||||
inc/spkmainwindow.h
|
||||
inc/spkmsgbox.h
|
||||
gui/spkmsgbox.cpp
|
||||
inc/spkdialog.h
|
||||
gui/spkdialog.cpp
|
||||
inc/spkstore.h
|
||||
src/spkstore.cpp
|
||||
gui/spkmainwindow.cpp
|
||||
inc/spkpageqsstest.h
|
||||
gui/spkpageqsstest.cpp
|
||||
gui/spkcategoryselector.cpp
|
||||
inc/spkconfig.h
|
||||
src/telemetry/collectid.cpp
|
||||
)
|
||||
|
||||
include(cmake/FindLibNotify.cmake)
|
||||
include(cmake/FindGlib.cmake)
|
||||
include(cmake/FindGdk3.cmake)
|
||||
|
||||
include_directories(${GLIB_INCLUDE_DIRS})
|
||||
include_directories(${GDK3_INCLUDE_DIRS})
|
||||
set(LIBLINKING ${LIBLINKING}
|
||||
${LIBNOTIFY_LIBRARIES}
|
||||
${GLIB_LIBRARIES}
|
||||
${GDK3_LIBRARIES}
|
||||
${CMAKE_DL_LIBS})
|
||||
|
||||
# Required for a good backtrace
|
||||
add_compile_options(-g)
|
||||
add_link_options(-rdynamic)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
|
||||
find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBS_QUALIFIED} ${LIBLINKING})
|
314
README.md
@ -71,317 +71,3 @@ make -j
|
||||
```
|
||||
|
||||
./build文件下的spark-store即为可执行文件
|
||||
|
||||
# 星火应用商店文档
|
||||
|
||||
# 目录结构
|
||||
几个目录结构
|
||||
```
|
||||
/
|
||||
/icons 图标文件夹
|
||||
/tags 首页图标
|
||||
/tras 多语言翻译
|
||||
```
|
||||
|
||||
主要的文件分析
|
||||
```js
|
||||
spark-store.pro Qt工程配置文件
|
||||
ssinstall 调用包安装器的脚本
|
||||
icons.qrc 图标资源文件
|
||||
main.cpp 入口文件
|
||||
widget.h widget.cpp widget.ui 主要窗口控件
|
||||
downloadlist.h downloadlist.cpp downloadlist.ui 单个软件的下载安装展示控件
|
||||
progressload.h progressload.cpp 网页加载显示? 得在deepin上编译运行才能搞清楚
|
||||
workerthreads.h workerthreads.cpp 应用信息加载线程
|
||||
image_show.h image_show.cpp 应用页面截图预览控件
|
||||
big_image.h big_image.cpp 大图查看控件
|
||||
```
|
||||
|
||||
# 使用的开源库及第三方工具
|
||||
* GDebi 一个 Ubuntu 软件中心的轻量级替代品 https://linux.cn/article-4982-1.html
|
||||
* libnotify 系统通知 https://developer.gnome.org/libnotify/unstable/
|
||||
|
||||
|
||||
# 源码分析
|
||||
## 应用的组成部分
|
||||
左侧应用分类菜单
|
||||
主窗口的下拉菜单
|
||||
应用列表页面
|
||||
应用详情页面
|
||||
应用首页,有几个链接跳转
|
||||
商店设置页面
|
||||
下载列表页面
|
||||
|
||||
## 应用初始化,及主控件加载
|
||||
初始化 `DApplication` 进入事件循环。
|
||||
设置关于我们弹窗 `DAboutDialog`。
|
||||
主控件 Widget 根据不同屏幕大小自适应。
|
||||
首页打开webview页面,如果传入了`spk://`参数,会打开应用详情页。
|
||||
```cpp
|
||||
// main.cpp
|
||||
QString arg1=argv[1];
|
||||
if(arg1.left(6)=="spk://"){
|
||||
w.openUrl(QUrl(argv[1]));
|
||||
}
|
||||
|
||||
// widget.cpp
|
||||
void Widget::openUrl(QUrl u)
|
||||
{
|
||||
QString app=serverUrl + "store"+u.path()+"/app.json";
|
||||
ui->webEngineView->setUrl(app); // 会触发 webEngineView 的
|
||||
}
|
||||
|
||||
```
|
||||
## Tags处理方式
|
||||
|
||||
**Tags处理方式**
|
||||
```cpp
|
||||
// widget.cpp
|
||||
QString tags=json["Tags"].toString(); //Read the Tags
|
||||
QStringList tagList=tags.split(";");
|
||||
for (int i=0;i<tagList.size();i++) {
|
||||
if(tagList[i]=="community")
|
||||
ui->tag_community->show();//Tags icon shows like this
|
||||
if(tagList[i]=="ubuntu")
|
||||
ui->tag_ubuntu->show();
|
||||
if(tagList[i]=="deepin")
|
||||
ui->tag_deepin->show();
|
||||
if(tagList[i]=="uos")
|
||||
ui->tag_uos->show();
|
||||
if(tagList[i]=="dtk5")
|
||||
ui->tag_dtk5->show();
|
||||
if(tagList[i]=="dwine2")
|
||||
ui->tag_dwine2->show();
|
||||
if(tagList[i]=="dwine5")
|
||||
ui->tag_dwine5->show();
|
||||
if(tagList[i]=="a2d")
|
||||
ui->tag_a2d->show();
|
||||
}
|
||||
```
|
||||
|
||||
**Widget 初始化**
|
||||
```cpp
|
||||
void Widget::initConfig()
|
||||
{
|
||||
...
|
||||
// 读取服务器URL并初始化菜单项的链接
|
||||
QSettings readConfig(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
|
||||
if(readConfig.value("server/choose").toString()!=""){
|
||||
ui->comboBox_server->setCurrentText(readConfig.value("server/choose").toString());
|
||||
appinfoLoadThread.setServer(serverUrl=readConfig.value("server/choose").toString());
|
||||
}else {
|
||||
appinfoLoadThread.setServer(serverUrl="http://sucdn.jerrywang.top/"); // 默认URL
|
||||
}
|
||||
configCanSave=true; // 防止触发保存配置信号
|
||||
menuUrl[0]=serverUrl + "store/#/"; // 首页
|
||||
// 下面是各个应用分类页面,直接加载的webview的
|
||||
// 每个连接对应一个左侧的菜单项,在构造函数用连接到 chooseLeftMenu 槽函数
|
||||
menuUrl[1]=serverUrl + "store/#/network";
|
||||
...
|
||||
menuUrl[12]=serverUrl + "store/#/others";
|
||||
...
|
||||
ui->webfoot->hide();
|
||||
|
||||
//初始化首页
|
||||
ui->webEngineView->setUrl(menuUrl[0]);
|
||||
}
|
||||
/**
|
||||
* 菜单切换逻辑
|
||||
*
|
||||
*/
|
||||
void Widget::chooseLeftMenu(int index)
|
||||
{
|
||||
nowMenu=index;
|
||||
updateUI();
|
||||
left_list[index]->setStyleSheet("color:#FFFFFF;background-color:"+main_color.name()+";border-radius:8;border:0px");
|
||||
// index <=12 加载某个分类的应用列表的webviejw
|
||||
// index == 13 加载下载列表页面
|
||||
if(index<=12){
|
||||
if(themeIsDark){
|
||||
darkurl = 夜间模式的URL
|
||||
ui->webEngineView->setUrl(darkurl);
|
||||
}else {
|
||||
ui->webEngineView->setUrl(menuUrl[index]);
|
||||
}
|
||||
ui->stackedWidget->setCurrentIndex(0);
|
||||
}else if (index==13) {
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 应用下载安装卸载分析
|
||||
**应用详情页面加载**
|
||||
```cpp
|
||||
/**
|
||||
* 加载单个应用的信息
|
||||
*/
|
||||
void Widget::on_webEngineView_urlChanged(const QUrl &arg1)
|
||||
{
|
||||
//分析出服务器中的分类名称
|
||||
...
|
||||
//如果是app.json就打开详情页
|
||||
if(arg1.path().right(8)=="app.json"){
|
||||
...
|
||||
// 读取相应的应用信息
|
||||
appinfoLoadThread.requestInterruption();
|
||||
appinfoLoadThread.wait(100);
|
||||
appinfoLoadThread.setUrl(arg1);
|
||||
appinfoLoadThread.start();
|
||||
}
|
||||
}
|
||||
// 设置详情页的APP信息
|
||||
SpkAppInfoLoaderThread::requestSetAppInformation() -> Widget::sltAppinfoDetails()
|
||||
// 设置详情页的APP图标
|
||||
SpkAppInfoLoaderThread::finishedIconLoad() -> Widget::sltAppinfoIcon()
|
||||
// 设置详情页的APP截图
|
||||
SpkAppInfoLoaderThread::finishedScreenshotLoad() -> Widget::sltAppinfoScreenshot()
|
||||
|
||||
// 下载APP详情信息线程
|
||||
void SpkAppInfoLoaderThread::run()
|
||||
{
|
||||
QProcess get_json;
|
||||
get_json.start("curl -o app.json " + targetUrl.toString());
|
||||
QFile app_json("app.json");
|
||||
读取 app.json 里的信息,提取应用名、描述、图标、截图
|
||||
处理完毕后发射相应的信号
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
**应用下载**
|
||||
Widget::on_pushButton_download_clicked() 是点击下载的安装方法。
|
||||
最终使用的是 `QNetwrokAccessManager` 进行GET请求获取数据写入文件。
|
||||
```cpp
|
||||
void Widget::on_pushButton_download_clicked()
|
||||
{
|
||||
if(!isBusy){
|
||||
file = new QFile(fileName);
|
||||
...
|
||||
nowDownload+=1;
|
||||
startRequest(urList.at(nowDownload-1)); // 进行链接请求
|
||||
}
|
||||
}
|
||||
void Widget::startRequest(QUrl url)
|
||||
{
|
||||
reply = manager->get(QNetworkRequest(url));
|
||||
// 请求响应完成,关闭文件,清理下载队列
|
||||
connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));
|
||||
// 接收应用下载数据
|
||||
connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));
|
||||
// 更新应用下载进度
|
||||
connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));
|
||||
}
|
||||
```
|
||||
|
||||
使用 QSettings 来读取配置,更换服务源
|
||||
```cpp
|
||||
void Widget::on_comboBox_server_currentIndexChanged(const QString &arg1)
|
||||
{
|
||||
appinfoLoadThread.setServer(arg1); // 服务器信息更新
|
||||
if(configCanSave){
|
||||
ui->label_setting1->show();
|
||||
QSettings *setConfig=new QSettings(QDir::homePath()+"/.config/spark-store/config.ini",QSettings::IniFormat);
|
||||
setConfig->setValue("server/choose",arg1);
|
||||
}
|
||||
}
|
||||
```
|
||||
使用 `QProcess` 来调用各种小文件下载、包安装卸载的命令。
|
||||
|
||||
**应用安装**
|
||||
```cpp
|
||||
void Widget::httpFinished() // 完成下载
|
||||
{
|
||||
...清理资源
|
||||
download_list[nowDownload-1].readyInstall();
|
||||
download_list[nowDownload-1].free=true;
|
||||
if(nowDownload<allDownload){ // 如果有排队则下载下一个
|
||||
...队列的下一个下载请求
|
||||
}
|
||||
}
|
||||
void downloadlist::readyInstall()
|
||||
{
|
||||
...将安装按钮设置为允许点击
|
||||
ui->pushButton_install->setEnabled(true);
|
||||
ui->pushButton_install->show();
|
||||
ui->pushButton_2->hide();
|
||||
Widget::sendNotification(tr("Finished downloading %1, awaiting to install").arg(ui->label->text()), 5000,
|
||||
"/tmp/spark-store/icon_"+QString::number(num).toUtf8()+".png");
|
||||
}
|
||||
void downloadlist::on_pushButton_install_clicked()
|
||||
{
|
||||
//弹出菜单
|
||||
menu_install->exec(cursor().pos());
|
||||
}
|
||||
在 downloadlist 构造函数里将三种安装方式的按钮按条件放入了 menu_install 菜单里
|
||||
用户点击时,downloadlist::install() 方法
|
||||
三种安装方式为: gdebi, dpkg, deepin-deb-installer
|
||||
void downloadlist::install(int t)
|
||||
{
|
||||
QtConcurrent::run([=](){
|
||||
QProcess installer;
|
||||
installer.start("pkexec gdebi -n /tmp/spark-store/"+ui->label_filename->text().toUtf8());
|
||||
installer.start("pkexec ssinstall /tmp/spark-store/"+ui->label_filename->text().toUtf8());
|
||||
installer.start("deepin-deb-installer /tmp/spark-store/"+ui->label_filename->text().toUtf8());
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
**应用卸载**
|
||||
```cpp
|
||||
void Widget::on_pushButton_uninstall_clicked()
|
||||
{
|
||||
QtConcurrent::run([=](){
|
||||
uninstall.start("pkexec apt purge -y "+pkgName);
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
**仓库源更新**
|
||||
```cpp
|
||||
// 更新源列表
|
||||
void Widget::on_pushButton_updateServer_clicked()
|
||||
{
|
||||
QtConcurrent::run([=](){
|
||||
...
|
||||
QFile::remove(QDir::homePath().toUtf8()+"/.config/spark-store/server.list");
|
||||
system("curl -o "+QDir::homePath().toUtf8()+"/.config/spark-store/server.list http://dcstore.shenmo.tech/store/server.list");
|
||||
server.open(QDir::homePath().toUtf8()+"/.config/spark-store/server.list",std::ios::in);
|
||||
...
|
||||
while (getline(server,lineTmp)) {
|
||||
ui->comboBox_server->addItem(QString::fromStdString(lineTmp));
|
||||
}
|
||||
});
|
||||
}
|
||||
// 更新星火商店apt源
|
||||
void Widget::on_pushButton_updateApt_clicked()
|
||||
{
|
||||
QtConcurrent::run([=](){
|
||||
读取 comboBox_server 的内容,写入 /tmp/spark-store/sparkstore.list 文件
|
||||
创建bash脚本,内容为将 sparkstore.list 移动到 /etc/apt/sources.list.d/ 目录下
|
||||
使用QProcess 执行命令 pkexec update.sh
|
||||
}):
|
||||
}
|
||||
```
|
||||
|
||||
## 发送系统通知
|
||||
```cpp
|
||||
#include <libnotify/notify.h>
|
||||
|
||||
static NotifyNotification *_notify = nullptr; // 初始化
|
||||
notify_init(tr("Spark\\ Store").toLocal8Bit()); // 构造函数初始化
|
||||
notify_uninit(); // 析构函数调用
|
||||
|
||||
void Widget::sendNotification(const QString &message, const int msTimeout, const QString &icon)
|
||||
{
|
||||
if(_notify == nullptr)
|
||||
{
|
||||
_notify = notify_notification_new(tr("Spark\\ Store").toLocal8Bit(), message.toLocal8Bit(), icon.toLocal8Bit());
|
||||
notify_notification_set_timeout(_notify, msTimeout);
|
||||
}
|
||||
else
|
||||
notify_notification_update(_notify, tr("Spark\\ Store").toLocal8Bit(), message.toLocal8Bit(), icon.toLocal8Bit());
|
||||
|
||||
notify_notification_show(_notify, nullptr);
|
||||
}
|
||||
```
|
||||
|
@ -1,69 +0,0 @@
|
||||
<RCC>
|
||||
<qresource prefix="/icons">
|
||||
<file>icons/category_chat_dark.svg</file>
|
||||
<file>icons/category_chat.svg</file>
|
||||
<file>icons/category_develop_dark.svg</file>
|
||||
<file>icons/category_develop.svg</file>
|
||||
<file>icons/category_game_dark.svg</file>
|
||||
<file>icons/category_game.svg</file>
|
||||
<file>icons/category_graphic_dark.svg</file>
|
||||
<file>icons/category_graphic.svg</file>
|
||||
<file>icons/category_music_dark.svg</file>
|
||||
<file>icons/category_music.svg</file>
|
||||
<file>icons/category_network_dark.svg</file>
|
||||
<file>icons/category_network.svg</file>
|
||||
<file>icons/category_office_dark.svg</file>
|
||||
<file>icons/category_office.svg</file>
|
||||
<file>icons/category_others_dark.svg</file>
|
||||
<file>icons/category_others.svg</file>
|
||||
<file>icons/category_reading_dark.svg</file>
|
||||
<file>icons/category_reading.svg</file>
|
||||
<file>icons/category_system_dark.svg</file>
|
||||
<file>icons/category_system.svg</file>
|
||||
<file>icons/category_video_dark.svg</file>
|
||||
<file>icons/category_video.svg</file>
|
||||
<file>icons/downloads-symbolic_dark.svg</file>
|
||||
<file>icons/downloads-symbolic.svg</file>
|
||||
<file>icons/theme-symbolic_dark.svg</file>
|
||||
<file>icons/theme-symbolic.svg</file>
|
||||
<file>icons/homepage.svg</file>
|
||||
<file>icons/homepage_dark.svg</file>
|
||||
<file>icons/category_active_dark.svg</file>
|
||||
<file>icons/category_active.svg</file>
|
||||
<file>icons/refresh-page-dark.svg</file>
|
||||
<file>icons/refresh-page.svg</file>
|
||||
</qresource>
|
||||
<qresource prefix="/">
|
||||
<file>../Logo-Spark.png</file>
|
||||
<file>../src/big_image.cpp</file>
|
||||
<file>../src/big_image.h</file>
|
||||
<file>../src/downloadlist.cpp</file>
|
||||
<file>../src/downloadlist.h</file>
|
||||
<file>../src/image_show.cpp</file>
|
||||
<file>../src/image_show.h</file>
|
||||
<file>../src/main.cpp</file>
|
||||
<file>../src/progressload.cpp</file>
|
||||
<file>../src/progressload.h</file>
|
||||
<file>../src/widget.cpp</file>
|
||||
<file>../src/widget.h</file>
|
||||
<file>tags/a2d.png</file>
|
||||
<file>tags/community.svg</file>
|
||||
<file>tags/deepin.svg</file>
|
||||
<file>tags/logo_icon.svg</file>
|
||||
<file>tags/uos-authorize.svg</file>
|
||||
<file>tags/a2d-small.png</file>
|
||||
<file>tags/community-small.png</file>
|
||||
<file>tags/deepin-small.png</file>
|
||||
<file>tags/dtk-small.png</file>
|
||||
<file>tags/uos-small.png</file>
|
||||
<file>tags/community.png</file>
|
||||
<file>tags/ubuntu-small.png</file>
|
||||
<file>tags/ubuntu.png</file>
|
||||
<file>tags/dwine5-small.png</file>
|
||||
<file>tags/dwine5.svg</file>
|
||||
<file>tags/dwine2-small.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="/fonts">
|
||||
<file>fonts/hksnzt.ttf</file>
|
||||
</qresource>
|
||||
</RCC>
|
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
||||
<path fill="#536076" d="M10.138807,3.52000025 L10.138,12.5230002 L14.6066017,8.05523757 L15.3137085,8.76234435 L9.65685425,14.4191986 L4,8.76234435 L4.70710678,8.05523757 L9.138,12.4870002 L9.138807,3.52000025 L10.138807,3.52000025 Z" transform="rotate(90 9.657 11.518)"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 366 B |
@ -1,125 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16px"
|
||||
height="16px"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg22"
|
||||
sodipodi:docname="category_active_16px_l.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata26">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>category_active_16px</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="987"
|
||||
id="namedview24"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="-4"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg22" />
|
||||
<!-- Generator: Sketch 3.6.1 (26313) - http://www.bohemiancoding.com/sketch -->
|
||||
<title
|
||||
id="title2">category_active_16px</title>
|
||||
<desc
|
||||
id="desc4">Created with Sketch.</desc>
|
||||
<defs
|
||||
id="defs6" />
|
||||
<g
|
||||
id="Page-1"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
style="fill:#000000;fill-opacity:0.94999999">
|
||||
<g
|
||||
id="category_active_16px"
|
||||
style="fill:#000000;fill-opacity:0.94999999">
|
||||
<rect
|
||||
id="Rectangle-1-Copy-44"
|
||||
fill="#747568"
|
||||
opacity="0"
|
||||
x="0"
|
||||
y="0"
|
||||
width="16"
|
||||
height="16"
|
||||
style="fill:#000000;fill-opacity:0.94999999" />
|
||||
<g
|
||||
id="Group-2"
|
||||
transform="translate(2.000000, 2.000000)"
|
||||
fill="#FFFFFF"
|
||||
style="fill:#000000;fill-opacity:0.94999999">
|
||||
<rect
|
||||
id="Rectangle-94"
|
||||
x="0"
|
||||
y="0"
|
||||
width="2"
|
||||
height="2"
|
||||
style="fill:#000000;fill-opacity:0.94999999" />
|
||||
<rect
|
||||
id="Rectangle-97"
|
||||
x="3"
|
||||
y="0"
|
||||
width="9"
|
||||
height="2"
|
||||
style="fill:#000000;fill-opacity:0.94999999" />
|
||||
<rect
|
||||
id="rect11"
|
||||
x="0"
|
||||
y="5"
|
||||
width="2"
|
||||
height="2"
|
||||
style="fill:#000000;fill-opacity:0.94999999" />
|
||||
<rect
|
||||
id="rect13"
|
||||
x="3"
|
||||
y="5"
|
||||
width="9"
|
||||
height="2"
|
||||
style="fill:#000000;fill-opacity:0.94999999" />
|
||||
<rect
|
||||
id="rect15"
|
||||
x="0"
|
||||
y="10"
|
||||
width="2"
|
||||
height="2"
|
||||
style="fill:#000000;fill-opacity:0.94999999" />
|
||||
<rect
|
||||
id="rect17"
|
||||
x="3"
|
||||
y="10"
|
||||
width="9"
|
||||
height="2"
|
||||
style="fill:#000000;fill-opacity:0.94999999" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.3 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
||||
<path fill="#536076" d="M10.138807,3.52000025 L10.138,12.5230002 L14.6066017,8.05523757 L15.3137085,8.76234435 L9.65685425,14.4191986 L4,8.76234435 L4.70710678,8.05523757 L9.138,12.4870002 L9.138807,3.52000025 L10.138807,3.52000025 Z" transform="rotate(90 9.657 11.518)"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 366 B |
@ -1,124 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16px"
|
||||
height="16px"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg22"
|
||||
sodipodi:docname="category_active_16px.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata26">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="987"
|
||||
id="namedview24"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg22" />
|
||||
<!-- Generator: Sketch 3.6.1 (26313) - http://www.bohemiancoding.com/sketch -->
|
||||
<title
|
||||
id="title2">category_active_16px</title>
|
||||
<desc
|
||||
id="desc4">Created with Sketch.</desc>
|
||||
<defs
|
||||
id="defs6" />
|
||||
<g
|
||||
id="Page-1"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002">
|
||||
<g
|
||||
id="category_active_16px"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002">
|
||||
<rect
|
||||
id="Rectangle-1-Copy-44"
|
||||
fill="#747568"
|
||||
opacity="0"
|
||||
x="0"
|
||||
y="0"
|
||||
width="16"
|
||||
height="16"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
<g
|
||||
id="Group-2"
|
||||
transform="translate(2.000000, 2.000000)"
|
||||
fill="#FFFFFF"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002">
|
||||
<rect
|
||||
id="Rectangle-94"
|
||||
x="0"
|
||||
y="0"
|
||||
width="2"
|
||||
height="2"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
<rect
|
||||
id="Rectangle-97"
|
||||
x="3"
|
||||
y="0"
|
||||
width="9"
|
||||
height="2"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
<rect
|
||||
id="rect11"
|
||||
x="0"
|
||||
y="5"
|
||||
width="2"
|
||||
height="2"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
<rect
|
||||
id="rect13"
|
||||
x="3"
|
||||
y="5"
|
||||
width="9"
|
||||
height="2"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
<rect
|
||||
id="rect15"
|
||||
x="0"
|
||||
y="10"
|
||||
width="2"
|
||||
height="2"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
<rect
|
||||
id="rect17"
|
||||
x="3"
|
||||
y="10"
|
||||
width="9"
|
||||
height="2"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.3 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M0.09791679,7.31479943 C0.09791679,3.53173257 3.65198565,0.5 8,0.5 C12.3485596,0.5 15.9020832,3.53150012 15.9020832,7.31479943 C15.9020832,11.0972813 12.3485704,14.127954 8,14.127954 C7.06316558,14.127954 6.1471898,13.9862478 5.28311727,13.7134084 L2.55321759,15.327403 C2.15529088,15.5626687 1.67860204,15.1782665 1.82419813,14.7395213 L2.62951677,12.3127412 C1.03368368,11.0385392 0.09791679,9.24513974 0.09791679,7.31479943 Z M4.7455,6.9148 C4.7455,6.2248 4.1855,5.6648 3.4955,5.6648 C2.8055,5.6648 2.2455,6.2248 2.2455,6.9148 C2.2455,7.6048 2.8055,8.1648 3.4955,8.1648 C4.1855,8.1648 4.7455,7.6048 4.7455,6.9148 Z M9.2504,6.9148 C9.2504,6.2248 8.6904,5.6648 8.0004,5.6648 C7.3104,5.6648 6.7504,6.2248 6.7504,6.9148 C6.7504,7.6048 7.3104,8.1648 8.0004,8.1648 C8.6904,8.1648 9.2504,7.6048 9.2504,6.9148 Z M13.766,6.9148 C13.766,6.2248 13.206,5.6648 12.516,5.6648 C11.826,5.6648 11.266,6.2248 11.266,6.9148 C11.266,7.6048 11.826,8.1648 12.516,8.1648 C13.206,8.1648 13.766,7.6048 13.766,6.9148 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M0.09791679,7.31479943 C0.09791679,3.53173257 3.65198565,0.5 8,0.5 C12.3485596,0.5 15.9020832,3.53150012 15.9020832,7.31479943 C15.9020832,11.0972813 12.3485704,14.127954 8,14.127954 C7.06316558,14.127954 6.1471898,13.9862478 5.28311727,13.7134084 L2.55321759,15.327403 C2.15529088,15.5626687 1.67860204,15.1782665 1.82419813,14.7395213 L2.62951677,12.3127412 C1.03368368,11.0385392 0.09791679,9.24513974 0.09791679,7.31479943 Z M4.7455,6.9148 C4.7455,6.2248 4.1855,5.6648 3.4955,5.6648 C2.8055,5.6648 2.2455,6.2248 2.2455,6.9148 C2.2455,7.6048 2.8055,8.1648 3.4955,8.1648 C4.1855,8.1648 4.7455,7.6048 4.7455,6.9148 Z M9.2504,6.9148 C9.2504,6.2248 8.6904,5.6648 8.0004,5.6648 C7.3104,5.6648 6.7504,6.2248 6.7504,6.9148 C6.7504,7.6048 7.3104,8.1648 8.0004,8.1648 C8.6904,8.1648 9.2504,7.6048 9.2504,6.9148 Z M13.766,6.9148 C13.766,6.2248 13.206,5.6648 12.516,5.6648 C11.826,5.6648 11.266,6.2248 11.266,6.9148 C11.266,7.6048 11.826,8.1648 12.516,8.1648 C13.206,8.1648 13.766,7.6048 13.766,6.9148 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M3,2 L13,2 C14.1045695,2 15,2.8954305 15,4 L15,12 C15,13.1045695 14.1045695,14 13,14 L3,14 C1.8954305,14 1,13.1045695 1,12 L1,4 C1,2.8954305 1.8954305,2 3,2 Z M3.76776695,5.35355339 L6.03553391,7.62132034 L3.76776695,9.8890873 L4.47487373,10.5961941 L7.44974747,7.62132034 L4.47487373,4.64644661 L3.76776695,5.35355339 Z M5.91666667,12 L11.0833333,12 L11.0833333,11 L5.91666667,11 L5.91666667,12 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 523 B |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M3,2 L13,2 C14.1045695,2 15,2.8954305 15,4 L15,12 C15,13.1045695 14.1045695,14 13,14 L3,14 C1.8954305,14 1,13.1045695 1,12 L1,4 C1,2.8954305 1.8954305,2 3,2 Z M3.76776695,5.35355339 L6.03553391,7.62132034 L3.76776695,9.8890873 L4.47487373,10.5961941 L7.44974747,7.62132034 L4.47487373,4.64644661 L3.76776695,5.35355339 Z M5.91666667,12 L11.0833333,12 L11.0833333,11 L5.91666667,11 L5.91666667,12 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 553 B |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M11.3114315,3 C13.357501,3 15.0067163,5.17017281 15.7133188,8.05794777 C16.4086522,10.8996678 15.9150863,13.3535714 14.0872428,13.3535714 C13.3629901,13.3535714 12.7141246,13.0969142 11.9239825,12.5819693 C11.7832522,12.4902536 11.638281,12.3909224 11.461347,12.2660165 C11.3686071,12.200547 11.0517692,11.9743261 11.0062924,11.9420563 C9.76649639,11.0623107 9.01108239,10.715 8.00430016,10.715 C6.77138366,10.715 5.99921712,11.0762729 4.96661589,11.9397238 C4.93060093,11.9698391 4.48571222,12.3483964 4.35343872,12.4563717 C3.49008067,13.1611339 2.80601727,13.4628505 1.87123269,13.3869162 C0.0836355556,13.241098 -0.391076934,10.7851693 0.309935396,7.98500253 C1.02394135,5.13293317 2.67988585,3 4.7263796,3 C5.07581055,3 5.40379038,3.09122326 5.76942208,3.26509058 C5.87841375,3.31691894 5.98930228,3.37514875 6.12219409,3.44909841 C6.19628024,3.49032478 6.44963239,3.6346061 6.45727206,3.63892075 C7.10277068,4.00347855 7.50182674,4.14857143 8.01851079,4.14857143 C8.51588602,4.14857143 8.90120605,4.00650828 9.55466919,3.63859493 C9.69986269,3.55637602 9.78224829,3.50972827 9.84835639,3.47295723 C9.96412339,3.40856473 10.0609743,3.35696675 10.1556729,3.31001061 C10.567507,3.10580322 10.9247171,3 11.3114315,3 Z M5.07357978,10.107 C6.56572905,10.107 7.78410609,8.9267355 7.78410609,7.46414286 C7.78410609,6.00155021 6.56572905,4.82128571 5.07357978,4.82128571 C3.57990894,4.82128571 2.36305346,6.00089051 2.36305346,7.46414286 C2.36305346,8.9273952 3.57990894,10.107 5.07357978,10.107 Z M5.07357978,9.107 C4.12535588,9.107 3.36305346,8.36803337 3.36305346,7.46414286 C3.36305346,6.56025235 4.12535588,5.82128571 5.07357978,5.82128571 C6.02043115,5.82128571 6.78410609,6.56107184 6.78410609,7.46414286 C6.78410609,8.36721388 6.02043115,9.107 5.07357978,9.107 Z M5.03983241,8.37864286 C5.54751662,8.37864286 5.9601482,7.97792857 5.9601482,7.48935714 C5.9601482,6.99292857 5.54751662,6.59364286 5.03983241,6.59364286 C4.53067452,6.59364286 4.11804294,6.99292857 4.11804294,7.48935714 C4.11804294,7.97792857 4.53067452,8.37864286 5.03983241,8.37864286 Z M9.65408509,8.38564286 C10.1617693,8.38564286 10.5744008,7.9835 10.5744008,7.49135714 C10.5744008,6.99135714 10.1617693,6.58992857 9.65408509,6.58992857 C9.14492719,6.58992857 8.73229557,6.99135714 8.73229557,7.49135714 C8.73229557,7.9835 9.14492719,8.38564286 9.65408509,8.38564286 Z M11.3288535,9.99071429 C11.8365377,9.99071429 12.2491693,9.58928571 12.2491693,9.09214286 C12.2491693,8.59571429 11.8365377,8.19357143 11.3288535,8.19357143 C10.8196956,8.19357143 10.407064,8.59571429 10.407064,9.09214286 C10.407064,9.58928571 10.8196956,9.99071429 11.3288535,9.99071429 Z M11.3281166,6.77357143 C11.8372745,6.77357143 12.2491693,6.37142857 12.2491693,5.87357143 C12.2491693,5.37714286 11.8372745,4.97428571 11.3281166,4.97428571 C10.8174851,4.97428571 10.407064,5.37714286 10.407064,5.87357143 C10.407064,6.37142857 10.8174851,6.77357143 11.3281166,6.77357143 Z M12.9731166,8.38421429 C13.4852219,8.38421429 13.8971166,7.98135714 13.8971166,7.48921429 C13.8971166,6.98992857 13.4852219,6.5885 12.9731166,6.5885 C12.4676429,6.5885 12.0550114,6.98992857 12.0550114,7.48921429 C12.0550114,7.98135714 12.4676429,8.38421429 12.9731166,8.38421429 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.3 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M11.3114315,3 C13.357501,3 15.0067163,5.17017281 15.7133188,8.05794777 C16.4086522,10.8996678 15.9150863,13.3535714 14.0872428,13.3535714 C13.3629901,13.3535714 12.7141246,13.0969142 11.9239825,12.5819693 C11.7832522,12.4902536 11.638281,12.3909224 11.461347,12.2660165 C11.3686071,12.200547 11.0517692,11.9743261 11.0062924,11.9420563 C9.76649639,11.0623107 9.01108239,10.715 8.00430016,10.715 C6.77138366,10.715 5.99921712,11.0762729 4.96661589,11.9397238 C4.93060093,11.9698391 4.48571222,12.3483964 4.35343872,12.4563717 C3.49008067,13.1611339 2.80601727,13.4628505 1.87123269,13.3869162 C0.0836355556,13.241098 -0.391076934,10.7851693 0.309935396,7.98500253 C1.02394135,5.13293317 2.67988585,3 4.7263796,3 C5.07581055,3 5.40379038,3.09122326 5.76942208,3.26509058 C5.87841375,3.31691894 5.98930228,3.37514875 6.12219409,3.44909841 C6.19628024,3.49032478 6.44963239,3.6346061 6.45727206,3.63892075 C7.10277068,4.00347855 7.50182674,4.14857143 8.01851079,4.14857143 C8.51588602,4.14857143 8.90120605,4.00650828 9.55466919,3.63859493 C9.69986269,3.55637602 9.78224829,3.50972827 9.84835639,3.47295723 C9.96412339,3.40856473 10.0609743,3.35696675 10.1556729,3.31001061 C10.567507,3.10580322 10.9247171,3 11.3114315,3 Z M5.07357978,10.107 C6.56572905,10.107 7.78410609,8.9267355 7.78410609,7.46414286 C7.78410609,6.00155021 6.56572905,4.82128571 5.07357978,4.82128571 C3.57990894,4.82128571 2.36305346,6.00089051 2.36305346,7.46414286 C2.36305346,8.9273952 3.57990894,10.107 5.07357978,10.107 Z M5.07357978,9.107 C4.12535588,9.107 3.36305346,8.36803337 3.36305346,7.46414286 C3.36305346,6.56025235 4.12535588,5.82128571 5.07357978,5.82128571 C6.02043115,5.82128571 6.78410609,6.56107184 6.78410609,7.46414286 C6.78410609,8.36721388 6.02043115,9.107 5.07357978,9.107 Z M5.03983241,8.37864286 C5.54751662,8.37864286 5.9601482,7.97792857 5.9601482,7.48935714 C5.9601482,6.99292857 5.54751662,6.59364286 5.03983241,6.59364286 C4.53067452,6.59364286 4.11804294,6.99292857 4.11804294,7.48935714 C4.11804294,7.97792857 4.53067452,8.37864286 5.03983241,8.37864286 Z M9.65408509,8.38564286 C10.1617693,8.38564286 10.5744008,7.9835 10.5744008,7.49135714 C10.5744008,6.99135714 10.1617693,6.58992857 9.65408509,6.58992857 C9.14492719,6.58992857 8.73229557,6.99135714 8.73229557,7.49135714 C8.73229557,7.9835 9.14492719,8.38564286 9.65408509,8.38564286 Z M11.3288535,9.99071429 C11.8365377,9.99071429 12.2491693,9.58928571 12.2491693,9.09214286 C12.2491693,8.59571429 11.8365377,8.19357143 11.3288535,8.19357143 C10.8196956,8.19357143 10.407064,8.59571429 10.407064,9.09214286 C10.407064,9.58928571 10.8196956,9.99071429 11.3288535,9.99071429 Z M11.3281166,6.77357143 C11.8372745,6.77357143 12.2491693,6.37142857 12.2491693,5.87357143 C12.2491693,5.37714286 11.8372745,4.97428571 11.3281166,4.97428571 C10.8174851,4.97428571 10.407064,5.37714286 10.407064,5.87357143 C10.407064,6.37142857 10.8174851,6.77357143 11.3281166,6.77357143 Z M12.9731166,8.38421429 C13.4852219,8.38421429 13.8971166,7.98135714 13.8971166,7.48921429 C13.8971166,6.98992857 13.4852219,6.5885 12.9731166,6.5885 C12.4676429,6.5885 12.0550114,6.98992857 12.0550114,7.48921429 C12.0550114,7.98135714 12.4676429,8.38421429 12.9731166,8.38421429 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.3 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M13,2 C14.1045695,2 15,2.8954305 15,4 L15,12 C15,13.1045695 14.1045695,14 13,14 L3,14 C1.8954305,14 1,13.1045695 1,12 L1,4 C1,2.8954305 1.8954305,2 3,2 L13,2 Z M9.38816736,7.22265239 L7.95626236,10.0443009 C7.82854357,10.2959779 7.59618367,10.3016397 7.44581474,10.0701011 L6.5212474,8.6464491 C6.2918509,8.42797452 5.91137533,8.45796439 5.72281255,8.70938339 L3.09783322,12.2093834 C2.84963451,12.5403176 3.0980227,13 3.52503993,13 L12.9749655,13 C13.3830419,13 13.6350993,12.5760169 13.4251458,12.2427546 L10.2751706,7.24275461 C10.0768804,6.92800582 9.60195261,6.91724249 9.38816736,7.22265239 Z M4.5,4 C3.67157288,4 3,4.67157288 3,5.5 C3,6.32842712 3.67157288,7 4.5,7 C5.32842712,7 6,6.32842712 6,5.5 C6,4.67157288 5.32842712,4 4.5,4 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 865 B |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M13,2 C14.1045695,2 15,2.8954305 15,4 L15,12 C15,13.1045695 14.1045695,14 13,14 L3,14 C1.8954305,14 1,13.1045695 1,12 L1,4 C1,2.8954305 1.8954305,2 3,2 L13,2 Z M9.38816736,7.22265239 L7.95626236,10.0443009 C7.82854357,10.2959779 7.59618367,10.3016397 7.44581474,10.0701011 L6.5212474,8.6464491 C6.2918509,8.42797452 5.91137533,8.45796439 5.72281255,8.70938339 L3.09783322,12.2093834 C2.84963451,12.5403176 3.0980227,13 3.52503993,13 L12.9749655,13 C13.3830419,13 13.6350993,12.5760169 13.4251458,12.2427546 L10.2751706,7.24275461 C10.0768804,6.92800582 9.60195261,6.91724249 9.38816736,7.22265239 Z M4.5,4 C3.67157288,4 3,4.67157288 3,5.5 C3,6.32842712 3.67157288,7 4.5,7 C5.32842712,7 6,6.32842712 6,5.5 C6,4.67157288 5.32842712,4 4.5,4 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 895 B |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M13.9529472,2.53458892 C13.9842218,2.67532449 14,2.81906015 14,2.9632288 L14,11.5 C14,12.6045695 13.1045695,13.5 12,13.5 C10.8954305,13.5 10,12.6045695 10,11.5 C10,10.3954305 10.8954305,9.5 12,9.5 C12.364732,9.5 12.7066608,9.5976323 13.0010775,9.76818814 L13,3.81473429 C13,3.45097522 12.705115,3.15609023 12.3413559,3.15609023 C12.2949677,3.15609023 12.2487093,3.16099086 12.2033508,3.17071053 L6.52063898,4.38843451 C6.21695744,4.45350912 6,4.7218827 6,5.03245826 L6,13.5 C6,14.6045695 5.1045695,15.5 4,15.5 C2.8954305,15.5 2,14.6045695 2,13.5 C2,12.3954305 2.8954305,11.5 4,11.5 C4.364732,11.5 4.70666076,11.5976323 5.0010775,11.7681881 L5,4.08503671 C5,3.15891996 5.64322914,2.35706019 6.54729233,2.15615726 L11.5954279,1.03434935 C12.6607186,0.797618084 13.716216,1.46929822 13.9529472,2.53458892 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 929 B |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M13.9529472,2.53458892 C13.9842218,2.67532449 14,2.81906015 14,2.9632288 L14,11.5 C14,12.6045695 13.1045695,13.5 12,13.5 C10.8954305,13.5 10,12.6045695 10,11.5 C10,10.3954305 10.8954305,9.5 12,9.5 C12.364732,9.5 12.7066608,9.5976323 13.0010775,9.76818814 L13,3.81473429 C13,3.45097522 12.705115,3.15609023 12.3413559,3.15609023 C12.2949677,3.15609023 12.2487093,3.16099086 12.2033508,3.17071053 L6.52063898,4.38843451 C6.21695744,4.45350912 6,4.7218827 6,5.03245826 L6,13.5 C6,14.6045695 5.1045695,15.5 4,15.5 C2.8954305,15.5 2,14.6045695 2,13.5 C2,12.3954305 2.8954305,11.5 4,11.5 C4.364732,11.5 4.70666076,11.5976323 5.0010775,11.7681881 L5,4.08503671 C5,3.15891996 5.64322914,2.35706019 6.54729233,2.15615726 L11.5954279,1.03434935 C12.6607186,0.797618084 13.716216,1.46929822 13.9529472,2.53458892 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 959 B |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M7.99960993,0.9998 C11.8598496,0.9998 15,4.13995046 15,7.99940993 C15,11.8596496 11.8598496,14.9998 7.99960993,14.9998 C4.14015046,14.9998 1,11.8596496 1,7.99940993 C1,4.13995046 4.14015046,0.9998 7.99960993,0.9998 Z M8.86971986,11.9145 C8.56971986,12.747 8.22071986,13.122 7.99971986,13.122 C7.78521986,13.122 7.44971986,12.768 7.15571986,11.9845 C6.86571986,12.132 6.61521986,12.2485 6.36971986,12.354 C6.75321986,13.3495 7.29871986,14 7.99971986,14 C8.71921986,14 9.27521986,13.314 9.66021986,12.274 C9.41771986,12.1735 9.16171986,12.0585 8.86971986,11.9145 Z M12.0962199,3.61 C10.8027199,3.61 9.05121986,4.5085 7.94421986,5.19 C6.85371986,4.547 5.16021986,3.717 3.90321986,3.717 C3.19571986,3.717 2.85321986,4 2.69121986,4.238 C2.46021986,4.576 2.34571986,5.1655 2.90071986,6.1455 C2.82221986,6.286 2.77771986,6.448 2.77771986,6.6205 C2.77771986,7.154 3.20271986,7.5865 3.72621986,7.5865 C4.24971986,7.5865 4.67471986,7.154 4.67471986,6.6205 C4.67471986,6.087 4.25021986,5.6545 3.72621986,5.6545 L3.72621986,5.6545 L3.62121986,5.6605 C3.32971986,5.131 3.33321986,4.8355 3.39871986,4.7395 C3.46021986,4.6485 3.64921986,4.595 3.90321986,4.595 C4.30121986,4.595 4.82071986,4.7155 5.41071986,4.9325 C5.98671986,5.145 6.57721986,5.43 7.11871986,5.728 C5.99421986,6.502 5.13171986,7.25 4.36621986,8.027 C4.02471986,8.379 3.68871986,8.7615 3.39771986,9.1515 C2.30221986,10.6215 2.40671986,11.433 2.68771986,11.8555 C3.25671986,12.71 4.68721986,12.3665 5.64571986,12.014 C7.99371986,11.151 11.0597199,8.9165 12.6017199,6.848 C13.6972199,5.3785 13.5927199,4.567 13.3117199,4.1445 C13.1492199,3.9005 12.8067199,3.61 12.0962199,3.61 Z M12.2647199,8.445 C11.7407199,8.445 11.3162199,8.8775 11.3162199,9.411 C11.3162199,9.9445 11.7407199,10.377 12.2647199,10.377 L12.3937199,10.368 C12.6702199,10.88 12.6657199,11.167 12.6012199,11.2615 C12.5392199,11.352 12.3507199,11.4055 12.0967199,11.4055 C11.2957199,11.4055 10.1802199,10.933 9.46171986,10.5765 C9.22171986,10.7475 8.92321986,10.9505 8.63221986,11.136 C9.59521986,11.6545 11.0112199,12.2835 12.0967199,12.2835 C12.8042199,12.2835 13.1467199,12.0005 13.3087199,11.7625 C13.5392199,11.4255 13.6537199,10.8375 13.1032199,9.8625 C13.1737199,9.7275 13.2132199,9.574 13.2132199,9.411 C13.2132199,8.8775 12.7887199,8.445 12.2647199,8.445 Z M12.0962199,4.4875 C12.3517199,4.4875 12.5347199,4.542 12.5977199,4.6365 C12.6907199,4.776 12.6677199,5.3075 11.9147199,6.317 C10.9462199,7.6165 9.40121986,8.8925 8.04671986,9.7805 C6.94321986,10.504 5.07821986,11.5125 3.90321986,11.5125 C3.64771986,11.5125 3.46471986,11.458 3.40171986,11.3635 C3.21521986,11.083 3.61221986,10.04 5.02121986,8.601 C5.54371986,9.0665 6.10721986,9.5115 6.67921986,9.917 L6.67921986,9.917 C6.98671986,9.7555 7.25071986,9.597 7.51171986,9.4315 C6.82921986,8.9695 6.18871986,8.4705 5.65121986,7.995 C6.36621986,7.3465 7.16221986,6.738 7.95271986,6.2195 C8.64121986,6.6515 9.30521986,7.133 9.90271986,7.625 C10.1212199,7.429 10.3347199,7.226 10.5382199,7.0195 C9.99971986,6.5705 9.40971986,6.1295 8.77721986,5.711 C9.63321986,5.217 11.1197199,4.4875 12.0962199,4.4875 Z M7.99971986,2 C7.28021986,2 6.72421986,2.686 6.33921986,3.726 C6.58321986,3.827 6.83971986,3.9425 7.12971986,4.0855 C7.42971986,3.253 7.77871986,2.878 7.99971986,2.878 C8.21471986,2.878 8.54971986,3.232 8.84371986,4.0155 C9.13071986,3.8695 9.38371986,3.7515 9.62971986,3.646 C9.24671986,2.6505 8.70071986,2 7.99971986,2 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.4 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M7.99960993,0.9998 C11.8598496,0.9998 15,4.13995046 15,7.99940993 C15,11.8596496 11.8598496,14.9998 7.99960993,14.9998 C4.14015046,14.9998 1,11.8596496 1,7.99940993 C1,4.13995046 4.14015046,0.9998 7.99960993,0.9998 Z M8.86971986,11.9145 C8.56971986,12.747 8.22071986,13.122 7.99971986,13.122 C7.78521986,13.122 7.44971986,12.768 7.15571986,11.9845 C6.86571986,12.132 6.61521986,12.2485 6.36971986,12.354 C6.75321986,13.3495 7.29871986,14 7.99971986,14 C8.71921986,14 9.27521986,13.314 9.66021986,12.274 C9.41771986,12.1735 9.16171986,12.0585 8.86971986,11.9145 Z M12.0962199,3.61 C10.8027199,3.61 9.05121986,4.5085 7.94421986,5.19 C6.85371986,4.547 5.16021986,3.717 3.90321986,3.717 C3.19571986,3.717 2.85321986,4 2.69121986,4.238 C2.46021986,4.576 2.34571986,5.1655 2.90071986,6.1455 C2.82221986,6.286 2.77771986,6.448 2.77771986,6.6205 C2.77771986,7.154 3.20271986,7.5865 3.72621986,7.5865 C4.24971986,7.5865 4.67471986,7.154 4.67471986,6.6205 C4.67471986,6.087 4.25021986,5.6545 3.72621986,5.6545 L3.72621986,5.6545 L3.62121986,5.6605 C3.32971986,5.131 3.33321986,4.8355 3.39871986,4.7395 C3.46021986,4.6485 3.64921986,4.595 3.90321986,4.595 C4.30121986,4.595 4.82071986,4.7155 5.41071986,4.9325 C5.98671986,5.145 6.57721986,5.43 7.11871986,5.728 C5.99421986,6.502 5.13171986,7.25 4.36621986,8.027 C4.02471986,8.379 3.68871986,8.7615 3.39771986,9.1515 C2.30221986,10.6215 2.40671986,11.433 2.68771986,11.8555 C3.25671986,12.71 4.68721986,12.3665 5.64571986,12.014 C7.99371986,11.151 11.0597199,8.9165 12.6017199,6.848 C13.6972199,5.3785 13.5927199,4.567 13.3117199,4.1445 C13.1492199,3.9005 12.8067199,3.61 12.0962199,3.61 Z M12.2647199,8.445 C11.7407199,8.445 11.3162199,8.8775 11.3162199,9.411 C11.3162199,9.9445 11.7407199,10.377 12.2647199,10.377 L12.3937199,10.368 C12.6702199,10.88 12.6657199,11.167 12.6012199,11.2615 C12.5392199,11.352 12.3507199,11.4055 12.0967199,11.4055 C11.2957199,11.4055 10.1802199,10.933 9.46171986,10.5765 C9.22171986,10.7475 8.92321986,10.9505 8.63221986,11.136 C9.59521986,11.6545 11.0112199,12.2835 12.0967199,12.2835 C12.8042199,12.2835 13.1467199,12.0005 13.3087199,11.7625 C13.5392199,11.4255 13.6537199,10.8375 13.1032199,9.8625 C13.1737199,9.7275 13.2132199,9.574 13.2132199,9.411 C13.2132199,8.8775 12.7887199,8.445 12.2647199,8.445 Z M12.0962199,4.4875 C12.3517199,4.4875 12.5347199,4.542 12.5977199,4.6365 C12.6907199,4.776 12.6677199,5.3075 11.9147199,6.317 C10.9462199,7.6165 9.40121986,8.8925 8.04671986,9.7805 C6.94321986,10.504 5.07821986,11.5125 3.90321986,11.5125 C3.64771986,11.5125 3.46471986,11.458 3.40171986,11.3635 C3.21521986,11.083 3.61221986,10.04 5.02121986,8.601 C5.54371986,9.0665 6.10721986,9.5115 6.67921986,9.917 L6.67921986,9.917 C6.98671986,9.7555 7.25071986,9.597 7.51171986,9.4315 C6.82921986,8.9695 6.18871986,8.4705 5.65121986,7.995 C6.36621986,7.3465 7.16221986,6.738 7.95271986,6.2195 C8.64121986,6.6515 9.30521986,7.133 9.90271986,7.625 C10.1212199,7.429 10.3347199,7.226 10.5382199,7.0195 C9.99971986,6.5705 9.40971986,6.1295 8.77721986,5.711 C9.63321986,5.217 11.1197199,4.4875 12.0962199,4.4875 Z M7.99971986,2 C7.28021986,2 6.72421986,2.686 6.33921986,3.726 C6.58321986,3.827 6.83971986,3.9425 7.12971986,4.0855 C7.42971986,3.253 7.77871986,2.878 7.99971986,2.878 C8.21471986,2.878 8.54971986,3.232 8.84371986,4.0155 C9.13071986,3.8695 9.38371986,3.7515 9.62971986,3.646 C9.24671986,2.6505 8.70071986,2 7.99971986,2 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.5 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M14.6796875,1 C15.1667188,1 15.5,1.316 15.5,1.66666667 L15.5,2.33333333 C15.5,2.684 15.1667188,3 14.6796875,3 L14,3 L14,9.0952381 C14,10.147209 13.1045695,11 12,11 L10.223,11 L12.2674534,13.0443466 C12.4627155,13.2396088 12.4627155,13.5561912 12.2674534,13.7514534 C12.0721912,13.9467155 11.7556088,13.9467155 11.5603466,13.7514534 L8.9995,11.1905 L9,14.5 C9,14.7761424 8.77614237,15 8.5,15 C8.24358208,15 8.03224642,14.8069799 8.00336387,14.5583106 L8,14.5 L7.9995,11.191 L5.43965339,13.7514534 C5.25941141,13.9316954 4.97579588,13.9455601 4.77965028,13.7930477 L4.73254661,13.7514534 C4.55230463,13.5712114 4.53843986,13.2875959 4.69095231,13.0914503 L4.73254661,13.0443466 L6.776,11 L4,11 C2.8954305,11 2,10.147209 2,9.0952381 L2,3 L1.3203125,3 C0.83328125,3 0.5,2.684 0.5,2.33333333 L0.5,1.66666667 C0.5,1.316 0.83328125,1 1.3203125,1 L14.6796875,1 Z M13,3 L3,3 L3,9.05882353 C3,9.57862094 3.44771525,10 4,10 L12,10 C12.5522847,10 13,9.57862094 13,9.05882353 L13,3 Z M8,4.5 L8,6.5 L10,6.5 C10,7.6045695 9.1045695,8.5 8,8.5 C6.8954305,8.5 6,7.6045695 6,6.5 C6,5.3954305 6.8954305,4.5 8,4.5 Z M9,3.5 C10.1045695,3.5 11,4.3954305 11,5.5 L9,5.5 L9,3.5 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M14.6796875,1 C15.1667188,1 15.5,1.316 15.5,1.66666667 L15.5,2.33333333 C15.5,2.684 15.1667188,3 14.6796875,3 L14,3 L14,9.0952381 C14,10.147209 13.1045695,11 12,11 L10.223,11 L12.2674534,13.0443466 C12.4627155,13.2396088 12.4627155,13.5561912 12.2674534,13.7514534 C12.0721912,13.9467155 11.7556088,13.9467155 11.5603466,13.7514534 L8.9995,11.1905 L9,14.5 C9,14.7761424 8.77614237,15 8.5,15 C8.24358208,15 8.03224642,14.8069799 8.00336387,14.5583106 L8,14.5 L7.9995,11.191 L5.43965339,13.7514534 C5.25941141,13.9316954 4.97579588,13.9455601 4.77965028,13.7930477 L4.73254661,13.7514534 C4.55230463,13.5712114 4.53843986,13.2875959 4.69095231,13.0914503 L4.73254661,13.0443466 L6.776,11 L4,11 C2.8954305,11 2,10.147209 2,9.0952381 L2,3 L1.3203125,3 C0.83328125,3 0.5,2.684 0.5,2.33333333 L0.5,1.66666667 C0.5,1.316 0.83328125,1 1.3203125,1 L14.6796875,1 Z M13,3 L3,3 L3,9.05882353 C3,9.57862094 3.44771525,10 4,10 L12,10 C12.5522847,10 13,9.57862094 13,9.05882353 L13,3 Z M8,4.5 L8,6.5 L10,6.5 C10,7.6045695 9.1045695,8.5 8,8.5 C6.8954305,8.5 6,7.6045695 6,6.5 C6,5.3954305 6.8954305,4.5 8,4.5 Z M9,3.5 C10.1045695,3.5 11,4.3954305 11,5.5 L9,5.5 L9,3.5 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M8.00031808,0.99950155 C11.8603458,0.99950155 14.9999738,4.1390565 14.9999738,7.99950155 C14.9999738,11.8599466 11.8603458,14.9995015 8.00031808,14.9995015 C4.13971544,14.9995015 0.999973754,11.8600603 0.999973754,7.99950155 C0.999973754,4.13894278 4.13971544,0.99950155 8.00031808,0.99950155 Z M11.4999738,8.99950155 C12.0526404,8.99950155 12.4999738,8.55150155 12.4999738,7.99950155 C12.4999738,7.44683488 12.0526404,6.99950155 11.4999738,6.99950155 C10.9473071,6.99950155 10.4999738,7.44683488 10.4999738,7.99950155 C10.4999738,8.55150155 10.9473071,8.99950155 11.4999738,8.99950155 Z M7.99997375,8.99950155 C8.55264042,8.99950155 8.99997375,8.55150155 8.99997375,7.99950155 C8.99997375,7.44683488 8.55264042,6.99950155 7.99997375,6.99950155 C7.44797375,6.99950155 6.99997375,7.44683488 6.99997375,7.99950155 C6.99997375,8.55150155 7.44797375,8.99950155 7.99997375,8.99950155 Z M4.49997375,8.99950155 C5.05264042,8.99950155 5.49997375,8.55150155 5.49997375,7.99950155 C5.49997375,7.44683488 5.05264042,6.99950155 4.49997375,6.99950155 C3.94797375,6.99950155 3.49997375,7.44683488 3.49997375,7.99950155 C3.49997375,8.55150155 3.94797375,8.99950155 4.49997375,8.99950155 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M8.00031808,0.99950155 C11.8603458,0.99950155 14.9999738,4.1390565 14.9999738,7.99950155 C14.9999738,11.8599466 11.8603458,14.9995015 8.00031808,14.9995015 C4.13971544,14.9995015 0.999973754,11.8600603 0.999973754,7.99950155 C0.999973754,4.13894278 4.13971544,0.99950155 8.00031808,0.99950155 Z M11.4999738,8.99950155 C12.0526404,8.99950155 12.4999738,8.55150155 12.4999738,7.99950155 C12.4999738,7.44683488 12.0526404,6.99950155 11.4999738,6.99950155 C10.9473071,6.99950155 10.4999738,7.44683488 10.4999738,7.99950155 C10.4999738,8.55150155 10.9473071,8.99950155 11.4999738,8.99950155 Z M7.99997375,8.99950155 C8.55264042,8.99950155 8.99997375,8.55150155 8.99997375,7.99950155 C8.99997375,7.44683488 8.55264042,6.99950155 7.99997375,6.99950155 C7.44797375,6.99950155 6.99997375,7.44683488 6.99997375,7.99950155 C6.99997375,8.55150155 7.44797375,8.99950155 7.99997375,8.99950155 Z M4.49997375,8.99950155 C5.05264042,8.99950155 5.49997375,8.55150155 5.49997375,7.99950155 C5.49997375,7.44683488 5.05264042,6.99950155 4.49997375,6.99950155 C3.94797375,6.99950155 3.49997375,7.44683488 3.49997375,7.99950155 C3.49997375,8.55150155 3.94797375,8.99950155 4.49997375,8.99950155 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#000" d="M1.85789238,2.64258737 C4.86313703,2.21112969 6.5771729,2.75883866 7,4.28571429 L7,13.7857143 C6.27058294,12.8374721 4.43450345,12.3388115 1.49176152,12.2897326 C1.2188519,12.2852804 1,12.062748 1,11.7898021 L1,3.63241367 C1.00002467,3.13504017 1.36556687,2.71326968 1.85789238,2.64258737 Z"/>
|
||||
<path fill="#000" d="M9.85789238,2.64258737 C12.863137,2.21112969 14.5771729,2.75883866 15,4.28571429 L15,13.7857143 C14.2705829,12.8374721 12.4345034,12.3388115 9.49176152,12.2897326 C9.2188519,12.2852804 9,12.062748 9,11.7898021 L9,3.63241367 C9.00002467,3.13504017 9.36556687,2.71326968 9.85789238,2.64258737 Z" transform="matrix(-1 0 0 1 24 0)"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 810 B |
@ -1,6 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<g fill="none" fill-opacity=".6" fill-rule="evenodd">
|
||||
<path fill="#FFF" d="M1.85789238,2.64258737 C4.86313703,2.21112969 6.5771729,2.75883866 7,4.28571429 L7,13.7857143 C6.27058294,12.8374721 4.43450345,12.3388115 1.49176152,12.2897326 C1.2188519,12.2852804 1,12.062748 1,11.7898021 L1,3.63241367 C1.00002467,3.13504017 1.36556687,2.71326968 1.85789238,2.64258737 Z"/>
|
||||
<path fill="#FFF" d="M9.85789238,2.64258737 C12.863137,2.21112969 14.5771729,2.75883866 15,4.28571429 L15,13.7857143 C14.2705829,12.8374721 12.4345034,12.3388115 9.49176152,12.2897326 C9.2188519,12.2852804 9,12.062748 9,11.7898021 L9,3.63241367 C9.00002467,3.13504017 9.36556687,2.71326968 9.85789238,2.64258737 Z" transform="matrix(-1 0 0 1 24 0)"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 828 B |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M3,14 C1.8954305,14 1,13.1045695 1,12 L1,4 C1,2.8954305 1.8954305,2 3,2 L13,2 C14.1045695,2 15,2.8954305 15,4 L15,12 C15,13.0543618 14.1841222,13.9181651 13.1492623,13.9945143 L13,14 L13,14 L3,14 Z M14,5 L2,5 L2,12 C2,12.5522847 2.44771525,13 3,13 L8.01233301,13.0001639 C8.01943442,12.9772458 8.02824971,12.9546419 8.0388094,12.9325301 L8.30383017,12.3775926 C8.34459502,12.2912196 8.34695846,12.1917404 8.30983658,12.1028011 C8.27399122,12.0159757 8.20318605,11.9486684 8.11444707,11.9170901 L7.53244707,11.7100901 C7.33313205,11.6391997 7.19999981,11.4505463 7.19999981,11.2389998 L7.19999981,10.1609998 C7.19999981,9.9491733 7.33347927,9.7603339 7.53316619,9.6896543 L8.11249002,9.4846101 C8.20258302,9.4521442 8.27390085,9.3842428 8.31058669,9.2953916 C8.34695846,9.2082592 8.34459502,9.10878 8.3048094,9.0244696 L8.0388094,8.46746956 C7.94749917,8.2762673 7.98662009,8.04827275 8.13644642,7.89844642 L8.89844642,7.13644642 C9.04827275,6.98662009 9.2762673,6.94749917 9.46746956,7.0388094 L10.022407,7.30383017 C10.10878,7.34459502 10.2082592,7.34695846 10.2971985,7.30983658 C10.3842159,7.27391194 10.4518724,7.202745 10.4837447,7.11391109 L10.6897447,6.53291109 C10.7604992,6.33335606 10.9492726,6.19999981 11.1609998,6.19999981 L12.2389998,6.19999981 C12.450727,6.19999981 12.6395004,6.33335606 12.7102549,6.53291109 L12.9156316,7.11216331 C12.9481272,7.202745 13.0157837,7.27391194 13.104608,7.31058669 C13.1917404,7.34695846 13.2912196,7.34459502 13.3755301,7.3048094 L13.9325301,7.0388094 L14,7.013 L14,5 Z M11.6999998,9.1999998 C10.8729998,9.1999998 10.1999998,9.8729998 10.1999998,10.6999998 C10.1999998,11.5269998 10.8729998,12.1999998 11.6999998,12.1999998 C12.5269998,12.1999998 13.1999998,11.5269998 13.1999998,10.6999998 C13.1999998,9.8729998 12.5269998,9.1999998 11.6999998,9.1999998 Z M13,3 L12,3 L12,4 L13,4 L13,3 Z M9,3 L8,3 L8,4 L9,4 L9,3 Z M11,3 L10,3 L10,4 L11,4 L11,3 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M3,14 C1.8954305,14 1,13.1045695 1,12 L1,4 C1,2.8954305 1.8954305,2 3,2 L13,2 C14.1045695,2 15,2.8954305 15,4 L15,12 C15,13.0543618 14.1841222,13.9181651 13.1492623,13.9945143 L13,14 L13,14 L3,14 Z M14,5 L2,5 L2,12 C2,12.5522847 2.44771525,13 3,13 L8.01233301,13.0001639 C8.01943442,12.9772458 8.02824971,12.9546419 8.0388094,12.9325301 L8.30383017,12.3775926 C8.34459502,12.2912196 8.34695846,12.1917404 8.30983658,12.1028011 C8.27399122,12.0159757 8.20318605,11.9486684 8.11444707,11.9170901 L7.53244707,11.7100901 C7.33313205,11.6391997 7.19999981,11.4505463 7.19999981,11.2389998 L7.19999981,10.1609998 C7.19999981,9.9491733 7.33347927,9.7603339 7.53316619,9.6896543 L8.11249002,9.4846101 C8.20258302,9.4521442 8.27390085,9.3842428 8.31058669,9.2953916 C8.34695846,9.2082592 8.34459502,9.10878 8.3048094,9.0244696 L8.0388094,8.46746956 C7.94749917,8.2762673 7.98662009,8.04827275 8.13644642,7.89844642 L8.89844642,7.13644642 C9.04827275,6.98662009 9.2762673,6.94749917 9.46746956,7.0388094 L10.022407,7.30383017 C10.10878,7.34459502 10.2082592,7.34695846 10.2971985,7.30983658 C10.3842159,7.27391194 10.4518724,7.202745 10.4837447,7.11391109 L10.6897447,6.53291109 C10.7604992,6.33335606 10.9492726,6.19999981 11.1609998,6.19999981 L12.2389998,6.19999981 C12.450727,6.19999981 12.6395004,6.33335606 12.7102549,6.53291109 L12.9156316,7.11216331 C12.9481272,7.202745 13.0157837,7.27391194 13.104608,7.31058669 C13.1917404,7.34695846 13.2912196,7.34459502 13.3755301,7.3048094 L13.9325301,7.0388094 L14,7.013 L14,5 Z M11.6999998,9.1999998 C10.8729998,9.1999998 10.1999998,9.8729998 10.1999998,10.6999998 C10.1999998,11.5269998 10.8729998,12.1999998 11.6999998,12.1999998 C12.5269998,12.1999998 13.1999998,11.5269998 13.1999998,10.6999998 C13.1999998,9.8729998 12.5269998,9.1999998 11.6999998,9.1999998 Z M13,3 L12,3 L12,4 L13,4 L13,3 Z M9,3 L8,3 L8,4 L9,4 L9,3 Z M11,3 L10,3 L10,4 L11,4 L11,3 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M12,2 C13.1045695,2 14,2.8954305 14,4 L14,13 C14,14.1045695 13.1045695,15 12,15 L4,15 C2.8954305,15 2,14.1045695 2,13 L2,4 C2,2.8954305 2.8954305,2 4,2 L12,2 Z M4.5,12 L3.5,12 C3.22385763,12 3,12.2238576 3,12.5 L3,12.5 L3,13 C3,13.5522847 3.44771525,14 4,14 L4,14 L4.5,14 C4.77614237,14 5,13.7761424 5,13.5 L5,13.5 L5,12.5 C5,12.2238576 4.77614237,12 4.5,12 L4.5,12 Z M12.5,12 L11.5,12 C11.2238576,12 11,12.2238576 11,12.5 L11,12.5 L11,13.5 C11,13.7761424 11.2238576,14 11.5,14 L11.5,14 L12,14 C12.5522847,14 13,13.5522847 13,13 L13,13 L13,12.5 C13,12.2238576 12.7761424,12 12.5,12 L12.5,12 Z M4.5,9 L3.5,9 C3.22385763,9 3,9.22385763 3,9.5 L3,9.5 L3,10.5 C3,10.7761424 3.22385763,11 3.5,11 L3.5,11 L4.5,11 C4.77614237,11 5,10.7761424 5,10.5 L5,10.5 L5,9.5 C5,9.22385763 4.77614237,9 4.5,9 L4.5,9 Z M12.5,9 L11.5,9 C11.2238576,9 11,9.22385763 11,9.5 L11,9.5 L11,10.5 C11,10.7761424 11.2238576,11 11.5,11 L11.5,11 L12.5,11 C12.7761424,11 13,10.7761424 13,10.5 L13,10.5 L13,9.5 C13,9.22385763 12.7761424,9 12.5,9 L12.5,9 Z M4.5,6 L3.5,6 C3.22385763,6 3,6.22385763 3,6.5 L3,6.5 L3,7.5 C3,7.77614237 3.22385763,8 3.5,8 L3.5,8 L4.5,8 C4.77614237,8 5,7.77614237 5,7.5 L5,7.5 L5,6.5 C5,6.22385763 4.77614237,6 4.5,6 L4.5,6 Z M12.5,6 L11.5,6 C11.2238576,6 11,6.22385763 11,6.5 L11,6.5 L11,7.5 C11,7.77614237 11.2238576,8 11.5,8 L11.5,8 L12.5,8 C12.7761424,8 13,7.77614237 13,7.5 L13,7.5 L13,6.5 C13,6.22385763 12.7761424,6 12.5,6 L12.5,6 Z M4.5,3 L4,3 C3.44771525,3 3,3.44771525 3,4 L3,4 L3,4.5 C3,4.77614237 3.22385763,5 3.5,5 L3.5,5 L4.5,5 C4.77614237,5 5,4.77614237 5,4.5 L5,4.5 L5,3.5 C5,3.22385763 4.77614237,3 4.5,3 L4.5,3 Z M12,3 L11.5,3 C11.2238576,3 11,3.22385763 11,3.5 L11,3.5 L11,4.5 C11,4.77614237 11.2238576,5 11.5,5 L11.5,5 L12.5,5 C12.7761424,5 13,4.77614237 13,4.5 L13,4.5 L13,4 C13,3.44771525 12.5522847,3 12,3 L12,3 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#FFF" fill-opacity=".6" fill-rule="evenodd" d="M12,2 C13.1045695,2 14,2.8954305 14,4 L14,13 C14,14.1045695 13.1045695,15 12,15 L4,15 C2.8954305,15 2,14.1045695 2,13 L2,4 C2,2.8954305 2.8954305,2 4,2 L12,2 Z M4.5,12 L3.5,12 C3.22385763,12 3,12.2238576 3,12.5 L3,12.5 L3,13 C3,13.5522847 3.44771525,14 4,14 L4,14 L4.5,14 C4.77614237,14 5,13.7761424 5,13.5 L5,13.5 L5,12.5 C5,12.2238576 4.77614237,12 4.5,12 L4.5,12 Z M12.5,12 L11.5,12 C11.2238576,12 11,12.2238576 11,12.5 L11,12.5 L11,13.5 C11,13.7761424 11.2238576,14 11.5,14 L11.5,14 L12,14 C12.5522847,14 13,13.5522847 13,13 L13,13 L13,12.5 C13,12.2238576 12.7761424,12 12.5,12 L12.5,12 Z M4.5,9 L3.5,9 C3.22385763,9 3,9.22385763 3,9.5 L3,9.5 L3,10.5 C3,10.7761424 3.22385763,11 3.5,11 L3.5,11 L4.5,11 C4.77614237,11 5,10.7761424 5,10.5 L5,10.5 L5,9.5 C5,9.22385763 4.77614237,9 4.5,9 L4.5,9 Z M12.5,9 L11.5,9 C11.2238576,9 11,9.22385763 11,9.5 L11,9.5 L11,10.5 C11,10.7761424 11.2238576,11 11.5,11 L11.5,11 L12.5,11 C12.7761424,11 13,10.7761424 13,10.5 L13,10.5 L13,9.5 C13,9.22385763 12.7761424,9 12.5,9 L12.5,9 Z M4.5,6 L3.5,6 C3.22385763,6 3,6.22385763 3,6.5 L3,6.5 L3,7.5 C3,7.77614237 3.22385763,8 3.5,8 L3.5,8 L4.5,8 C4.77614237,8 5,7.77614237 5,7.5 L5,7.5 L5,6.5 C5,6.22385763 4.77614237,6 4.5,6 L4.5,6 Z M12.5,6 L11.5,6 C11.2238576,6 11,6.22385763 11,6.5 L11,6.5 L11,7.5 C11,7.77614237 11.2238576,8 11.5,8 L11.5,8 L12.5,8 C12.7761424,8 13,7.77614237 13,7.5 L13,7.5 L13,6.5 C13,6.22385763 12.7761424,6 12.5,6 L12.5,6 Z M4.5,3 L4,3 C3.44771525,3 3,3.44771525 3,4 L3,4 L3,4.5 C3,4.77614237 3.22385763,5 3.5,5 L3.5,5 L4.5,5 C4.77614237,5 5,4.77614237 5,4.5 L5,4.5 L5,3.5 C5,3.22385763 4.77614237,3 4.5,3 L4.5,3 Z M12,3 L11.5,3 C11.2238576,3 11,3.22385763 11,3.5 L11,3.5 L11,4.5 C11,4.77614237 11.2238576,5 11.5,5 L11.5,5 L12.5,5 C12.7761424,5 13,4.77614237 13,4.5 L13,4.5 L13,4 C13,3.44771525 12.5522847,3 12,3 L12,3 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M8,1 C11.8659932,1 15,4.13400675 15,8 C15,11.8659932 11.8659932,15 8,15 C4.13400675,15 1,11.8659932 1,8 C1,4.13400675 4.13400675,1 8,1 Z M9.5,8 L6.5,8 C6.22385763,8 6,8.22385763 6,8.5 C6,8.77614237 5.77614237,9 5.5,9 L5.5,9 L5,9 C4.89014373,9 4.78478689,9.04364023 4.70710678,9.12132034 C4.54534632,9.2830808 4.54534632,9.54534632 4.70710678,9.70710678 L4.70710678,9.70710678 L7.64644661,12.6464466 C7.84170876,12.8417088 8.15829124,12.8417088 8.35355339,12.6464466 L8.35355339,12.6464466 L11.2928932,9.70710678 C11.3705733,9.62942667 11.4142136,9.52406983 11.4142136,9.41421356 C11.4142136,9.18544973 11.2287638,9 11,9 L11,9 L10.5,9 C10.2238576,9 10,8.77614237 10,8.5 C10,8.22385763 9.77614237,8 9.5,8 L9.5,8 Z M9.5,6 L6.5,6 C6.22385763,6 6,6.22385763 6,6.5 C6,6.77614237 6.22385763,7 6.5,7 L6.5,7 L9.5,7 C9.77614237,7 10,6.77614237 10,6.5 C10,6.22385763 9.77614237,6 9.5,6 L9.5,6 Z M9.5,4 L6.5,4 C6.22385763,4 6,4.22385763 6,4.5 C6,4.77614237 6.22385763,5 6.5,5 L6.5,5 L9.5,5 C9.77614237,5 10,4.77614237 10,4.5 C10,4.22385763 9.77614237,4 9.5,4 L9.5,4 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB |
@ -1,57 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16"
|
||||
height="16"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="downloads-symbolic_dark.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="982"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
fill="#FFF"
|
||||
fill-opacity=".8"
|
||||
fill-rule="evenodd"
|
||||
d="M8,1 C11.8659932,1 15,4.13400675 15,8 C15,11.8659932 11.8659932,15 8,15 C4.13400675,15 1,11.8659932 1,8 C1,4.13400675 4.13400675,1 8,1 Z M9.5,8 L6.5,8 C6.22385763,8 6,8.22385763 6,8.5 C6,8.77614237 5.77614237,9 5.5,9 L5.5,9 L5,9 C4.89014373,9 4.78478689,9.04364023 4.70710678,9.12132034 C4.54534632,9.2830808 4.54534632,9.54534632 4.70710678,9.70710678 L4.70710678,9.70710678 L7.64644661,12.6464466 C7.84170876,12.8417088 8.15829124,12.8417088 8.35355339,12.6464466 L8.35355339,12.6464466 L11.2928932,9.70710678 C11.3705733,9.62942667 11.4142136,9.52406983 11.4142136,9.41421356 C11.4142136,9.18544973 11.2287638,9 11,9 L11,9 L10.5,9 C10.2238576,9 10,8.77614237 10,8.5 C10,8.22385763 9.77614237,8 9.5,8 L9.5,8 Z M9.5,6 L6.5,6 C6.22385763,6 6,6.22385763 6,6.5 C6,6.77614237 6.22385763,7 6.5,7 L6.5,7 L9.5,7 C9.77614237,7 10,6.77614237 10,6.5 C10,6.22385763 9.77614237,6 9.5,6 L9.5,6 Z M9.5,4 L6.5,4 C6.22385763,4 6,4.22385763 6,4.5 C6,4.77614237 6.22385763,5 6.5,5 L6.5,5 L9.5,5 C9.77614237,5 10,4.77614237 10,4.5 C10,4.22385763 9.77614237,4 9.5,4 L9.5,4 Z"
|
||||
id="path2"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
</svg>
|
Before Width: | Height: | Size: 2.6 KiB |
@ -1,68 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16px"
|
||||
height="16px"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="homepage.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata14">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="982"
|
||||
id="namedview10"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<!-- Generator: Sketch 56.3 (81716) - https://sketch.com -->
|
||||
<title
|
||||
id="title2">category_recommend</title>
|
||||
<desc
|
||||
id="desc4">Created with Sketch.</desc>
|
||||
<g
|
||||
id="category_recommend"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
style="fill:#000000;fill-opacity:0.86666667">
|
||||
<path
|
||||
d="M8,12.6085145 L4.54924088,14.5160472 C4.06572729,14.783327 3.74708518,14.5504931 3.83503048,14.0113448 L4.5,9.93475242 L1.69148737,7.05624503 C1.30958944,6.6648293 1.44637232,6.27932454 1.97881505,6.19797453 L5.83688104,5.60851449 L7.5726373,1.91049416 C7.8086632,1.40764212 8.19196238,1.40897492 8.4273627,1.91049416 L10.163119,5.60851449 L14.0211849,6.19797453 C14.5617696,6.28056851 14.6893983,6.66586674 14.3085126,7.05624503 L11.5,9.93475242 L12.1649695,14.0113448 C12.2540356,14.557364 11.9269904,14.7793014 11.4507591,14.5160472 L8,12.6085145 Z"
|
||||
id="Star"
|
||||
fill="#536076"
|
||||
style="fill:#000000;fill-opacity:0.86666667" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,68 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16px"
|
||||
height="16px"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="homepage_dark.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata14">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="982"
|
||||
id="namedview10"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="-15.932203"
|
||||
inkscape:cy="2.5762712"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8" />
|
||||
<!-- Generator: Sketch 56.3 (81716) - https://sketch.com -->
|
||||
<title
|
||||
id="title2">category_recommend</title>
|
||||
<desc
|
||||
id="desc4">Created with Sketch.</desc>
|
||||
<g
|
||||
id="category_recommend"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002">
|
||||
<path
|
||||
d="M8,12.6085145 L4.54924088,14.5160472 C4.06572729,14.783327 3.74708518,14.5504931 3.83503048,14.0113448 L4.5,9.93475242 L1.69148737,7.05624503 C1.30958944,6.6648293 1.44637232,6.27932454 1.97881505,6.19797453 L5.83688104,5.60851449 L7.5726373,1.91049416 C7.8086632,1.40764212 8.19196238,1.40897492 8.4273627,1.91049416 L10.163119,5.60851449 L14.0211849,6.19797453 C14.5617696,6.28056851 14.6893983,6.66586674 14.3085126,7.05624503 L11.5,9.93475242 L12.1649695,14.0113448 C12.2540356,14.557364 11.9269904,14.7793014 11.4507591,14.5160472 L8,12.6085145 Z"
|
||||
id="Star"
|
||||
fill="#C5CFE0"
|
||||
style="fill:#ffffff;fill-opacity:0.60000002" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,54 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
height="16"
|
||||
width="16"
|
||||
sodipodi:docname="refresh-page-dark.svg"
|
||||
xml:space="preserve"
|
||||
viewBox="0 0 16 16"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Layer_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata9"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs7" /><sodipodi:namedview
|
||||
inkscape:current-layer="Layer_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="8.8351119"
|
||||
inkscape:cx="12.452215"
|
||||
inkscape:zoom="34.711876"
|
||||
showgrid="true"
|
||||
id="namedview5"
|
||||
inkscape:window-height="958"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"><inkscape:grid
|
||||
id="grid834"
|
||||
type="xygrid" /></sodipodi:namedview>
|
||||
<g
|
||||
style="fill:#ffffff;fill-opacity:0.60000002"
|
||||
transform="scale(0.03125,0.0312082)"
|
||||
id="XMLID_2_">
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:0.60000002"
|
||||
d="M 436.6,75.4 C 390.1,28.9 326.7,0 256,0 114.5,0 0,114.5 0,256 0,397.5 114.5,512 256,512 375.2,512 474.8,430.1 503.6,320.2 h -67 C 410.5,394.7 339.8,447.7 256,447.7 149.9,447.7 64.2,362.1 64.2,255.9 64.2,149.7 149.9,64.2 256,64.2 c 53.1,0 100.5,22.3 135,56.8 L 287.7,224.3 H 512 V 0 Z"
|
||||
id="XMLID_4_" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1,52 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
height="16"
|
||||
width="16"
|
||||
sodipodi:docname="refresh-page.svg"
|
||||
xml:space="preserve"
|
||||
viewBox="0 0 16 16"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Layer_1"
|
||||
version="1.1"><metadata
|
||||
id="metadata9"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs7" /><sodipodi:namedview
|
||||
inkscape:current-layer="Layer_1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="8.8351119"
|
||||
inkscape:cx="12.452215"
|
||||
inkscape:zoom="34.711876"
|
||||
showgrid="true"
|
||||
id="namedview5"
|
||||
inkscape:window-height="958"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"><inkscape:grid
|
||||
id="grid834"
|
||||
type="xygrid" /></sodipodi:namedview>
|
||||
<g
|
||||
transform="scale(0.03125,0.0312082)"
|
||||
id="XMLID_2_">
|
||||
<path
|
||||
d="M 436.6,75.4 C 390.1,28.9 326.7,0 256,0 114.5,0 0,114.5 0,256 0,397.5 114.5,512 256,512 375.2,512 474.8,430.1 503.6,320.2 h -67 C 410.5,394.7 339.8,447.7 256,447.7 149.9,447.7 64.2,362.1 64.2,255.9 64.2,149.7 149.9,64.2 256,64.2 c 53.1,0 100.5,22.3 135,56.8 L 287.7,224.3 H 512 V 0 Z"
|
||||
id="XMLID_4_" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.8 KiB |
@ -1,3 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M3.5,14 C3.22385763,14 3,13.7761424 3,13.5 C3,13.2238576 3.22385763,13 3.5,13 L7,13 L7,12 L2,12 C1.44771525,12 1,11.5522847 1,11 L15,11 C15,11.5522847 14.5522847,12 14,12 L9,12 L9,13 L12.5,13 C12.7761424,13 13,13.2238576 13,13.5 C13,13.7761424 12.7761424,14 12.5,14 L3.5,14 Z M13,2 C14.1045695,2 15,2.8954305 15,4 L15,10 L1,10 L1,4 C1,2.8954305 1.8954305,2 3,2 L13,2 Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 494 B |
@ -1,57 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16"
|
||||
height="16"
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="theme-symbolic_dark.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="982"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="14.75"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
fill="#FFF"
|
||||
fill-opacity=".8"
|
||||
fill-rule="evenodd"
|
||||
d="M3.5,14 C3.22385763,14 3,13.7761424 3,13.5 C3,13.2238576 3.22385763,13 3.5,13 L7,13 L7,12 L2,12 C1.44771525,12 1,11.5522847 1,11 L15,11 C15,11.5522847 14.5522847,12 14,12 L9,12 L9,13 L12.5,13 C12.7761424,13 13,13.2238576 13,13.5 C13,13.7761424 12.7761424,14 12.5,14 L3.5,14 Z M13,2 C14.1045695,2 15,2.8954305 15,4 L15,10 L1,10 L1,4 C1,2.8954305 1.8954305,2 3,2 L13,2 Z"
|
||||
id="path2"
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:0.60000002" />
|
||||
</svg>
|
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 248 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 32 KiB |
@ -1,240 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="deepin-community-store.svg"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 200 200"
|
||||
height="200mm"
|
||||
width="200mm">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="linearGradient1200"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop1196"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:0.1299435" />
|
||||
<stop
|
||||
id="stop1198"
|
||||
offset="1"
|
||||
style="stop-color:#dadada;stop-opacity:0.81960785" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient1138">
|
||||
<stop
|
||||
style="stop-color:#99e7ea;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop1134" />
|
||||
<stop
|
||||
style="stop-color:#007ffc;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop1136" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1128"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop1124"
|
||||
offset="0"
|
||||
style="stop-color:#99e7ea;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop1126"
|
||||
offset="1"
|
||||
style="stop-color:#007ffc;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
only_selected="false"
|
||||
apply_with_weight="true"
|
||||
apply_no_weight="true"
|
||||
helper_size="0"
|
||||
steps="2"
|
||||
weight="33.333333"
|
||||
is_visible="true"
|
||||
id="path-effect960"
|
||||
effect="bspline" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
r="90.135414"
|
||||
fy="199.86011"
|
||||
fx="100.35268"
|
||||
cy="199.86011"
|
||||
cx="100.35268"
|
||||
id="radialGradient1130"
|
||||
xlink:href="#linearGradient1128"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="90.135414"
|
||||
fy="199.86011"
|
||||
fx="100.35268"
|
||||
cy="199.86011"
|
||||
cx="100.35268"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient1132"
|
||||
xlink:href="#linearGradient1138"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.98112945,0,3.7714702)"
|
||||
r="90.135414"
|
||||
fy="199.86011"
|
||||
fx="100.35268"
|
||||
cy="199.86011"
|
||||
cx="100.35268"
|
||||
id="radialGradient1202"
|
||||
xlink:href="#linearGradient1200"
|
||||
inkscape:collect="always" />
|
||||
<filter
|
||||
id="filter1448"
|
||||
inkscape:label="Drop Shadow"
|
||||
style="color-interpolation-filters:sRGB;">
|
||||
<feFlood
|
||||
id="feFlood1438"
|
||||
result="flood"
|
||||
flood-color="rgb(145,145,145)"
|
||||
flood-opacity="0.372549" />
|
||||
<feComposite
|
||||
id="feComposite1440"
|
||||
result="composite1"
|
||||
operator="in"
|
||||
in2="SourceGraphic"
|
||||
in="flood" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur1442"
|
||||
result="blur"
|
||||
stdDeviation="5.2918"
|
||||
in="composite1" />
|
||||
<feOffset
|
||||
id="feOffset1444"
|
||||
result="offset"
|
||||
dy="0"
|
||||
dx="0" />
|
||||
<feComposite
|
||||
id="feComposite1446"
|
||||
result="composite2"
|
||||
operator="over"
|
||||
in2="offset"
|
||||
in="SourceGraphic" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter2201"
|
||||
inkscape:label="Drop Shadow"
|
||||
style="color-interpolation-filters:sRGB;">
|
||||
<feFlood
|
||||
id="feFlood2191"
|
||||
result="flood"
|
||||
flood-color="rgb(145,145,145)"
|
||||
flood-opacity="0.372549" />
|
||||
<feComposite
|
||||
id="feComposite2193"
|
||||
result="composite1"
|
||||
operator="in"
|
||||
in2="SourceGraphic"
|
||||
in="flood" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur2195"
|
||||
result="blur"
|
||||
stdDeviation="3.76995"
|
||||
in="composite1" />
|
||||
<feOffset
|
||||
id="feOffset2197"
|
||||
result="offset"
|
||||
dy="0"
|
||||
dx="0" />
|
||||
<feComposite
|
||||
id="feComposite2199"
|
||||
result="composite2"
|
||||
operator="over"
|
||||
in2="offset"
|
||||
in="SourceGraphic" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-height="705"
|
||||
inkscape:window-width="1366"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:cy="507.94585"
|
||||
inkscape:cx="120.33119"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(0,-97)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1" />
|
||||
<g
|
||||
inkscape:label="Layer 2"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1002"
|
||||
d="m 91.937746,32.561862 c 0,0 11.145084,-0.157476 22.599704,6.928753 11.45465,7.086223 18.11074,13.857508 20.27783,18.266716 2.16708,4.409213 9.28755,12.125333 9.13277,26.297793 -0.15488,14.17244 -3.40543,23.620766 -8.97797,31.494326 -5.57254,7.87359 -15.63405,13.85751 -27.70786,14.17247 -12.073834,0.31494 -19.813464,-7.55863 -22.444934,-11.96786 -2.63147,-4.4092 -3.71502,-13.85751 -0.46438,-20.628766 3.25065,-6.77132 8.3588,-6.77132 10.06152,-6.14141 1.70272,0.6299 2.16709,1.5747 3.09585,3.30689 0.92875,1.73219 1.54793,1.41726 2.941094,0.47243 1.39311,-0.94484 1.85748,-2.04715 1.54792,-3.46439 -0.30958,-1.41726 -2.167114,-3.14944 -3.715054,-3.62186 -1.54791,-0.47241 -3.71502,-1.88966 -6.81087,-1.41721 -3.09585,0.47238 -9.13276,2.04711 -14.24091,8.97585 -5.10815,6.928746 -4.48899,17.636836 -1.39313,22.675926 3.09585,5.0391 8.97796,14.48739 21.98054,17.79431 13.002594,3.30693 34.054354,-6.45633 41.329594,-21.57361 7.27524,-15.117296 7.43004,-22.203516 7.12048,-34.643766 C 145.96036,67.048164 134.97008,48.466503 122.74148,41.69522 110.51288,34.923934 101.38012,30.987141 91.937746,32.561862 Z"
|
||||
style="fill:#ffc344;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1012"
|
||||
d="m 98.407556,95.469094 c 0,0 -3.06474,-2.8951 -5.80111,2.22698 -2.73637,5.122046 -4.04983,9.687366 -1.31346,15.254856 2.73637,5.56745 8.42801,8.90792 17.184454,8.79659 8.75636,-0.11148 15.21419,-2.22699 19.0451,-8.5739 3.83094,-6.34692 6.7862,-11.02357 7.11457,-13.361906 0.32839,-2.33835 2.07965,0.334036 1.53239,2.338336 -0.54728,2.00426 -0.43783,5.9015 1.09454,5.12204 1.53237,-0.77942 2.73637,-2.00427 2.95526,-1.44753 0.21893,0.55673 -1.75127,4.00859 -2.68162,5.73449 -0.93039,1.7259 -3.83094,5.90153 -5.5275,7.51607 -1.69652,1.61458 -4.04981,3.89724 -6.84092,5.56747 -2.79109,1.67024 -7.11454,3.61887 -9.52255,4.06427 -2.40801,0.44539 -7.22403,1.39184 -9.96042,1.2805 -2.73635,-0.11137 -6.238924,-0.61243 -10.124564,-2.56104 -3.88565,-1.94859 -8.09966,-4.95505 -9.74148,-7.96148 -1.64182,-3.00643 -4.15928,-5.73449 -3.61201,-13.30623 0.54728,-7.571746 3.01001,-11.468986 4.87074,-13.250556 1.86073,-1.7816 4.5971,-2.56105 6.40311,-2.17131 1.806,0.38971 2.95528,1.44755 3.3931,2.22697 0.43781,0.77944 1.14928,2.22699 1.53237,2.50538 z"
|
||||
style="fill:#f06767;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1014"
|
||||
d="m 126.2091,135.55481 c 0,0 13.13457,-7.6831 19.26404,-19.82016 6.12948,-12.13707 8.7564,-19.931516 7.99021,-31.845916 -0.76619,-11.91436 -2.62692,-6.01286 -0.54728,-11.13493 2.07964,-5.12208 -1.31345,-15.25486 0.10943,-15.922952 1.42292,-0.668097 4.48765,4.453972 5.3633,8.573902 0.87562,4.11992 4.70654,16.81372 1.64181,32.9594 -3.06472,16.145636 -10.28872,22.603906 -15.10475,26.946546 -4.81603,4.34261 -15.7615,11.91437 -17.40332,11.80302 -1.64183,-0.11148 -1.86073,-0.11148 -1.31348,-1.55891 z"
|
||||
style="fill:#3f62eb;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1016"
|
||||
d="m 102.56686,112.17145 c 0,0 7.00512,1.5589 12.36838,-1.78156 5.3633,-3.3405 9.5226,-8.79661 10.17931,-10.912246 0.65672,-2.11564 0.76619,1.892936 1.53236,-0.11125 0.76618,-2.00432 3.83093,-6.01288 2.29855,-15.36624 -1.53237,-9.35333 -1.64182,-9.79875 -4.48762,-14.80947 -2.84586,-5.01072 -9.63207,-11.914367 -13.79134,-14.141356 -4.15927,-2.226986 -9.96037,-5.567464 -17.950604,-5.344766 -7.9902,0.222699 -5.36328,-0.334048 -13.02512,1.002146 -7.66184,1.336187 -14.55749,5.010717 -16.85604,7.015006 -2.29855,2.004286 -8.42802,7.46041 -10.61712,10.46684 -2.1891,3.00643 -8.20911,9.79874 -11.3833,19.26344 -3.17419,9.46469 -4.48765,10.46683 -4.70656,16.702396 -0.21891,6.23557 0.54727,7.90578 -0.76618,8.46256 -1.31346,0.55673 -1.09455,-4.67668 -0.9851,-8.35123 0.10946,-3.6745 0.10946,-13.250556 4.92547,-23.940086 4.81601,-10.68954 13.35349,-19.59749 18.1695,-22.826621 4.81601,-3.229128 10.39821,-7.571752 19.04514,-9.687392 8.64693,-2.115635 17.29386,-1.781586 22.65716,-0.779443 5.363304,1.002145 13.681874,4.453974 18.169504,7.905802 4.48766,3.45183 9.41314,7.683104 13.13459,14.586764 3.72146,6.90365 4.70654,15.70025 4.59709,19.37477 -0.10943,3.67455 -1.97019,12.137106 -4.81601,16.257016 -2.84583,4.11993 -6.67674,9.0193 -10.61711,10.80089 -3.94039,1.78157 -8.75642,2.33833 -12.69675,0.55674 -3.94039,-1.78161 -3.72147,-2.44969 -4.3782,-4.34263 z"
|
||||
style="fill:#fce102;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1018"
|
||||
d="m 102.56686,112.17145 c 0,0 5.54674,1.56707 10.22918,-0.55878 4.68248,-2.12587 6.4239,-4.17301 7.54615,-5.3934 1.12223,-1.22042 3.25064,-3.50376 3.83112,-4.56669 0.58046,-1.06292 1.19962,-1.692816 1.19962,-2.086486 0,-0.39369 -1.08353,-1.33853 -0.0386,-3.62186 1.04482,-2.28333 1.97361,-7.51928 1.50922,-9.88134 -0.46438,-2.36207 -1.54792,-15.47161 -10.83547,-24.2113 -9.28753,-8.739679 -18.497714,-9.763243 -18.497714,-9.763243 0,0 14.705314,4.645415 21.593574,18.739133 6.88828,14.09374 4.64376,23.14835 0.23218,28.65986 -4.41158,5.511506 -10.68068,6.141406 -12.38342,4.724146 -1.70268,-1.41725 -5.2113,6.47164 -4.38574,7.95996 z"
|
||||
style="fill:#5ed938;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1020"
|
||||
d="m 84.662496,61.615394 c 0,0 -9.90672,-0.0787 -17.41416,4.88161 -7.50743,4.96037 -11.14506,8.9759 -13.23476,12.12533 -2.08969,3.14945 -4.48898,7.47991 -4.17939,7.40118 0.30958,-0.0788 9.05536,-12.2828 15.86623,-15.43223 6.81087,-3.14944 13.62174,-7.55865 22.98669,-4.33049 9.36495,3.22819 13.776544,7.71612 15.788844,6.61383 2.0123,-1.1023 2.3993,-2.44082 1.23835,-3.9368 -1.16094,-1.49598 -9.364964,-8.81842 -21.051804,-7.32243 z"
|
||||
style="fill:#8fdbe9;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1022"
|
||||
d="m 69.839846,124.53124 c 0.65673,0.33404 5.58219,8.90795 9.52257,10.35548 3.94037,1.44755 6.56728,1.55888 7.0051,2.227 0.43782,0.66809 0.32837,4.00858 3.83092,5.45614 3.50256,1.44753 19.920794,6.01284 24.627334,6.45824 4.70658,0.4454 0.76621,3.22911 3.61202,4.23125 2.84584,1.00217 14.99532,1.5589 17.95061,0.33405 2.95527,-1.22483 2.95527,1.1135 -2.1891,3.1178 -5.14437,2.00427 -18.71677,6.79231 -27.58261,5.67882 -8.865864,-1.1135 -19.373534,-3.00644 -25.284094,-7.23772 -5.91056,-4.23126 -8.42802,-6.1242 -6.23892,-6.45824 2.18909,-0.33407 7.9902,5.9015 10.50766,6.56959 2.51746,0.66809 4.5971,0.66809 3.06473,-0.8908 -1.53236,-1.55888 -11.49275,-8.46253 -12.47784,-8.1285 -0.9851,0.33405 -3.06474,0.55674 -4.81602,-1.78159 -1.75127,-2.33832 -10.94548,-15.25485 -10.39821,-22.1585 0.54728,-6.90365 2.29856,-5.12208 4.3782,-2.56103 2.07964,2.56103 4.48765,4.78801 4.48765,4.78801 z"
|
||||
style="fill:#fd7aff;fill-opacity:1;stroke:none;stroke-width:0.309114px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 1.9 KiB |
@ -1,35 +0,0 @@
|
||||
<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<path d="m17,129c0,-61.30371 49.69629,-111 111,-111c61.30371,0 111,49.69629 111,111c0,61.30371 -49.69629,111 -111,111c-61.30371,0 -111,-49.69629 -111,-111z" id="deepin-launcher-b"/>
|
||||
<filter filterUnits="objectBoundingBox" y="-6.3%" x="-8.1%" height="116.2%" width="116.2%" id="deepin-launcher-a">
|
||||
<feGaussianBlur stdDeviation="5"/>
|
||||
</filter>
|
||||
<path d="m172.29023,47.20405c-13.1683,-7.14564 -28.25541,-11.20405 -44.29023,-11.20405c-3.85759,0 -7.66034,0.23489 -11.39471,0.69114c-13.8375,19.06416 -21.01047,50.16415 -20.43985,69.1948c0,0 -0.90954,28.19993 18.37748,38.20231c0,0 17.33291,7.61701 29.14502,-17.01295c0,0 8.11834,-13.89983 4.81381,-45.31395c0,0 3.16155,0.55793 3.51901,1.05927c0.35746,0.49728 6.98241,24.18523 2.32747,44.13339c0,0 -4.28556,23.44132 -25.35592,28.80234c-21.06242,5.36102 -37.47784,-7.60893 -48.62269,-19.82688c-8.29983,-9.09853 -20.62176,-33.53254 -26.69028,-62.84231c-11.72709,15.56323 -18.67934,34.92741 -18.67934,55.91495c0,14.49236 3.31502,28.21045 9.22816,40.43737c20.53097,6.06549 72.70224,17.88328 105.89216,-6.44123c21.96964,-16.10443 19.13893,-41.89451 19.13893,-41.89451c-0.36372,-19.61754 -12.30727,-39.10374 -12.30727,-39.10374c46.44186,42.01354 18.99265,88.68931 18.99265,88.68931c-12.77926,26.10154 -39.04908,42.79526 -62.02961,50.25104c4.59324,0.69782 9.29685,1.05965 14.08498,1.05965c51.36266,0 93,-41.63639 93,-92.99789c0,-21.72407 -7.44877,-41.70884 -19.93152,-57.53933c-4.54487,0.31322 -9.825,0.49664 -15.30337,0.31684c0,0 -24.70889,1.15387 -38.56418,8.0646c0,0 -10.33212,4.60716 -20.65999,12.41858c0,0 -2.19192,1.09575 -2.08593,5.12183c0.09327,4.01362 -2.10288,14.71385 -9.42058,20.98539c0,0 -5.22329,2.68544 -2.61165,6.52889c0,0 3.52742,5.12183 8.49633,-0.25734c0,0 12.81233,-13.18228 13.59668,-34.42501c0,0 4.05314,-3.4616 10.45506,-4.48264c0,0 1.17863,31.86824 -14.63539,47.86878c0,0 -15.04241,16.38239 -19.87565,-7.93593c0,0 -5.88469,-23.16861 24.45027,-50.68289c0,0 20.448,-20.42091 32.46751,-29.98388c1.66104,0.69233 3.29908,1.42749 4.91265,2.20406l-0.00001,-0.00001zm-44.29023,183.79595c-56.33322,0 -102,-45.66583 -102,-101.99789c0,-56.33281 45.66752,-102.00211 102,-102.00211c56.33248,0 102,45.6693 102,102.00211c0,56.33206 -45.66678,101.99789 -102,101.99789z" id="deepin-launcher-f"/>
|
||||
<filter filterUnits="objectBoundingBox" y="-.5%" x="-.5%" height="102%" width="101%" id="deepin-launcher-e"/>
|
||||
<filter filterUnits="objectBoundingBox" y="-.5%" x="-.5%" height="102%" width="101%" id="deepin-launcher-g"/>
|
||||
<linearGradient y2="97.178%" y1="4.64%" x2="50%" x1="50%" id="deepin-launcher-c">
|
||||
<stop stop-color="#00ABFF" offset="0%"/>
|
||||
<stop stop-color="#0163FA" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient y2="100%" y1="0%" x2="50%" x1="50%" id="deepin-launcher-d">
|
||||
<stop stop-color="#32BBFF" offset="0%"/>
|
||||
<stop stop-color="#004FC5" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<title>background</title>
|
||||
<rect fill="none" id="canvas_background" height="514" width="514" y="-1" x="-1"/>
|
||||
</g>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<g stroke="null" id="svg_1" fill-rule="evenodd" fill="none">
|
||||
<use x="0" y="0" transform="matrix(2.15315318107605,0,0,2.15315318107605,-19.603604078292847,-20.756757259368896) " stroke="null" id="svg_2" xlink:href="#deepin-launcher-b" filter="url(#deepin-launcher-a)" fill="#000"/>
|
||||
<use x="0" y="0" transform="matrix(2.15315318107605,0,0,2.15315318107605,-19.603604078292847,-20.756757259368896) " stroke="url(#deepin-launcher-d)" id="svg_3" xlink:href="#deepin-launcher-b" stroke-width="2" fill="url(#deepin-launcher-c)"/>
|
||||
<g stroke="null" id="svg_4" fill-rule="nonzero">
|
||||
<use x="0" y="0" transform="matrix(2.15315318107605,0,0,2.15315318107605,-19.603604078292847,-20.756757259368896) " stroke="null" id="svg_5" xlink:href="#deepin-launcher-f" filter="url(#deepin-launcher-e)" fill="#000"/>
|
||||
<use x="0" y="0" transform="matrix(2.15315318107605,0,0,2.15315318107605,-19.603604078292847,-20.756757259368896) " stroke="null" id="svg_6" xlink:href="#deepin-launcher-f" fill="#F0F9FF"/>
|
||||
<use x="0" y="0" transform="matrix(2.15315318107605,0,0,2.15315318107605,-19.603604078292847,-20.756757259368896) " stroke="null" id="svg_7" xlink:href="#deepin-launcher-f" filter="url(#deepin-launcher-g)" fill="#000"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 954 B |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 1.1 KiB |
@ -1 +0,0 @@
|
||||
<svg width="305" height="304" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="hidden"><defs><clipPath id="clip0"><path d="M688 378 993 378 993 682 688 682Z" fill-rule="evenodd" clip-rule="evenodd"/></clipPath><clipPath id="clip1"><path d="M751.382 385.273 984.326 440.078 929.522 673.022 696.578 618.218Z" fill-rule="evenodd" clip-rule="evenodd"/></clipPath><clipPath id="clip2"><path d="M751.382 385.273 984.326 440.078 929.522 673.022 696.578 618.218Z" fill-rule="evenodd" clip-rule="evenodd"/></clipPath><clipPath id="clip3"><path d="M751.382 385.273 984.326 440.078 929.522 673.022 696.578 618.218Z" fill-rule="evenodd" clip-rule="evenodd"/></clipPath></defs><g clip-path="url(#clip0)" transform="translate(-688 -378)"><path d="M689 529.5C689 445.829 756.829 378 840.5 378 924.171 378 992 445.829 992 529.5 992 613.171 924.171 681 840.5 681 756.829 681 689 613.171 689 529.5Z" fill="#A20000" fill-rule="evenodd"/><g clip-path="url(#clip1)"><g clip-path="url(#clip2)"><g clip-path="url(#clip3)"><path d="M812.478 604.512 826.339 545.597C790.456 531.483 772.809 490.952 786.924 455.069 792.525 440.83 802.648 428.825 815.737 420.901L910.837 443.275C931.459 475.856 921.763 518.985 889.182 539.607 876.253 547.79 860.994 551.499 845.751 550.164L831.89 609.079 851.302 613.646C856.662 614.908 859.986 620.276 858.724 625.636 857.463 630.996 852.095 634.32 846.735 633.058L788.499 619.357C783.138 618.096 779.815 612.728 781.076 607.368 782.338 602.007 787.705 598.684 793.066 599.945L812.478 604.512ZM803.34 469.2 900.4 492.035C901.355 477.612 900.407 467.146 897.544 460.634L819.896 442.366C814.431 446.918 808.915 455.864 803.34 469.2Z" fill="#FFFFFF"/></g></g></g></g></svg>
|
Before Width: | Height: | Size: 1.7 KiB |
@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>logo icon</title>
|
||||
<defs>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-1">
|
||||
<stop stop-color="#00F1FF" offset="0%"></stop>
|
||||
<stop stop-color="#008AFF" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="1" transform="translate(-460.000000, -159.000000)">
|
||||
<g id="tittlebar" transform="translate(450.000000, 150.000000)">
|
||||
<g id="logo-icon" transform="translate(10.000000, 9.000000)">
|
||||
<g>
|
||||
<rect id="矩形" fill="url(#linearGradient-1)" x="0" y="0" width="32" height="32" rx="8"></rect>
|
||||
<path d="M23,25 L23,24.0002278 C21.6666667,24.0002278 21,24.0002278 21,24.0002278 L21,20 L22,20 L22,19 L21,19 L21,17 L20,17.5 L20,19 L19,19 L19,20 L20,20 L20,24.0002278 C20,24.0002278 20,24.0002278 20,24.0002278 C20,24.5523868 20.4476132,25 20.9997722,25 C20.9998481,25 20.9999241,25 21,25 L23,25 Z M24.0210414,23.9789586 L24.0210414,22.2215556 L24.0210414,22.2215556 L24.6565969,21.6226667 L27.2207674,25 L29.0052118,25 L25.6099302,20.7304444 L28.4678057,18.0074755 L26.6711391,18.0074755 L24.0210414,20.6204444 L24,15.5 L23,15 L23,25 C23.5639056,25 24.0210414,24.5428642 24.0210414,23.9789586 Z" id="tk" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
<path d="M10.275,24 C13.175,24 15.35,23.2 16.85,21.6 C18.275,20.075 19,17.825 19,15 C19,12.15 18.275,10.05 16.85,8.55 C15.35,6.95 13.175,6 10.275,6 L4,6 L4,24 L10.275,24 Z M9.725,21 L7,21 L7,9 L9.725,9 C11.95,9 13.575,9.15 14.6,10.175 C15.6,11.175 16,12.75 16,15 C16,17.2 15.6,18.9 14.6,19.95 C13.575,20.975 11.95,21 9.725,21 Z" id="D" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 83 KiB |
@ -1,13 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
|
||||
<defs>
|
||||
<linearGradient id="uos-托盘1-a" x1="15.968%" x2="100%" y1="14.224%" y2="60.554%">
|
||||
<stop offset="0%" stop-color="#0071FF"/>
|
||||
<stop offset="48.72%" stop-color="#00E8FC"/>
|
||||
<stop offset="100%" stop-color="#00A2FF"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" transform="translate(1 1)">
|
||||
<circle cx="9" cy="9" r="9" fill="url(#uos-托盘1-a)"/>
|
||||
<path fill="#FFF" d="M13,4.5 C13.5128358,4.5 13.9355072,4.88604019 13.9932723,5.38337887 L14,5.5 L14,9.5 C14,12.5 12,14.5 9,14.5 C6,14.5 4,12.5 4.0043492,9.70016408 L4,9.5 L4,5.5 C4,4.94771525 4.44771525,4.5 5,4.5 C5.51283584,4.5 5.93550716,4.88604019 5.99327227,5.38337887 L6,5.5 L6,9.5 C6,11.5 7.5,12.5 9,12.5 C10.5,12.5 12,11.5 12,9.5 L12,5.5 C12,4.94771525 12.4477153,4.5 13,4.5 Z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 873 B |
Before Width: | Height: | Size: 1.1 KiB |
@ -1,13 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
|
||||
<defs>
|
||||
<linearGradient id="uos-托盘1-a" x1="15.968%" x2="100%" y1="14.224%" y2="60.554%">
|
||||
<stop offset="0%" stop-color="#0071FF"/>
|
||||
<stop offset="48.72%" stop-color="#00E8FC"/>
|
||||
<stop offset="100%" stop-color="#00A2FF"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" transform="translate(1 1)">
|
||||
<circle cx="9" cy="9" r="9" fill="url(#uos-托盘1-a)"/>
|
||||
<path fill="#FFF" d="M13,4.5 C13.5128358,4.5 13.9355072,4.88604019 13.9932723,5.38337887 L14,5.5 L14,9.5 C14,12.5 12,14.5 9,14.5 C6,14.5 4,12.5 4.0043492,9.70016408 L4,9.5 L4,5.5 C4,4.94771525 4.44771525,4.5 5,4.5 C5.51283584,4.5 5.93550716,4.88604019 5.99327227,5.38337887 L6,5.5 L6,9.5 C6,11.5 7.5,12.5 9,12.5 C10.5,12.5 12,11.5 12,9.5 L12,5.5 C12,4.94771525 12.4477153,4.5 13,4.5 Z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 873 B |
52
cmake/FindGdk3.cmake
Normal file
@ -0,0 +1,52 @@
|
||||
# - Try to find GDK 3
|
||||
# Once done, this will define
|
||||
#
|
||||
# GDK3_FOUND - system has GDK 3
|
||||
# GDK3_INCLUDE_DIRS - the GDK 3 include directories
|
||||
# GDK3_LIBRARIES - link these to use GDK 3
|
||||
#
|
||||
# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
|
||||
# Copyright (C) 2013 Igalia S.L.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
|
||||
# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# Source from:
|
||||
# https://sources.debian.org/src/qtwebkit-opensource-src/5.212.0%7Ealpha2-21/Source/cmake/FindGDK3.cmake/
|
||||
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(GDK3 gdk-3.0)
|
||||
|
||||
set(VERSION_OK TRUE)
|
||||
if (GDK3_VERSION)
|
||||
if (GDK3_FIND_VERSION_EXACT)
|
||||
if (NOT("${GDK3_FIND_VERSION}" VERSION_EQUAL "${GDK3_VERSION}"))
|
||||
set(VERSION_OK FALSE)
|
||||
endif ()
|
||||
else ()
|
||||
if ("${GDK3_VERSION}" VERSION_LESS "${GDK3_FIND_VERSION}")
|
||||
set(VERSION_OK FALSE)
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GDK3 DEFAULT_MSG GDK3_INCLUDE_DIRS GDK3_LIBRARIES VERSION_OK)
|
125
cmake/FindGlib.cmake
Normal file
@ -0,0 +1,125 @@
|
||||
# - Try to find Glib and its components (gio, gobject etc)
|
||||
# Once done, this will define
|
||||
#
|
||||
# GLIB_FOUND - system has Glib
|
||||
# GLIB_INCLUDE_DIRS - the Glib include directories
|
||||
# GLIB_LIBRARIES - link these to use Glib
|
||||
#
|
||||
# Optionally, the COMPONENTS keyword can be passed to find_package()
|
||||
# and Glib components can be looked for. Currently, the following
|
||||
# components can be used, and they define the following variables if
|
||||
# found:
|
||||
#
|
||||
# gio: GLIB_GIO_LIBRARIES
|
||||
# gobject: GLIB_GOBJECT_LIBRARIES
|
||||
# gmodule: GLIB_GMODULE_LIBRARIES
|
||||
# gthread: GLIB_GTHREAD_LIBRARIES
|
||||
#
|
||||
# Note that the respective _INCLUDE_DIR variables are not set, since
|
||||
# all headers are in the same directory as GLIB_INCLUDE_DIRS.
|
||||
#
|
||||
# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
|
||||
# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# Source from:
|
||||
# https://sources.debian.org/src/qtwebkit-opensource-src/5.212.0%7Ealpha2-21/Source/cmake/FindGLIB.cmake/
|
||||
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(PC_GLIB QUIET glib-2.0)
|
||||
|
||||
find_library(GLIB_LIBRARIES
|
||||
NAMES glib-2.0
|
||||
HINTS ${PC_GLIB_LIBDIR}
|
||||
${PC_GLIB_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
# Files in glib's main include path may include glibconfig.h, which,
|
||||
# for some odd reason, is normally in $LIBDIR/glib-2.0/include.
|
||||
get_filename_component(_GLIB_LIBRARY_DIR ${GLIB_LIBRARIES} PATH)
|
||||
find_path(GLIBCONFIG_INCLUDE_DIR
|
||||
NAMES glibconfig.h
|
||||
HINTS ${PC_LIBDIR} ${PC_LIBRARY_DIRS} ${_GLIB_LIBRARY_DIR}
|
||||
${PC_GLIB_INCLUDEDIR} ${PC_GLIB_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES glib-2.0/include
|
||||
)
|
||||
|
||||
find_path(GLIB_INCLUDE_DIR
|
||||
NAMES glib.h
|
||||
HINTS ${PC_GLIB_INCLUDEDIR}
|
||||
${PC_GLIB_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES glib-2.0
|
||||
)
|
||||
|
||||
set(GLIB_INCLUDE_DIRS ${GLIB_INCLUDE_DIR} ${GLIBCONFIG_INCLUDE_DIR})
|
||||
|
||||
# Version detection
|
||||
if (EXISTS "${GLIBCONFIG_INCLUDE_DIR}/glibconfig.h")
|
||||
file(READ "${GLIBCONFIG_INCLUDE_DIR}/glibconfig.h" GLIBCONFIG_H_CONTENTS)
|
||||
string(REGEX MATCH "#define GLIB_MAJOR_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
|
||||
set(GLIB_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
||||
string(REGEX MATCH "#define GLIB_MINOR_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
|
||||
set(GLIB_VERSION_MINOR "${CMAKE_MATCH_1}")
|
||||
string(REGEX MATCH "#define GLIB_MICRO_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
|
||||
set(GLIB_VERSION_MICRO "${CMAKE_MATCH_1}")
|
||||
set(GLIB_VERSION "${GLIB_VERSION_MAJOR}.${GLIB_VERSION_MINOR}.${GLIB_VERSION_MICRO}")
|
||||
endif ()
|
||||
|
||||
# Additional Glib components. We only look for libraries, as not all of them
|
||||
# have corresponding headers and all headers are installed alongside the main
|
||||
# glib ones.
|
||||
foreach (_component ${GLIB_FIND_COMPONENTS})
|
||||
if (${_component} STREQUAL "gio")
|
||||
find_library(GLIB_GIO_LIBRARIES NAMES gio-2.0 HINTS ${_GLIB_LIBRARY_DIR})
|
||||
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GIO_LIBRARIES)
|
||||
elseif (${_component} STREQUAL "gobject")
|
||||
find_library(GLIB_GOBJECT_LIBRARIES NAMES gobject-2.0 HINTS ${_GLIB_LIBRARY_DIR})
|
||||
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GOBJECT_LIBRARIES)
|
||||
elseif (${_component} STREQUAL "gmodule")
|
||||
find_library(GLIB_GMODULE_LIBRARIES NAMES gmodule-2.0 HINTS ${_GLIB_LIBRARY_DIR})
|
||||
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GMODULE_LIBRARIES)
|
||||
elseif (${_component} STREQUAL "gthread")
|
||||
find_library(GLIB_GTHREAD_LIBRARIES NAMES gthread-2.0 HINTS ${_GLIB_LIBRARY_DIR})
|
||||
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GTHREAD_LIBRARIES)
|
||||
elseif (${_component} STREQUAL "gio-unix")
|
||||
# gio-unix is compiled as part of the gio library, but the include paths
|
||||
# are separate from the shared glib ones. Since this is currently only used
|
||||
# by WebKitGTK+ we don't go to extraordinary measures beyond pkg-config.
|
||||
pkg_check_modules(GIO_UNIX QUIET gio-unix-2.0)
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLIB REQUIRED_VARS GLIB_INCLUDE_DIRS GLIB_LIBRARIES ${ADDITIONAL_REQUIRED_VARS}
|
||||
VERSION_VAR GLIB_VERSION)
|
||||
|
||||
mark_as_advanced(
|
||||
GLIBCONFIG_INCLUDE_DIR
|
||||
GLIB_GIO_LIBRARIES
|
||||
GLIB_GIO_UNIX_LIBRARIES
|
||||
GLIB_GMODULE_LIBRARIES
|
||||
GLIB_GOBJECT_LIBRARIES
|
||||
GLIB_GTHREAD_LIBRARIES
|
||||
GLIB_INCLUDE_DIR
|
||||
GLIB_INCLUDE_DIRS
|
||||
GLIB_LIBRARIES
|
||||
)
|
58
cmake/FindLibNotify.cmake
Normal file
@ -0,0 +1,58 @@
|
||||
# - Try to find LibNotify
|
||||
# This module defines the following variables:
|
||||
#
|
||||
# LIBNOTIFY_FOUND - LibNotify was found
|
||||
# LIBNOTIFY_INCLUDE_DIRS - the LibNotify include directories
|
||||
# LIBNOTIFY_LIBRARIES - link these to use LibNotify
|
||||
#
|
||||
# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
|
||||
# Copyright (C) 2014 Collabora Ltd.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
|
||||
# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# Source from:
|
||||
# https://sources.debian.org/src/qtwebkit-opensource-src/5.212.0~alpha2-21/Source/cmake/FindLibNotify.cmake/
|
||||
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(LIBNOTIFY QUIET libnotify)
|
||||
|
||||
find_path(LIBNOTIFY_INCLUDE_DIRS
|
||||
NAMES notify.h
|
||||
HINTS ${LIBNOTIFY_INCLUDEDIR}
|
||||
${LIBNOTIFY_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES libnotify
|
||||
)
|
||||
|
||||
find_library(LIBNOTIFY_LIBRARIES
|
||||
NAMES notify
|
||||
HINTS ${LIBNOTIFY_LIBDIR}
|
||||
${LIBNOTIFY_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibNotify REQUIRED_VARS LIBNOTIFY_INCLUDE_DIRS LIBNOTIFY_LIBRARIES
|
||||
VERSION_VAR LIBNOTIFY_VERSION)
|
||||
|
||||
mark_as_advanced(
|
||||
LIBNOTIFY_INCLUDE_DIRS
|
||||
LIBNOTIFY_LIBRARIES
|
||||
)
|
51
cmake/FindXCB.cmake
Normal file
@ -0,0 +1,51 @@
|
||||
# - FindXCB
|
||||
#
|
||||
# Copyright 2015 Valve Coporation
|
||||
|
||||
find_package(PkgConfig)
|
||||
|
||||
if(NOT XCB_FIND_COMPONENTS)
|
||||
set(XCB_FIND_COMPONENTS xcb)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
set(XCB_FOUND true)
|
||||
set(XCB_INCLUDE_DIRS "")
|
||||
set(XCB_LIBRARIES "")
|
||||
foreach(comp ${XCB_FIND_COMPONENTS})
|
||||
# component name
|
||||
string(TOUPPER ${comp} compname)
|
||||
string(REPLACE "-" "_" compname ${compname})
|
||||
# header name
|
||||
string(REPLACE "xcb-" "" headername xcb/${comp}.h)
|
||||
# library name
|
||||
set(libname ${comp})
|
||||
|
||||
pkg_check_modules(PC_${comp} QUIET ${comp})
|
||||
|
||||
find_path(${compname}_INCLUDE_DIR NAMES ${headername}
|
||||
HINTS
|
||||
${PC_${comp}_INCLUDEDIR}
|
||||
${PC_${comp}_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
find_library(${compname}_LIBRARY NAMES ${libname}
|
||||
HINTS
|
||||
${PC_${comp}_LIBDIR}
|
||||
${PC_${comp}_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
find_package_handle_standard_args(${comp}
|
||||
FOUND_VAR ${comp}_FOUND
|
||||
REQUIRED_VARS ${compname}_INCLUDE_DIR ${compname}_LIBRARY)
|
||||
mark_as_advanced(${compname}_INCLUDE_DIR ${compname}_LIBRARY)
|
||||
|
||||
list(APPEND XCB_INCLUDE_DIRS ${${compname}_INCLUDE_DIR})
|
||||
list(APPEND XCB_LIBRARIES ${${compname}_LIBRARY})
|
||||
|
||||
if(NOT ${comp}_FOUND)
|
||||
set(XCB_FOUND false)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
list(REMOVE_DUPLICATES XCB_INCLUDE_DIRS)
|
288
gui/qt/qxcbatom.cpp
Normal file
@ -0,0 +1,288 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2018 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
#include "qxcbatom.h"
|
||||
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace SpkUi
|
||||
{
|
||||
namespace Priv
|
||||
{
|
||||
static const char *xcb_atomnames = {
|
||||
// window-manager <-> client protocols
|
||||
"WM_PROTOCOLS\0"
|
||||
"WM_DELETE_WINDOW\0"
|
||||
"WM_TAKE_FOCUS\0"
|
||||
"_NET_WM_PING\0"
|
||||
"_NET_WM_CONTEXT_HELP\0"
|
||||
"_NET_WM_SYNC_REQUEST\0"
|
||||
"_NET_WM_SYNC_REQUEST_COUNTER\0"
|
||||
"MANAGER\0"
|
||||
"_NET_SYSTEM_TRAY_OPCODE\0"
|
||||
|
||||
// ICCCM window state
|
||||
"WM_STATE\0"
|
||||
"WM_CHANGE_STATE\0"
|
||||
"WM_CLASS\0"
|
||||
"WM_NAME\0"
|
||||
|
||||
// Session management
|
||||
"WM_CLIENT_LEADER\0"
|
||||
"WM_WINDOW_ROLE\0"
|
||||
"SM_CLIENT_ID\0"
|
||||
"WM_CLIENT_MACHINE\0"
|
||||
|
||||
// Clipboard
|
||||
"CLIPBOARD\0"
|
||||
"INCR\0"
|
||||
"TARGETS\0"
|
||||
"MULTIPLE\0"
|
||||
"TIMESTAMP\0"
|
||||
"SAVE_TARGETS\0"
|
||||
"CLIP_TEMPORARY\0"
|
||||
"_QT_SELECTION\0"
|
||||
"_QT_CLIPBOARD_SENTINEL\0"
|
||||
"_QT_SELECTION_SENTINEL\0"
|
||||
"CLIPBOARD_MANAGER\0"
|
||||
|
||||
"RESOURCE_MANAGER\0"
|
||||
|
||||
"_XSETROOT_ID\0"
|
||||
|
||||
"_QT_SCROLL_DONE\0"
|
||||
"_QT_INPUT_ENCODING\0"
|
||||
|
||||
"_QT_CLOSE_CONNECTION\0"
|
||||
|
||||
"_MOTIF_WM_HINTS\0"
|
||||
|
||||
"DTWM_IS_RUNNING\0"
|
||||
"ENLIGHTENMENT_DESKTOP\0"
|
||||
"_DT_SAVE_MODE\0"
|
||||
"_SGI_DESKS_MANAGER\0"
|
||||
|
||||
// EWMH (aka NETWM)
|
||||
"_NET_SUPPORTED\0"
|
||||
"_NET_VIRTUAL_ROOTS\0"
|
||||
"_NET_WORKAREA\0"
|
||||
|
||||
"_NET_MOVERESIZE_WINDOW\0"
|
||||
"_NET_WM_MOVERESIZE\0"
|
||||
|
||||
"_NET_WM_NAME\0"
|
||||
"_NET_WM_ICON_NAME\0"
|
||||
"_NET_WM_ICON\0"
|
||||
|
||||
"_NET_WM_PID\0"
|
||||
|
||||
"_NET_WM_WINDOW_OPACITY\0"
|
||||
|
||||
"_NET_WM_STATE\0"
|
||||
"_NET_WM_STATE_ABOVE\0"
|
||||
"_NET_WM_STATE_BELOW\0"
|
||||
"_NET_WM_STATE_FULLSCREEN\0"
|
||||
"_NET_WM_STATE_MAXIMIZED_HORZ\0"
|
||||
"_NET_WM_STATE_MAXIMIZED_VERT\0"
|
||||
"_NET_WM_STATE_MODAL\0"
|
||||
"_NET_WM_STATE_STAYS_ON_TOP\0"
|
||||
"_NET_WM_STATE_DEMANDS_ATTENTION\0"
|
||||
"_NET_WM_STATE_HIDDEN\0"
|
||||
|
||||
"_NET_WM_USER_TIME\0"
|
||||
"_NET_WM_USER_TIME_WINDOW\0"
|
||||
"_NET_WM_FULL_PLACEMENT\0"
|
||||
|
||||
"_NET_WM_WINDOW_TYPE\0"
|
||||
"_NET_WM_WINDOW_TYPE_DESKTOP\0"
|
||||
"_NET_WM_WINDOW_TYPE_DOCK\0"
|
||||
"_NET_WM_WINDOW_TYPE_TOOLBAR\0"
|
||||
"_NET_WM_WINDOW_TYPE_MENU\0"
|
||||
"_NET_WM_WINDOW_TYPE_UTILITY\0"
|
||||
"_NET_WM_WINDOW_TYPE_SPLASH\0"
|
||||
"_NET_WM_WINDOW_TYPE_DIALOG\0"
|
||||
"_NET_WM_WINDOW_TYPE_DROPDOWN_MENU\0"
|
||||
"_NET_WM_WINDOW_TYPE_POPUP_MENU\0"
|
||||
"_NET_WM_WINDOW_TYPE_TOOLTIP\0"
|
||||
"_NET_WM_WINDOW_TYPE_NOTIFICATION\0"
|
||||
"_NET_WM_WINDOW_TYPE_COMBO\0"
|
||||
"_NET_WM_WINDOW_TYPE_DND\0"
|
||||
"_NET_WM_WINDOW_TYPE_NORMAL\0"
|
||||
"_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0"
|
||||
|
||||
"_KDE_NET_WM_FRAME_STRUT\0"
|
||||
"_NET_FRAME_EXTENTS\0"
|
||||
|
||||
"_NET_STARTUP_INFO\0"
|
||||
"_NET_STARTUP_INFO_BEGIN\0"
|
||||
|
||||
"_NET_SUPPORTING_WM_CHECK\0"
|
||||
|
||||
"_NET_WM_CM_S0\0"
|
||||
|
||||
"_NET_SYSTEM_TRAY_VISUAL\0"
|
||||
|
||||
"_NET_ACTIVE_WINDOW\0"
|
||||
|
||||
// Property formats
|
||||
"TEXT\0"
|
||||
"UTF8_STRING\0"
|
||||
"CARDINAL\0"
|
||||
|
||||
// xdnd
|
||||
"XdndEnter\0"
|
||||
"XdndPosition\0"
|
||||
"XdndStatus\0"
|
||||
"XdndLeave\0"
|
||||
"XdndDrop\0"
|
||||
"XdndFinished\0"
|
||||
"XdndTypeList\0"
|
||||
"XdndActionList\0"
|
||||
|
||||
"XdndSelection\0"
|
||||
|
||||
"XdndAware\0"
|
||||
"XdndProxy\0"
|
||||
|
||||
"XdndActionCopy\0"
|
||||
"XdndActionLink\0"
|
||||
"XdndActionMove\0"
|
||||
"XdndActionAsk\0"
|
||||
"XdndActionPrivate\0"
|
||||
|
||||
// Xkb
|
||||
"_XKB_RULES_NAMES\0"
|
||||
|
||||
// XEMBED
|
||||
"_XEMBED\0"
|
||||
"_XEMBED_INFO\0"
|
||||
|
||||
// XInput2
|
||||
"Button Left\0"
|
||||
"Button Middle\0"
|
||||
"Button Right\0"
|
||||
"Button Wheel Up\0"
|
||||
"Button Wheel Down\0"
|
||||
"Button Horiz Wheel Left\0"
|
||||
"Button Horiz Wheel Right\0"
|
||||
"Abs MT Position X\0"
|
||||
"Abs MT Position Y\0"
|
||||
"Abs MT Touch Major\0"
|
||||
"Abs MT Touch Minor\0"
|
||||
"Abs MT Orientation\0"
|
||||
"Abs MT Pressure\0"
|
||||
"Abs MT Tracking ID\0"
|
||||
"Max Contacts\0"
|
||||
"Rel X\0"
|
||||
"Rel Y\0"
|
||||
// XInput2 tablet
|
||||
"Abs X\0"
|
||||
"Abs Y\0"
|
||||
"Abs Pressure\0"
|
||||
"Abs Tilt X\0"
|
||||
"Abs Tilt Y\0"
|
||||
"Abs Wheel\0"
|
||||
"Abs Distance\0"
|
||||
"Wacom Serial IDs\0"
|
||||
"INTEGER\0"
|
||||
"Rel Horiz Wheel\0"
|
||||
"Rel Vert Wheel\0"
|
||||
"Rel Horiz Scroll\0"
|
||||
"Rel Vert Scroll\0"
|
||||
"_XSETTINGS_SETTINGS\0"
|
||||
"_COMPIZ_DECOR_PENDING\0"
|
||||
"_COMPIZ_DECOR_REQUEST\0"
|
||||
"_COMPIZ_DECOR_DELETE_PIXMAP\0"
|
||||
"_COMPIZ_TOOLKIT_ACTION\0"
|
||||
"_GTK_LOAD_ICONTHEMES\0"
|
||||
"AT_SPI_BUS\0"
|
||||
"EDID\0"
|
||||
"EDID_DATA\0"
|
||||
"XFree86_DDC_EDID1_RAWDATA\0"
|
||||
"_ICC_PROFILE\0"
|
||||
// \0\0 terminates loop.
|
||||
};
|
||||
|
||||
QXcbAtom::QXcbAtom()
|
||||
{
|
||||
}
|
||||
|
||||
void QXcbAtom::initialize(xcb_connection_t *connection)
|
||||
{
|
||||
initializeAllAtoms(connection);
|
||||
}
|
||||
|
||||
void QXcbAtom::initializeAllAtoms(xcb_connection_t *connection) {
|
||||
const char *names[QXcbAtom::NAtoms];
|
||||
const char *ptr = xcb_atomnames;
|
||||
|
||||
int i = 0;
|
||||
while (*ptr) {
|
||||
names[i++] = ptr;
|
||||
while (*ptr)
|
||||
++ptr;
|
||||
++ptr;
|
||||
}
|
||||
|
||||
Q_ASSERT(i == QXcbAtom::NAtoms);
|
||||
|
||||
xcb_intern_atom_cookie_t cookies[QXcbAtom::NAtoms];
|
||||
|
||||
Q_ASSERT(i == QXcbAtom::NAtoms);
|
||||
for (i = 0; i < QXcbAtom::NAtoms; ++i)
|
||||
cookies[i] = xcb_intern_atom(connection, false, strlen(names[i]), names[i]);
|
||||
|
||||
for (i = 0; i < QXcbAtom::NAtoms; ++i) {
|
||||
xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(connection, cookies[i], nullptr);
|
||||
m_allAtoms[i] = reply->atom;
|
||||
free(reply);
|
||||
}
|
||||
}
|
||||
|
||||
QXcbAtom::Atom QXcbAtom::qatom(xcb_atom_t xatom) const
|
||||
{
|
||||
return static_cast<QXcbAtom::Atom>(std::find(m_allAtoms, m_allAtoms + QXcbAtom::NAtoms, xatom) - m_allAtoms);
|
||||
}
|
||||
|
||||
QXcbAtom a;
|
||||
}
|
||||
}
|
64
gui/qtxcb.cpp
Normal file
@ -0,0 +1,64 @@
|
||||
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file contains code of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qtxcb.h"
|
||||
|
||||
uint SpkUi::Priv::qtEdgesToXcbMoveResizeDirection(Qt::Edges edges)
|
||||
{
|
||||
if (edges == (Qt::TopEdge | Qt::LeftEdge))
|
||||
return 0;
|
||||
if (edges == Qt::TopEdge)
|
||||
return 1;
|
||||
if (edges == (Qt::TopEdge | Qt::RightEdge))
|
||||
return 2;
|
||||
if (edges == Qt::RightEdge)
|
||||
return 3;
|
||||
if (edges == (Qt::RightEdge | Qt::BottomEdge))
|
||||
return 4;
|
||||
if (edges == Qt::BottomEdge)
|
||||
return 5;
|
||||
if (edges == (Qt::BottomEdge | Qt::LeftEdge))
|
||||
return 6;
|
||||
if (edges == Qt::LeftEdge)
|
||||
return 7;
|
||||
|
||||
qWarning() << "Cannot convert " << edges << "to _NET_WM_MOVERESIZE direction.";
|
||||
return 0;
|
||||
}
|
61
gui/spkcategoryselector.cpp
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
#include "spkmainwindow.h"
|
||||
|
||||
namespace SpkUi
|
||||
{
|
||||
SpkCategorySelector::SpkCategorySelector(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
mBtnLayout = new QVBoxLayout(this);
|
||||
mGroup = new QButtonGroup(this);
|
||||
}
|
||||
|
||||
void SpkCategorySelector::AddButton(QString aBtnText, int aCategoryId, QPixmap *aBtnIcon)
|
||||
{
|
||||
auto btn = new SpkCategoryButton(this);
|
||||
btn->SetText(aBtnText);
|
||||
if(aBtnIcon)
|
||||
btn->SetIcon(*aBtnIcon);
|
||||
mBtnList.append(btn);
|
||||
mGroup->addButton(btn, aCategoryId ? aCategoryId : -1);
|
||||
mBtnLayout->addWidget(btn);
|
||||
}
|
||||
|
||||
void SpkCategorySelector::DeleteAllButtons() // TODO: UNTESTED
|
||||
{
|
||||
foreach (auto i, mBtnList)
|
||||
{
|
||||
mBtnLayout->removeWidget(i);
|
||||
mGroup->removeButton(i);
|
||||
i->deleteLater();
|
||||
}
|
||||
mBtnList.clear();
|
||||
}
|
||||
|
||||
SpkCategoryButton::SpkCategoryButton(QWidget *parent) : QPushButton(parent)
|
||||
{
|
||||
mIcon = new QLabel(this);
|
||||
mIcon->setObjectName("spk_categorybtn_label");
|
||||
mText = new QLabel(this);
|
||||
mText->setObjectName("spk_categorybtn_text");
|
||||
mLayout = new QHBoxLayout;
|
||||
mLayout->setObjectName("spk_categorybtn_lay");
|
||||
mLayout->addSpacing(Spacing);
|
||||
mLayout->addWidget(mIcon);
|
||||
mLayout->addSpacing(Spacing);
|
||||
mLayout->addStretch();
|
||||
mLayout->addWidget(mText);
|
||||
mLayout->addStretch();
|
||||
mLayout->addSpacing(Spacing);
|
||||
setLayout(mLayout);
|
||||
}
|
||||
|
||||
void SpkCategoryButton::SetIcon(QPixmap aImage)
|
||||
{
|
||||
mIcon->setPixmap(aImage);
|
||||
}
|
||||
|
||||
void SpkCategoryButton::SetText(QString aText)
|
||||
{
|
||||
mText->setText(aText);
|
||||
}
|
||||
}
|
92
gui/spkdialog.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
|
||||
#include <QEventLoop>
|
||||
#include "spkdialog.h"
|
||||
|
||||
SpkDialog::SpkDialog(QWidget *parent) :
|
||||
SpkWindow(parent)
|
||||
{
|
||||
mDialogWidget = new QWidget;
|
||||
mMainVLay = new QVBoxLayout(mDialogWidget);
|
||||
mWidgetsVLay = new QVBoxLayout();
|
||||
mBtnLay = new QHBoxLayout();
|
||||
mBtnGroup = new QButtonGroup(this);
|
||||
|
||||
mMainVLay->addLayout(mWidgetsVLay);
|
||||
mMainVLay->addLayout(mBtnLay);
|
||||
mMainVLay->setSizeConstraint(QLayout::SetMinimumSize);
|
||||
|
||||
mBtnLay->setAlignment(Qt::AlignCenter);
|
||||
|
||||
SetCentralWidget(mDialogWidget);
|
||||
|
||||
connect(mBtnGroup, QOverload<int>::of(&QButtonGroup::idClicked),
|
||||
this, &SpkDialog::ButtonPressed);
|
||||
connect(this, &SpkWindow::Closed, this, &SpkDialog::ForceClose);
|
||||
}
|
||||
|
||||
SpkDialog::~SpkDialog()
|
||||
{
|
||||
auto itp = mParentsList.begin();
|
||||
for(auto itw = mWidgetsList.begin(); itw != mWidgetsList.end(); itw++)
|
||||
{
|
||||
(*itw)->setParent(*(itp++)); // We shall never take the ownership of these widgets
|
||||
}
|
||||
delete mDialogWidget;
|
||||
}
|
||||
|
||||
void SpkDialog::AddButton(QString text, SpkUi::SpkButtonStyle style)
|
||||
{
|
||||
auto b = new QPushButton();
|
||||
b->setText(text);
|
||||
b->setMinimumWidth(100);
|
||||
b->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||
switch(style)
|
||||
{
|
||||
|
||||
case SpkUi::SpkButtonStyle::Recommend:
|
||||
b->setObjectName("spk_styling_recommendbtn");
|
||||
break;
|
||||
case SpkUi::SpkButtonStyle::Warn:
|
||||
b->setObjectName("spk_styling_warnbtn");
|
||||
break;
|
||||
case SpkUi::SpkButtonStyle::Normal:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
mBtnLay->addWidget(b);
|
||||
mBtnGroup->addButton(b);
|
||||
}
|
||||
|
||||
void SpkDialog::AddWidget(QWidget *w)
|
||||
{
|
||||
mWidgetsVLay->addWidget(w);
|
||||
mWidgetsList << w;
|
||||
mParentsList << w->parentWidget();
|
||||
}
|
||||
|
||||
void SpkDialog::AddSpacing(int a)
|
||||
{
|
||||
mWidgetsVLay->addSpacing(a);
|
||||
}
|
||||
|
||||
int SpkDialog::Exec()
|
||||
{
|
||||
QEventLoop loop;
|
||||
connect(this, &SpkDialog::ExitEventLoop, &loop, &QEventLoop::exit);
|
||||
connect(this, &SpkDialog::CloseWindow, this, &QMainWindow::close);
|
||||
show();
|
||||
return loop.exec();
|
||||
}
|
||||
|
||||
void SpkDialog::ButtonPressed(int aBtnId)
|
||||
{
|
||||
disconnect(this, &SpkWindow::Closed, this, &SpkDialog::ForceClose);
|
||||
emit ExitEventLoop(-aBtnId - 2);
|
||||
emit CloseWindow();
|
||||
}
|
||||
|
||||
void SpkDialog::ForceClose()
|
||||
{
|
||||
disconnect(this, &SpkDialog::CloseWindow, this, &QMainWindow::close);
|
||||
emit ExitEventLoop(-1);
|
||||
}
|
121
gui/spkmainwindow.cpp
Normal file
@ -0,0 +1,121 @@
|
||||
|
||||
#include <QGuiApplication>
|
||||
#include <QScreen>
|
||||
#include <QJsonArray>
|
||||
#include "spkmainwindow.h"
|
||||
#include "spklogging.h"
|
||||
#include "spkuimsg.h"
|
||||
|
||||
SpkMainWindow::SpkMainWindow(QWidget *parent) : SpkWindow(parent)
|
||||
{
|
||||
ui = new SpkUi::SpkMainWidget(parent);
|
||||
|
||||
SetUseTitleBar(false);
|
||||
SetCentralWidget(ui);
|
||||
SetTitleBar(ui->TitleBar, false);
|
||||
|
||||
auto size = QGuiApplication::primaryScreen()->size() * 0.25;
|
||||
resize(QGuiApplication::primaryScreen()->size() * 0.5);
|
||||
move(size.width(), size.height());
|
||||
}
|
||||
|
||||
void SpkMainWindow::PopulateCategories(QJsonObject aCategoryData)
|
||||
{
|
||||
auto w = ui->CategoryWidget;
|
||||
if(!aCategoryData.contains("code"))
|
||||
{
|
||||
SpkUiMessage::SendStoreNotification(tr("Failed to load categories; return code lost."));
|
||||
return;
|
||||
}
|
||||
auto OpRetCode = aCategoryData.value("code");
|
||||
if(!OpRetCode.isDouble())
|
||||
{
|
||||
SpkUiMessage::SendStoreNotification(tr("Failed to load categories; invalid return code."));
|
||||
return;
|
||||
}
|
||||
if(OpRetCode.toDouble() != 0)
|
||||
{
|
||||
SpkUiMessage::SendStoreNotification(tr("Failed to load categories; operation failed: %1.")
|
||||
.arg(OpRetCode.toDouble()));
|
||||
return;
|
||||
}
|
||||
|
||||
if(!aCategoryData.contains("data"))
|
||||
{
|
||||
SpkUiMessage::SendStoreNotification(tr("Failed to load categories; data lost."));
|
||||
return;
|
||||
}
|
||||
auto OpData = aCategoryData.value("data");
|
||||
if(!OpRetCode.isArray())
|
||||
{
|
||||
SpkUiMessage::SendStoreNotification(tr("Failed to load categories; invalid data."));
|
||||
return;
|
||||
}
|
||||
|
||||
auto OpDataArr = OpData.toArray();
|
||||
foreach(auto i, OpDataArr)
|
||||
{
|
||||
if(i.isObject())
|
||||
{
|
||||
auto j = i.toObject();
|
||||
double typeId;
|
||||
QString typeName;
|
||||
if(j.contains("type_id") && j.value("type_id").isDouble())
|
||||
typeId = j.value("type_id").toDouble();
|
||||
else goto WRONG_CATEGORY;
|
||||
if(j.contains("type_name") && j.value("type_name").isString())
|
||||
typeName = j.value("type_name").toString();
|
||||
else goto WRONG_CATEGORY;
|
||||
w->AddButton(tr(typeName.toLocal8Bit()), typeId /* TODO: ICONS */);
|
||||
continue;
|
||||
}
|
||||
WRONG_CATEGORY:
|
||||
sLog("One category ignored because of invalid data");
|
||||
}
|
||||
}
|
||||
|
||||
SpkUi::SpkMainWidget::SpkMainWidget(QWidget *parent) : QFrame(parent)
|
||||
{
|
||||
setObjectName("spk_mainwidget");
|
||||
|
||||
VLayCategoryButtons = new QVBoxLayout;
|
||||
VLayCategoryButtons->setObjectName("spk_mw_category_vlay");
|
||||
VLayCategoryButtons->addWidget(new QPushButton);
|
||||
|
||||
Pager = new QStackedWidget(this);
|
||||
Pager->setObjectName("spk_mw_pager");
|
||||
Pager->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
|
||||
TitleBar = new SpkTitleBar(this);
|
||||
TitleBar->setObjectName("spk_mw_titlebar");
|
||||
TitleBar->SetTitle("Title");
|
||||
|
||||
VLayMain = new QVBoxLayout;
|
||||
VLayMain->setObjectName("spk_mw_main_vlay");
|
||||
VLayMain->setSpacing(0);
|
||||
VLayMain->setContentsMargins(0, 0, 0, 0);
|
||||
VLayMain->addWidget(TitleBar);
|
||||
VLayMain->addWidget(Pager);
|
||||
|
||||
CategoryWidget = new SpkCategorySelector(this);
|
||||
CategoryWidget->setObjectName("spk_mw_category");
|
||||
CategoryWidget->setLayout(VLayCategoryButtons);
|
||||
CategoryWidget->setAutoFillBackground(true);
|
||||
CategoryWidget->setMaximumWidth(300);
|
||||
CategoryWidget->setMinimumWidth(300);
|
||||
CategoryWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
||||
|
||||
HorizontalDivide = new QHBoxLayout;
|
||||
HorizontalDivide->setObjectName("spk_mw_divide_hlay");
|
||||
HorizontalDivide->setSpacing(0);
|
||||
HorizontalDivide->setContentsMargins(0, 0, 0, 0);
|
||||
HorizontalDivide->setAlignment(Qt::AlignLeft);
|
||||
HorizontalDivide->addWidget(CategoryWidget);
|
||||
HorizontalDivide->addLayout(VLayMain);
|
||||
|
||||
// Initialize pages
|
||||
PageQssTest = new SpkUi::SpkPageQssTest(this);
|
||||
Pager->addWidget(PageQssTest);
|
||||
|
||||
setLayout(HorizontalDivide);
|
||||
}
|
125
gui/spkmsgbox.cpp
Normal file
@ -0,0 +1,125 @@
|
||||
|
||||
#include <QScrollArea>
|
||||
#include <QDebug>
|
||||
#include <QGuiApplication>
|
||||
#include <QScreen>
|
||||
#include "spkui_general.h"
|
||||
#include "spkmsgbox.h"
|
||||
|
||||
// Suppress unwanted Clazy check warnings
|
||||
// clazy:excludeall=connect-3arg-lambda,lambda-in-connect
|
||||
|
||||
const QSize SpkMsgBox::IconSize; // I don't know why I need it
|
||||
|
||||
SpkMsgBox::SpkMsgBox()
|
||||
{
|
||||
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
|
||||
}
|
||||
|
||||
int SpkMsgBox::StaticExec(QString msg, QString title, QMessageBox::Icon icon,
|
||||
QMessageBox::StandardButtons buttons, QString extra)
|
||||
{
|
||||
SpkMsgBox *b = new SpkMsgBox;
|
||||
QWidget *wMsgWidget = new QWidget;
|
||||
QHBoxLayout *wMsg = new QHBoxLayout(wMsgWidget);
|
||||
QPushButton *wExpandBtn;
|
||||
QScrollArea *wExtraArea;
|
||||
QLabel *wMsgText = new QLabel,
|
||||
*wExtraInfo,
|
||||
*wIcon;
|
||||
int InitialHeight;
|
||||
bool hasextra = extra.length() != 0;
|
||||
|
||||
if(icon)
|
||||
{
|
||||
wIcon = new QLabel;
|
||||
switch(icon)
|
||||
{
|
||||
case QMessageBox::Critical:
|
||||
wIcon->setPixmap(QIcon::fromTheme("dialog-error").pixmap(IconSize));
|
||||
break;
|
||||
case QMessageBox::Warning:
|
||||
wIcon->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(IconSize));
|
||||
break;
|
||||
case QMessageBox::Information:
|
||||
wIcon->setPixmap(QIcon::fromTheme("dialog-information").pixmap(IconSize));
|
||||
break;
|
||||
case QMessageBox::Question:
|
||||
wIcon->setPixmap(QIcon::fromTheme("dialog-question").pixmap(IconSize));
|
||||
break;
|
||||
case QMessageBox::NoIcon:
|
||||
break;
|
||||
}
|
||||
wMsg->addWidget(wIcon);
|
||||
}
|
||||
wMsgText->setText(msg);
|
||||
wMsgText->setAlignment(Qt::AlignCenter);
|
||||
wMsg->addWidget(wMsgText);
|
||||
wMsg->setSpacing(10);
|
||||
wMsgWidget->setLayout(wMsg);
|
||||
b->AddWidget(wMsgWidget);
|
||||
b->GetTitleBar()->SetTitle(title);
|
||||
b->GetTitleBar()->SetOperationButton(SpkTitleBar::OperationButton::Close);
|
||||
b->SetResizable(false);
|
||||
b->SetCentralMargin(Margin, Margin, Margin, Margin);
|
||||
b->setMaximumSize(SpkUi::PrimaryScreenSize * 0.6);
|
||||
|
||||
if(hasextra)
|
||||
{
|
||||
wExpandBtn = new QPushButton;
|
||||
wExtraInfo = new QLabel;
|
||||
wExtraArea = new QScrollArea;
|
||||
wExtraInfo->setText(extra);
|
||||
wExtraArea->setWidget(wExtraInfo);
|
||||
wExtraArea->setVisible(false);
|
||||
wExtraArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
wExpandBtn->setText(tr("Details"));
|
||||
wExpandBtn->setMaximumWidth(100);
|
||||
wExpandBtn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||
wExpandBtn->setCheckable(true);
|
||||
wExpandBtn->setObjectName("spk_styling_msgboxexpandbtn");
|
||||
connect(wExpandBtn, &QPushButton::clicked,
|
||||
[&](){ // FIXME: hint doesn't change when visibility changes, this is a quirky hack
|
||||
wExtraArea->setVisible(wExpandBtn->isChecked());
|
||||
if(wExpandBtn->isChecked())
|
||||
b->setFixedHeight(b->sizeHint().height());
|
||||
else
|
||||
b->setFixedHeight(InitialHeight);
|
||||
});
|
||||
b->AddWidget(wExpandBtn);
|
||||
b->AddWidget(wExtraArea);
|
||||
}
|
||||
|
||||
b->AddSpacing(3);
|
||||
AddButtons(b, buttons);
|
||||
InitialHeight = b->minimumSizeHint().height();
|
||||
auto pos = (SpkUi::PrimaryScreenSize - b->sizeHint()) / 2;
|
||||
b->move(pos.width(), pos.height());
|
||||
b->setWindowModality(Qt::WindowModal);
|
||||
|
||||
auto r = b->Exec();
|
||||
if(r != -1)
|
||||
r = b->mButtonList[r]; // Retrieve the correct button
|
||||
|
||||
delete b;
|
||||
return r;
|
||||
}
|
||||
|
||||
void SpkMsgBox::AddButtons(SpkMsgBox *me, QMessageBox::StandardButtons b)
|
||||
{
|
||||
// If anyone can do it better, please let me know, I wrote this on the airplane
|
||||
using btn = QMessageBox::StandardButton;
|
||||
if(!b) return;
|
||||
if(b.testFlag(btn::Ok)) { me->AddButton(tr("OK")); me->mButtonList << btn::Ok; };
|
||||
if(b.testFlag(btn::Cancel)) { me->AddButton(tr("Cancel")); me->mButtonList << btn::Cancel; };
|
||||
if(b.testFlag(btn::Yes)) { me->AddButton(tr("Yes")); me->mButtonList << btn::Yes; };
|
||||
if(b.testFlag(btn::No)) { me->AddButton(tr("No")); me->mButtonList << btn::No; };
|
||||
if(b.testFlag(btn::Apply)) { me->AddButton(tr("Apply")); me->mButtonList << btn::Apply; };
|
||||
if(b.testFlag(btn::Reset)) { me->AddButton(tr("Reset")); me->mButtonList << btn::Reset; };
|
||||
if(b.testFlag(btn::Abort)) { me->AddButton(tr("Abort")); me->mButtonList << btn::Abort; };
|
||||
if(b.testFlag(btn::Retry)) { me->AddButton(tr("Retry")); me->mButtonList << btn::Retry; };
|
||||
if(b.testFlag(btn::Ignore)) { me->AddButton(tr("Ignore")); me->mButtonList << btn::Ignore; };
|
||||
if(b.testFlag(btn::Reset)) { me->AddButton(tr("Reset")); me->mButtonList << btn::Reset; };
|
||||
if(b.testFlag(btn::Close)) { me->AddButton(tr("Close")); me->mButtonList << btn::Close; };
|
||||
if(b.testFlag(btn::Open)) { me->AddButton(tr("Open")); me->mButtonList << btn::Open; };
|
||||
}
|
99
gui/spkpageqsstest.cpp
Normal file
@ -0,0 +1,99 @@
|
||||
|
||||
#include <QApplication>
|
||||
#include "spkpageqsstest.h"
|
||||
#include "spkui_general.h"
|
||||
|
||||
SpkUi::SpkPageQssTest::SpkPageQssTest(QWidget *parent) : QSplitter(parent)
|
||||
{
|
||||
setObjectName("spk_pg_qsstest");
|
||||
|
||||
TextStylesheet = new QTextEdit(this);
|
||||
TextStylesheet->setObjectName("spk_pg_qsstest_qsstext");
|
||||
TextStylesheet->setPlainText(*SpkUi::CurrentStylesheet);
|
||||
|
||||
BtnApply = new QPushButton(this);
|
||||
BtnApply->setObjectName("spk_pg_qsstest_btnapply");
|
||||
BtnApply->setText("Apply");
|
||||
connect(BtnApply, &QPushButton::pressed, this, &SpkPageQssTest::SetStylesheet);
|
||||
|
||||
BtnFetch = new QPushButton(this);
|
||||
BtnFetch->setObjectName("spk_pg_qsstest_btnfetch");
|
||||
BtnFetch->setText("Fetch Stylesheet");
|
||||
connect(BtnFetch, &QPushButton::pressed, this, &SpkPageQssTest::FetchStylesheet);
|
||||
|
||||
HLayInputBtns = new QHBoxLayout;
|
||||
HLayInputBtns->setObjectName("spk_pg_qsstest_hlay_inputbtns");
|
||||
HLayInputBtns->addWidget(BtnFetch);
|
||||
HLayInputBtns->addWidget(BtnApply);
|
||||
|
||||
Btn = new QPushButton(this);
|
||||
Btn->setObjectName("spk_pg_qsstest_button");
|
||||
Btn->setText("TestButton");
|
||||
|
||||
Chk = new QCheckBox(this);
|
||||
Chk->setObjectName("spk_pg_qsstest_checkbox");
|
||||
Chk->setText("CheckBox");
|
||||
|
||||
Rad = new QRadioButton(this);
|
||||
Rad->setObjectName("spk_pg_qsstest_radiobtn");
|
||||
Rad->setText("RadioButton");
|
||||
|
||||
SlideV = new QSlider(this);
|
||||
SlideV->setObjectName("spk_pg_qsstest_slider_v");
|
||||
SlideV->setOrientation(Qt::Vertical);
|
||||
SlideV->setMaximum(1000);
|
||||
SlideV->setMinimum(0);
|
||||
|
||||
SlideH = new QSlider(this);
|
||||
SlideH->setObjectName("spk_pg_qsstest_slider_h");
|
||||
SlideH->setOrientation(Qt::Horizontal);
|
||||
SlideH->setMaximum(1000);
|
||||
SlideH->setMinimum(0);
|
||||
|
||||
VLayBtn = new QVBoxLayout;
|
||||
VLayBtn->setObjectName("spk_pg_qsstest_vlay_btn");
|
||||
VLayBtn->addWidget(Btn);
|
||||
VLayBtn->addWidget(Chk);
|
||||
VLayBtn->addWidget(Rad);
|
||||
|
||||
Group = new QGroupBox(this);
|
||||
Group->setObjectName("spk_pg_qsstest_groupbox");
|
||||
Group->setTitle("GroupBox");
|
||||
Group->setLayout(VLayBtn);
|
||||
|
||||
VLayInput = new QVBoxLayout;
|
||||
VLayInput->setObjectName("spk_pg_qsstest_inputlay");
|
||||
VLayInput->addWidget(TextStylesheet);
|
||||
VLayInput->addLayout(HLayInputBtns);
|
||||
|
||||
VLayWidgets = new QVBoxLayout;
|
||||
VLayWidgets->setObjectName("spk_pg_qsstest_widgetlay");
|
||||
VLayWidgets->addWidget(Group);
|
||||
VLayWidgets->addWidget(SlideH);
|
||||
|
||||
HLay4Slider = new QHBoxLayout;
|
||||
HLay4Slider->setObjectName("spk_pg_qsstest_hlay_for_slider");
|
||||
HLay4Slider->addLayout(VLayWidgets);
|
||||
HLay4Slider->addWidget(SlideV);
|
||||
|
||||
WidL = new QWidget(this);
|
||||
WidL->setObjectName("spk_pg_qsstest_widleft");
|
||||
WidL->setLayout(HLay4Slider);
|
||||
|
||||
WidR = new QWidget(this);
|
||||
WidR->setObjectName("spk_pg_qsstest_widright");
|
||||
WidR->setLayout(VLayInput);
|
||||
|
||||
addWidget(WidL);
|
||||
addWidget(WidR);
|
||||
}
|
||||
|
||||
void SpkUi::SpkPageQssTest::SetStylesheet()
|
||||
{
|
||||
qApp->setStyleSheet(TextStylesheet->toPlainText());
|
||||
}
|
||||
|
||||
void SpkUi::SpkPageQssTest::FetchStylesheet()
|
||||
{
|
||||
TextStylesheet->setPlainText(*SpkUi::CurrentStylesheet);
|
||||
}
|
141
gui/spktitlebar.cpp
Normal file
@ -0,0 +1,141 @@
|
||||
|
||||
#include <QEvent>
|
||||
#include <QMouseEvent>
|
||||
#include "spkui_general.h"
|
||||
#include "spktitlebar.h"
|
||||
|
||||
SpkTitleBar::SpkTitleBar(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
mLinkedWindow = nullptr;
|
||||
|
||||
setMinimumHeight(48);
|
||||
setMaximumHeight(48);
|
||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
mIcon.setFixedSize(32, 32);
|
||||
|
||||
mMainLayout.addSpacing(8);
|
||||
mMainLayout.addWidget(&mIcon);
|
||||
mMainLayout.addSpacing(8);
|
||||
mMainLayout.addWidget(&mTitle);
|
||||
mMainLayout.addSpacing(8);
|
||||
mMainLayout.addLayout(&mUserSpaceL);
|
||||
mMainLayout.addStretch();
|
||||
mMainLayout.addLayout(&mUserSpaceR);
|
||||
mMainLayout.addSpacing(8);
|
||||
mMainLayout.addWidget(&mBtnMin);
|
||||
mMainLayout.addWidget(&mBtnMaxRestore);
|
||||
mMainLayout.addWidget(&mBtnClose);
|
||||
|
||||
mBtnMin.SetRole(OperationButton::Minimize);
|
||||
mBtnMaxRestore.SetRole(OperationButton::MaximizeRestore);
|
||||
mBtnClose.SetRole(OperationButton::Close);
|
||||
|
||||
mMainLayout.setSpacing(0);
|
||||
mMainLayout.setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
setLayout(&mMainLayout);
|
||||
|
||||
connect(&mBtnClose, &QPushButton::clicked, this, &SpkTitleBar::CloseWindow);
|
||||
connect(&mBtnMin, &QPushButton::clicked, this, &SpkTitleBar::MinimizeWindow);
|
||||
connect(&mBtnMaxRestore, &QPushButton::clicked, this, &SpkTitleBar::MaximizeRestoreWindow);
|
||||
}
|
||||
|
||||
SpkTitleBar::~SpkTitleBar()
|
||||
{
|
||||
//qDebug() << "Freed title bar!";
|
||||
}
|
||||
|
||||
void SpkTitleBar::SetOperationButton(OperationButton type)
|
||||
{
|
||||
mBtnClose.setVisible(type & OperationButton::Close);
|
||||
mBtnMaxRestore.setVisible(type & OperationButton::MaximizeRestore);
|
||||
mBtnMin.setVisible(type & OperationButton::Minimize);
|
||||
}
|
||||
|
||||
bool SpkTitleBar::event(QEvent *evt)
|
||||
{
|
||||
switch(evt->type())
|
||||
{
|
||||
case QEvent::MouseButtonDblClick:
|
||||
{
|
||||
if(static_cast<QMouseEvent*>(evt)->button())
|
||||
emit mBtnMaxRestore.clicked();
|
||||
break;
|
||||
}
|
||||
default:;
|
||||
}
|
||||
return QWidget::event(evt);
|
||||
}
|
||||
|
||||
void SpkTitleBar::CloseWindow()
|
||||
{
|
||||
if(mLinkedWindow)
|
||||
mLinkedWindow->close();
|
||||
}
|
||||
|
||||
void SpkTitleBar::MinimizeWindow()
|
||||
{
|
||||
if(mLinkedWindow)
|
||||
mLinkedWindow->setWindowState(Qt::WindowMinimized);
|
||||
}
|
||||
|
||||
void SpkTitleBar::MaximizeRestoreWindow()
|
||||
{
|
||||
if(mLinkedWindow)
|
||||
{
|
||||
if(mLinkedWindow->windowState().testFlag(Qt::WindowMaximized))
|
||||
mLinkedWindow->setWindowState(mLinkedWindow->windowState() & ~Qt::WindowMaximized);
|
||||
else
|
||||
mLinkedWindow->setWindowState(Qt::WindowMaximized);
|
||||
}
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton::SpkTitleBarDefaultButton()
|
||||
{
|
||||
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
|
||||
setMaximumWidth(ButtonWidth);
|
||||
setMinimumWidth(ButtonWidth);
|
||||
}
|
||||
|
||||
void SpkTitleBarDefaultButton::paintEvent(QPaintEvent *e)
|
||||
{
|
||||
QPushButton::paintEvent(e);
|
||||
QPainter painter;
|
||||
painter.begin(this);
|
||||
PaintSymbol(painter);
|
||||
painter.end();
|
||||
}
|
||||
|
||||
void SpkTitleBarDefaultButton::PaintSymbol(QPainter &p)
|
||||
{
|
||||
QPen pen(SpkUi::ColorLine);
|
||||
p.setPen(pen);
|
||||
auto mh = height() / 2, mw = width() / 2, h = height(), w = width();
|
||||
constexpr int fr = 10;
|
||||
switch(Role)
|
||||
{
|
||||
case Minimize:
|
||||
p.drawLine(mw - w / fr, mh, mw + w / fr, mh);
|
||||
break;
|
||||
case MaximizeRestore:
|
||||
p.drawRect(mw - w / fr, mh - h / fr,
|
||||
w / fr * 2, h / fr * 2);
|
||||
break;
|
||||
case Restore:
|
||||
p.drawRect(mw - w / fr - 2, mh - w / fr + 2, w / fr * 2, h / fr * 2);
|
||||
p.drawLine(mw - w / fr, mh - h / fr - 2, mw + w / fr, mh - h / fr - 2);
|
||||
p.drawLine(mw + w / fr, mh - h / fr - 2, mw + w / fr, mh + h / fr - 2);
|
||||
break;
|
||||
case Close:
|
||||
p.drawLine(mw - h / fr * 1.3, mh - h / fr * 1.3,
|
||||
mw + h / fr * 1.3, mh + h / fr * 1.3);
|
||||
p.drawLine(mw - h / fr * 1.3, mh + h / fr * 1.3,
|
||||
mw + h / fr * 1.3, mh - h / fr * 1.3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SpkTitleBarDefaultButton::SetRole(OperationButton role)
|
||||
{
|
||||
Role = role;
|
||||
}
|
167
gui/spkui_general.cpp
Normal file
@ -0,0 +1,167 @@
|
||||
//
|
||||
// Created by rigoligo on 2021/5/8.
|
||||
//
|
||||
|
||||
#include <QApplication>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
#include <QLibrary>
|
||||
#include <QDir>
|
||||
#include <QMessageBox>
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QScreen>
|
||||
#include <csignal>
|
||||
#include <dlfcn.h>
|
||||
#include <execinfo.h>
|
||||
#include "deepinplatform.h"
|
||||
#include "spkui_general.h"
|
||||
#include "spkmsgbox.h"
|
||||
#include "spklogging.h"
|
||||
|
||||
namespace SpkUi
|
||||
{
|
||||
QString StylesheetLight, StylesheetDark, *CurrentStylesheet = &StylesheetLight;
|
||||
QColor ColorLine, ColorBack;
|
||||
QSize PrimaryScreenSize;
|
||||
namespace Priv
|
||||
{
|
||||
bool CrashHandlerActivated;
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
// Obtain global stylesheets
|
||||
QFile ObtainStylesheet;
|
||||
ObtainStylesheet.setFileName(":/stylesheets/stylesheets/mainwindow.css");
|
||||
ObtainStylesheet.open(QIODevice::ReadOnly);
|
||||
StylesheetLight = ObtainStylesheet.readAll();
|
||||
ObtainStylesheet.close();
|
||||
ObtainStylesheet.setFileName(":/stylesheets/stylesheets/mainwindow_dark.css");
|
||||
ObtainStylesheet.open(QIODevice::ReadOnly);
|
||||
StylesheetDark = ObtainStylesheet.readAll();
|
||||
ObtainStylesheet.close();
|
||||
|
||||
SetGlobalStyle(Dark);
|
||||
|
||||
// Initalize crash handler
|
||||
signal(SIGSEGV, SpkUi::CrashSignalHandler);
|
||||
signal(SIGABRT, SpkUi::CrashSignalHandler);
|
||||
signal(SIGFPE, SpkUi::CrashSignalHandler);
|
||||
|
||||
// Prepare theme following for DDE
|
||||
PrepareForDeepinDesktop();
|
||||
|
||||
// Data initialization
|
||||
PrimaryScreenSize = QGuiApplication::primaryScreen()->size();
|
||||
}
|
||||
|
||||
void GuessAppropriateTheme()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool CheckIsDeepinDesktop()
|
||||
{
|
||||
QString Desktop(getenv("XDG_CURRENT_DESKTOP"));
|
||||
if(Desktop.contains("deepin", Qt::CaseInsensitive) ||
|
||||
Desktop.contains("tablet", Qt::CaseInsensitive))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void PrepareForDeepinDesktop()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void SetGlobalStyle(const SpkUiStyle aStyle)
|
||||
{
|
||||
switch(aStyle)
|
||||
{
|
||||
case Light:
|
||||
qApp->setStyleSheet(StylesheetLight);
|
||||
CurrentStylesheet = &StylesheetLight;
|
||||
ColorLine = Qt::black;
|
||||
break;
|
||||
case Dark:
|
||||
qApp->setStyleSheet(StylesheetDark);
|
||||
CurrentStylesheet = &StylesheetDark;
|
||||
ColorLine = Qt::white;
|
||||
break;
|
||||
default:
|
||||
sWarn(QObject::tr("SetGlobalStyle invoked with unknown style %1.")
|
||||
.arg(static_cast<int>(aStyle)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
QString WriteStackTrace(const QString &aStackTrace)
|
||||
{
|
||||
QString path = QDir::homePath() + "/.local/share/spark-store/crash/";
|
||||
QFile StackTraceFile;
|
||||
if(!QDir().exists(path))
|
||||
if(!QDir().mkpath(path))
|
||||
return QObject::tr("Stack trace directory %1 cannot be created. "
|
||||
"Stack trace wasn't saved.").arg(path);
|
||||
path += QString::number(QDateTime::currentDateTimeUtc().toSecsSinceEpoch());
|
||||
while(QFile::exists(path))
|
||||
path += "_";
|
||||
StackTraceFile.setFileName(path);
|
||||
StackTraceFile.open(QIODevice::WriteOnly);
|
||||
if(StackTraceFile.isOpen() && StackTraceFile.isWritable())
|
||||
{
|
||||
QTextStream StackTraceWriter;
|
||||
StackTraceWriter.setDevice(&StackTraceFile);
|
||||
StackTraceWriter << QDateTime::currentDateTime().toLocalTime().toString() << "\n\n";
|
||||
StackTraceWriter << aStackTrace;
|
||||
StackTraceFile.close();
|
||||
return QObject::tr("Stack trace written to \"%1\".").arg(path);
|
||||
}
|
||||
return QObject::tr("Stack trace file %1 cannot be opened. "
|
||||
"Stack trace wasn't saved.").arg(path);
|
||||
}
|
||||
|
||||
void CrashSignalHandler(int sig)
|
||||
{
|
||||
QString msg(QObject::tr("Program has received signal %1 during normal execution.\n\n")),
|
||||
trace;
|
||||
switch(sig)
|
||||
{
|
||||
case SIGSEGV:
|
||||
msg = msg.arg(QObject::tr("\"SIGSEGV\" (Segmentation fault)"));
|
||||
goto CRASH;
|
||||
case SIGFPE:
|
||||
msg = msg.arg(QObject::tr("\"SIGFPE\" (Arithmetic exception)"));
|
||||
goto CRASH;
|
||||
case SIGABRT:
|
||||
msg = msg.arg(QObject::tr("\"SIGABRT\" (Abort)"));
|
||||
CRASH:
|
||||
{
|
||||
if(Priv::CrashHandlerActivated) // If error occured in the handler...
|
||||
{
|
||||
signal(SIGABRT, SIG_DFL); // Return control flow to OS and give up
|
||||
raise(SIGABRT);
|
||||
exit(2);
|
||||
}
|
||||
Priv::CrashHandlerActivated = true;
|
||||
void* TraceStack[StackTraceArraySize];
|
||||
int StackTraceSize = backtrace(TraceStack, StackTraceArraySize);
|
||||
auto TraceTextArray = backtrace_symbols(TraceStack, StackTraceArraySize);
|
||||
trace = QString(QObject::tr("Stack trace:\n"));
|
||||
for(int i = 0; i < StackTraceSize; i++)
|
||||
trace += QString::number(i) + "> " + QString(TraceTextArray[i]) + '\n';
|
||||
msg += QObject::tr("Spark Store cannot continue.\n\n");
|
||||
msg += WriteStackTrace(trace);
|
||||
SpkMsgBox::StaticExec(msg, QObject::tr("Spark Store Crashed"), QMessageBox::Critical,
|
||||
QMessageBox::Ok, trace);
|
||||
exit(2);
|
||||
}
|
||||
default:
|
||||
sErrPop(QObject::tr("Unknown signal %1 received in crash handler. "
|
||||
"Program internals may be corrupted. Please decide if you want "
|
||||
"to continue execution.").arg(sig));
|
||||
}
|
||||
}
|
||||
}
|
297
gui/spkwindow.cpp
Normal file
@ -0,0 +1,297 @@
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QApplication>
|
||||
#include <QStyleHints>
|
||||
#include <QPainterPath>
|
||||
#include <QFile>
|
||||
#include <QPushButton>
|
||||
#include <QMouseEvent>
|
||||
#include "spklogging.h"
|
||||
#include "spkwindow.h"
|
||||
#include "spkui_general.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
SpkWindow::SpkWindow(QWidget *parent) : QMainWindow(parent)
|
||||
{
|
||||
setWindowFlags(Qt::FramelessWindowHint); // Remove default title bar, we'll have custom title bar
|
||||
mCornerRadius = 5;
|
||||
mUserCentralWidget = nullptr;
|
||||
mResizable = true;
|
||||
mResizing = false;
|
||||
mCloseHook = nullptr;
|
||||
mMaximized = windowState().testFlag(Qt::WindowMaximized);
|
||||
|
||||
PopulateUi();
|
||||
}
|
||||
|
||||
SpkWindow::~SpkWindow()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool SpkWindow::event(QEvent *evt)
|
||||
{
|
||||
switch(evt->type())
|
||||
{
|
||||
case QEvent::WindowStateChange:
|
||||
{
|
||||
mMaximized = windowState().testFlag(Qt::WindowMaximized);
|
||||
if(mMaximized)
|
||||
mTitleBarComponent->mBtnMaxRestore.SetRole(SpkTitleBarDefaultButton::Restore);
|
||||
else
|
||||
mTitleBarComponent->mBtnMaxRestore.SetRole(SpkTitleBarDefaultButton::MaximizeRestore);
|
||||
break;
|
||||
}
|
||||
case QEvent::MouseButtonPress:
|
||||
{
|
||||
if(!mResizable) break;
|
||||
auto e = static_cast<QMouseEvent*>(evt);
|
||||
if(e->button() != Qt::LeftButton) break;
|
||||
auto edge = DetectEdgeOnThis(e->pos());
|
||||
if(edge)
|
||||
{
|
||||
mResizing = true;
|
||||
mEdgesBeingResized = edge;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case QEvent::MouseButtonRelease:
|
||||
{
|
||||
if(!mResizable) break;
|
||||
auto e = static_cast<QMouseEvent*>(evt);
|
||||
if(e->button() != Qt::LeftButton) break;
|
||||
mResizing = false;
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
case QEvent::HoverMove:
|
||||
{
|
||||
if(mResizing || !mResizable) break;
|
||||
if(mMaximized)
|
||||
{
|
||||
unsetCursor();
|
||||
break;
|
||||
}
|
||||
auto e = static_cast<QHoverEvent*>(evt);
|
||||
auto edge = DetectEdgeOnThis(e->pos());
|
||||
SetMouseCursor(edge);
|
||||
break;
|
||||
}
|
||||
case QEvent::MouseMove:
|
||||
{
|
||||
if(!mResizable) break;
|
||||
auto e = static_cast<QMouseEvent*>(evt);
|
||||
if(mResizing && !mMaximized)
|
||||
{
|
||||
ResizeWindowByCursor(e->globalPos());
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
;
|
||||
}
|
||||
return QMainWindow::event(evt);
|
||||
}
|
||||
|
||||
Qt::Edges SpkWindow::DetectEdgeOnThis(QPoint p)
|
||||
{
|
||||
Qt::Edges edge;
|
||||
if(p.x() < BorderWidth) edge |= Qt::LeftEdge;
|
||||
if(p.x() > width() - BorderWidth) edge |= Qt::RightEdge;
|
||||
if(p.y() < BorderWidth) edge |= Qt::TopEdge;
|
||||
if(p.y() > height() - BorderWidth) edge |= Qt::BottomEdge;
|
||||
return edge;
|
||||
}
|
||||
|
||||
void SpkWindow::SetMouseCursor(Qt::Edges e)
|
||||
{
|
||||
switch(e)
|
||||
{
|
||||
case Qt::TopEdge:
|
||||
case Qt::BottomEdge:
|
||||
setCursor(Qt::SizeVerCursor);
|
||||
break;
|
||||
case Qt::LeftEdge:
|
||||
case Qt::RightEdge:
|
||||
setCursor(Qt::SizeHorCursor);
|
||||
break;
|
||||
case Qt::TopEdge | Qt::LeftEdge:
|
||||
case Qt::BottomEdge | Qt::RightEdge:
|
||||
setCursor(Qt::SizeFDiagCursor);
|
||||
break;
|
||||
case Qt::TopEdge | Qt::RightEdge:
|
||||
case Qt::BottomEdge | Qt::LeftEdge:
|
||||
setCursor(Qt::SizeBDiagCursor);
|
||||
break;
|
||||
default:
|
||||
unsetCursor();
|
||||
}
|
||||
}
|
||||
|
||||
void SpkWindow::ResizeWindowByCursor(QPoint p)
|
||||
{
|
||||
auto r_ = geometry(), r = r_;
|
||||
switch(mEdgesBeingResized)
|
||||
{
|
||||
case Qt::TopEdge | Qt::LeftEdge:
|
||||
r.setLeft(p.x());
|
||||
if(r.width() < minimumWidth()) // If smaller than minimum the window moves, so we stop it
|
||||
r.setLeft(r_.left());
|
||||
case Qt::TopEdge:
|
||||
r.setTop(p.y());
|
||||
if(r.height() < minimumHeight()) // Same
|
||||
r.setTop(r_.top());
|
||||
break;
|
||||
case Qt::BottomEdge | Qt::LeftEdge:
|
||||
r.setLeft(p.x());
|
||||
if(r.width() < minimumWidth())
|
||||
r.setLeft(r_.left());
|
||||
case Qt::BottomEdge:
|
||||
r.setBottom(p.y());
|
||||
if(r.height() < minimumHeight())
|
||||
r.setBottom(r_.bottom());
|
||||
break;
|
||||
case Qt::TopEdge | Qt::RightEdge:
|
||||
r.setTop(p.y());
|
||||
r.setRight(p.x());
|
||||
if(r.height() < minimumHeight())
|
||||
r.setTop(r_.top());
|
||||
if(r.width() < minimumWidth())
|
||||
r.setRight(r_.right());
|
||||
break;
|
||||
case Qt::BottomEdge | Qt::RightEdge:
|
||||
r.setBottom(p.y());
|
||||
if(r.height() < minimumHeight())
|
||||
r.setBottom(r_.bottom());
|
||||
case Qt::RightEdge:
|
||||
r.setRight(p.x());
|
||||
if(r.width() < minimumWidth())
|
||||
r.setRight(r_.right());
|
||||
break;
|
||||
case Qt::LeftEdge:
|
||||
r.setLeft(p.x());
|
||||
if(r.width() < minimumWidth())
|
||||
r.setLeft(r_.left());
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
setGeometry(r);
|
||||
}
|
||||
|
||||
void SpkWindow::closeEvent(QCloseEvent *e)
|
||||
{
|
||||
if(mCloseHook)
|
||||
{
|
||||
if(mCloseHook())
|
||||
e->accept();
|
||||
else
|
||||
e->ignore();
|
||||
emit Closed();
|
||||
return;
|
||||
}
|
||||
e->accept();
|
||||
emit Closed();
|
||||
}
|
||||
|
||||
void SpkWindow::SetCornerRadius(int radius)
|
||||
{
|
||||
mCornerRadius = radius;
|
||||
}
|
||||
|
||||
void SpkWindow::SetWindowTheme(SpkWindow::SpkWindowStyle style)
|
||||
{
|
||||
switch(style)
|
||||
{
|
||||
case Light:
|
||||
this->setStyleSheet(SpkUi::StylesheetLight);
|
||||
break;
|
||||
case Dark:
|
||||
this->setStyleSheet(SpkUi::StylesheetDark);
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
void SpkWindow::PopulateUi()
|
||||
{
|
||||
mCentralWidget = new QWidget(this);
|
||||
mMainVLayout = new QVBoxLayout;
|
||||
mTitleBarComponent = new SpkTitleBar(this);
|
||||
|
||||
mCentralWidget->setLayout(mMainVLayout);
|
||||
|
||||
mMainVLayout->addWidget(mTitleBarComponent);
|
||||
mMainVLayout->setAlignment(Qt::AlignTop);
|
||||
mMainVLayout->setContentsMargins(0, 0, 0, 0);
|
||||
mMainVLayout->setSpacing(0);
|
||||
|
||||
mTitleBarComponent->SetTitle(qAppName());
|
||||
mTitleBarComponent->SetUseIcon(false);
|
||||
mTitleBarComponent->SetLinkedWindow(this);
|
||||
|
||||
setCentralWidget(mCentralWidget);
|
||||
setWindowFlag(Qt::NoDropShadowWindowHint, false);
|
||||
}
|
||||
|
||||
void SpkWindow::SetCentralWidget(QWidget *widget)
|
||||
{
|
||||
if(mUserCentralWidget)
|
||||
mMainVLayout->removeWidget(mUserCentralWidget);
|
||||
mUserCentralWidget = widget;
|
||||
mMainVLayout->addWidget(widget);
|
||||
}
|
||||
|
||||
void SpkWindow::SetUseTitleBar(bool x)
|
||||
{
|
||||
mTitleBarComponent->setVisible(x);
|
||||
}
|
||||
|
||||
void SpkWindow::SetCentralMargin(int a, int b, int c, int d)
|
||||
{
|
||||
if(mUserCentralWidget)
|
||||
mUserCentralWidget->setContentsMargins(a, b, c, d);
|
||||
}
|
||||
|
||||
void SpkWindow::SetCloseHook(bool (*f)())
|
||||
{
|
||||
mCloseHook = f;
|
||||
}
|
||||
|
||||
void SpkWindow::ClearCloseHook()
|
||||
{
|
||||
mCloseHook = nullptr;
|
||||
}
|
||||
|
||||
void SpkWindow::RecalculateSize()
|
||||
{
|
||||
mMainVLayout->activate();
|
||||
}
|
||||
|
||||
bool SpkWindow::GetUseTitleBar()
|
||||
{
|
||||
return mTitleBarComponent->isVisible();
|
||||
}
|
||||
|
||||
SpkTitleBar *SpkWindow::GetTitleBar()
|
||||
{
|
||||
return mTitleBarComponent;
|
||||
}
|
||||
|
||||
SpkTitleBar *SpkWindow::SetTitleBar(SpkTitleBar *bar, bool replace)
|
||||
{
|
||||
if(!bar)
|
||||
return nullptr;
|
||||
auto ret = mTitleBarComponent;
|
||||
mMainVLayout->removeWidget(mTitleBarComponent);
|
||||
if(replace)
|
||||
mMainVLayout->insertWidget(0, bar);
|
||||
mTitleBarComponent = bar;
|
||||
bar->SetLinkedWindow(this);
|
||||
return ret;
|
||||
}
|
10
inc/deepinplatform.h
Normal file
@ -0,0 +1,10 @@
|
||||
//
|
||||
// Created by rigoligo on 2021/5/8.
|
||||
//
|
||||
|
||||
#ifndef _DEEPINPLATFORM_H_
|
||||
#define _DEEPINPLATFORM_H_
|
||||
|
||||
// Stub
|
||||
|
||||
#endif //_DEEPINPLATFORM_H_
|
1
inc/dtk/DObject
Normal file
@ -0,0 +1 @@
|
||||
#include "dobject.h"
|
1
inc/dtk/DObjectPrivate
Normal file
@ -0,0 +1 @@
|
||||
#include "dobject_p.h"
|
1
inc/dtk/DPalette
Normal file
@ -0,0 +1 @@
|
||||
#include "dpalette.h"
|
135
inc/dtk/dguiapplicationhelper.h
Normal file
@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: zccrs <zccrs@live.com>
|
||||
*
|
||||
* Maintainer: zccrs <zhangjide@deepin.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef DGUIAPPLICATIONHELPER_H
|
||||
#define DGUIAPPLICATIONHELPER_H
|
||||
|
||||
#include <dtkgui_global.h>
|
||||
#include <DPalette>
|
||||
#include <DObject>
|
||||
|
||||
#include <QGuiApplication>
|
||||
#include <QObject>
|
||||
|
||||
DGUI_BEGIN_NAMESPACE
|
||||
|
||||
class DPlatformTheme;
|
||||
class DFontManager;
|
||||
class DGuiApplicationHelperPrivate;
|
||||
class DGuiApplicationHelper : public QObject, public DCORE_NAMESPACE::DObject
|
||||
{
|
||||
Q_OBJECT
|
||||
D_DECLARE_PRIVATE(DGuiApplicationHelper)
|
||||
|
||||
Q_PROPERTY(ColorType themeType READ themeType NOTIFY themeTypeChanged)
|
||||
Q_PROPERTY(ColorType paletteType READ paletteType WRITE setPaletteType NOTIFY paletteTypeChanged)
|
||||
|
||||
public:
|
||||
enum ColorType {
|
||||
UnknownType,
|
||||
LightType,
|
||||
DarkType
|
||||
};
|
||||
// Q_ENUM(ColorType)
|
||||
|
||||
enum SingleScope {
|
||||
UserScope,
|
||||
GroupScope,
|
||||
WorldScope
|
||||
};
|
||||
// Q_ENUM(SingleScope)
|
||||
|
||||
enum Attribute {
|
||||
UseInactiveColorGroup = 1 << 0,
|
||||
ColorCompositing = 1 << 1,
|
||||
|
||||
/* readonly flag */
|
||||
ReadOnlyLimit = 1 << 22,
|
||||
IsDeepinPlatformTheme = ReadOnlyLimit << 0,
|
||||
IsDXcbPlatform = ReadOnlyLimit << 1,
|
||||
IsXWindowPlatform = ReadOnlyLimit << 2,
|
||||
IsTableEnvironment = ReadOnlyLimit << 3,
|
||||
IsDeepinEnvironment = ReadOnlyLimit << 4,
|
||||
};
|
||||
// Q_ENUM(Attribute)
|
||||
Q_DECLARE_FLAGS(Attributes, Attribute)
|
||||
|
||||
typedef DGuiApplicationHelper *(*HelperCreator)();
|
||||
D_DECL_DEPRECATED static void registerInstanceCreator(HelperCreator creator);
|
||||
static DGuiApplicationHelper *instance();
|
||||
~DGuiApplicationHelper();
|
||||
|
||||
static QColor adjustColor(const QColor &base, qint8 hueFloat, qint8 saturationFloat, qint8 lightnessFloat,
|
||||
qint8 redFloat, qint8 greenFloat, qint8 blueFloat, qint8 alphaFloat);
|
||||
static QColor blendColor(const QColor &substrate, const QColor &superstratum);
|
||||
static DPalette standardPalette(ColorType type);
|
||||
static void generatePaletteColor(DPalette &base, QPalette::ColorRole role, ColorType type);
|
||||
static void generatePaletteColor(DPalette &base, DPalette::ColorType role, ColorType type);
|
||||
static void generatePalette(DPalette &base, ColorType type = UnknownType);
|
||||
static DPalette fetchPalette(const DPlatformTheme *theme);
|
||||
Q_DECL_DEPRECATED_X("Use UseInactiveColorGroup enum with setAttribute.") static void setUseInactiveColorGroup(bool on);
|
||||
Q_DECL_DEPRECATED_X("Use ColorCompositing enum with setAttribute.") static void setColorCompositingEnabled(bool on);
|
||||
static bool isXWindowPlatform();
|
||||
static bool isTabletEnvironment();
|
||||
static void setAttribute(Attribute attribute, bool enable);
|
||||
static bool testAttribute(Attribute attribute);
|
||||
|
||||
DPlatformTheme *systemTheme() const;
|
||||
DPlatformTheme *applicationTheme() const;
|
||||
D_DECL_DEPRECATED DPlatformTheme *windowTheme(QWindow *window) const;
|
||||
|
||||
DPalette applicationPalette() const;
|
||||
void setApplicationPalette(const DPalette &palette);
|
||||
D_DECL_DEPRECATED DPalette windowPalette(QWindow *window) const;
|
||||
|
||||
const DFontManager *fontManager() const;
|
||||
|
||||
static ColorType toColorType(const QColor &color);
|
||||
static ColorType toColorType(const QPalette &palette);
|
||||
ColorType themeType() const;
|
||||
ColorType paletteType() const;
|
||||
|
||||
static bool setSingleInstance(const QString &key, SingleScope singleScope = UserScope);
|
||||
static void setSingleInstanceInterval(int interval = 3000);
|
||||
D_DECL_DEPRECATED static void setSingelInstanceInterval(int interval = 3000);
|
||||
|
||||
public Q_SLOTS:
|
||||
D_DECL_DEPRECATED_X("Plase use setPaletteType") void setThemeType(ColorType themeType);
|
||||
void setPaletteType(ColorType paletteType);
|
||||
|
||||
Q_SIGNALS:
|
||||
void themeTypeChanged(ColorType themeType);
|
||||
void paletteTypeChanged(ColorType paletteType);
|
||||
void newProcessInstance(qint64 pid, const QStringList &arguments);
|
||||
void fontChanged(const QFont &font);
|
||||
void applicationPaletteChanged();
|
||||
|
||||
protected:
|
||||
explicit DGuiApplicationHelper();
|
||||
virtual void initialize();
|
||||
|
||||
private:
|
||||
D_PRIVATE_SLOT(void _q_initApplicationTheme(bool))
|
||||
friend class _DGuiApplicationHelper;
|
||||
};
|
||||
|
||||
DGUI_END_NAMESPACE
|
||||
|
||||
#endif // DGUIAPPLICATIONHELPER_H
|
54
inc/dtk/dobject.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef DOBJECT_H
|
||||
#define DOBJECT_H
|
||||
|
||||
#include <QScopedPointer>
|
||||
|
||||
#include "dtkcore_global.h"
|
||||
|
||||
DCORE_BEGIN_NAMESPACE
|
||||
|
||||
#define D_DECLARE_PRIVATE(Class) Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_d_ptr),Class)
|
||||
#define D_DECLARE_PUBLIC(Class) Q_DECLARE_PUBLIC(Class)
|
||||
#define D_D(Class) Q_D(Class)
|
||||
#define D_Q(Class) Q_Q(Class)
|
||||
#define D_DC(Class) Q_D(const Class)
|
||||
#define D_QC(Class) Q_Q(const Class)
|
||||
#define D_PRIVATE_SLOT(Func) Q_PRIVATE_SLOT(d_func(), Func)
|
||||
|
||||
class DObjectPrivate;
|
||||
|
||||
class LIBDTKCORESHARED_EXPORT DObject
|
||||
{
|
||||
protected:
|
||||
DObject(DObject *parent = nullptr);
|
||||
|
||||
DObject(DObjectPrivate &dd, DObject *parent = nullptr);
|
||||
|
||||
virtual ~DObject();
|
||||
|
||||
QScopedPointer<DObjectPrivate> d_d_ptr;
|
||||
|
||||
Q_DISABLE_COPY(DObject)
|
||||
D_DECLARE_PRIVATE(DObject)
|
||||
};
|
||||
|
||||
DCORE_END_NAMESPACE
|
||||
|
||||
#endif // DOBJECT_H
|
42
inc/dtk/dobject_p.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) 2015 ~ 2017 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef DOBJECT_P_H
|
||||
#define DOBJECT_P_H
|
||||
|
||||
#include "dtkcore_global.h"
|
||||
|
||||
DCORE_BEGIN_NAMESPACE
|
||||
|
||||
class DObject;
|
||||
class DObjectPrivate
|
||||
{
|
||||
public:
|
||||
virtual ~DObjectPrivate();
|
||||
|
||||
protected:
|
||||
DObjectPrivate(DObject *qq);
|
||||
|
||||
DObject *q_ptr;
|
||||
|
||||
Q_DECLARE_PUBLIC(DObject)
|
||||
};
|
||||
|
||||
DCORE_END_NAMESPACE
|
||||
|
||||
#endif // DOBJECT_P_H
|
||||
|
110
inc/dtk/dpalette.h
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright (C) 2019 ~ 2019 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: zccrs <zccrs@live.com>
|
||||
*
|
||||
* Maintainer: zccrs <zhangjide@deepin.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef DPALETTE_H
|
||||
#define DPALETTE_H
|
||||
|
||||
#include <dtkgui_global.h>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QPalette>
|
||||
|
||||
DGUI_BEGIN_NAMESPACE
|
||||
|
||||
class DPalettePrivate;
|
||||
class DPalette : public QPalette
|
||||
{
|
||||
public:
|
||||
enum ColorType {
|
||||
NoType,
|
||||
ItemBackground, //列表项的背景色
|
||||
TextTitle, //标题型文本的颜色
|
||||
TextTips, //提示性文本的颜色
|
||||
TextWarning, //警告类型的文本颜色
|
||||
TextLively, //活跃式文本颜色(不受活动色影响)
|
||||
LightLively, //活跃式按钮(recommend button)背景色中的亮色(不受活跃色影响)
|
||||
DarkLively, //活跃式按钮(recommend button)背景色中的暗色,会从亮色渐变到暗色(不受活跃色影响)
|
||||
FrameBorder, //控件边框颜色
|
||||
PlaceholderText, //占位类型的文本颜色,可用于输入框占位内容等提示性文字
|
||||
FrameShadowBorder, //用于跟阴影叠加的边框颜色
|
||||
ObviousBackground, //明显的背景色
|
||||
NColorTypes
|
||||
};
|
||||
|
||||
DPalette();
|
||||
DPalette(const QPalette &palette);
|
||||
DPalette(const DPalette &palette);
|
||||
~DPalette();
|
||||
|
||||
DPalette &operator=(const DPalette &palette);
|
||||
|
||||
inline const QColor &color(ColorGroup cg, ColorType ct) const
|
||||
{ return brush(cg, ct).color(); }
|
||||
const QBrush &brush(ColorGroup cg, ColorType ct) const;
|
||||
inline void setColor(ColorGroup cg, ColorType ct, const QColor &color)
|
||||
{ setBrush(cg, ct, color); }
|
||||
inline void setColor(ColorType ct, const QColor &color)
|
||||
{ setColor(All, ct, color); }
|
||||
inline void setBrush(ColorType ct, const QBrush &brush)
|
||||
{ setBrush(All, ct, brush); }
|
||||
void setBrush(ColorGroup cg, ColorType ct, const QBrush &brush);
|
||||
|
||||
inline const QColor &color(ColorType ct) const { return color(Current, ct); }
|
||||
inline const QBrush &brush(ColorType ct) const { return brush(Current, ct); }
|
||||
inline const QBrush &itemBackground() const { return brush(ItemBackground); }
|
||||
inline const QBrush &textTiele() const { return brush(TextTitle); }
|
||||
inline const QBrush &textTips() const { return brush(TextTips); }
|
||||
inline const QBrush &textWarning() const { return brush(TextWarning); }
|
||||
inline const QBrush &textLively() const { return brush(TextLively); }
|
||||
inline const QBrush &lightLively() const { return brush(LightLively); }
|
||||
inline const QBrush &darkLively() const { return brush(DarkLively); }
|
||||
inline const QBrush &frameBorder() const { return brush(FrameBorder); }
|
||||
inline const QBrush &placeholderText() const { return brush(PlaceholderText); }
|
||||
inline const QBrush &frameShadowBorder() const { return brush(FrameShadowBorder); }
|
||||
|
||||
using QPalette::color;
|
||||
using QPalette::brush;
|
||||
using QPalette::setBrush;
|
||||
using QPalette::setColor;
|
||||
|
||||
protected:
|
||||
QScopedPointer<DPalettePrivate> d;
|
||||
|
||||
friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &s, const DPalette &p);
|
||||
};
|
||||
|
||||
DGUI_END_NAMESPACE
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
/*****************************************************************************
|
||||
DPalette stream functions
|
||||
*****************************************************************************/
|
||||
#ifndef QT_NO_DATASTREAM
|
||||
Q_GUI_EXPORT QDataStream &operator<<(QDataStream &ds, const DTK_GUI_NAMESPACE::DPalette &p);
|
||||
Q_GUI_EXPORT QDataStream &operator>>(QDataStream &ds, DTK_GUI_NAMESPACE::DPalette &p);
|
||||
#endif // QT_NO_DATASTREAM
|
||||
|
||||
#ifndef QT_NO_DEBUG_STREAM
|
||||
Q_GUI_EXPORT QDebug operator<<(QDebug, const DTK_GUI_NAMESPACE::DPalette &);
|
||||
#endif
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // DPALETTE_H
|
29
inc/dtk/dtkcore_config.h
Normal file
@ -0,0 +1,29 @@
|
||||
#define DTK_VERSION_MAJOR 5
|
||||
#define DTK_VERSION_MINOR 5
|
||||
#define DTK_VERSION_PATCH 2
|
||||
#define DTK_VERSION_BUILD 0
|
||||
#define DTK_VERSION_STR "5.5.2"
|
||||
//
|
||||
#define DTKCORE_CLASS_DObject
|
||||
#define DTKCORE_CLASS_DObjectPrivate
|
||||
#define DTKCORE_CLASS_DSingleton
|
||||
#define DTKCORE_CLASS_DUtil
|
||||
#define DTKCORE_CLASS_DPinyin
|
||||
#define DTKCORE_CLASS_DDBusSender
|
||||
#define DTKCORE_CLASS_DRecentManager
|
||||
#define DTKCORE_CLASS_DNotifySender
|
||||
#define DTKCORE_CLASS_DExportedInterface
|
||||
#define DTKCORE_CLASS_DVtableHook
|
||||
#define DTKCORE_CLASS_DFileServices
|
||||
#define DTKCORE_CLASS_DThreadUtils
|
||||
#define DTKCORE_CLASS_DLog
|
||||
#define DTKCORE_CLASS_DFileWatcher
|
||||
#define DTKCORE_CLASS_DBaseFileWatcher
|
||||
#define DTKCORE_CLASS_DFileSystemWatcher
|
||||
#define DTKCORE_CLASS_DFileWatcherManager
|
||||
#define DTKCORE_CLASS_DPathBuf
|
||||
#define DTKCORE_CLASS_DStandardPaths
|
||||
#define DTKCORE_CLASS_DTrashManager
|
||||
#define DTKCORE_CLASS_DSettings
|
||||
#define DTKCORE_CLASS_DSettingsGroup
|
||||
#define DTKCORE_CLASS_DSettingsOption
|
69
inc/dtk/dtkcore_global.h
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#include <dtkcore_config.h>
|
||||
|
||||
#define DTK_NAMESPACE Dtk
|
||||
|
||||
#if !defined(DTK_NAMESPACE)
|
||||
# define DTK_BEGIN_NAMESPACE
|
||||
# define DTK_END_NAMESPACE
|
||||
# define DTK_USE_NAMESPACE
|
||||
#else
|
||||
# define DTK_BEGIN_NAMESPACE namespace DTK_NAMESPACE {
|
||||
# define DTK_END_NAMESPACE }
|
||||
# define DTK_USE_NAMESPACE using namespace DTK_NAMESPACE;
|
||||
#endif
|
||||
|
||||
#define DCORE_NAMESPACE Core
|
||||
#define DTK_CORE_NAMESPACE DTK_NAMESPACE::DCORE_NAMESPACE
|
||||
|
||||
#if !defined(DCORE_NAMESPACE)
|
||||
# define DCORE_BEGIN_NAMESPACE
|
||||
# define DCORE_END_NAMESPACE
|
||||
# define DCORE_USE_NAMESPACE
|
||||
#else
|
||||
# define DCORE_BEGIN_NAMESPACE namespace DTK_NAMESPACE { namespace DCORE_NAMESPACE {
|
||||
# define DCORE_END_NAMESPACE }}
|
||||
# define DCORE_USE_NAMESPACE using namespace DTK_CORE_NAMESPACE;
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(DTK_STATIC_LIB)
|
||||
# define LIBDTKCORESHARED_EXPORT
|
||||
#else
|
||||
#if defined(LIBDTKCORE_LIBRARY)
|
||||
# define LIBDTKCORESHARED_EXPORT Q_DECL_EXPORT
|
||||
#else
|
||||
# define LIBDTKCORESHARED_EXPORT Q_DECL_IMPORT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef D_DEPRECATED_CHECK
|
||||
#define D_DECL_DEPRECATED_X(text) Q_DECL_HIDDEN
|
||||
#define D_DECL_DEPRECATED Q_DECL_HIDDEN
|
||||
#else
|
||||
#define D_DECL_DEPRECATED Q_DECL_DEPRECATED
|
||||
#define D_DECL_DEPRECATED_X Q_DECL_DEPRECATED_X
|
||||
#endif
|
||||
|
||||
#define DTK_VERSION_CHECK(major, minor, patch, build) ((major<<24)|(minor<<16)|(patch<<8)|build)
|
||||
#define DTK_VERSION DTK_VERSION_CHECK(DTK_VERSION_MAJOR, DTK_VERSION_MINOR, DTK_VERSION_PATCH, DTK_VERSION_BUILD)
|
35
inc/dtk/dtkgui_global.h
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: zccrs <zccrs@live.com>
|
||||
*
|
||||
* Maintainer: zccrs <zhangjide@deepin.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef DTKGUI_GLOBAL_H
|
||||
#define DTKGUI_GLOBAL_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <dtkcore_global.h>
|
||||
|
||||
#define DGUI_NAMESPACE Gui
|
||||
#define DTK_GUI_NAMESPACE DTK_NAMESPACE::Gui
|
||||
|
||||
#define DGUI_BEGIN_NAMESPACE namespace DTK_NAMESPACE { namespace DGUI_NAMESPACE {
|
||||
#define DGUI_END_NAMESPACE }}
|
||||
#define DGUI_USE_NAMESPACE using namespace DTK_GUI_NAMESPACE;
|
||||
|
||||
#endif // DTKGUI_GLOBAL_H
|
54
inc/qtxcb.h
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file contains code of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QTXCB_H
|
||||
#define QTXCB_H
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
namespace SpkUi
|
||||
{
|
||||
namespace Priv
|
||||
{
|
||||
uint qtEdgesToXcbMoveResizeDirection(Qt::Edges edges);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // QTXCB_H
|
269
inc/qxcbatom.h
Normal file
@ -0,0 +1,269 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2018 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
#ifndef QXCBATOM_H
|
||||
#define QXCBATOM_H
|
||||
|
||||
#include <xcb/xcb.h>
|
||||
|
||||
namespace SpkUi
|
||||
{
|
||||
namespace Priv
|
||||
{
|
||||
class QXcbAtom
|
||||
{
|
||||
public:
|
||||
enum Atom {
|
||||
// window-manager <-> client protocols
|
||||
WM_PROTOCOLS,
|
||||
WM_DELETE_WINDOW,
|
||||
WM_TAKE_FOCUS,
|
||||
_NET_WM_PING,
|
||||
_NET_WM_CONTEXT_HELP,
|
||||
_NET_WM_SYNC_REQUEST,
|
||||
_NET_WM_SYNC_REQUEST_COUNTER,
|
||||
MANAGER, // System tray notification
|
||||
_NET_SYSTEM_TRAY_OPCODE, // System tray operation
|
||||
|
||||
// ICCCM window state
|
||||
WM_STATE,
|
||||
WM_CHANGE_STATE,
|
||||
WM_CLASS,
|
||||
WM_NAME,
|
||||
|
||||
// Session management
|
||||
WM_CLIENT_LEADER,
|
||||
WM_WINDOW_ROLE,
|
||||
SM_CLIENT_ID,
|
||||
WM_CLIENT_MACHINE,
|
||||
|
||||
// Clipboard
|
||||
CLIPBOARD,
|
||||
INCR,
|
||||
TARGETS,
|
||||
MULTIPLE,
|
||||
TIMESTAMP,
|
||||
SAVE_TARGETS,
|
||||
CLIP_TEMPORARY,
|
||||
_QT_SELECTION,
|
||||
_QT_CLIPBOARD_SENTINEL,
|
||||
_QT_SELECTION_SENTINEL,
|
||||
CLIPBOARD_MANAGER,
|
||||
|
||||
RESOURCE_MANAGER,
|
||||
|
||||
_XSETROOT_ID,
|
||||
|
||||
_QT_SCROLL_DONE,
|
||||
_QT_INPUT_ENCODING,
|
||||
|
||||
// Qt/XCB specific
|
||||
_QT_CLOSE_CONNECTION,
|
||||
|
||||
_MOTIF_WM_HINTS,
|
||||
|
||||
DTWM_IS_RUNNING,
|
||||
ENLIGHTENMENT_DESKTOP,
|
||||
_DT_SAVE_MODE,
|
||||
_SGI_DESKS_MANAGER,
|
||||
|
||||
// EWMH (aka NETWM)
|
||||
_NET_SUPPORTED,
|
||||
_NET_VIRTUAL_ROOTS,
|
||||
_NET_WORKAREA,
|
||||
|
||||
_NET_MOVERESIZE_WINDOW,
|
||||
_NET_WM_MOVERESIZE,
|
||||
|
||||
_NET_WM_NAME,
|
||||
_NET_WM_ICON_NAME,
|
||||
_NET_WM_ICON,
|
||||
|
||||
_NET_WM_PID,
|
||||
|
||||
_NET_WM_WINDOW_OPACITY,
|
||||
|
||||
_NET_WM_STATE,
|
||||
_NET_WM_STATE_ABOVE,
|
||||
_NET_WM_STATE_BELOW,
|
||||
_NET_WM_STATE_FULLSCREEN,
|
||||
_NET_WM_STATE_MAXIMIZED_HORZ,
|
||||
_NET_WM_STATE_MAXIMIZED_VERT,
|
||||
_NET_WM_STATE_MODAL,
|
||||
_NET_WM_STATE_STAYS_ON_TOP,
|
||||
_NET_WM_STATE_DEMANDS_ATTENTION,
|
||||
_NET_WM_STATE_HIDDEN,
|
||||
|
||||
_NET_WM_USER_TIME,
|
||||
_NET_WM_USER_TIME_WINDOW,
|
||||
_NET_WM_FULL_PLACEMENT,
|
||||
|
||||
_NET_WM_WINDOW_TYPE,
|
||||
_NET_WM_WINDOW_TYPE_DESKTOP,
|
||||
_NET_WM_WINDOW_TYPE_DOCK,
|
||||
_NET_WM_WINDOW_TYPE_TOOLBAR,
|
||||
_NET_WM_WINDOW_TYPE_MENU,
|
||||
_NET_WM_WINDOW_TYPE_UTILITY,
|
||||
_NET_WM_WINDOW_TYPE_SPLASH,
|
||||
_NET_WM_WINDOW_TYPE_DIALOG,
|
||||
_NET_WM_WINDOW_TYPE_DROPDOWN_MENU,
|
||||
_NET_WM_WINDOW_TYPE_POPUP_MENU,
|
||||
_NET_WM_WINDOW_TYPE_TOOLTIP,
|
||||
_NET_WM_WINDOW_TYPE_NOTIFICATION,
|
||||
_NET_WM_WINDOW_TYPE_COMBO,
|
||||
_NET_WM_WINDOW_TYPE_DND,
|
||||
_NET_WM_WINDOW_TYPE_NORMAL,
|
||||
_KDE_NET_WM_WINDOW_TYPE_OVERRIDE,
|
||||
|
||||
_KDE_NET_WM_FRAME_STRUT,
|
||||
_NET_FRAME_EXTENTS,
|
||||
|
||||
_NET_STARTUP_INFO,
|
||||
_NET_STARTUP_INFO_BEGIN,
|
||||
|
||||
_NET_SUPPORTING_WM_CHECK,
|
||||
|
||||
_NET_WM_CM_S0,
|
||||
|
||||
_NET_SYSTEM_TRAY_VISUAL,
|
||||
|
||||
_NET_ACTIVE_WINDOW,
|
||||
|
||||
// Property formats
|
||||
TEXT,
|
||||
UTF8_STRING,
|
||||
CARDINAL,
|
||||
|
||||
// Xdnd
|
||||
XdndEnter,
|
||||
XdndPosition,
|
||||
XdndStatus,
|
||||
XdndLeave,
|
||||
XdndDrop,
|
||||
XdndFinished,
|
||||
XdndTypelist,
|
||||
XdndActionList,
|
||||
|
||||
XdndSelection,
|
||||
|
||||
XdndAware,
|
||||
XdndProxy,
|
||||
|
||||
XdndActionCopy,
|
||||
XdndActionLink,
|
||||
XdndActionMove,
|
||||
XdndActionAsk,
|
||||
XdndActionPrivate,
|
||||
|
||||
// Xkb
|
||||
_XKB_RULES_NAMES,
|
||||
|
||||
// XEMBED
|
||||
_XEMBED,
|
||||
_XEMBED_INFO,
|
||||
|
||||
// XInput2
|
||||
ButtonLeft,
|
||||
ButtonMiddle,
|
||||
ButtonRight,
|
||||
ButtonWheelUp,
|
||||
ButtonWheelDown,
|
||||
ButtonHorizWheelLeft,
|
||||
ButtonHorizWheelRight,
|
||||
AbsMTPositionX,
|
||||
AbsMTPositionY,
|
||||
AbsMTTouchMajor,
|
||||
AbsMTTouchMinor,
|
||||
AbsMTOrientation,
|
||||
AbsMTPressure,
|
||||
AbsMTTrackingID,
|
||||
MaxContacts,
|
||||
RelX,
|
||||
RelY,
|
||||
// XInput2 tablet
|
||||
AbsX,
|
||||
AbsY,
|
||||
AbsPressure,
|
||||
AbsTiltX,
|
||||
AbsTiltY,
|
||||
AbsWheel,
|
||||
AbsDistance,
|
||||
WacomSerialIDs,
|
||||
INTEGER,
|
||||
RelHorizWheel,
|
||||
RelVertWheel,
|
||||
RelHorizScroll,
|
||||
RelVertScroll,
|
||||
|
||||
_XSETTINGS_SETTINGS,
|
||||
|
||||
_COMPIZ_DECOR_PENDING,
|
||||
_COMPIZ_DECOR_REQUEST,
|
||||
_COMPIZ_DECOR_DELETE_PIXMAP,
|
||||
_COMPIZ_TOOLKIT_ACTION,
|
||||
_GTK_LOAD_ICONTHEMES,
|
||||
|
||||
AT_SPI_BUS,
|
||||
|
||||
EDID,
|
||||
EDID_DATA,
|
||||
XFree86_DDC_EDID1_RAWDATA,
|
||||
|
||||
_ICC_PROFILE,
|
||||
|
||||
NAtoms
|
||||
};
|
||||
|
||||
QXcbAtom();
|
||||
void initialize(xcb_connection_t *connection);
|
||||
|
||||
inline xcb_atom_t atom(QXcbAtom::Atom atom) const { return m_allAtoms[atom]; }
|
||||
QXcbAtom::Atom qatom(xcb_atom_t atom) const;
|
||||
|
||||
protected:
|
||||
void initializeAllAtoms(xcb_connection_t *connection);
|
||||
|
||||
private:
|
||||
xcb_atom_t m_allAtoms[QXcbAtom::NAtoms];
|
||||
};
|
||||
|
||||
extern QXcbAtom a;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // QXCBATOM_H
|
6
inc/spkconfig.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifndef SPKCONFIG_H
|
||||
#define SPKCONFIG_H
|
||||
|
||||
|
||||
|
||||
#endif // SPKCONFIG_H
|
37
inc/spkdialog.h
Normal file
@ -0,0 +1,37 @@
|
||||
#ifndef SPKDIALOG_H
|
||||
#define SPKDIALOG_H
|
||||
|
||||
#include <QList>
|
||||
#include <QButtonGroup>
|
||||
#include "spkui_general.h"
|
||||
#include "spktitlebar.h"
|
||||
#include "spkwindow.h"
|
||||
|
||||
class SpkDialog : public SpkWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkDialog(QWidget *parent = nullptr);
|
||||
~SpkDialog();
|
||||
void AddButton(QString text, SpkUi::SpkButtonStyle style = SpkUi::SpkButtonStyle::Normal);
|
||||
void AddWidget(QWidget*);
|
||||
void AddSpacing(int);
|
||||
int Exec();
|
||||
|
||||
private slots:
|
||||
void ButtonPressed(int);
|
||||
void ForceClose();
|
||||
|
||||
signals:
|
||||
void ExitEventLoop(int);
|
||||
void CloseWindow();
|
||||
|
||||
private:
|
||||
QWidget *mDialogWidget;
|
||||
QVBoxLayout *mMainVLay, *mWidgetsVLay;
|
||||
QHBoxLayout *mBtnLay;
|
||||
QButtonGroup *mBtnGroup;
|
||||
QList<QWidget*> mWidgetsList, mParentsList;
|
||||
};
|
||||
|
||||
#endif // SPKDIALOG_H
|
25
inc/spkjsonapiconsumer.h
Normal file
@ -0,0 +1,25 @@
|
||||
#ifndef SPKJSONAPICONSUMER_H
|
||||
#define SPKJSONAPICONSUMER_H
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
#include <QtNetwork/QNetworkAccessManager>
|
||||
|
||||
class SpkJsonApiConsumer: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkJsonApiConsumer();
|
||||
|
||||
private:
|
||||
QNetworkAccessManager mNet;
|
||||
|
||||
public slots:
|
||||
void RequestUrl(QUrl);
|
||||
|
||||
signals:
|
||||
void RequestFinish(QJsonDocument, int);
|
||||
};
|
||||
|
||||
#endif // SPKJSONAPICONSUMER_H
|
47
inc/spklogging.h
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
/**
|
||||
* @brief Simple logging for Spark Store
|
||||
*/
|
||||
|
||||
#ifndef _SPKLOGGING_H_
|
||||
#define _SPKLOGGING_H_
|
||||
|
||||
#pragma push_macro("signals")
|
||||
#undef signals
|
||||
#include <libnotify/notify.h>
|
||||
#define signals DUMMY
|
||||
#pragma pop_macro("signals")
|
||||
#include <QString>
|
||||
#include <QStringListModel>
|
||||
#include <QTextStream>
|
||||
#include <QFile>
|
||||
|
||||
class SpkLogger
|
||||
{
|
||||
QStringListModel mLogData;
|
||||
QString mLogPath;
|
||||
QFile mLogFile;
|
||||
QTextStream mLogWriter;
|
||||
static SpkLogger *Instance;
|
||||
void Initialize(QString suggestPath = "");
|
||||
bool NotifyViable = false;
|
||||
|
||||
public:
|
||||
SpkLogger(QString suggestPath = "");
|
||||
~SpkLogger();
|
||||
static SpkLogger *GetInstance() { return Instance; };
|
||||
void Log(QString message);
|
||||
void Warning(QString message);
|
||||
void Error(QString message, bool pop = false);
|
||||
void Critical(QString message);
|
||||
void Notify(QString);
|
||||
};
|
||||
|
||||
#define sLog(X) SpkLogger::GetInstance()->Log(X)
|
||||
#define sWarn(X) SpkLogger::GetInstance()->Warning(X)
|
||||
#define sErr(X) SpkLogger::GetInstance()->Error(X)
|
||||
#define sErrPop(X) SpkLogger::GetInstance()->Error(X,true)
|
||||
#define sCritical(X) SpkLogger::GetInstance()->Critical(X)
|
||||
#define sNotify(X)
|
||||
|
||||
#endif //_SPKLOGGING_H_
|
78
inc/spkmainwindow.h
Normal file
@ -0,0 +1,78 @@
|
||||
//
|
||||
// Created by rigoligo on 2021/5/9.
|
||||
//
|
||||
|
||||
#ifndef _SPKMAINWINDOW_H_
|
||||
#define _SPKMAINWINDOW_H_
|
||||
|
||||
#include "spkwindow.h"
|
||||
#include <QTextEdit>
|
||||
#include <QStackedWidget>
|
||||
#include <QButtonGroup>
|
||||
#include <QJsonObject>
|
||||
#include "spkpageqsstest.h"
|
||||
|
||||
namespace SpkUi
|
||||
{
|
||||
class SpkCategoryButton : public QPushButton
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkCategoryButton(QWidget *parent = nullptr);
|
||||
void SetIcon(QPixmap);
|
||||
void SetText(QString);
|
||||
static constexpr int Spacing = 8;
|
||||
private:
|
||||
QHBoxLayout *mLayout;
|
||||
QLabel *mIcon, *mText;
|
||||
};
|
||||
class SpkCategorySelector : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkCategorySelector(QWidget *parent = nullptr);
|
||||
|
||||
void AddButton(QString aBtnText, int aCategoryId = 0, QPixmap *aBtnIcon = nullptr);
|
||||
void DeleteAllButtons();
|
||||
|
||||
signals:
|
||||
void CategorySelected(int);
|
||||
|
||||
private:
|
||||
QVBoxLayout *mBtnLayout;
|
||||
QButtonGroup *mGroup;
|
||||
QList<SpkCategoryButton*> mBtnList;
|
||||
};
|
||||
|
||||
class SpkMainWidget : public QFrame
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkMainWidget(QWidget *parent = nullptr);
|
||||
|
||||
QHBoxLayout *HorizontalDivide;
|
||||
SpkCategorySelector *CategoryWidget;
|
||||
QVBoxLayout *VLayCategoryButtons,
|
||||
*VLayMain;
|
||||
SpkTitleBar *TitleBar;
|
||||
|
||||
QStackedWidget *Pager;
|
||||
|
||||
//Pages
|
||||
SpkPageQssTest *PageQssTest;
|
||||
};
|
||||
}
|
||||
|
||||
class SpkMainWindow : public SpkWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
SpkUi::SpkMainWidget *ui;
|
||||
|
||||
public:
|
||||
SpkMainWindow(QWidget *parent = nullptr);
|
||||
|
||||
void PopulateCategories(QJsonObject);
|
||||
};
|
||||
|
||||
#endif //_SPKMAINWINDOW_H_
|
22
inc/spkmsgbox.h
Normal file
@ -0,0 +1,22 @@
|
||||
#ifndef SPKMSGBOX_H
|
||||
#define SPKMSGBOX_H
|
||||
|
||||
#include <QStyle>
|
||||
#include <QMessageBox>
|
||||
#include "spkdialog.h"
|
||||
|
||||
class SpkMsgBox : public SpkDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkMsgBox();
|
||||
static int StaticExec(QString msg, QString title, QMessageBox::Icon = QMessageBox::NoIcon,
|
||||
QMessageBox::StandardButtons = QMessageBox::Ok, QString extra = "");
|
||||
private:
|
||||
static void AddButtons(SpkMsgBox *me, QMessageBox::StandardButtons b);
|
||||
QList<QMessageBox::StandardButton> mButtonList;
|
||||
static constexpr QSize IconSize {48, 48};
|
||||
static constexpr int Margin = 10;
|
||||
};
|
||||
|
||||
#endif // SPKMSGBOX_H
|
44
inc/spkpageqsstest.h
Normal file
@ -0,0 +1,44 @@
|
||||
#ifndef SPKPAGEQSSTEST_H
|
||||
#define SPKPAGEQSSTEST_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QSplitter>
|
||||
#include <QPushButton>
|
||||
#include <QRadioButton>
|
||||
#include <QCheckBox>
|
||||
#include <QGroupBox>
|
||||
#include <QTextEdit>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QSlider>
|
||||
namespace SpkUi
|
||||
{
|
||||
class SpkPageQssTest : public QSplitter
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkPageQssTest(QWidget *parent = nullptr);
|
||||
QWidget *WidL, *WidR;
|
||||
QVBoxLayout *VLayWidgets,
|
||||
*VLayBtn,
|
||||
*VLayInput;
|
||||
QHBoxLayout *HLay4Slider,
|
||||
*HLayInputBtns;
|
||||
QTextEdit *TextStylesheet;
|
||||
QPushButton *BtnApply;
|
||||
QPushButton *BtnFetch;
|
||||
|
||||
QPushButton *Btn;
|
||||
QCheckBox *Chk;
|
||||
QRadioButton *Rad;
|
||||
QGroupBox *Group;
|
||||
QSlider *SlideH;
|
||||
QSlider *SlideV;
|
||||
|
||||
public slots:
|
||||
void SetStylesheet();
|
||||
void FetchStylesheet();
|
||||
};
|
||||
}
|
||||
|
||||
#endif // SPKPAGEQSSTEST_H
|
34
inc/spkstore.h
Normal file
@ -0,0 +1,34 @@
|
||||
//
|
||||
// Created by rigoligo on 2021/5/12.
|
||||
//
|
||||
|
||||
#ifndef _SPKSTORE_H_
|
||||
#define _SPKSTORE_H_
|
||||
|
||||
#include <QMap>
|
||||
#include <QString>
|
||||
#include "spklogging.h"
|
||||
#include "spkmainwindow.h"
|
||||
|
||||
/**
|
||||
* @brief SpkStore class is the core of the store client side program, it is constructed first and
|
||||
* handling all processing after the launch. All client side data should be held by it,
|
||||
* including preferences class, category names, request URLs, downloads status, packaging
|
||||
* backend interfaces and so on.
|
||||
*/
|
||||
class SpkStore : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkStore *Instance;
|
||||
SpkStore(bool aCli, QString &aLogPath);
|
||||
~SpkStore();
|
||||
|
||||
|
||||
private:
|
||||
SpkLogger *mLogger;
|
||||
SpkMainWindow *mMainWindow;
|
||||
|
||||
};
|
||||
|
||||
#endif //_SPKSTORE_H_
|
74
inc/spktitlebar.h
Normal file
@ -0,0 +1,74 @@
|
||||
//
|
||||
// Created by rigoligo on 2021/5/8.
|
||||
//
|
||||
|
||||
#ifndef _SPKTITLEBAR_H_
|
||||
#define _SPKTITLEBAR_H_
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QPixmap>
|
||||
#include <QPainter>
|
||||
#include <QBrush>
|
||||
#include <QPushButton>
|
||||
#include <QMainWindow>
|
||||
|
||||
namespace SpkUi
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
class SpkWindow;
|
||||
|
||||
class SpkTitleBarDefaultButton : public QPushButton
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
SpkTitleBarDefaultButton();
|
||||
enum OperationButton { Minimize = 1, MaximizeRestore = 2, Close = 4, Restore = 3 };
|
||||
void SetRole(OperationButton);
|
||||
constexpr static int ButtonWidth = 60;
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
private:
|
||||
OperationButton Role;
|
||||
void PaintSymbol(QPainter &);
|
||||
};
|
||||
|
||||
class SpkTitleBar : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
friend class SpkWindow;
|
||||
public:
|
||||
SpkTitleBar(QWidget *parent = nullptr);
|
||||
~SpkTitleBar();
|
||||
using OperationButton = SpkTitleBarDefaultButton::OperationButton;
|
||||
void SetOperationButton(OperationButton);
|
||||
|
||||
void SetIcon(QPixmap &p) { mIcon.setPixmap(p); };
|
||||
void SetTitle(QString t) { mTitle.setText(t); };
|
||||
QString GetTitle() { return mTitle.text(); };
|
||||
void SetUseIcon(bool t) { mIcon.setVisible(t); };
|
||||
void SetLinkedWindow(QMainWindow *w) { mLinkedWindow = w; };
|
||||
|
||||
QHBoxLayout &GetLeftUserSpace() { return mUserSpaceL; };
|
||||
QHBoxLayout &GetRightUserSpace() { return mUserSpaceR; };
|
||||
protected:
|
||||
bool event(QEvent*) override;
|
||||
|
||||
private:
|
||||
QLabel mIcon;
|
||||
QLabel mTitle;
|
||||
QMainWindow *mLinkedWindow;
|
||||
QHBoxLayout mMainLayout, mUserSpaceL, mUserSpaceR;
|
||||
SpkTitleBarDefaultButton mBtnMin, mBtnMaxRestore, mBtnClose;
|
||||
|
||||
private slots:
|
||||
void CloseWindow();
|
||||
void MinimizeWindow();
|
||||
void MaximizeRestoreWindow();
|
||||
};
|
||||
|
||||
#endif //_SPKTITLEBAR_H_
|
38
inc/spkui_general.h
Normal file
@ -0,0 +1,38 @@
|
||||
//
|
||||
// Created by rigoligo on 2021/5/8.
|
||||
//
|
||||
|
||||
#ifndef _SPKUI_GENERAL_H_
|
||||
#define _SPKUI_GENERAL_H_
|
||||
|
||||
#include <QString>
|
||||
#include <QSize>
|
||||
#include <QColor>
|
||||
|
||||
namespace SpkUi
|
||||
{
|
||||
constexpr int StackTraceArraySize = 64;
|
||||
constexpr const char * const StoreIconName = "spark-store";
|
||||
|
||||
extern QString StylesheetLight, StylesheetDark, *CurrentStylesheet;
|
||||
extern QColor ColorLine, ColorBack;
|
||||
extern QSize PrimaryScreenSize;
|
||||
enum SpkUiStyle { Light, Dark };
|
||||
enum SpkButtonStyle { Normal = 0, Recommend, Warn };
|
||||
|
||||
namespace Priv
|
||||
{
|
||||
extern bool CrashHandlerActivated;
|
||||
}
|
||||
|
||||
void Initialize();
|
||||
void GuessAppropriateTheme();
|
||||
void PrepareForDeepinDesktop();
|
||||
bool CheckIsDeepinDesktop();
|
||||
|
||||
void CrashSignalHandler(int);
|
||||
|
||||
void SetGlobalStyle(SpkUiStyle);
|
||||
};
|
||||
|
||||
#endif //_SPKUI_GENERAL_H_
|
35
inc/spkuimsg.h
Normal file
@ -0,0 +1,35 @@
|
||||
//
|
||||
// Created by rigoligo on 2021/5/9.
|
||||
//
|
||||
|
||||
#ifndef _SPKUIMSG_H_
|
||||
#define _SPKUIMSG_H_
|
||||
|
||||
#pragma push_macro("signals")
|
||||
#undef signals
|
||||
#include <libnotify/notify.h>
|
||||
#define signals DUMMY
|
||||
#pragma pop_macro("signals")
|
||||
|
||||
#include <QString>
|
||||
#include <QObject>
|
||||
#include "spkui_general.h"
|
||||
|
||||
class SpkUiMessage : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static void SendDesktopNotification(QString aMsg,
|
||||
const char * const aIcon = SpkUi::StoreIconName);
|
||||
static void SendStoreNotification(QString);
|
||||
static void SetDesktopNotifyTimeout(int ms);
|
||||
|
||||
private:
|
||||
static NotifyNotification *_notify;
|
||||
static int mTimeoutDesktop;
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif //_SPKUIMSG_H_
|
67
inc/spkwindow.h
Normal file
@ -0,0 +1,67 @@
|
||||
//
|
||||
// Created by rigoligo on 2021/5/8.
|
||||
//
|
||||
|
||||
#ifndef _SPKWINDOW_H_
|
||||
#define _SPKWINDOW_H_
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QFrame>
|
||||
#include <QHBoxLayout>
|
||||
#include <QVBoxLayout>
|
||||
#include <QPushButton>
|
||||
#include <QLabel>
|
||||
#include <QCloseEvent>
|
||||
#include "spktitlebar.h"
|
||||
|
||||
class SpkWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum SpkWindowStyle { Dark, Light };
|
||||
|
||||
private:
|
||||
QWidget *mCentralWidget, *mUserCentralWidget;
|
||||
QVBoxLayout *mMainVLayout;
|
||||
SpkTitleBar *mTitleBarComponent;
|
||||
int mCornerRadius;
|
||||
bool mMoving, mResizing, mMaximized, mResizable;
|
||||
Qt::Edges mEdgesBeingResized;
|
||||
bool (*mCloseHook)(void);
|
||||
|
||||
static constexpr int BorderWidth = 10;
|
||||
|
||||
public:
|
||||
SpkWindow(QWidget *parent = nullptr);
|
||||
~SpkWindow() override;
|
||||
void SetCentralWidget(QWidget *);
|
||||
bool GetUseTitleBar();
|
||||
bool GetResizable() { return mResizable; };
|
||||
void SetCloseHook(bool(*f)(void));
|
||||
|
||||
public slots:
|
||||
void SetCornerRadius(int);
|
||||
void SetWindowTheme(SpkWindowStyle);
|
||||
void SetUseTitleBar(bool);
|
||||
void SetResizable(bool a) { mResizable = a; };
|
||||
void SetCentralMargin(int, int, int, int);
|
||||
void ClearCloseHook();
|
||||
void RecalculateSize();
|
||||
SpkTitleBar *GetTitleBar();
|
||||
SpkTitleBar *SetTitleBar(SpkTitleBar*, bool replace = false);
|
||||
|
||||
signals:
|
||||
void Closed();
|
||||
|
||||
protected:
|
||||
bool event(QEvent *) override;
|
||||
Qt::Edges DetectEdgeOnThis(QPoint);
|
||||
void SetMouseCursor(Qt::Edges);
|
||||
void ResizeWindowByCursor(QPoint);
|
||||
void closeEvent(QCloseEvent *) override;
|
||||
|
||||
private:
|
||||
void PopulateUi();
|
||||
};
|
||||
|
||||
#endif //_SPKWINDOW_H_
|
240
inc/xcb/xcbint.h
Normal file
@ -0,0 +1,240 @@
|
||||
/*
|
||||
* Copyright (C) 2001-2004 Bart Massey and Jamey Sharp.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Except as contained in this notice, the names of the authors or their
|
||||
* institutions shall not be used in advertising or otherwise to promote the
|
||||
* sale, use or other dealings in this Software without prior written
|
||||
* authorization from the authors.
|
||||
*/
|
||||
|
||||
#ifndef __XCBINT_H
|
||||
#define __XCBINT_H
|
||||
|
||||
#include "bigreq.h"
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef GCC_HAS_VISIBILITY
|
||||
#pragma GCC visibility push(hidden)
|
||||
#endif
|
||||
|
||||
#ifndef __has_attribute
|
||||
# define __has_attribute(x) 0 /* Compatibility with older compilers. */
|
||||
#endif
|
||||
|
||||
#if __has_attribute(fallthrough)
|
||||
# define XCB_ALLOW_FALLTHRU __attribute__ ((fallthrough));
|
||||
#else
|
||||
# define XCB_ALLOW_FALLTHRU /* FALLTHRU */
|
||||
#endif
|
||||
|
||||
enum workarounds {
|
||||
WORKAROUND_NONE,
|
||||
WORKAROUND_GLX_GET_FB_CONFIGS_BUG,
|
||||
WORKAROUND_EXTERNAL_SOCKET_OWNER
|
||||
};
|
||||
|
||||
enum lazy_reply_tag
|
||||
{
|
||||
LAZY_NONE = 0,
|
||||
LAZY_COOKIE,
|
||||
LAZY_FORCED
|
||||
};
|
||||
|
||||
#define XCB_PAD(i) (-(i) & 3)
|
||||
|
||||
#define XCB_SEQUENCE_COMPARE(a,op,b) ((int64_t) ((a) - (b)) op 0)
|
||||
|
||||
#ifndef offsetof
|
||||
#define offsetof(type,member) ((size_t) &((type *)0)->member)
|
||||
#endif
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(x,y) ((x) < (y) ? (x) : (y))
|
||||
#endif
|
||||
|
||||
#define container_of(pointer,type,member) ((type *)(((char *)(pointer)) - offsetof(type, member)))
|
||||
|
||||
/* xcb_list.c */
|
||||
|
||||
typedef void (*xcb_list_free_func_t)(void *);
|
||||
|
||||
typedef struct _xcb_map _xcb_map;
|
||||
|
||||
_xcb_map *_xcb_map_new(void);
|
||||
void _xcb_map_delete(_xcb_map *q, xcb_list_free_func_t do_free);
|
||||
int _xcb_map_put(_xcb_map *q, unsigned int key, void *data);
|
||||
void *_xcb_map_remove(_xcb_map *q, unsigned int key);
|
||||
|
||||
|
||||
/* xcb_out.c */
|
||||
|
||||
#if HAVE_SENDMSG
|
||||
#define XCB_MAX_PASS_FD 16
|
||||
|
||||
typedef struct _xcb_fd {
|
||||
int fd[XCB_MAX_PASS_FD];
|
||||
int nfd;
|
||||
int ifd;
|
||||
} _xcb_fd;
|
||||
#endif
|
||||
|
||||
typedef struct _xcb_out {
|
||||
pthread_cond_t cond;
|
||||
int writing;
|
||||
|
||||
pthread_cond_t socket_cond;
|
||||
void (*return_socket)(void *closure);
|
||||
void *socket_closure;
|
||||
int socket_moving;
|
||||
|
||||
char queue[XCB_QUEUE_BUFFER_SIZE];
|
||||
int queue_len;
|
||||
|
||||
uint64_t request;
|
||||
uint64_t request_written;
|
||||
uint64_t total_written;
|
||||
|
||||
pthread_mutex_t reqlenlock;
|
||||
enum lazy_reply_tag maximum_request_length_tag;
|
||||
union {
|
||||
xcb_big_requests_enable_cookie_t cookie;
|
||||
uint32_t value;
|
||||
} maximum_request_length;
|
||||
#if HAVE_SENDMSG
|
||||
_xcb_fd out_fd;
|
||||
#endif
|
||||
} _xcb_out;
|
||||
|
||||
int _xcb_out_init(_xcb_out *out);
|
||||
void _xcb_out_destroy(_xcb_out *out);
|
||||
|
||||
int _xcb_out_send(xcb_connection_t *c, struct iovec *vector, int count);
|
||||
void _xcb_out_send_sync(xcb_connection_t *c);
|
||||
int _xcb_out_flush_to(xcb_connection_t *c, uint64_t request);
|
||||
|
||||
|
||||
/* xcb_in.c */
|
||||
|
||||
typedef struct _xcb_in {
|
||||
pthread_cond_t event_cond;
|
||||
int reading;
|
||||
|
||||
char queue[4096];
|
||||
int queue_len;
|
||||
|
||||
uint64_t request_expected;
|
||||
uint64_t request_read;
|
||||
uint64_t request_completed;
|
||||
uint64_t total_read;
|
||||
struct reply_list *current_reply;
|
||||
struct reply_list **current_reply_tail;
|
||||
|
||||
_xcb_map *replies;
|
||||
struct event_list *events;
|
||||
struct event_list **events_tail;
|
||||
struct reader_list *readers;
|
||||
struct special_list *special_waiters;
|
||||
|
||||
struct pending_reply *pending_replies;
|
||||
struct pending_reply **pending_replies_tail;
|
||||
#if HAVE_SENDMSG
|
||||
_xcb_fd in_fd;
|
||||
#endif
|
||||
struct xcb_special_event *special_events;
|
||||
} _xcb_in;
|
||||
|
||||
int _xcb_in_init(_xcb_in *in);
|
||||
void _xcb_in_destroy(_xcb_in *in);
|
||||
|
||||
void _xcb_in_wake_up_next_reader(xcb_connection_t *c);
|
||||
|
||||
int _xcb_in_expect_reply(xcb_connection_t *c, uint64_t request, enum workarounds workaround, int flags);
|
||||
void _xcb_in_replies_done(xcb_connection_t *c);
|
||||
|
||||
int _xcb_in_read(xcb_connection_t *c);
|
||||
int _xcb_in_read_block(xcb_connection_t *c, void *buf, int nread);
|
||||
|
||||
|
||||
/* xcb_xid.c */
|
||||
|
||||
typedef struct _xcb_xid {
|
||||
pthread_mutex_t lock;
|
||||
uint32_t last;
|
||||
uint32_t base;
|
||||
uint32_t max;
|
||||
uint32_t inc;
|
||||
} _xcb_xid;
|
||||
|
||||
int _xcb_xid_init(xcb_connection_t *c);
|
||||
void _xcb_xid_destroy(xcb_connection_t *c);
|
||||
|
||||
|
||||
/* xcb_ext.c */
|
||||
|
||||
typedef struct _xcb_ext {
|
||||
pthread_mutex_t lock;
|
||||
struct lazyreply *extensions;
|
||||
int extensions_size;
|
||||
} _xcb_ext;
|
||||
|
||||
int _xcb_ext_init(xcb_connection_t *c);
|
||||
void _xcb_ext_destroy(xcb_connection_t *c);
|
||||
|
||||
|
||||
/* xcb_conn.c */
|
||||
|
||||
struct xcb_connection_t {
|
||||
/* This must be the first field; see _xcb_conn_ret_error(). */
|
||||
int has_error;
|
||||
|
||||
/* constant data */
|
||||
xcb_setup_t *setup;
|
||||
int fd;
|
||||
|
||||
/* I/O data */
|
||||
pthread_mutex_t iolock;
|
||||
_xcb_in in;
|
||||
_xcb_out out;
|
||||
|
||||
/* misc data */
|
||||
_xcb_ext ext;
|
||||
_xcb_xid xid;
|
||||
};
|
||||
|
||||
void _xcb_conn_shutdown(xcb_connection_t *c, int err);
|
||||
|
||||
xcb_connection_t *_xcb_conn_ret_error(int err);
|
||||
|
||||
int _xcb_conn_wait(xcb_connection_t *c, pthread_cond_t *cond, struct iovec **vector, int *count);
|
||||
|
||||
|
||||
/* xcb_auth.c */
|
||||
|
||||
int _xcb_get_auth_info(int fd, xcb_auth_info_t *info, int display);
|
||||
|
||||
#ifdef GCC_HAS_VISIBILITY
|
||||
#pragma GCC visibility pop
|
||||
#endif
|
||||
|
||||
#endif
|
19
resource/lipsum.txt
Normal file
@ -0,0 +1,19 @@
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
Nam vehicula lacus vitae leo fermentum efficitur.
|
||||
Phasellus finibus risus id aliquam pulvinar.
|
||||
Sed fringilla felis id rhoncus molestie.
|
||||
Morbi commodo tellus eu elit semper, volutpat tincidunt diam porta.
|
||||
Suspendisse eget augue a ipsum commodo imperdiet vitae vitae tortor.
|
||||
Fusce rhoncus felis et eros aliquet convallis.
|
||||
Morbi viverra nulla et lectus facilisis, eget pharetra odio ullamcorper.
|
||||
Proin in neque sed elit feugiat sagittis.
|
||||
Maecenas in nibh ac est finibus dignissim.
|
||||
Morbi egestas augue eu facilisis blandit.
|
||||
Nulla bibendum justo congue varius vehicula.
|
||||
Nunc a enim tristique, mollis nulla vestibulum, facilisis sem.
|
||||
Aliquam pulvinar nisl vel odio suscipit, quis sagittis mi posuere.
|
||||
Nunc ultrices tortor at dolor venenatis, sit amet tristique nunc placerat.
|
||||
Suspendisse sodales felis eu mauris mattis, ac sodales orci luctus.
|
||||
Aliquam ut lacus porta, mattis lorem sed, ultrices urna.
|
||||
Sed vel erat in dolor ornare mollis et id mi.
|
||||
Curabitur at purus a purus efficitur varius in ac velit.
|
9
resource/resource.qrc
Normal file
@ -0,0 +1,9 @@
|
||||
<RCC>
|
||||
<qresource prefix="/stylesheets">
|
||||
<file>stylesheets/mainwindow.css</file>
|
||||
<file>stylesheets/mainwindow_dark.css</file>
|
||||
</qresource>
|
||||
<qresource prefix="/info">
|
||||
<file>lipsum.txt</file>
|
||||
</qresource>
|
||||
</RCC>
|
4
resource/stylesheets/mainwindow.css
Normal file
@ -0,0 +1,4 @@
|
||||
QWidget
|
||||
{
|
||||
background-color: #f7f7f7;
|
||||
}
|
87
resource/stylesheets/mainwindow_dark.css
Normal file
@ -0,0 +1,87 @@
|
||||
QWidget
|
||||
{
|
||||
background-color: #353535;
|
||||
}
|
||||
|
||||
QLabel
|
||||
{
|
||||
font-size: 16px
|
||||
}
|
||||
|
||||
QScrollArea
|
||||
{
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
QPushButton
|
||||
{
|
||||
border-width: 1px;
|
||||
padding: 4px;
|
||||
border-radius: 7px;
|
||||
font-size: 16px;
|
||||
font-weight: 300;
|
||||
border-top-color: #7b7b7b;
|
||||
border-style: solid;
|
||||
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #6b6b6b, stop:1 #656565)
|
||||
}
|
||||
|
||||
QPushButton::pressed
|
||||
{
|
||||
border-top-color: #656565;
|
||||
border-bottom-color: #7b7b7b;
|
||||
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #606060, stop:1 #6b6b6b)
|
||||
}
|
||||
|
||||
QPushButton[objectName=spk_styling_msgboxexpandbtn]
|
||||
{
|
||||
border-width: 0px;
|
||||
background-color: #434343
|
||||
}
|
||||
|
||||
QPushButton[objectName=spk_styling_msgboxexpandbtn]::checked
|
||||
{
|
||||
background-color: #0070ff
|
||||
}
|
||||
|
||||
SpkWindow::!focused
|
||||
{
|
||||
background-color: #2c2c2c
|
||||
}
|
||||
|
||||
SpkTitleBar
|
||||
{
|
||||
border-color: #404040;
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton
|
||||
{
|
||||
margin: 0px;
|
||||
border-radius: 0px;
|
||||
border-width: 0px;
|
||||
background-color: #353535;
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton:hover
|
||||
{
|
||||
background-color: #404040;
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton:pressed
|
||||
{
|
||||
background-color: #5e5e5e;
|
||||
}
|
||||
|
||||
QScrollBar::handle
|
||||
{
|
||||
border: 0px;
|
||||
border-radius: 5px;
|
||||
background-color: #606060
|
||||
}
|
||||
QScrollBar::horizontal{height: 10px}
|
||||
QScrollBar::vertical{width:10px}
|
||||
|
||||
QScrollBar::handle:hover
|
||||
{
|
||||
background-color: #606060
|
||||
}
|