Merge branch 'dev' into version-v2, alpha release v1.99.2
Former-commit-id: 4dbfd74f4b
10
.github/workflows/build-push.yml
vendored
@ -36,7 +36,7 @@ jobs:
|
||||
cd build
|
||||
cd release
|
||||
del *.cpp *.h *.o *.qrc *.qm
|
||||
windeployqt ./Qv2ray.exe --compiler-runtime
|
||||
windeployqt ./qv2ray.exe --compiler-runtime
|
||||
cd ..
|
||||
..\tools\7z.exe a Qv2ray.zip .\release
|
||||
- name: Uploading artifact
|
||||
@ -71,10 +71,10 @@ jobs:
|
||||
- name: Making release tarball
|
||||
run: |
|
||||
cd build
|
||||
cd Qv2ray.app
|
||||
cd qv2ray.app
|
||||
macdeployqt ./
|
||||
cd ..
|
||||
tar czf Qv2ray.app.tar.gz Qv2ray.app
|
||||
tar czf Qv2ray.app.tar.gz qv2ray.app
|
||||
- name: Uploading Artifact
|
||||
uses: actions/upload-artifact@master
|
||||
with:
|
||||
@ -117,7 +117,7 @@ jobs:
|
||||
cd AppDir
|
||||
mkdir -p ./usr/lib/
|
||||
mkdir -p ./usr/bin/
|
||||
mv ./usr/local/bin/Qv2ray ./usr/bin/Qv2ray
|
||||
mv ./usr/local/bin/qv2ray ./usr/bin/qv2ray
|
||||
cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 ./usr/lib/
|
||||
- name: Building AppImage using linuxdeployqt
|
||||
run: |
|
||||
@ -126,7 +126,7 @@ jobs:
|
||||
chmod +x ./linuxdeployqt-6-x86_64.AppImage
|
||||
./linuxdeployqt-6-x86_64.AppImage --appimage-extract
|
||||
cd AppDir
|
||||
../squashfs-root/AppRun usr/share/applications/Qv2ray.desktop -appimage -no-strip -always-overwrite
|
||||
../squashfs-root/AppRun usr/share/applications/qv2ray.desktop -appimage -no-strip -always-overwrite
|
||||
mv ./Qv2ray*.AppImage ./Qv2ray.AppImage
|
||||
- name: Uploading artifact
|
||||
uses: actions/upload-artifact@master
|
||||
|
10
.github/workflows/build-release.yml
vendored
@ -38,7 +38,7 @@ jobs:
|
||||
cd build
|
||||
cd release
|
||||
del *.cpp *.h *.o *.qrc *.qm
|
||||
windeployqt ./Qv2ray.exe --compiler-runtime
|
||||
windeployqt ./qv2ray.exe --compiler-runtime
|
||||
cd ..
|
||||
..\tools\7z.exe a Qv2ray.zip .\release
|
||||
- name: Uploading artifact
|
||||
@ -81,10 +81,10 @@ jobs:
|
||||
- name: Making release tarball
|
||||
run: |
|
||||
cd build
|
||||
cd Qv2ray.app
|
||||
cd qv2ray.app
|
||||
macdeployqt ./
|
||||
cd ..
|
||||
tar czf Qv2ray.app.tar.gz Qv2ray.app
|
||||
tar czf Qv2ray.app.tar.gz qv2ray.app
|
||||
- name: Uploading Artifact
|
||||
uses: actions/upload-artifact@master
|
||||
with:
|
||||
@ -135,7 +135,7 @@ jobs:
|
||||
cd AppDir
|
||||
mkdir -p ./usr/lib/
|
||||
mkdir -p ./usr/bin/
|
||||
mv ./usr/local/bin/Qv2ray ./usr/bin/Qv2ray
|
||||
mv ./usr/local/bin/qv2ray ./usr/bin/qv2ray
|
||||
cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 ./usr/lib/
|
||||
- name: Building AppImage using linuxdeployqt
|
||||
run: |
|
||||
@ -144,7 +144,7 @@ jobs:
|
||||
chmod +x ./linuxdeployqt-6-x86_64.AppImage
|
||||
./linuxdeployqt-6-x86_64.AppImage --appimage-extract
|
||||
cd AppDir
|
||||
../squashfs-root/AppRun usr/share/applications/Qv2ray.desktop -appimage -no-strip -always-overwrite
|
||||
../squashfs-root/AppRun usr/share/applications/qv2ray.desktop -appimage -no-strip -always-overwrite
|
||||
mv ./Qv2ray*.AppImage ./Qv2ray.AppImage
|
||||
- name: Uploading artifact
|
||||
uses: actions/upload-artifact@master
|
||||
|
1
.gitignore
vendored
@ -4,6 +4,7 @@
|
||||
*.qm
|
||||
./.vscode
|
||||
|
||||
SourceTrail/
|
||||
|
||||
libs/gen/
|
||||
libs/gRPC-win32/
|
||||
|
6
.gitmodules
vendored
@ -1,3 +1,9 @@
|
||||
[submodule "3rdparty/x2struct"]
|
||||
path = 3rdparty/x2struct
|
||||
url = https://github.com/xyz347/x2struct
|
||||
[submodule "3rdparty/qzxing_noTests"]
|
||||
path = 3rdparty/qzxing_noTests
|
||||
url = https://github.com/lhy0403/qzxing_noTests
|
||||
[submodule "3rdparty/qhttpserver"]
|
||||
path = 3rdparty/qhttpserver
|
||||
url = https://github.com/nikhilm/qhttpserver
|
||||
|
1
3rdparty/qhttpserver
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 02a6e7174b5be76e2c0e74a109817e39a141b9fd
|
1
3rdparty/qzxing_noTests
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit c29307b6124e012ba1287ba0906e8807424e45c2
|
2
3rdparty/x2struct
vendored
@ -1 +1 @@
|
||||
Subproject commit 61abc0a4df4b5b3d730b926231b05593560369c2
|
||||
Subproject commit f2200a5f662730f2c5e49bccb680edbd533f1ff8
|
@ -1 +1 @@
|
||||
155
|
||||
917
|
||||
|
115
Qv2ray.pro
@ -6,10 +6,15 @@
|
||||
|
||||
QT += core gui widgets network charts
|
||||
|
||||
TARGET = Qv2ray
|
||||
TARGET = qv2ray
|
||||
TEMPLATE = app
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
CONFIG += c++11 openssl-linked lrelease embed_translations
|
||||
|
||||
# Don't merge those configs with below.
|
||||
CONFIG += enable_decoder_qr_code enable_encoder_qr_code
|
||||
include(3rdparty/qzxing_noTests/QZXing-components.pri)
|
||||
|
||||
# Main config
|
||||
CONFIG += qt c++11 openssl-linked lrelease embed_translations
|
||||
|
||||
# Now read build number file.
|
||||
_BUILD_NUMBER=$$cat(Build.Counter)
|
||||
@ -17,66 +22,79 @@ VERSION = 1.99.1.$$_BUILD_NUMBER
|
||||
_BUILD_NUMBER = $$num_add($$_BUILD_NUMBER, 1)
|
||||
write_file("Build.Counter", _BUILD_NUMBER)
|
||||
|
||||
DEFINES += QV2RAY_VERSION_STRING=\"\\\"v$${VERSION}\\\"\"
|
||||
DEFINES += QT_DEPRECATED_WARNINGS QV2RAY_VERSION_STRING=\"\\\"v$${VERSION}\\\"\"
|
||||
|
||||
SOURCES += \
|
||||
src/components/QvComponentsHandler.cpp \
|
||||
src/components/QvPACHandler.cpp \
|
||||
src/components/QvSystemProxyConfigurator.cpp \
|
||||
src/main.cpp \
|
||||
src/components/QvCoreInteractions.cpp \
|
||||
src/components/QvGFWPACConverter.cpp \
|
||||
src/components/QvHTTPRequestHelper.cpp \
|
||||
src/QvCoreConfigOperations.cpp \
|
||||
src/QvConfigUpgrade.cpp \
|
||||
src/QvCoreConfigOperations_Convertion.cpp \
|
||||
src/QvCoreConfigOperations_Generation.cpp \
|
||||
src/QvCoreConfigOperations_Verification.cpp \
|
||||
src/QvCoreInteractions.cpp \
|
||||
src/QvUtils.cpp \
|
||||
src/ui/NetSpeedBar/QvNetSpeedBar.cpp \
|
||||
src/utils/QObjectMessageProxy.cpp \
|
||||
src/utils/QvPingModel.cpp \
|
||||
src/utils/QvRunguard.cpp \
|
||||
src/utils/QJsonModel.cpp \
|
||||
src/ui/w_ExportConfig.cpp \
|
||||
src/ui/w_InboundEditor.cpp \
|
||||
src/ui/w_OutboundEditor.cpp \
|
||||
src/ui/w_RoutesEditor.cpp \
|
||||
src/ui/w_SubscriptionEditor.cpp \
|
||||
src/utils/QObjectMessageProxy.cpp \
|
||||
src/utils/QPingModel.cpp \
|
||||
src/utils/QvHTTPRequestHelper.cpp \
|
||||
src/utils/QvRunguard.cpp \
|
||||
src/utils/QJsonModel.cpp \
|
||||
src/ui/w_JsonEditor.cpp \
|
||||
src/ui/w_MainWindow.cpp \
|
||||
src/ui/w_ImportConfig.cpp \
|
||||
src/ui/w_PrefrencesWindow.cpp \
|
||||
src/ui/w_ScreenShot_Core.cpp \
|
||||
src/ui/NetSpeedBar/QvNetSpeedBar.cpp \
|
||||
libs/gen/v2ray_api_commands.pb.cc \
|
||||
libs/gen/v2ray_api_commands.grpc.pb.cc
|
||||
|
||||
INCLUDEPATH += \
|
||||
3rdparty/ \
|
||||
src/ \
|
||||
src/components \
|
||||
src/ui/ \
|
||||
src/utils/ \
|
||||
libs/gen/
|
||||
|
||||
HEADERS += \
|
||||
src/Qv2rayBase.h \
|
||||
src/QvCoreConfigObjects.h \
|
||||
src/QvCoreConfigOperations.h \
|
||||
src/QvCoreInteractions.h \
|
||||
src/QvUtils.h \
|
||||
src/ui/w_InboundEditor.h \
|
||||
src/ui/w_OutboundEditor.h \
|
||||
src/ui/w_RoutesEditor.h \
|
||||
src/ui/w_SubscriptionEditor.h \
|
||||
src/Qv2rayBase.hpp \
|
||||
src/QvCoreConfigObjects.hpp \
|
||||
src/QvCoreConfigOperations.hpp \
|
||||
src/QvUtils.hpp \
|
||||
src/components/QvComponentsHandler.hpp \
|
||||
src/components/QvCoreInteractions.hpp \
|
||||
src/components/QvHTTPRequestHelper.hpp \
|
||||
src/components/QvNetSpeedPlugin.hpp \
|
||||
src/components/QvPACHandler.hpp \
|
||||
src/components/QvSystemProxyConfigurator.hpp \
|
||||
src/ui/w_ExportConfig.hpp \
|
||||
src/ui/w_ImportConfig.hpp \
|
||||
src/ui/w_InboundEditor.hpp \
|
||||
src/ui/w_JsonEditor.hpp \
|
||||
src/ui/w_MainWindow.hpp \
|
||||
src/ui/w_OutboundEditor.hpp \
|
||||
src/ui/w_PrefrencesWindow.hpp \
|
||||
src/ui/w_RoutesEditor.hpp \
|
||||
src/ui/w_SubscriptionEditor.hpp \
|
||||
src/ui/w_ScreenShot_Core.hpp \
|
||||
src/utils/QvTinyLog.hpp \
|
||||
src/utils/QJsonModel.hpp \
|
||||
src/utils/QJsonObjectInsertMacros.h \
|
||||
src/utils/QObjectMessageProxy.h \
|
||||
src/utils/QPingModel.h \
|
||||
src/utils/QvHTTPRequestHelper.h \
|
||||
src/utils/QvNetSpeedPlugin.h \
|
||||
src/utils/QvRunguard.h \
|
||||
src/utils/QvTinyLog.h \
|
||||
src/utils/QJsonModel.h \
|
||||
src/ui/w_JsonEditor.h \
|
||||
src/ui/w_ImportConfig.h \
|
||||
src/ui/w_MainWindow.h \
|
||||
src/ui/w_PrefrencesWindow.h \
|
||||
src/utils/QObjectMessageProxy.hpp \
|
||||
src/utils/QvPingModel.hpp \
|
||||
src/utils/QvRunguard.hpp \
|
||||
libs/gen/v2ray_api_commands.pb.h \
|
||||
libs/gen/v2ray_api_commands.grpc.pb.h
|
||||
|
||||
FORMS += \
|
||||
src/ui/w_ExportConfig.ui \
|
||||
src/ui/w_ImportConfig.ui \
|
||||
src/ui/w_InboundEditor.ui \
|
||||
src/ui/w_JsonEditor.ui \
|
||||
@ -84,6 +102,7 @@ FORMS += \
|
||||
src/ui/w_OutboundEditor.ui \
|
||||
src/ui/w_PrefrencesWindow.ui \
|
||||
src/ui/w_RoutesEditor.ui \
|
||||
src/ui/w_ScreenShot_Core.ui \
|
||||
src/ui/w_SubscriptionEditor.ui
|
||||
|
||||
RESOURCES += \
|
||||
@ -102,8 +121,10 @@ message("| |")
|
||||
message("| See: https://www.gnu.org/licenses/gpl-3.0.html |")
|
||||
message("|-------------------------------------------------|")
|
||||
message(" ")
|
||||
RC_ICONS += ./icons/Qv2ray.ico
|
||||
ICON = ./icons/Qv2ray.icns
|
||||
|
||||
|
||||
RC_ICONS += ./icons/qv2ray.ico
|
||||
ICON = ./icons/qv2ray.icns
|
||||
|
||||
# ------------------------------------------ Begin checking gRPC and protobuf headers.
|
||||
!exists(libs/gen/v2ray_api_commands.grpc.pb.h) || !exists(libs/gen/v2ray_api_commands.grpc.pb.cc) || !exists(libs/gen/v2ray_api_commands.pb.h) || !exists(libs/gen/v2ray_api_commands.pb.cc) {
|
||||
@ -128,7 +149,8 @@ for(var, $$list($$files("translations/*.ts", true))) {
|
||||
LOCALE_FILENAME = $$basename(var)
|
||||
message(" --> Found:" $$LOCALE_FILENAME)
|
||||
!equals(LOCALE_FILENAME, "en-US.ts") {
|
||||
# ONLY USED IN LRELEASE CONTEXTen-US is not EXTRA...
|
||||
# ONLY USED IN LRELEASE CONTEXT
|
||||
# en-US is not EXTRA...
|
||||
EXTRA_TRANSLATIONS += translations/$$LOCALE_FILENAME
|
||||
}
|
||||
}
|
||||
@ -136,9 +158,23 @@ message("Qv2ray will build with" $${replace(EXTRA_TRANSLATIONS, "translations/",
|
||||
TRANSLATIONS += translations/en-US.ts
|
||||
|
||||
message(" ")
|
||||
QMAKE_CXXFLAGS += "-Wno-missing-field-initializers" "-Wno-unused-parameter" "-Wno-unused-variable"
|
||||
QMAKE_CXXFLAGS += -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-variable
|
||||
|
||||
message("Adding QHttpServer Support")
|
||||
message(" --> Adding qhttpserver")
|
||||
HEADERS += $$PWD/3rdparty/qhttpserver/src/*.h
|
||||
SOURCES += $$PWD/3rdparty/qhttpserver/src/*.cpp
|
||||
INCLUDEPATH += 3rdparty/qhttpserver/src/
|
||||
|
||||
message(" --> Adding http parser")
|
||||
HEADERS += 3rdparty/qhttpserver/http-parser/http_parser.h
|
||||
SOURCES += 3rdparty/qhttpserver/http-parser/http_parser.c
|
||||
INCLUDEPATH += 3rdparty/qhttpserver/http-parser/
|
||||
|
||||
message(" ")
|
||||
win32 {
|
||||
message("Configuring for win32 environment")
|
||||
DEFINES += QHTTPSERVER_EXPORT
|
||||
message(" --> Setting up target descriptions")
|
||||
QMAKE_TARGET_DESCRIPTION = "Qv2ray, a cross-platform v2ray GUI client."
|
||||
QMAKE_TARGET_PRODUCT = "Qv2ray"
|
||||
@ -153,6 +189,9 @@ win32 {
|
||||
message(" --> Linking against gRPC and protobuf library.")
|
||||
LIBS += -L$$PWD/libs/gRPC-win32/lib/ -llibgrpc++.dll -llibprotobuf.dll
|
||||
|
||||
message(" --> Linking against winHTTP.")
|
||||
LIBS += -lwinhttp -lwininet
|
||||
|
||||
INCLUDEPATH += $$PWD/libs/gRPC-win32/include
|
||||
DEPENDPATH += $$PWD/libs/gRPC-win32/include
|
||||
PRE_TARGETDEPS += $$PWD/libs/gRPC-win32/lib/libgrpc++.dll.a $$PWD/libs/gRPC-win32/lib/libprotobuf.dll.a
|
||||
@ -173,11 +212,11 @@ unix {
|
||||
SOURCES += src/ui/NetSpeedBar/QvNetSpeedBar_linux.cpp
|
||||
|
||||
message(" --> Generating desktop dependency.")
|
||||
desktop.files += ./icons/Qv2ray.desktop
|
||||
desktop.files += ./icons/qv2ray.desktop
|
||||
desktop.path = /usr/share/applications/
|
||||
|
||||
message(" --> Generating icons dependency.")
|
||||
icon.files += ./icons/Qv2ray.png
|
||||
icon.files += ./icons/qv2ray.png
|
||||
icon.path = /usr/share/icons/hicolor/256x256/apps/
|
||||
|
||||
target.path = /usr/local/bin/
|
||||
|
18
README.md
@ -37,20 +37,20 @@
|
||||
|
||||
- 访问链接: [https://jenkins.lhy0403.top/](https://jenkins.lhy0403.top/)
|
||||
|
||||
| | [Master](https://github.com/lhy0403/Qv2ray/tree/master) | [Developement](https://github.com/lhy0403/Qv2ray/tree/dev) | [Version v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) | [Version v2](https://github.com/lhy0403/Qv2ray/tree/version-v2) | Testing |
|
||||
| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| Linux AppImage | [](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Release/) | [](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Dev/) | [](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Version1/) | [](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Version2/) | [](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Testing/) |
|
||||
| Windows Zip | [](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Release/) | [](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Dev/) | [](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Version1/) | [](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Version2/) | [](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Testing/) |
|
||||
| | [Master](https://github.com/lhy0403/Qv2ray/tree/master) | [Version v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) |
|
||||
| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| Linux AppImage | [](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Release/) | [](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Version1/) |
|
||||
| Windows Zip | [](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Release/) | [](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Version1/) |
|
||||
|
||||
### Travis & Appveyor 多平台构建状态
|
||||
|
||||
*Travis per machine badge provided by: [badge-matrix](https://github.com/exogen/badge-matrix)*
|
||||
|
||||
| OS | 主分支 [master](https://github.com/lhy0403/Qv2ray/tree/master) | 开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) | 版本分支 [version-v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) | 版本分支 [version-v2](https://github.com/lhy0403/Qv2ray/tree/version-v2) |
|
||||
| --------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| [Linux](https://travis-ci.com/lhy0403/Qv2ray) |  |  |  |  |
|
||||
| [macOS](https://travis-ci.com/lhy0403/Qv2ray) |  |  |  |  |
|
||||
| [Windows](https://ci.appveyor.com/project/lhy0403/qv2ray) | [](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/master) | [](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/dev) | [](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/version-v1) | [](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/version-v2) |
|
||||
| OS | 主分支 [master](https://github.com/lhy0403/Qv2ray/tree/master) | 版本分支 [version-v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) |
|
||||
| --------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| [Linux](https://travis-ci.com/lhy0403/Qv2ray) |  |  |
|
||||
| [macOS](https://travis-ci.com/lhy0403/Qv2ray) |  |  |
|
||||
| [Windows](https://ci.appveyor.com/project/lhy0403/qv2ray) | [](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/master) | [](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/version-v1) |
|
||||
|
||||
|
||||
|
||||
|
BIN
icons/Qv2ray.ico
Before Width: | Height: | Size: 17 KiB |
BIN
icons/Qv2ray.png
Before Width: | Height: | Size: 17 KiB |
BIN
icons/Qv2ray.xcf
Before Width: | Height: | Size: 2.1 KiB |
@ -1,63 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 210 297"
|
||||
version="1.1"
|
||||
id="svg16"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="add_connection_btn.svg">
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.49497475"
|
||||
inkscape:cx="-311.88599"
|
||||
inkscape:cy="374.18688"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata13">
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
id="rect74-7"
|
||||
style="fill:#808080;stroke-width:0.23007688"
|
||||
d="M 110.29167,82.354162 V 214.64584 H 99.708338 l -10e-7,-132.291678 z M 38.854163,143.20833 H 171.14584 v 10.58333 H 38.854163 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.9 KiB |
319
icons/designs/Applogo_Circle.svg
Normal file
@ -0,0 +1,319 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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"
|
||||
width="48"
|
||||
height="48"
|
||||
viewBox="0 0 12.699999 12.7"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="Qv2ray_AppLogo-noBG.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/qv2ray.png"
|
||||
inkscape:export-xdpi="292.57144"
|
||||
inkscape:export-ydpi="292.57144">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient908">
|
||||
<stop
|
||||
style="stop-color:#6e7678;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop904" />
|
||||
<stop
|
||||
style="stop-color:#2e3235;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop906" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1014"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop1010"
|
||||
offset="0"
|
||||
style="stop-color:#232629;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop1012"
|
||||
offset="1"
|
||||
style="stop-color:#282728;stop-opacity:0.6574803" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient847">
|
||||
<stop
|
||||
style="stop-color:#c1fe6f;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop843" />
|
||||
<stop
|
||||
style="stop-color:#60fe6f;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop845" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5057">
|
||||
<stop
|
||||
style="stop-color:#3c3c3c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5053" />
|
||||
<stop
|
||||
style="stop-color:#282728;stop-opacity:0.6574803"
|
||||
offset="1"
|
||||
id="stop5055" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4759">
|
||||
<stop
|
||||
style="stop-color:#2eec71;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4755" />
|
||||
<stop
|
||||
style="stop-color:#1cdc9a;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4757" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4713"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4709"
|
||||
offset="0"
|
||||
style="stop-color:#3de256;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4711"
|
||||
offset="1"
|
||||
style="stop-color:#2fbeba;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4713"
|
||||
id="linearGradient4707"
|
||||
x1="89.965836"
|
||||
y1="19.458199"
|
||||
x2="108.00179"
|
||||
y2="39.934193"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(38.574145,1.3181723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5057"
|
||||
id="linearGradient5059"
|
||||
x1="92.227142"
|
||||
y1="48.940449"
|
||||
x2="140.26065"
|
||||
y2="94.022179"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4759"
|
||||
id="linearGradient953"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.34597512,0.06144722,-0.06655638,0.31941658,-25.119909,272.6237)"
|
||||
x1="85.229973"
|
||||
y1="28.293249"
|
||||
x2="113.08728"
|
||||
y2="35.515835" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient847"
|
||||
id="linearGradient955"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.15666471,0,0,0.15666471,-5.1504396,254.55225)"
|
||||
x1="39.630962"
|
||||
y1="196.65211"
|
||||
x2="56.496174"
|
||||
y2="208.57474" />
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.20376549,0,0,0.20074727,-14.31152,285.69187)"
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1014"
|
||||
id="linearGradient976"
|
||||
x1="85.003403"
|
||||
y1="24.072737"
|
||||
x2="90.152313"
|
||||
y2="29.206858"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath922">
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625"
|
||||
id="rect924"
|
||||
width="12.7"
|
||||
height="12.170834"
|
||||
x="9.5367426e-08"
|
||||
y="284.56458"
|
||||
ry="1.0638391" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient908"
|
||||
id="linearGradient910"
|
||||
x1="12.7"
|
||||
y1="284.29999"
|
||||
x2="12.7"
|
||||
y2="297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.87500008,0,0,0.87505491,0.81442048,36.315602)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4759"
|
||||
id="linearGradient874"
|
||||
x1="255.39789"
|
||||
y1="156.97427"
|
||||
x2="256.42874"
|
||||
y2="156.97427"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient908"
|
||||
id="linearGradient62"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.87500008,0,0,0.87505491,-13.281515,36.362432)"
|
||||
x1="12.7"
|
||||
y1="284.29999"
|
||||
x2="12.7"
|
||||
y2="297" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="15.980121"
|
||||
inkscape:cx="20.802729"
|
||||
inkscape:cy="23.989658"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-text-baseline="true"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-to-guides="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid885" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-284.29999)">
|
||||
<ellipse
|
||||
id="path64"
|
||||
cx="6.3760843"
|
||||
cy="290.90906"
|
||||
rx="6.2284365"
|
||||
ry="6.1347756"
|
||||
style="fill:url(#linearGradient62)"
|
||||
z="9" />
|
||||
<g
|
||||
id="g889"
|
||||
transform="matrix(0.77674917,0,0,0.77993751,1.4662318,64.012038)">
|
||||
<path
|
||||
style="fill:#27b181;fill-opacity:1;stroke:none;stroke-width:0.02480469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 4.9266835,288.67208 c 0,0 -0.3728772,0.72708 -0.5817291,0.90212 -0.1467587,0.12299 -0.5403878,0.19489 -0.5403878,0.19489 l 0.7707172,0.2259 1.6743163,-0.39422 c 0,0 -0.7913874,-1.07043 -1.3229166,-0.92869 z"
|
||||
id="path879-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-0"
|
||||
d="m 4.1744977,288.92304 c 0,0 1.1173813,-2.75102 3.3019109,-0.59828 2.1845217,2.15274 3.6949274,5.47345 3.6949274,5.47345 0,0 -2.9944654,-4.26031 -6.9968383,-4.87517 z"
|
||||
style="fill:#1cd28e;fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-6-93"
|
||||
d="m 2.2426889,288.4487 c 0,0 -0.1508518,-2.94653 2.7747518,-1.81527 2.9256022,1.13127 6.6242253,4.28351 6.6242253,4.28351 0,0 -4.8112308,-3.07932 -9.3989771,-2.46824 z"
|
||||
style="fill:url(#linearGradient953);fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-6-9-6"
|
||||
d="m 1.3229167,287.74194 c 0,0 -1.322916666666666,-2.64583 1.9849644,-2.35592 3.1595803,0.27691 7.8046189,2.09134 7.8046189,2.09134 0,0 -5.6043102,-1.52438 -9.7895833,0.26458 z"
|
||||
style="fill:url(#linearGradient955);fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.27755448;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 3.6416708,289.91693 c -0.7492351,0 -1.3524704,0.69167 -1.3524704,1.5509 v 1.17083 c 0,0.85923 0.6032353,1.55108 1.3524704,1.55108 h 0.5832971 c 0.7492363,0 1.3524712,-0.69185 1.3524712,-1.55108 v -1.17083 c 0,-0.85923 -0.6032349,-1.5509 -1.3524712,-1.5509 z m 0.1234318,0.60551 h 0.3346139 c 0.429567,0 0.7753625,0.37687 0.7753625,0.84495 v 1.40023 c 0,0.46808 -0.3457955,0.84495 -0.7753625,0.84495 H 3.7651026 c -0.4295666,0 -0.7753632,-0.37687 -0.7753632,-0.84495 v -1.40023 c 0,-0.46808 0.3457966,-0.84495 0.7753632,-0.84495 z"
|
||||
id="rect4871-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient874);fill-opacity:1.0;stroke:none;stroke-width:0.28459525;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4892-2"
|
||||
width="1.0308615"
|
||||
height="0.77975327"
|
||||
x="255.39789"
|
||||
y="156.5844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
transform="matrix(0.54708146,0.83707937,-0.86047141,0.50949872,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.5;fill:url(#linearGradient976);fill-opacity:0.5;stroke:none;stroke-width:0.6178087;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect968"
|
||||
width="1.8878751"
|
||||
height="3.0746891"
|
||||
x="2.9962649"
|
||||
y="290.52454"
|
||||
ry="0.7882148" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:1.77398825px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.04434972"
|
||||
x="6.0134816"
|
||||
y="291.99249"
|
||||
id="text877"
|
||||
transform="scale(0.99392476,1.0061124)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan875"
|
||||
x="6.0134816"
|
||||
y="291.99249"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.04434972">V2ray</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
271
icons/designs/Applogo_Frameless.svg
Normal file
@ -0,0 +1,271 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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"
|
||||
width="48"
|
||||
height="48"
|
||||
viewBox="0 0 12.699999 12.7"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="Applogo_Frameless.svg"
|
||||
inkscape:export-filename="/media/Storage/Projects/Qv2ray/icons/qv.png"
|
||||
inkscape:export-xdpi="512"
|
||||
inkscape:export-ydpi="512">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient908">
|
||||
<stop
|
||||
style="stop-color:#6e7678;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop904" />
|
||||
<stop
|
||||
style="stop-color:#2e3235;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop906" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient847">
|
||||
<stop
|
||||
style="stop-color:#c1fe6f;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop843" />
|
||||
<stop
|
||||
style="stop-color:#60fe6f;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop845" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5057">
|
||||
<stop
|
||||
style="stop-color:#3c3c3c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5053" />
|
||||
<stop
|
||||
style="stop-color:#282728;stop-opacity:0.6574803"
|
||||
offset="1"
|
||||
id="stop5055" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4759">
|
||||
<stop
|
||||
style="stop-color:#2eec71;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4755" />
|
||||
<stop
|
||||
style="stop-color:#1cdc9a;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4757" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4713"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4709"
|
||||
offset="0"
|
||||
style="stop-color:#3de256;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4711"
|
||||
offset="1"
|
||||
style="stop-color:#2fbeba;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4713"
|
||||
id="linearGradient4707"
|
||||
x1="89.965836"
|
||||
y1="19.458199"
|
||||
x2="108.00179"
|
||||
y2="39.934193"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(38.574145,1.3181723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5057"
|
||||
id="linearGradient5059"
|
||||
x1="92.227142"
|
||||
y1="48.940449"
|
||||
x2="140.26065"
|
||||
y2="94.022179"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4759"
|
||||
id="linearGradient953"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.34597512,0.06144722,-0.06655638,0.31941658,-25.119909,272.6237)"
|
||||
x1="85.229973"
|
||||
y1="28.293249"
|
||||
x2="113.08728"
|
||||
y2="35.515835" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient847"
|
||||
id="linearGradient955"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.15666471,0,0,0.15666471,-5.1504396,254.55225)"
|
||||
x1="39.630962"
|
||||
y1="196.65211"
|
||||
x2="56.496174"
|
||||
y2="208.57474" />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath922">
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625"
|
||||
id="rect924"
|
||||
width="12.7"
|
||||
height="12.170834"
|
||||
x="9.5367426e-08"
|
||||
y="284.56458"
|
||||
ry="1.0638391" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient908"
|
||||
id="linearGradient910"
|
||||
x1="12.7"
|
||||
y1="284.29999"
|
||||
x2="12.7"
|
||||
y2="297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.87500008,0,0,0.87505491,0.81442048,36.315602)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4759"
|
||||
id="linearGradient874"
|
||||
x1="255.39789"
|
||||
y1="156.97427"
|
||||
x2="256.42874"
|
||||
y2="156.97427"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="31.960242"
|
||||
inkscape:cx="19.684095"
|
||||
inkscape:cy="21.19423"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="false"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:snap-midpoints="false"
|
||||
units="px"
|
||||
inkscape:snap-nodes="false"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-center="false"
|
||||
inkscape:snap-text-baseline="false"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-to-guides="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid885" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-284.29999)">
|
||||
<g
|
||||
id="g889"
|
||||
transform="matrix(0.77674917,0,0,0.77993751,1.4662318,64.012038)">
|
||||
<path
|
||||
style="fill:#27b181;fill-opacity:1;stroke:none;stroke-width:0.02480469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 4.9266835,288.67208 c 0,0 -0.3728772,0.72708 -0.5817291,0.90212 -0.1467587,0.12299 -0.5403878,0.19489 -0.5403878,0.19489 l 0.7707172,0.2259 1.6743163,-0.39422 c 0,0 -0.7913874,-1.07043 -1.3229166,-0.92869 z"
|
||||
id="path879-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-0"
|
||||
d="m 4.1744977,288.92304 c 0,0 1.1173813,-2.75102 3.3019109,-0.59828 2.1845217,2.15274 3.6949274,5.47345 3.6949274,5.47345 0,0 -2.9944654,-4.26031 -6.9968383,-4.87517 z"
|
||||
style="fill:#1cd28e;fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-6-93"
|
||||
d="m 2.2426889,288.4487 c 0,0 -0.1508518,-2.94653 2.7747518,-1.81527 2.9256022,1.13127 6.6242253,4.28351 6.6242253,4.28351 0,0 -4.8112308,-3.07932 -9.3989771,-2.46824 z"
|
||||
style="fill:url(#linearGradient953);fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-6-9-6"
|
||||
d="m 1.3229167,287.74194 c 0,0 -1.322916666666666,-2.64583 1.9849644,-2.35592 3.1595803,0.27691 7.8046189,2.09134 7.8046189,2.09134 0,0 -5.6043102,-1.52438 -9.7895833,0.26458 z"
|
||||
style="fill:url(#linearGradient955);fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.27755448;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 3.6416708,289.91693 c -0.7492351,0 -1.3524704,0.69167 -1.3524704,1.5509 v 1.17083 c 0,0.85923 0.6032353,1.55108 1.3524704,1.55108 h 0.5832971 c 0.7492363,0 1.3524712,-0.69185 1.3524712,-1.55108 v -1.17083 c 0,-0.85923 -0.6032349,-1.5509 -1.3524712,-1.5509 z m 0.1234318,0.60551 h 0.3346139 c 0.429567,0 0.7753625,0.37687 0.7753625,0.84495 v 1.40023 c 0,0.46808 -0.3457955,0.84495 -0.7753625,0.84495 H 3.7651026 c -0.4295666,0 -0.7753632,-0.37687 -0.7753632,-0.84495 v -1.40023 c 0,-0.46808 0.3457966,-0.84495 0.7753632,-0.84495 z"
|
||||
id="rect4871-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient874);fill-opacity:1.0;stroke:none;stroke-width:0.28459525;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4892-2"
|
||||
width="1.0308615"
|
||||
height="0.77975327"
|
||||
x="255.39789"
|
||||
y="156.5844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
transform="matrix(0.54708146,0.83707937,-0.86047141,0.50949872,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:1.77398825px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.04434972;"
|
||||
x="6.0134816"
|
||||
y="291.99249"
|
||||
id="text877"
|
||||
transform="scale(0.99392476,1.0061124)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan875"
|
||||
x="6.0134816"
|
||||
y="291.99249"
|
||||
style="fill:#666666;fill-opacity:1;stroke-width:0.04434972;">V2ray</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 9.9 KiB |
383
icons/designs/Applogo_Square.svg
Normal file
@ -0,0 +1,383 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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"
|
||||
width="48"
|
||||
height="48"
|
||||
viewBox="0 0 12.699999 12.7"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="Qv2ray_Green.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/qv2ray.png"
|
||||
inkscape:export-xdpi="292.57144"
|
||||
inkscape:export-ydpi="292.57144">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient908">
|
||||
<stop
|
||||
style="stop-color:#6e7678;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop904" />
|
||||
<stop
|
||||
style="stop-color:#2e3235;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop906" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient881">
|
||||
<stop
|
||||
style="stop-color:#4d595a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop877" />
|
||||
<stop
|
||||
style="stop-color:#313537;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop879" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1014"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop1010"
|
||||
offset="0"
|
||||
style="stop-color:#232629;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop1012"
|
||||
offset="1"
|
||||
style="stop-color:#282728;stop-opacity:0.6574803" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient974">
|
||||
<stop
|
||||
style="stop-color:#232629;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop970" />
|
||||
<stop
|
||||
style="stop-color:#232629;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop972" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient847">
|
||||
<stop
|
||||
style="stop-color:#c1fe6f;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop843" />
|
||||
<stop
|
||||
style="stop-color:#60fe6f;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop845" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5057">
|
||||
<stop
|
||||
style="stop-color:#3c3c3c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5053" />
|
||||
<stop
|
||||
style="stop-color:#282728;stop-opacity:0.6574803"
|
||||
offset="1"
|
||||
id="stop5055" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4759">
|
||||
<stop
|
||||
style="stop-color:#2eec71;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4755" />
|
||||
<stop
|
||||
style="stop-color:#1cdc9a;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4757" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4713"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4709"
|
||||
offset="0"
|
||||
style="stop-color:#3de256;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4711"
|
||||
offset="1"
|
||||
style="stop-color:#2fbeba;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4713"
|
||||
id="linearGradient4707"
|
||||
x1="89.965836"
|
||||
y1="19.458199"
|
||||
x2="108.00179"
|
||||
y2="39.934193"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(38.574145,1.3181723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5057"
|
||||
id="linearGradient5059"
|
||||
x1="92.227142"
|
||||
y1="48.940449"
|
||||
x2="140.26065"
|
||||
y2="94.022179"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4759"
|
||||
id="linearGradient953"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.34597512,0.06144722,-0.06655638,0.31941658,-25.119909,272.6237)"
|
||||
x1="85.229973"
|
||||
y1="28.293249"
|
||||
x2="113.08728"
|
||||
y2="35.515835" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient847"
|
||||
id="linearGradient955"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.15666471,0,0,0.15666471,-5.1504396,254.55225)"
|
||||
x1="39.630962"
|
||||
y1="196.65211"
|
||||
x2="56.496174"
|
||||
y2="208.57474" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient974"
|
||||
id="linearGradient984"
|
||||
x1="2.1166666"
|
||||
y1="290.38541"
|
||||
x2="8.2020836"
|
||||
y2="297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.77674916,0,0,0.77993748,0.85059819,64.012035)" />
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.20376549,0,0,0.20074727,-14.31152,285.69187)"
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1014"
|
||||
id="linearGradient976"
|
||||
x1="85.003403"
|
||||
y1="24.072737"
|
||||
x2="90.152313"
|
||||
y2="29.206858"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient974"
|
||||
id="linearGradient1028"
|
||||
x1="1.3229166"
|
||||
y1="286.15207"
|
||||
x2="13.41244"
|
||||
y2="297.00031"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.77674916,0,0,0.77993748,1.4662318,64.013879)" />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath922">
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625"
|
||||
id="rect924"
|
||||
width="12.7"
|
||||
height="12.170834"
|
||||
x="9.5367426e-08"
|
||||
y="284.56458"
|
||||
ry="1.0638391" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient881"
|
||||
id="linearGradient883"
|
||||
x1="0"
|
||||
y1="284.82916"
|
||||
x2="12.7"
|
||||
y2="297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.87499999,0,0,0.8892651,0.79374991,32.185238)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient908"
|
||||
id="linearGradient910"
|
||||
x1="12.7"
|
||||
y1="284.29999"
|
||||
x2="12.7"
|
||||
y2="297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.87500008,0,0,0.87505491,0.81442048,36.315602)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4759"
|
||||
id="linearGradient874"
|
||||
x1="255.39789"
|
||||
y1="156.97427"
|
||||
x2="256.42874"
|
||||
y2="156.97427"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.649826"
|
||||
inkscape:cx="-54.381415"
|
||||
inkscape:cy="54.29098"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-text-baseline="true"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-grids="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid885" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-284.29999)">
|
||||
<rect
|
||||
style="fill:url(#linearGradient910);fill-opacity:1;stroke:none;stroke-width:0.21816222;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4910-1"
|
||||
width="11.1125"
|
||||
height="11.113197"
|
||||
x="0.79374999"
|
||||
y="285.09375"
|
||||
ry="0.52915668" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient883);fill-opacity:1;stroke:none;stroke-width:0.08627162;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4910-2-2"
|
||||
width="11.1125"
|
||||
height="10.352571"
|
||||
x="0.79374999"
|
||||
y="285.47388"
|
||||
ry="0.52494615" />
|
||||
<path
|
||||
style="opacity:0.65;fill:url(#linearGradient1028);fill-opacity:1;stroke:none;stroke-width:0.20593624px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 2.4938062,288.43277 1.8496339,1.85724 1.0275745,0.41087 4.9323574,4.95258 1.583192,0.002 -0.0022,-5.63289 -1.786476,-1.79602 -3.4937536,-1.0318 -3.699268,0.61907 z"
|
||||
id="path1020"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
clip-path="none" />
|
||||
<g
|
||||
id="g889"
|
||||
transform="matrix(0.77674917,0,0,0.77993751,1.4662318,64.012038)">
|
||||
<path
|
||||
style="fill:#27b181;fill-opacity:1;stroke:none;stroke-width:0.02480469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 4.9266835,288.67208 c 0,0 -0.3728772,0.72708 -0.5817291,0.90212 -0.1467587,0.12299 -0.5403878,0.19489 -0.5403878,0.19489 l 0.7707172,0.2259 1.6743163,-0.39422 c 0,0 -0.7913874,-1.07043 -1.3229166,-0.92869 z"
|
||||
id="path879-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-0"
|
||||
d="m 4.1744977,288.92304 c 0,0 1.1173813,-2.75102 3.3019109,-0.59828 2.1845217,2.15274 3.6949274,5.47345 3.6949274,5.47345 0,0 -2.9944654,-4.26031 -6.9968383,-4.87517 z"
|
||||
style="fill:#1cd28e;fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-6-93"
|
||||
d="m 2.2426889,288.4487 c 0,0 -0.1508518,-2.94653 2.7747518,-1.81527 2.9256022,1.13127 6.6242253,4.28351 6.6242253,4.28351 0,0 -4.8112308,-3.07932 -9.3989771,-2.46824 z"
|
||||
style="fill:url(#linearGradient953);fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4715-6-9-6"
|
||||
d="m 1.3229167,287.74194 c 0,0 -1.322916666666666,-2.64583 1.9849644,-2.35592 3.1595803,0.27691 7.8046189,2.09134 7.8046189,2.09134 0,0 -5.6043102,-1.52438 -9.7895833,0.26458 z"
|
||||
style="fill:url(#linearGradient955);fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
style="opacity:0.75;fill:url(#linearGradient984);fill-opacity:1;stroke:none;stroke-width:0.20593624px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 2.4947173,293.38352 2.0551488,2.26995 h 5.7544159 l -4.9323566,-4.95259 -0.9012783,-0.24572 0.7071424,0.71003 v 1.99987 l -0.5092722,0.51136 -0.5164926,0.29941 h -0.823185 l -0.6048485,-0.60732 z"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccc" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.27755448;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 3.6416708,289.91693 c -0.7492351,0 -1.3524704,0.69167 -1.3524704,1.5509 v 1.17083 c 0,0.85923 0.6032353,1.55108 1.3524704,1.55108 h 0.5832971 c 0.7492363,0 1.3524712,-0.69185 1.3524712,-1.55108 v -1.17083 c 0,-0.85923 -0.6032349,-1.5509 -1.3524712,-1.5509 z m 0.1234318,0.60551 h 0.3346139 c 0.429567,0 0.7753625,0.37687 0.7753625,0.84495 v 1.40023 c 0,0.46808 -0.3457955,0.84495 -0.7753625,0.84495 H 3.7651026 c -0.4295666,0 -0.7753632,-0.37687 -0.7753632,-0.84495 v -1.40023 c 0,-0.46808 0.3457966,-0.84495 0.7753632,-0.84495 z"
|
||||
id="rect4871-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient874);fill-opacity:1.0;stroke:none;stroke-width:0.28459525;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4892-2"
|
||||
width="1.0308615"
|
||||
height="0.77975327"
|
||||
x="255.39789"
|
||||
y="156.5844"
|
||||
rx="0"
|
||||
ry="0"
|
||||
transform="matrix(0.54708146,0.83707937,-0.86047141,0.50949872,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.5;fill:url(#linearGradient976);fill-opacity:1;stroke:none;stroke-width:0.6178087;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect968"
|
||||
width="1.8878751"
|
||||
height="3.0746891"
|
||||
x="2.9962649"
|
||||
y="290.52454"
|
||||
ry="0.7882148" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:1.77398825px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.04434972"
|
||||
x="6.0134816"
|
||||
y="291.99249"
|
||||
id="text877"
|
||||
transform="scale(0.99392476,1.0061124)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan875"
|
||||
x="6.0134816"
|
||||
y="291.99249"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.04434972">V2ray</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 14 KiB |
471
icons/designs/banner.svg
Normal file
@ -0,0 +1,471 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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"
|
||||
width="615.74542"
|
||||
height="323.61377"
|
||||
viewBox="0 0 224.48847 117.98311"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="Qv2ray_Banner.svg"
|
||||
inkscape:export-filename="/home/axionl/Qv2ray_Banner.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient1299">
|
||||
<stop
|
||||
style="stop-color:#d1f8de;stop-opacity:0.7421875"
|
||||
offset="0"
|
||||
id="stop1295" />
|
||||
<stop
|
||||
style="stop-color:#e8fff1;stop-opacity:0.26171875"
|
||||
offset="1"
|
||||
id="stop1297" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5057"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop5053"
|
||||
offset="0"
|
||||
style="stop-color:#3c3c3c;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5055"
|
||||
offset="1"
|
||||
style="stop-color:#282728;stop-opacity:0.6574803" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4713">
|
||||
<stop
|
||||
style="stop-color:#3de256;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4709" />
|
||||
<stop
|
||||
style="stop-color:#2fbeba;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4711" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(38.574145,1.3181723)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="39.934193"
|
||||
x2="108.00179"
|
||||
y1="19.458199"
|
||||
x1="89.965836"
|
||||
id="linearGradient4707"
|
||||
xlink:href="#linearGradient4713"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="94.022179"
|
||||
x2="140.26065"
|
||||
y1="48.940449"
|
||||
x1="92.227142"
|
||||
id="linearGradient5059"
|
||||
xlink:href="#linearGradient5057"
|
||||
inkscape:collect="always" />
|
||||
<clipPath
|
||||
id="clipPath922"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
ry="1.0638391"
|
||||
y="284.56458"
|
||||
x="9.5367426e-08"
|
||||
height="12.170834"
|
||||
width="12.7"
|
||||
id="rect924"
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient1014">
|
||||
<stop
|
||||
style="stop-color:#232629;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop1010" />
|
||||
<stop
|
||||
style="stop-color:#282728;stop-opacity:0.6574803"
|
||||
offset="1"
|
||||
id="stop1012" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient974"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop970"
|
||||
offset="0"
|
||||
style="stop-color:#232629;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop972"
|
||||
offset="1"
|
||||
style="stop-color:#232629;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient847"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop843"
|
||||
offset="0"
|
||||
style="stop-color:#c1fe6f;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop845"
|
||||
offset="1"
|
||||
style="stop-color:#60fe6f;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4759"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4755"
|
||||
offset="0"
|
||||
style="stop-color:#2eec71;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4757"
|
||||
offset="1"
|
||||
style="stop-color:#1cdc9a;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<clipPath
|
||||
id="clipPath922-0"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
ry="1.0638391"
|
||||
y="284.56458"
|
||||
x="9.5367426e-08"
|
||||
height="12.170834"
|
||||
width="12.7"
|
||||
id="rect924-6"
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1299"
|
||||
id="linearGradient1293"
|
||||
x1="10.783128"
|
||||
y1="217.78912"
|
||||
x2="177.85728"
|
||||
y2="339.11475"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient908"
|
||||
id="linearGradient910"
|
||||
x1="12.7"
|
||||
y1="284.29999"
|
||||
x2="12.7"
|
||||
y2="297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.2056978,0,0,1.2057734,77.261682,-114.9911)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient908">
|
||||
<stop
|
||||
style="stop-color:#6e7678;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop904" />
|
||||
<stop
|
||||
style="stop-color:#2e3235;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop906" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient881"
|
||||
id="linearGradient883"
|
||||
x1="0"
|
||||
y1="284.82916"
|
||||
x2="12.7"
|
||||
y2="297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.2056977,0,0,1.2253541,77.233199,-120.6825)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient881">
|
||||
<stop
|
||||
style="stop-color:#4d595a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop877" />
|
||||
<stop
|
||||
style="stop-color:#313537;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop879" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient974"
|
||||
id="linearGradient1028-3"
|
||||
x1="1.3229166"
|
||||
y1="286.15207"
|
||||
x2="13.41244"
|
||||
y2="297.00031"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0703139,0,0,1.0747072,78.159839,-76.824538)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4759"
|
||||
id="linearGradient953-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.34597512,0.06144722,-0.06655638,0.31941658,-25.119909,272.6237)"
|
||||
x1="85.229973"
|
||||
y1="28.293249"
|
||||
x2="113.08728"
|
||||
y2="35.515835" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient847"
|
||||
id="linearGradient955-6"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.15666471,0,0,0.15666471,-5.1504396,254.55225)"
|
||||
x1="39.630962"
|
||||
y1="196.65211"
|
||||
x2="56.496174"
|
||||
y2="208.57474" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient974"
|
||||
id="linearGradient984-1"
|
||||
x1="2.1166666"
|
||||
y1="290.38541"
|
||||
x2="8.2020836"
|
||||
y2="297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0703139,0,0,1.0747072,77.311532,-76.827079)" />
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.28077666,0,0,0.27661774,56.41904,228.63448)"
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1014"
|
||||
id="linearGradient976-2"
|
||||
x1="85.003403"
|
||||
y1="24.072737"
|
||||
x2="90.152313"
|
||||
y2="29.206858"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.959798"
|
||||
inkscape:cx="302.28651"
|
||||
inkscape:cy="226.42951"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:snap-nodes="true"
|
||||
scale-x="0.36458"
|
||||
fit-margin-top="25"
|
||||
fit-margin-left="25"
|
||||
fit-margin-right="25"
|
||||
fit-margin-bottom="25"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-text-baseline="true"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-others="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid1234"
|
||||
originx="46.619838"
|
||||
originy="24.11246" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(46.619838,-221.12875)">
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:0.26171875;stroke:none;stroke-width:0.04547203;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625"
|
||||
id="rect1328"
|
||||
width="226.03961"
|
||||
height="120.3114"
|
||||
x="-47.395409"
|
||||
y="220.2086" />
|
||||
<path
|
||||
style="fill:url(#linearGradient1293);fill-opacity:1;stroke:none;stroke-width:0.36458001px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m -37.461738,329.95377 9.160997,9.16099 H 177.85728 l 0.26073,-84.45811 -9.40747,-9.40747 v 84.70459 z"
|
||||
id="path1285"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<rect
|
||||
style="opacity:1;fill:#fffefa;fill-opacity:1;stroke:#23d829;stroke-width:0.08719815;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625"
|
||||
id="rect1254"
|
||||
width="206.17227"
|
||||
height="84.704582"
|
||||
x="-37.461739"
|
||||
y="245.24918"
|
||||
ry="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:20.29482841px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.50737071"
|
||||
x="30.43325"
|
||||
y="289.26395"
|
||||
id="text1204"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1202"
|
||||
x="30.43325"
|
||||
y="289.26395"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';fill:#4d4d4d;fill-opacity:1;stroke-width:0.50737071">QV2ray</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:20.68452454px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#666666;fill-opacity:1;stroke:none;stroke-width:0.51711321"
|
||||
x="16.455324"
|
||||
y="304.12708"
|
||||
id="text1204-7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1202-5"
|
||||
x="16.455324"
|
||||
y="304.12708"
|
||||
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:7.58432627px;font-family:'Noto Sans CJK SC';-inkscape-font-specification:'Noto Sans CJK SC Light';fill:#666666;stroke-width:0.51711321">The V2ray GUI client using Qt</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:20.68452454px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:0.51711321"
|
||||
x="23.02709"
|
||||
y="314.99207"
|
||||
id="text1204-7-7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1202-5-8"
|
||||
x="23.02709"
|
||||
y="314.99207"
|
||||
style="font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;font-size:7.58432627px;font-family:'Noto Sans CJK SC';-inkscape-font-specification:'Noto Sans CJK SC Thin';fill:#b3b3b3;stroke-width:0.51711321">Windows / Linux / macOS</tspan></text>
|
||||
<g
|
||||
id="g963"
|
||||
transform="matrix(2.3388721,0,0,2.3388721,-132.92101,-303.99427)">
|
||||
<rect
|
||||
ry="0.7291463"
|
||||
y="227.81032"
|
||||
x="77.2332"
|
||||
height="15.313321"
|
||||
width="15.31236"
|
||||
id="rect4910-1-9"
|
||||
style="fill:url(#linearGradient910);fill-opacity:1;stroke:none;stroke-width:0.30061451;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
ry="0.72334439"
|
||||
y="228.33411"
|
||||
x="77.2332"
|
||||
height="14.265224"
|
||||
width="15.31236"
|
||||
id="rect4910-2-2-3"
|
||||
style="fill:url(#linearGradient883);fill-opacity:1;stroke:none;stroke-width:0.11887714;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
clip-path="none"
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1020-6"
|
||||
d="m 79.575775,232.41128 2.548685,2.55917 1.415936,0.56615 6.796493,6.82436 2.181544,0.003 -0.003,-7.76179 -2.461662,-2.47482 -4.814184,-1.42176 -5.09737,0.85304 z"
|
||||
style="opacity:0.65;fill:url(#linearGradient1028-3);fill-opacity:1;stroke:none;stroke-width:0.28376782px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<g
|
||||
transform="matrix(1.0703139,0,0,1.0747072,78.159839,-76.82709)"
|
||||
id="g889">
|
||||
<path
|
||||
sodipodi:nodetypes="cscccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path879-7-0"
|
||||
d="m 4.9266835,288.67208 c 0,0 -0.3728772,0.72708 -0.5817291,0.90212 -0.1467587,0.12299 -0.5403878,0.19489 -0.5403878,0.19489 l 0.7707172,0.2259 1.6743163,-0.39422 c 0,0 -0.7913874,-1.07043 -1.3229166,-0.92869 z"
|
||||
style="fill:#27b181;fill-opacity:1;stroke:none;stroke-width:0.02480469px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#1cd28e;fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 4.1744977,288.92304 c 0,0 1.1173813,-2.75102 3.3019109,-0.59828 2.1845217,2.15274 3.6949274,5.47345 3.6949274,5.47345 0,0 -2.9944654,-4.26031 -6.9968383,-4.87517 z"
|
||||
id="path4715-0-6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscc" />
|
||||
<path
|
||||
style="fill:url(#linearGradient953-5);fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 2.2426889,288.4487 c 0,0 -0.1508518,-2.94653 2.7747518,-1.81527 2.9256022,1.13127 6.6242253,4.28351 6.6242253,4.28351 0,0 -4.8112308,-3.07932 -9.3989771,-2.46824 z"
|
||||
id="path4715-6-93-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient955-6);fill-opacity:1;stroke:none;stroke-width:0.08956835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 1.3229167,287.74194 c 0,0 -1.322916666666666,-2.64583 1.9849644,-2.35592 3.1595803,0.27691 7.8046189,2.09134 7.8046189,2.09134 0,0 -5.6043102,-1.52438 -9.7895833,0.26458 z"
|
||||
id="path4715-6-9-6-6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscc" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path966-1"
|
||||
d="m 79.57703,239.23312 2.831873,3.12785 h 7.92924 l -6.796492,-6.82437 -1.241908,-0.33859 0.9744,0.97838 v 2.7557 l -0.701746,0.70463 -0.711696,0.41257 h -1.1343 l -0.833445,-0.83686 z"
|
||||
style="opacity:0.75;fill:url(#linearGradient984-1);fill-opacity:1;stroke:none;stroke-width:0.28376782px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<g
|
||||
transform="matrix(0.28077666,0,0,0.27661773,56.412455,228.61984)"
|
||||
id="g4906-0-8">
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.37232864;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 88.130575,21.09953 c -3.676948,0 -6.637387,3.445469 -6.637387,7.725603 v 5.832396 c 0,4.280138 2.960439,7.726498 6.637387,7.726498 h 2.86259 c 3.676954,0 6.637391,-3.44636 6.637391,-7.726498 v -5.832396 c 0,-4.280134 -2.960437,-7.725603 -6.637391,-7.725603 z m 0.605754,3.016265 h 1.642152 c 2.108144,0 3.805171,1.877318 3.805171,4.20901 v 6.975112 c 0,2.331691 -1.697027,4.209009 -3.805171,4.209009 h -1.642152 c -2.108142,0 -3.805174,-1.877318 -3.805174,-4.209009 v -6.975112 c 0,-2.331692 1.697032,-4.20901 3.805174,-4.20901 z"
|
||||
id="rect4871-6-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:#3bdc66;fill-opacity:1;stroke:none;stroke-width:1.4067868;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4892-2-9"
|
||||
width="5.1124744"
|
||||
height="3.841737"
|
||||
x="82.512436"
|
||||
y="-58.410168"
|
||||
rx="0"
|
||||
ry="0"
|
||||
transform="matrix(0.54136549,0.84078737,-0.85710765,0.51513734,0,0)" />
|
||||
</g>
|
||||
<rect
|
||||
ry="1.0861129"
|
||||
y="235.29361"
|
||||
x="80.268135"
|
||||
height="4.2367373"
|
||||
width="2.6013789"
|
||||
id="rect968-2"
|
||||
style="opacity:0.5;fill:url(#linearGradient976-2);fill-opacity:1;stroke:none;stroke-width:0.85130346;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<text
|
||||
transform="scale(0.99392474,1.0061124)"
|
||||
id="text877"
|
||||
y="238.31897"
|
||||
x="84.891068"
|
||||
style="font-style:normal;font-weight:normal;font-size:2.44444966px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.06111126"
|
||||
xml:space="preserve"><tspan
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.06111126"
|
||||
y="238.31897"
|
||||
x="84.891068"
|
||||
id="tspan875"
|
||||
sodipodi:role="line">V2ray</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 18 KiB |
BIN
icons/designs/banner.svg.png
Normal file
After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 11 KiB |
@ -1,85 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 210 297"
|
||||
version="1.1"
|
||||
id="svg68"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="edit_connection_btn.svg">
|
||||
<defs
|
||||
id="defs62" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.16"
|
||||
inkscape:cx="-1959.3444"
|
||||
inkscape:cy="-96.386561"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true" />
|
||||
<metadata
|
||||
id="metadata65">
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g151"
|
||||
transform="matrix(0.77998462,0.45032433,-0.4818899,0.83465778,88.833102,-18.057022)"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 109.71346,185.45443 16.6138,18.51253 -16.6138,18.51253 -16.613804,-18.51253 z M 93.099655,112.60424 h 33.309325 v 91.36272 H 93.099657 Z"
|
||||
style="fill:#808080;stroke-width:0.22257984"
|
||||
id="rect24" />
|
||||
<rect
|
||||
y="88.811867"
|
||||
x="93.099655"
|
||||
height="11.896188"
|
||||
width="33.309326"
|
||||
id="rect33"
|
||||
style="fill:#808080;stroke-width:0.33672053" />
|
||||
</g>
|
||||
<rect
|
||||
style="fill:#808080;stroke-width:0.29884946"
|
||||
id="rect39"
|
||||
width="132.29167"
|
||||
height="10.583333"
|
||||
x="37.750366"
|
||||
y="219.70386"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.0 KiB |
@ -1,74 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 210 297"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="import_connection_btn.svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.78038721"
|
||||
inkscape:cx="175.16557"
|
||||
inkscape:cy="540.28184"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1" />
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
id="rect38"
|
||||
style="fill:#808080;stroke-width:0.26458332"
|
||||
d="M 106.7982,81.639253 66.522106,121.91483 H 147.07378 Z M 91.79793,121.91507 h 30 v 67.94371 h -30 z"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" />
|
||||
<rect
|
||||
style="fill:#808080;stroke-width:0.29884946"
|
||||
id="rect39-3"
|
||||
width="132.29167"
|
||||
height="10.583333"
|
||||
x="40.652103"
|
||||
y="203.34738"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="459px" height="459px" viewBox="0 0 459 459" style="enable-background:new 0 0 459 459;" xml:space="preserve">
|
||||
<g>
|
||||
<g id="swap-vert">
|
||||
<path fill="#808080" d="M331.5,357V178.5h-51V357H204l102,102l102-102H331.5z M153,0L51,102h76.5v178.5h51V102H255L153,0z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 658 B |
4
icons/Qv2ray.desktop → icons/qv2ray.desktop
Executable file → Normal file
@ -2,7 +2,7 @@
|
||||
Type=Application
|
||||
Keywords=Internet;VPN;Proxy;v2ray;Qt;
|
||||
Categories=Network;Qt;
|
||||
Icon=Qv2ray
|
||||
Exec=Qv2ray
|
||||
Icon=qv2ray
|
||||
Exec=qv2ray
|
||||
Name=Qv2ray
|
||||
Comment=Cross platform v2ray Qt GUI Client.
|
BIN
icons/qv2ray.icns
Normal file
BIN
icons/qv2ray.ico
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
icons/qv2ray.png
Normal file
After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 2.3 KiB |
@ -1,103 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 210 297"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="remove_connection_btn.svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.78038721"
|
||||
inkscape:cx="319.47995"
|
||||
inkscape:cy="722.22587"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true">
|
||||
<sodipodi:guide
|
||||
position="131.95044,215.36075"
|
||||
orientation="0,1"
|
||||
id="guide11"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="70.590597,83.065066"
|
||||
orientation="0,1"
|
||||
id="guide13"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="38.854164,198.30448"
|
||||
orientation="1,0"
|
||||
id="guide15"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="171.14584,198.30448"
|
||||
orientation="1,0"
|
||||
id="guide17"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="131.95044,199.48575"
|
||||
orientation="0,1"
|
||||
id="guide86"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
style="fill:#ff5555;stroke-width:0.32981005"
|
||||
d="m 54.174686,120.78453 v 93.15021 H 155.82533 v -93.15021 z m 14.650783,15.23548 h 13.229166 v 62.67925 H 68.825469 Z m 30.427083,0 h 13.229168 v 62.67925 H 99.252552 Z m 30.427598,0 h 13.22917 v 62.67925 h -13.22917 z"
|
||||
id="rect9"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" />
|
||||
<path
|
||||
id="rect39-3-3"
|
||||
style="fill:#ff5555;stroke-width:0.23363064"
|
||||
d="m 78.049561,81.639252 h 53.900889 v 15.875 H 78.049561 Z m -39.195389,15.875 H 171.14584 V 113.38925 H 38.854172 Z"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.3 KiB |
BIN
icons/ui_dark/add.png
Normal file
After Width: | Height: | Size: 804 B |
BIN
icons/ui_dark/delete.png
Normal file
After Width: | Height: | Size: 507 B |
145
icons/ui_dark/design/add.svg
Normal file
@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="add.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/add_connection_btn.png"
|
||||
inkscape:export-xdpi="144.00002"
|
||||
inkscape:export-ydpi="144.00002">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="8"
|
||||
inkscape:cx="-6.067921"
|
||||
inkscape:cy="6.3620808"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)"
|
||||
style="opacity:1">
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 24.145831,229.70159 v 1.05834 h -1.058334 v 1.05833 h 1.058334 v 1.05833 h 1.058333 v -1.05833 h 1.058333 v -1.05833 h -1.058333 v -1.05834 h -0.264583 z m 0.264583,0.26459 h 0.529167 v 1.05833 h 1.058333 v 0.52917 h -1.058333 v 1.05833 h -0.529167 v -1.05833 h -1.058333 v -0.52917 h 1.058333 z"
|
||||
id="path830"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="20.972286"
|
||||
y="228.64551" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="20.972509"
|
||||
y="229.71312" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 15 20 L 8 20 L 8 21 L 15 21 L 15 20 z "
|
||||
id="path839"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 9.5859375 4 L 3.9960938 9.5898438 L 4 10 L 4 25 L 15 25 L 15 24 L 5 24 L 5 10 L 10 10 L 10 5 L 20 5 L 20 15 L 21 15 L 21 4 L 10 4 L 9.5859375 4 z M 9 6 L 9 9 L 6 9 L 9 6 z "
|
||||
id="path1214"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.1 KiB |
153
icons/ui_dark/design/delete.svg
Normal file
@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="delete.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/remove_connection_btn.png"
|
||||
inkscape:export-xdpi="144.00002"
|
||||
inkscape:export-ydpi="144.00002">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6568543"
|
||||
inkscape:cx="-71.005696"
|
||||
inkscape:cy="8.8646449"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.058,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,220,255)" />
|
||||
<sodipodi:guide
|
||||
position="0,7.408"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,220,255)" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.058"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,220,255)" />
|
||||
<sodipodi:guide
|
||||
position="7.408,7.4083334"
|
||||
orientation="1,0"
|
||||
id="guide869"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,220,255)" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<path
|
||||
style="fill:#e6e6e6;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="m 20.970831,228.64326 v 3.96875 h 4.233333 v -3.96875 h 0.264583 v 4.23333 h -4.7625 v -4.23333 z"
|
||||
id="path835"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 21.76458,229.17243 v 2.91041 h 0.264584 v -2.91041 z"
|
||||
id="path837"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 22.955205,229.17243 v 2.91041 h 0.264584 v -2.91041 z"
|
||||
id="path837-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 24.145831,229.17243 v 2.91041 h 0.264584 v -2.91041 z"
|
||||
id="path837-3-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 21.76458,226.52693 v 0.79341 h 0.264584 v -0.52916 h 2.116666 v 0.52916 h 0.264584 v -0.79375 z"
|
||||
id="path871"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 4 7 L 4 12 L 27.998047 12 L 27.998047 7 L 4 7 z M 5 8 L 27 8 L 27 11 L 5 11 L 5 8 z "
|
||||
id="rect881"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.4 KiB |
166
icons/ui_dark/design/duplicate.svg
Normal file
@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="duplicate.svg"
|
||||
inkscape:export-filename="/home/axionl/Desktop/Qv2ray_Design/duplicate_connection_btn.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6568542"
|
||||
inkscape:cx="-15.536765"
|
||||
inkscape:cy="26.519006"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="22.559788"
|
||||
y="229.43913" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="22.560011"
|
||||
y="230.50674" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1-9"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="22.558331"
|
||||
y="231.55368" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-4"
|
||||
width="0.26458308"
|
||||
height="0.26457855"
|
||||
x="20.970831"
|
||||
y="228.64326"
|
||||
ry="0" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1-7"
|
||||
width="0.26435992"
|
||||
height="0.25530019"
|
||||
x="20.971054"
|
||||
y="229.71088" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1-9-8"
|
||||
width="0.2660403"
|
||||
height="0.2666975"
|
||||
x="20.969374"
|
||||
y="230.75781" />
|
||||
<path
|
||||
id="path1214"
|
||||
style="fill:#e6e6e6;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="m 21.764581,228.90784 h 1.322916 v -1.32291 l -0.264583,0.26458 v 0.79375 h -0.79375 z m -0.265642,-0.10855 1.479049,-1.47905 0.109509,10e-5 v 0.26459 l -1.322916,1.32291 h -0.264584 z m 4.498975,4.0773 v -5.55625 h -2.910417 v 0.26459 h 2.645834 v 5.02708 z m -0.264583,-0.26458 h -3.96875 v -3.70417 h -0.264584 v 3.96875 h 4.497917 z" />
|
||||
<path
|
||||
id="path1214-4"
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 20.177081,228.11409 h 1.322916 v -1.32291 l -0.264583,0.26458 v 0.79375 h -0.79375 z m -0.265642,-0.10855 1.479049,-1.47905 0.109509,1e-4 v 0.26459 l -1.322916,1.32291 h -0.264584 z m 4.498975,-0.94978 v -0.52917 h -2.910417 v 0.26459 h 2.645834 v 0.26458 z m -3.175,4.7625 h -1.058333 v -3.70417 h -0.264584 v 3.96875 h 1.322917 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.9 KiB |
213
icons/ui_dark/design/edit.svg
Normal file
@ -0,0 +1,213 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="edit.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/edit_connection_btn.png"
|
||||
inkscape:export-xdpi="192"
|
||||
inkscape:export-ydpi="192">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="22.627417"
|
||||
inkscape:cx="5.0653219"
|
||||
inkscape:cy="19.649966"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.703984,3.4395567"
|
||||
orientation="0,1"
|
||||
id="guide833"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.4587786,3.6265368"
|
||||
orientation="1,0"
|
||||
id="guide1021"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.6459543,3.4395567"
|
||||
orientation="1,0"
|
||||
id="guide1023"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="6.0108124,5.8043835"
|
||||
orientation="1,0"
|
||||
id="guide1033"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.823721,5.9914767"
|
||||
orientation="1,0"
|
||||
id="guide1035"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.823721,5.9914767"
|
||||
orientation="0,1"
|
||||
id="guide1037"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="6.0108124,5.8043835"
|
||||
orientation="0,1"
|
||||
id="guide1039"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.4587786,3.6265368"
|
||||
orientation="0,1"
|
||||
id="guide1041"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,5.2916667"
|
||||
orientation="1,0"
|
||||
id="guide1116"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<path
|
||||
id="path944"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 25.343714,10.264687 -0.70702,-0.7070204 -7.599585,7.6005364 -2.886718,2.884766 H 12.003906 L 11.980469,17.970703 21.909591,8.0421546 24.0309,10.163462 24.636694,9.5576666 21.808273,6.7292423 10.990234,17.548828 l 0.0059,1.408203 0.0078,2.085938 3.552735,0.0078 1.007812,-1.007812 z" />
|
||||
<path
|
||||
id="path842-6"
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 24.537109,4 -2.123047,2.1230469 0.707032,0.7070312 2.121094,2.1210938 0.707338,-0.7063383 -2.121306,-2.1213082 0.706936,-0.7075098 2.121094,2.1210938 -1.414062,1.4140625 0.707031,0.7070312 2.121093,-2.1210937 z"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="fill:#e6e6e6;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 22.312943,230.30839 v 0.18698 h 0.187175 l 2.364858,-2.36483 -0.187091,-0.18709 z"
|
||||
id="path1029"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#e6e6e6;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0"
|
||||
d="m 22.312943,230.30839 v 0.18698 h 0.18698 l 2.365051,-2.36483 -0.187089,-0.18709 z"
|
||||
id="path1031"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#e6e6e6;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="m 22.312943,230.30839 v 0.18698 h 0.187175 l 2.364855,-2.36483 -0.187088,-0.18709 z"
|
||||
id="path1043"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 12 15 L 8 15 L 8 16 L 11 16 L 12 15 z "
|
||||
id="path925"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 17,20.035156 h 1 v -1.035055 z"
|
||||
id="path960"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 10,19.035156 8,19 v 1.035156 h 2 z"
|
||||
id="path958"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1-9"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="20.969374"
|
||||
y="231.55156" />
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 20,7 H 10 9.5859375 L 3.9960938,12.589844 4,13 V 28 H 21 V 16 l -1,1 V 27 H 5 V 13 h 5 V 8 h 9 z M 9,9 v 3 H 6 Z"
|
||||
id="path838"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.0 KiB |
151
icons/ui_dark/design/import.svg
Normal file
@ -0,0 +1,151 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="import.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/import_connection_btn.png"
|
||||
inkscape:export-xdpi="191.99707"
|
||||
inkscape:export-ydpi="191.99707">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="8.271398"
|
||||
inkscape:cy="16.201975"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<g
|
||||
id="g832"
|
||||
transform="translate(-0.66092917,-0.79374667)"
|
||||
style="fill:#e6e6e6">
|
||||
<rect
|
||||
y="229.43913"
|
||||
x="22.559788"
|
||||
height="0.26458332"
|
||||
width="2.6458333"
|
||||
id="rect1159"
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="230.50674"
|
||||
x="22.560011"
|
||||
height="0.26458332"
|
||||
width="2.6458333"
|
||||
id="rect1159-1"
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="231.55368"
|
||||
x="22.558331"
|
||||
height="0.26458332"
|
||||
width="2.6458333"
|
||||
id="rect1159-1-9"
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 21.764581,228.90784 h 1.322916 v -1.32291 l -0.264583,0.26458 v 0.79375 h -0.79375 z m -0.265642,-0.10855 1.479049,-1.47905 0.109509,10e-5 v 0.26459 l -1.322916,1.32291 h -0.264584 z m 4.498975,4.0773 v -5.55625 h -2.910417 v 0.26459 h 2.645834 v 5.02708 z m -0.264583,-0.26458 h -3.96875 v -3.70417 h -0.264584 v 3.96875 h 4.497917 z"
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path1214"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#e6e6e6;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="m 19.912497,231.28909 h 0.529167 v 0.26459 h -0.264583 v 1.05833 h 5.820833 v -1.05833 h -0.264583 v -0.26459 h 0.529166 v 1.5875 h -6.35 z"
|
||||
id="path834"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.2 KiB |
170
icons/ui_dark/design/json.svg
Normal file
@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="json.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/add_connection_btn.png"
|
||||
inkscape:export-xdpi="144.00002"
|
||||
inkscape:export-ydpi="144.00002">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="20.318725"
|
||||
inkscape:cx="-1.4115197"
|
||||
inkscape:cy="9.6750041"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.175,7.1437467"
|
||||
orientation="0,1"
|
||||
id="guide840"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.1166665,5.8189079"
|
||||
orientation="0,1"
|
||||
id="guide842"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.6458333,3.175"
|
||||
orientation="0,1"
|
||||
id="guide1086"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.6458333,3.4395833"
|
||||
orientation="0,1"
|
||||
id="guide1088"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)"
|
||||
style="opacity:1">
|
||||
<g
|
||||
id="g1116"
|
||||
style="fill:#e6e6e6">
|
||||
<path
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path1214-6"
|
||||
d="M 9.5898438 4 L 4 9.5898438 L 4.0039062 10 L 4.0039062 25 L 11 25 L 11 24 L 5.0039062 24 L 5.0039062 10 L 10.003906 10 L 10.003906 5 L 20.003906 5 L 20.003906 10.007812 L 21.003906 10.007812 L 21.003906 4 L 10.003906 4 L 9.5898438 4 z M 9.0039062 6 L 9.0039062 9 L 6.0039062 9 L 9.0039062 6 z "
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1032"
|
||||
d="m 22.822914,228.37868 a 0.79374999,0.79374999 0 0 0 -0.79375,0.79375 v 0.79375 a 0.52916663,0.52916663 0 0 1 -0.529167,0.52916 v 0.26459 a 0.52916663,0.52916663 0 0 1 0.529167,0.52916 v 0.79375 a 0.79374999,0.79374999 0 0 0 0.79375,0.79375 v -0.26458 a 0.52916663,0.52916663 0 0 1 -0.529167,-0.52917 v -0.79375 a 0.79374999,0.79374999 0 0 0 -0.35605,-0.66145 0.79374999,0.79374999 0 0 0 0.35605,-0.66146 v -0.79375 a 0.52916663,0.52916663 0 0 1 0.529167,-0.52917 z"
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path1032-1"
|
||||
d="m 24.93958,228.37867 a 0.79375,0.79375 0 0 1 0.79375,0.79375 v 0.79375 a 0.52916664,0.52916664 0 0 0 0.529167,0.52917 v 0.26458 a 0.52916664,0.52916664 0 0 0 -0.529167,0.52917 v 0.79375 a 0.79375,0.79375 0 0 1 -0.79375,0.79375 V 232.612 a 0.52916664,0.52916664 0 0 0 0.529167,-0.52916 v -0.79375 a 0.79375,0.79375 0 0 1 0.356051,-0.66146 0.79375,0.79375 0 0 1 -0.356051,-0.66146 v -0.79375 a 0.52916664,0.52916664 0 0 0 -0.529167,-0.52917 z"
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g1108"
|
||||
style="fill:#e6e6e6">
|
||||
<circle
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1067"
|
||||
cx="23.881247"
|
||||
cy="229.96617"
|
||||
r="0.26458332" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 19 21 A 0.99999994 0.99999994 0 0 0 18 22 A 0.99999994 0.99999994 0 0 0 18.722656 22.958984 C 18.426399 23.545698 18 24 18 24 C 18 24 19.261784 23.422924 19.775391 22.630859 A 0.99999994 0.99999994 0 0 0 19.914062 22.402344 A 0.99999994 0.99999994 0 0 0 20 22 A 0.99999994 0.99999994 0 0 0 19 21 z "
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path1067-2" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
162
icons/ui_dark/design/netspeed_arrow.svg
Normal file
@ -0,0 +1,162 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="netspeed_arrow.svg"
|
||||
inkscape:export-filename="/home/axionl/Desktop/Qv2ray_Design/duplicate_connection_btn.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="16"
|
||||
inkscape:cx="9.4046517"
|
||||
inkscape:cy="5.7825006"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,6.6145834"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.0380535,7.4083327"
|
||||
orientation="1,0"
|
||||
id="guide859"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.4336343,5.2927882"
|
||||
orientation="0,1"
|
||||
id="guide864"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.6517755,5.2927883"
|
||||
orientation="1,0"
|
||||
id="guide890"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.504455,5.5525067"
|
||||
orientation="0,1"
|
||||
id="guide944"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.4979167,6.0854167"
|
||||
orientation="1,0"
|
||||
id="guide967"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.96875,3.175"
|
||||
orientation="1,0"
|
||||
id="guide969"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 13.582031 19 L 14.582031 19 L 14.582031 11.996094 L 16 11.996094 L 16 11.013672 L 13.582031 11.013672 L 13.582031 19 z "
|
||||
id="path1005"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 12.064453,4 4,11.996094 H 9.5820312 V 25 L 14,25 V 24 H 10.582031 V 11.013672 L 6.4648438,11.011719 12.064453,5.4140625 16,9.3496094 V 7.9355469 Z"
|
||||
id="path842"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
id="path842-6"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 17.519531,6.9980469 V 20.001953 H 15 v 0.982422 h 3.519531 V 7.9980469 h 3 V 20.984375 h 4.082031 L 20.001953,26.583984 15,21.580078 v 1.458984 l 5.001953,4.958985 7.996094,-7.996094 H 22.519531 V 6.9980469 Z M 15,23.039062 V 21.580078 L 14.404297,20.984375 H 15 v -0.982422 h -3.0625 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
180
icons/ui_dark/design/ping_gauge.svg
Normal file
@ -0,0 +1,180 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="ping_gauge.svg"
|
||||
inkscape:export-filename="/home/axionl/Desktop/Qv2ray_Design/duplicate_connection_btn.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:cx="-3.8227905"
|
||||
inkscape:cy="5.4884252"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,6.6145834"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.2333333,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide862"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.058333,4.2333126"
|
||||
orientation="0,1"
|
||||
id="guide896"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.4787523,1.9843804"
|
||||
orientation="0,1"
|
||||
id="guide1290"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.4787523,1.719793"
|
||||
orientation="0,1"
|
||||
id="guide1292"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<circle
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1148"
|
||||
cx="23.087498"
|
||||
cy="229.7016"
|
||||
r="0.26458338" />
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.25420347px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 23.087497,229.51453 2.245078,-2.24507 0.187089,0.18709 -2.245064,2.24506 z"
|
||||
id="path1150"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1222"
|
||||
width="0.26458332"
|
||||
height="0.26458332"
|
||||
x="-147.91432"
|
||||
y="179.55203"
|
||||
transform="rotate(-45)" />
|
||||
<path
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 21.499997,231.95055 0.474373,0 0.583961,-0.58396 1.05833,1.05833 0.474377,-0.47437 h 0.588094 v 0.26458 h -0.478511 l -0.583962,0.58397 -1.058328,-1.05833 -0.474368,0.47436 h -0.582932 z"
|
||||
id="path1298"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 16 4 A 11.999921 11.999921 0 0 0 4 16 A 11.999921 11.999921 0 0 0 7.5195312 24.480469 L 11.052734 21.267578 L 11.759766 20.560547 A 5.9999984 5.9999984 0 0 1 10 16.320312 A 5.9999984 5.9999984 0 0 1 16 10.320312 A 5.9999984 5.9999984 0 0 1 18.841797 11.037109 L 19.570312 10.308594 A 6.9999998 6.9999998 0 0 0 16 9.3203125 A 6.9999998 6.9999998 0 0 0 9 16.320312 A 6.9999998 6.9999998 0 0 0 10.375 20.46875 L 7.5566406 23.033203 A 10.999999 10.999999 0 0 1 5 16 A 10.999999 10.999999 0 0 1 16 5 A 10.999999 10.999999 0 0 1 22.634766 7.2421875 L 23.353516 6.5234375 A 11.999921 11.999921 0 0 0 16 4 z "
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path951" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 20.427734 12.279297 L 21.132812 11.574219 A 6.9999999 6.9999999 0 0 0 20.408203 10.884766 L 19.693359 11.599609 A 5.9999985 5.9999985 0 0 1 20.427734 12.279297 z "
|
||||
id="path947"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 25.46875 8.6523438 L 24.759766 9.3632812 A 10.999999 10.999999 0 0 1 27 16 A 10.999999 10.999999 0 0 1 24.445312 23.033203 L 21.623047 20.46875 A 6.9999998 6.9999998 0 0 0 23 16.320312 A 6.9999998 6.9999998 0 0 0 21.767578 12.353516 L 21.046875 13.076172 A 5.9999984 5.9999984 0 0 1 22 16.320312 A 5.9999984 5.9999984 0 0 1 20.240234 20.560547 L 20.947266 21.267578 L 24.480469 24.480469 A 11.999921 11.999921 0 0 0 28 16 A 11.999921 11.999921 0 0 0 25.46875 8.6523438 z "
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path943" />
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 24.115234 7.1777344 L 23.408203 7.8847656 A 10.999999 10.999999 0 0 1 24.117188 8.5917969 L 24.822266 7.8867188 A 11.999921 11.999921 0 0 0 24.115234 7.1777344 z "
|
||||
id="path937"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.6 KiB |
160
icons/ui_dark/design/share.svg
Normal file
@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="share.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/add_connection_btn.png"
|
||||
inkscape:export-xdpi="144.00002"
|
||||
inkscape:export-ydpi="144.00002">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="12.190575"
|
||||
inkscape:cy="12.106514"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.1166665,5.8189079"
|
||||
orientation="0,1"
|
||||
id="guide842"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.4368395,3.1750017"
|
||||
orientation="1,0"
|
||||
id="guide961"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)"
|
||||
style="opacity:1">
|
||||
<path
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.07559059;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 20,13.292969 V 14.707031 18 l -3.230469,0 h -2.683593 c -1.598676,0.07502 -2.856968,1.391754 -2.859376,2.992188 V 21 28 h 4.566407 V 27 23 L 20,23 v 3.292969 1.414062 l 1,-1 5.5,-5.5 L 27.207031,20.5 26.5,19.792969 l -5.5,-5.5 z M 21,15.707031 25.792969,20.5 21,25.292969 V 22 l -5.207031,0 -0.02344,-2 v -0.002 c -3.54e-4,-0.03325 9.5e-4,-0.06649 0.0039,-0.09961 0.0035,-0.03345 0.0087,-0.06669 0.01562,-0.09961 0.0069,-0.0323 0.01535,-0.06424 0.02539,-0.0957 0.0095,-0.03178 0.02059,-0.06307 0.0332,-0.09375 0.01346,-0.03068 0.02845,-0.06067 0.04492,-0.08984 0.01549,-0.02947 0.03243,-0.05815 0.05078,-0.08594 0.01883,-0.02769 0.03904,-0.05442 0.06055,-0.08008 0.02157,-0.02521 0.04439,-0.04933 0.06836,-0.07227 0.02426,-0.02341 0.04968,-0.04557 0.07617,-0.06641 0.02571,-0.02084 0.05243,-0.0404 0.08008,-0.05859 0.02846,-0.01774 0.05779,-0.03404 0.08789,-0.04883 0.02925,-0.01514 0.05924,-0.02883 0.08984,-0.04102 0.03136,-0.01202 0.0633,-0.02245 0.0957,-0.03125 0.03217,-0.0088 0.06477,-0.01596 0.09766,-0.02148 0.03299,-0.0056 0.06623,-0.0095 0.09961,-0.01172 0.02341,-0.0015 0.04686,-0.0021 0.07031,-0.002 L 21,19 Z M 14.085938,19 h 0.955078 c -0.176442,0.303122 -0.270068,0.647315 -0.271485,0.998047 V 20 l 0.02344,2 v 5 h -2.566407 v -6 -0.0059 c -5.6e-5,-0.06653 0.0032,-0.133016 0.0098,-0.199219 0.0065,-0.0662 0.01626,-0.132039 0.0293,-0.197266 0.01363,-0.06592 0.03058,-0.131104 0.05078,-0.195312 0.01965,-0.0636 0.04247,-0.126177 0.06836,-0.1875 0.02564,-0.06129 0.05432,-0.121256 0.08594,-0.179688 0.0323,-0.05836 0.0675,-0.115076 0.105469,-0.169922 0.0376,-0.05605 0.07802,-0.11015 0.121094,-0.162109 0.0431,-0.05108 0.08873,-0.09997 0.136718,-0.146484 0.04729,-0.04604 0.09683,-0.08972 0.148438,-0.13086 0.05268,-0.0418 0.107439,-0.08091 0.164062,-0.117187 0.05624,-0.03609 0.114262,-0.06933 0.173828,-0.09961 0.05918,-0.02968 0.119806,-0.05641 0.181641,-0.08008 0.06204,-0.02463 0.125266,-0.04614 0.189453,-0.06445 0.06435,-0.01757 0.129533,-0.03191 0.195313,-0.04297 0.06601,-0.01048 0.132495,-0.01766 0.199219,-0.02148 z"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 21.391477,226.52659 -1.47898,1.47898 0.001,0.10852 v 3.96875 h 1.5865 v -0.26458 H 20.17808 v -3.70417 h 1.322917 v -1.32291 h 2.645833 v 1.85208 h 0.264583 v -2.11667 h -2.910416 z m -0.15503,0.52917 v 0.79375 h -0.79375 z"
|
||||
id="path1214-6"
|
||||
sodipodi:nodetypes="cccccccccccccccccccc" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect846"
|
||||
width="2.9104166"
|
||||
height="0.26458332"
|
||||
x="20.706247"
|
||||
y="228.64326" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect846-3"
|
||||
width="2.9104166"
|
||||
height="0.26458332"
|
||||
x="20.706247"
|
||||
y="229.43701" />
|
||||
<rect
|
||||
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect846-3-6"
|
||||
width="1.0583333"
|
||||
height="0.2645874"
|
||||
x="20.706247"
|
||||
y="230.23076" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.4 KiB |
292
icons/ui_dark/design/tray.svg
Normal file
@ -0,0 +1,292 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
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"
|
||||
width="22"
|
||||
height="22"
|
||||
viewBox="0 0 5.8208333 5.8208333"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="Qv2ray_System_Tray_Light.svg"
|
||||
inkscape:export-filename="/home/axionl/Desktop/Qv2ray_Design/qv2ray.png"
|
||||
inkscape:export-xdpi="558.54999"
|
||||
inkscape:export-ydpi="558.54999">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="linearGradient841"
|
||||
osb:paint="solid">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop839" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5057"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop5053"
|
||||
offset="0"
|
||||
style="stop-color:#3c3c3c;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5055"
|
||||
offset="1"
|
||||
style="stop-color:#282728;stop-opacity:0.6574803" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4713">
|
||||
<stop
|
||||
style="stop-color:#3de256;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4709" />
|
||||
<stop
|
||||
style="stop-color:#2fbeba;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4711" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(38.574145,1.3181723)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="39.934193"
|
||||
x2="108.00179"
|
||||
y1="19.458199"
|
||||
x1="89.965836"
|
||||
id="linearGradient4707"
|
||||
xlink:href="#linearGradient4713"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="94.022179"
|
||||
x2="140.26065"
|
||||
y1="48.940449"
|
||||
x1="92.227142"
|
||||
id="linearGradient5059"
|
||||
xlink:href="#linearGradient5057"
|
||||
inkscape:collect="always" />
|
||||
<clipPath
|
||||
id="clipPath922"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
ry="1.0638391"
|
||||
y="284.56458"
|
||||
x="9.5367426e-08"
|
||||
height="12.170834"
|
||||
width="12.7"
|
||||
id="rect924"
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath922-6"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
ry="1.0638391"
|
||||
y="284.56458"
|
||||
x="9.5367426e-08"
|
||||
height="12.170834"
|
||||
width="12.7"
|
||||
id="rect924-2"
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625" />
|
||||
</clipPath>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter1510">
|
||||
<feFlood
|
||||
flood-opacity="0.976471"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1500" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="in"
|
||||
result="composite1"
|
||||
id="feComposite1502" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="0.1"
|
||||
result="blur"
|
||||
id="feGaussianBlur1504" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset"
|
||||
id="feOffset1506" />
|
||||
<feComposite
|
||||
in="offset"
|
||||
in2="SourceGraphic"
|
||||
operator="out"
|
||||
result="composite2"
|
||||
id="feComposite1508" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter1859">
|
||||
<feFlood
|
||||
flood-opacity="0.266667"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1849" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="in"
|
||||
result="composite1"
|
||||
id="feComposite1851" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="0.2"
|
||||
result="blur"
|
||||
id="feGaussianBlur1853" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset"
|
||||
id="feOffset1855" />
|
||||
<feComposite
|
||||
in="offset"
|
||||
in2="SourceGraphic"
|
||||
operator="out"
|
||||
result="composite2"
|
||||
id="feComposite1857" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="22.627417"
|
||||
inkscape:cx="5.9585184"
|
||||
inkscape:cy="11.144438"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
fit-margin-top="5"
|
||||
fit-margin-left="5"
|
||||
fit-margin-bottom="5"
|
||||
fit-margin-right="5"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
scale-x="1"
|
||||
guidecolor="#00ffff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#ff5184"
|
||||
guidehiopacity="0.62745098"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid815"
|
||||
originx="0"
|
||||
originy="0"
|
||||
color="#3f513e"
|
||||
opacity="0.04313725"
|
||||
empcolor="#3f3742"
|
||||
empopacity="0.16470588"
|
||||
empspacing="5"
|
||||
dotted="false" />
|
||||
<sodipodi:guide
|
||||
position="28.284675,2.8909227"
|
||||
orientation="1,0"
|
||||
id="guide924"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="26.141,6.3542733"
|
||||
orientation="1,0"
|
||||
id="guide932"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,255,236)" />
|
||||
<sodipodi:guide
|
||||
position="0.79375,4.4979166"
|
||||
orientation="1,0"
|
||||
id="guide1884"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.96875,5.0270833"
|
||||
orientation="0,1"
|
||||
id="guide1886"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.0270833,0.26458333"
|
||||
orientation="1,0"
|
||||
id="guide1888"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.4979166,0.79375"
|
||||
orientation="0,1"
|
||||
id="guide1890"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-1.9173392,-290.74464)">
|
||||
<path
|
||||
id="path1962"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,1.9173392,290.74464)"
|
||||
style="fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 7,11 6.2929688,11.707031 8.5859375,14 H 18 V 13 H 9 Z M 6.2929688,11.707031 5,13 H 4 v 1 H 5.4140625 L 7,12.414062 Z M 3,3 V 18.999988 H 19 V 3 Z M 3.9999999,3.9999875 H 18 V 18 H 3.9999999 Z" />
|
||||
<rect
|
||||
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:0.04583338;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect844"
|
||||
width="5.8208332"
|
||||
height="5.8208447"
|
||||
x="1.9173392"
|
||||
y="290.74463"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64" />
|
||||
<path
|
||||
style="fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 4.5631726,292.06756 -0.2645834,0.26459 v 0.52916 l 0.2645834,-0.26458 v 0.26458 0.52917 l 0.5291666,0.79375 0.5291667,1.32291 v -0.79374 l 0.2645833,-0.26459 -0.2645833,-0.52916 v -0.79375 l -0.2645833,-0.52917 z"
|
||||
id="path1934"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.8 KiB |
BIN
icons/ui_dark/duplicate.png
Normal file
After Width: | Height: | Size: 905 B |
BIN
icons/ui_dark/edit.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
icons/ui_dark/import.png
Normal file
After Width: | Height: | Size: 790 B |
BIN
icons/ui_dark/json.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
icons/ui_dark/netspeed_arrow.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
icons/ui_dark/ping_gauge.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
icons/ui_dark/share.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
icons/ui_dark/tray.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
icons/ui_light/add.png
Normal file
After Width: | Height: | Size: 820 B |
BIN
icons/ui_light/delete.png
Normal file
After Width: | Height: | Size: 512 B |
145
icons/ui_light/design/add.svg
Normal file
@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="add_connection_btn.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/add_connection_btn.png"
|
||||
inkscape:export-xdpi="144.00002"
|
||||
inkscape:export-ydpi="144.00002">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="12.167264"
|
||||
inkscape:cy="15.865066"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="474"
|
||||
inkscape:window-height="388"
|
||||
inkscape:window-x="901"
|
||||
inkscape:window-y="663"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)"
|
||||
style="opacity:1">
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 24.145831,229.70159 v 1.05834 h -1.058334 v 1.05833 h 1.058334 v 1.05833 h 1.058333 v -1.05833 h 1.058333 v -1.05833 h -1.058333 v -1.05834 h -0.264583 z m 0.264583,0.26459 h 0.529167 v 1.05833 h 1.058333 v 0.52917 h -1.058333 v 1.05833 h -0.529167 v -1.05833 h -1.058333 v -0.52917 h 1.058333 z"
|
||||
id="path830"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="20.972286"
|
||||
y="228.64551" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="20.972509"
|
||||
y="229.71312" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 15 20 L 8 20 L 8 21 L 15 21 L 15 20 z "
|
||||
id="path839"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 9.5859375 4 L 3.9960938 9.5898438 L 4 10 L 4 25 L 15 25 L 15 24 L 5 24 L 5 10 L 10 10 L 10 5 L 20 5 L 20 15 L 21 15 L 21 4 L 10 4 L 9.5859375 4 z M 9 6 L 9 9 L 6 9 L 9 6 z "
|
||||
id="path1214"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.1 KiB |
153
icons/ui_light/design/delete.svg
Normal file
@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="remove_connection_btn.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/remove_connection_btn.png"
|
||||
inkscape:export-xdpi="144.00002"
|
||||
inkscape:export-ydpi="144.00002">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6568543"
|
||||
inkscape:cx="-7.7196395"
|
||||
inkscape:cy="8.8646449"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.058,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,220,255)" />
|
||||
<sodipodi:guide
|
||||
position="0,7.408"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,220,255)" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.058"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,220,255)" />
|
||||
<sodipodi:guide
|
||||
position="7.408,7.4083334"
|
||||
orientation="1,0"
|
||||
id="guide869"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,220,255)" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<path
|
||||
style="fill:#31363b;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="m 20.970831,228.64326 v 3.96875 h 4.233333 v -3.96875 h 0.264583 v 4.23333 h -4.7625 v -4.23333 z"
|
||||
id="path835"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 21.76458,229.17243 v 2.91041 h 0.264584 v -2.91041 z"
|
||||
id="path837"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 22.955205,229.17243 v 2.91041 h 0.264584 v -2.91041 z"
|
||||
id="path837-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 24.145831,229.17243 v 2.91041 h 0.264584 v -2.91041 z"
|
||||
id="path837-3-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 21.76458,226.52693 v 0.79341 h 0.264584 v -0.52916 h 2.116666 v 0.52916 h 0.264584 v -0.79375 z"
|
||||
id="path871"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 4 7 L 4 12 L 27.998047 12 L 27.998047 7 L 4 7 z M 5 8 L 27 8 L 27 11 L 5 11 L 5 8 z "
|
||||
id="rect881"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.4 KiB |
166
icons/ui_light/design/duplicate.svg
Normal file
@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="duplicate_connection_btn.svg"
|
||||
inkscape:export-filename="/home/axionl/Desktop/Qv2ray_Design/duplicate_connection_btn.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6568542"
|
||||
inkscape:cx="16.106264"
|
||||
inkscape:cy="26.519006"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="22.559788"
|
||||
y="229.43913" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="22.560011"
|
||||
y="230.50674" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1-9"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="22.558331"
|
||||
y="231.55368" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-4"
|
||||
width="0.26458308"
|
||||
height="0.26457855"
|
||||
x="20.970831"
|
||||
y="228.64326"
|
||||
ry="0" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1-7"
|
||||
width="0.26435992"
|
||||
height="0.25530019"
|
||||
x="20.971054"
|
||||
y="229.71088" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1-9-8"
|
||||
width="0.2660403"
|
||||
height="0.2666975"
|
||||
x="20.969374"
|
||||
y="230.75781" />
|
||||
<path
|
||||
id="path1214"
|
||||
style="fill:#31363b;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="m 21.764581,228.90784 h 1.322916 v -1.32291 l -0.264583,0.26458 v 0.79375 h -0.79375 z m -0.265642,-0.10855 1.479049,-1.47905 0.109509,10e-5 v 0.26459 l -1.322916,1.32291 h -0.264584 z m 4.498975,4.0773 v -5.55625 h -2.910417 v 0.26459 h 2.645834 v 5.02708 z m -0.264583,-0.26458 h -3.96875 v -3.70417 h -0.264584 v 3.96875 h 4.497917 z" />
|
||||
<path
|
||||
id="path1214-4"
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 20.177081,228.11409 h 1.322916 v -1.32291 l -0.264583,0.26458 v 0.79375 h -0.79375 z m -0.265642,-0.10855 1.479049,-1.47905 0.109509,1e-4 v 0.26459 l -1.322916,1.32291 h -0.264584 z m 4.498975,-0.94978 v -0.52917 h -2.910417 v 0.26459 h 2.645834 v 0.26458 z m -3.175,4.7625 h -1.058333 v -3.70417 h -0.264584 v 3.96875 h 1.322917 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.9 KiB |
213
icons/ui_light/design/edit.svg
Normal file
@ -0,0 +1,213 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="edit_connection_btn.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/edit_connection_btn.png"
|
||||
inkscape:export-xdpi="192"
|
||||
inkscape:export-ydpi="192">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="22.627417"
|
||||
inkscape:cx="12.976079"
|
||||
inkscape:cy="19.649966"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.703984,3.4395567"
|
||||
orientation="0,1"
|
||||
id="guide833"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.4587786,3.6265368"
|
||||
orientation="1,0"
|
||||
id="guide1021"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.6459543,3.4395567"
|
||||
orientation="1,0"
|
||||
id="guide1023"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="6.0108124,5.8043835"
|
||||
orientation="1,0"
|
||||
id="guide1033"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.823721,5.9914767"
|
||||
orientation="1,0"
|
||||
id="guide1035"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.823721,5.9914767"
|
||||
orientation="0,1"
|
||||
id="guide1037"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="6.0108124,5.8043835"
|
||||
orientation="0,1"
|
||||
id="guide1039"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.4587786,3.6265368"
|
||||
orientation="0,1"
|
||||
id="guide1041"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,5.2916667"
|
||||
orientation="1,0"
|
||||
id="guide1116"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<path
|
||||
id="path944"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 25.343714,10.264687 -0.70702,-0.7070204 -7.599585,7.6005364 -2.886718,2.884766 H 12.003906 L 11.980469,17.970703 21.909591,8.0421546 24.0309,10.163462 24.636694,9.5576666 21.808273,6.7292423 10.990234,17.548828 l 0.0059,1.408203 0.0078,2.085938 3.552735,0.0078 1.007812,-1.007812 z" />
|
||||
<path
|
||||
id="path842-6"
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 24.537109,4 -2.123047,2.1230469 0.707032,0.7070312 2.121094,2.1210938 0.707338,-0.7063383 -2.121306,-2.1213082 0.706936,-0.7075098 2.121094,2.1210938 -1.414062,1.4140625 0.707031,0.7070312 2.121093,-2.1210937 z"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="fill:none;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 22.312943,230.30839 v 0.18698 h 0.187175 l 2.364858,-2.36483 -0.187091,-0.18709 z"
|
||||
id="path1029"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#ea6de6;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0"
|
||||
d="m 22.312943,230.30839 v 0.18698 h 0.18698 l 2.365051,-2.36483 -0.187089,-0.18709 z"
|
||||
id="path1031"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#31363b;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="m 22.312943,230.30839 v 0.18698 h 0.187175 l 2.364855,-2.36483 -0.187088,-0.18709 z"
|
||||
id="path1043"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 12 15 L 8 15 L 8 16 L 11 16 L 12 15 z "
|
||||
id="path925"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 17,20.035156 h 1 v -1.035055 z"
|
||||
id="path960"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 10,19.035156 8,19 v 1.035156 h 2 z"
|
||||
id="path958"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1159-1-9"
|
||||
width="2.6458333"
|
||||
height="0.26458332"
|
||||
x="20.969374"
|
||||
y="231.55156" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 20,7 H 10 9.5859375 L 3.9960938,12.589844 4,13 V 28 H 21 V 16 l -1,1 V 27 H 5 V 13 h 5 V 8 h 9 z M 9,9 v 3 H 6 Z"
|
||||
id="path838"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.1 KiB |
150
icons/ui_light/design/import.svg
Normal file
@ -0,0 +1,150 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="import_connection_btn.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/import_connection_btn.png"
|
||||
inkscape:export-xdpi="191.99707"
|
||||
inkscape:export-ydpi="191.99707">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="13.865148"
|
||||
inkscape:cy="16.201975"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<g
|
||||
id="g832"
|
||||
transform="translate(-0.66092917,-0.79374667)">
|
||||
<rect
|
||||
y="229.43913"
|
||||
x="22.559788"
|
||||
height="0.26458332"
|
||||
width="2.6458333"
|
||||
id="rect1159"
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="230.50674"
|
||||
x="22.560011"
|
||||
height="0.26458332"
|
||||
width="2.6458333"
|
||||
id="rect1159-1"
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
y="231.55368"
|
||||
x="22.558331"
|
||||
height="0.26458332"
|
||||
width="2.6458333"
|
||||
id="rect1159-1-9"
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 21.764581,228.90784 h 1.322916 v -1.32291 l -0.264583,0.26458 v 0.79375 h -0.79375 z m -0.265642,-0.10855 1.479049,-1.47905 0.109509,10e-5 v 0.26459 l -1.322916,1.32291 h -0.264584 z m 4.498975,4.0773 v -5.55625 h -2.910417 v 0.26459 h 2.645834 v 5.02708 z m -0.264583,-0.26458 h -3.96875 v -3.70417 h -0.264584 v 3.96875 h 4.497917 z"
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path1214"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#31363b;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
|
||||
d="m 19.912497,231.28909 h 0.529167 v 0.26459 h -0.264583 v 1.05833 h 5.820833 v -1.05833 h -0.264583 v -0.26459 h 0.529166 v 1.5875 h -6.35 z"
|
||||
id="path834"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.2 KiB |
168
icons/ui_light/design/json.svg
Normal file
@ -0,0 +1,168 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="json_connectio_btn.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/add_connection_btn.png"
|
||||
inkscape:export-xdpi="144.00002"
|
||||
inkscape:export-ydpi="144.00002">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="20.318725"
|
||||
inkscape:cx="7.3980882"
|
||||
inkscape:cy="9.6750041"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.175,7.1437467"
|
||||
orientation="0,1"
|
||||
id="guide840"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.1166665,5.8189079"
|
||||
orientation="0,1"
|
||||
id="guide842"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.6458333,3.175"
|
||||
orientation="0,1"
|
||||
id="guide1086"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.6458333,3.4395833"
|
||||
orientation="0,1"
|
||||
id="guide1088"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)"
|
||||
style="opacity:1">
|
||||
<g
|
||||
id="g1116">
|
||||
<path
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path1214-6"
|
||||
d="M 9.5898438 4 L 4 9.5898438 L 4.0039062 10 L 4.0039062 25 L 11 25 L 11 24 L 5.0039062 24 L 5.0039062 10 L 10.003906 10 L 10.003906 5 L 20.003906 5 L 20.003906 10.007812 L 21.003906 10.007812 L 21.003906 4 L 10.003906 4 L 9.5898438 4 z M 9.0039062 6 L 9.0039062 9 L 6.0039062 9 L 9.0039062 6 z "
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1032"
|
||||
d="m 22.822914,228.37868 a 0.79374999,0.79374999 0 0 0 -0.79375,0.79375 v 0.79375 a 0.52916663,0.52916663 0 0 1 -0.529167,0.52916 v 0.26459 a 0.52916663,0.52916663 0 0 1 0.529167,0.52916 v 0.79375 a 0.79374999,0.79374999 0 0 0 0.79375,0.79375 v -0.26458 a 0.52916663,0.52916663 0 0 1 -0.529167,-0.52917 v -0.79375 a 0.79374999,0.79374999 0 0 0 -0.35605,-0.66145 0.79374999,0.79374999 0 0 0 0.35605,-0.66146 v -0.79375 a 0.52916663,0.52916663 0 0 1 0.529167,-0.52917 z"
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path1032-1"
|
||||
d="m 24.93958,228.37867 a 0.79375,0.79375 0 0 1 0.79375,0.79375 v 0.79375 a 0.52916664,0.52916664 0 0 0 0.529167,0.52917 v 0.26458 a 0.52916664,0.52916664 0 0 0 -0.529167,0.52917 v 0.79375 a 0.79375,0.79375 0 0 1 -0.79375,0.79375 V 232.612 a 0.52916664,0.52916664 0 0 0 0.529167,-0.52916 v -0.79375 a 0.79375,0.79375 0 0 1 0.356051,-0.66146 0.79375,0.79375 0 0 1 -0.356051,-0.66146 v -0.79375 a 0.52916664,0.52916664 0 0 0 -0.529167,-0.52917 z"
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g1108">
|
||||
<circle
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1067"
|
||||
cx="23.881247"
|
||||
cy="229.96617"
|
||||
r="0.26458332" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 19 21 A 0.99999994 0.99999994 0 0 0 18 22 A 0.99999994 0.99999994 0 0 0 18.722656 22.958984 C 18.426399 23.545698 18 24 18 24 C 18 24 19.261784 23.422924 19.775391 22.630859 A 0.99999994 0.99999994 0 0 0 19.914062 22.402344 A 0.99999994 0.99999994 0 0 0 20 22 A 0.99999994 0.99999994 0 0 0 19 21 z "
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path1067-2" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
162
icons/ui_light/design/netspeed_arrow.svg
Normal file
@ -0,0 +1,162 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="netspeed-arrows.svg"
|
||||
inkscape:export-filename="/home/axionl/Desktop/Qv2ray_Design/duplicate_connection_btn.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="45.254833"
|
||||
inkscape:cx="12.163083"
|
||||
inkscape:cy="11.227074"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,6.6145834"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.0380535,7.4083327"
|
||||
orientation="1,0"
|
||||
id="guide859"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.4336343,5.2927882"
|
||||
orientation="0,1"
|
||||
id="guide864"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.6517755,5.2927883"
|
||||
orientation="1,0"
|
||||
id="guide890"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.504455,5.5525067"
|
||||
orientation="0,1"
|
||||
id="guide944"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.4979167,6.0854167"
|
||||
orientation="1,0"
|
||||
id="guide967"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.96875,3.175"
|
||||
orientation="1,0"
|
||||
id="guide969"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 13.582031 19 L 14.582031 19 L 14.582031 11.996094 L 16 11.996094 L 16 11.013672 L 13.582031 11.013672 L 13.582031 19 z "
|
||||
id="path1005"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 12.064453,4 4,11.996094 H 9.5820312 V 25 L 14,25 V 24 H 10.582031 V 11.013672 L 6.4648438,11.011719 12.064453,5.4140625 16,9.3496094 V 7.9355469 Z"
|
||||
id="path842"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
id="path842-6"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 17.519531,6.9980469 V 20.001953 H 15 v 0.982422 h 3.519531 V 7.9980469 h 3 V 20.984375 h 4.082031 L 20.001953,26.583984 15,21.580078 v 1.458984 l 5.001953,4.958985 7.996094,-7.996094 H 22.519531 V 6.9980469 Z M 15,23.039062 V 21.580078 L 14.404297,20.984375 H 15 v -0.982422 h -3.0625 z" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.5 KiB |
180
icons/ui_light/design/ping_gauge.svg
Normal file
@ -0,0 +1,180 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="ping_connection_btn.svg"
|
||||
inkscape:export-filename="/home/axionl/Desktop/Qv2ray_Design/duplicate_connection_btn.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="45.254833"
|
||||
inkscape:cx="20.545509"
|
||||
inkscape:cy="11.164374"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,6.6145834"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.2333333,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide862"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.058333,4.2333126"
|
||||
orientation="0,1"
|
||||
id="guide896"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.4787523,1.9843804"
|
||||
orientation="0,1"
|
||||
id="guide1290"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.4787523,1.719793"
|
||||
orientation="0,1"
|
||||
id="guide1292"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)">
|
||||
<circle
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1148"
|
||||
cx="23.087498"
|
||||
cy="229.7016"
|
||||
r="0.26458338" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.25420347px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 23.087497,229.51453 2.245078,-2.24507 0.187089,0.18709 -2.245064,2.24506 z"
|
||||
id="path1150"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1222"
|
||||
width="0.26458332"
|
||||
height="0.26458332"
|
||||
x="-147.91432"
|
||||
y="179.55203"
|
||||
transform="rotate(-45)" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 21.499997,231.95055 0.474373,0 0.583961,-0.58396 1.05833,1.05833 0.474377,-0.47437 h 0.588094 v 0.26458 h -0.478511 l -0.583962,0.58397 -1.058328,-1.05833 -0.474368,0.47436 h -0.582932 z"
|
||||
id="path1298"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 16 4 A 11.999921 11.999921 0 0 0 4 16 A 11.999921 11.999921 0 0 0 7.5195312 24.480469 L 11.052734 21.267578 L 11.759766 20.560547 A 5.9999984 5.9999984 0 0 1 10 16.320312 A 5.9999984 5.9999984 0 0 1 16 10.320312 A 5.9999984 5.9999984 0 0 1 18.841797 11.037109 L 19.570312 10.308594 A 6.9999998 6.9999998 0 0 0 16 9.3203125 A 6.9999998 6.9999998 0 0 0 9 16.320312 A 6.9999998 6.9999998 0 0 0 10.375 20.46875 L 7.5566406 23.033203 A 10.999999 10.999999 0 0 1 5 16 A 10.999999 10.999999 0 0 1 16 5 A 10.999999 10.999999 0 0 1 22.634766 7.2421875 L 23.353516 6.5234375 A 11.999921 11.999921 0 0 0 16 4 z "
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path951" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 20.427734 12.279297 L 21.132812 11.574219 A 6.9999999 6.9999999 0 0 0 20.408203 10.884766 L 19.693359 11.599609 A 5.9999985 5.9999985 0 0 1 20.427734 12.279297 z "
|
||||
id="path947"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 25.46875 8.6523438 L 24.759766 9.3632812 A 10.999999 10.999999 0 0 1 27 16 A 10.999999 10.999999 0 0 1 24.445312 23.033203 L 21.623047 20.46875 A 6.9999998 6.9999998 0 0 0 23 16.320312 A 6.9999998 6.9999998 0 0 0 21.767578 12.353516 L 21.046875 13.076172 A 5.9999984 5.9999984 0 0 1 22 16.320312 A 5.9999984 5.9999984 0 0 1 20.240234 20.560547 L 20.947266 21.267578 L 24.480469 24.480469 A 11.999921 11.999921 0 0 0 28 16 A 11.999921 11.999921 0 0 0 25.46875 8.6523438 z "
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path943" />
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.03779528;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 24.115234 7.1777344 L 23.408203 7.8847656 A 10.999999 10.999999 0 0 1 24.117188 8.5917969 L 24.822266 7.8867188 A 11.999921 11.999921 0 0 0 24.115234 7.1777344 z "
|
||||
id="path937"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.7 KiB |
160
icons/ui_light/design/share.svg
Normal file
@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<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="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666667 8.4666667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="share_connectio_btn.svg"
|
||||
inkscape:export-filename="/tmp/makepkg/qv2ray-dev-git/src/qv2ray-dev-git/icons/add_connection_btn.png"
|
||||
inkscape:export-xdpi="144.00002"
|
||||
inkscape:export-ydpi="144.00002">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="17.784325"
|
||||
inkscape:cy="12.106514"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1874"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-bbox="true"
|
||||
fit-margin-top="20"
|
||||
fit-margin-left="20"
|
||||
fit-margin-bottom="20"
|
||||
fit-margin-right="20"
|
||||
guidecolor="#00dcff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#1ce300"
|
||||
guidehiopacity="0.49803922"
|
||||
units="px"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:bbox-paths="false"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid822"
|
||||
color="#3f4842"
|
||||
opacity="0.02745098"
|
||||
empcolor="#3f1212"
|
||||
empopacity="0.05098039"
|
||||
spacingx="0"
|
||||
spacingy="0" />
|
||||
<sodipodi:guide
|
||||
position="1.0583333,1.8520833"
|
||||
orientation="1,0"
|
||||
id="guide824"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0,7.4083334"
|
||||
orientation="0,1"
|
||||
id="guide826"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4083334,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide828"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="1.3229167,1.0583333"
|
||||
orientation="0,1"
|
||||
id="guide830"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="2.1166665,5.8189079"
|
||||
orientation="0,1"
|
||||
id="guide842"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.4368395,3.1750017"
|
||||
orientation="1,0"
|
||||
id="guide961"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.854164,-225.46826)"
|
||||
style="opacity:1">
|
||||
<path
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.07559059;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 20,13.292969 V 14.707031 18 l -3.230469,0 h -2.683593 c -1.598676,0.07502 -2.856968,1.391754 -2.859376,2.992188 V 21 28 h 4.566407 V 27 23 L 20,23 v 3.292969 1.414062 l 1,-1 5.5,-5.5 L 27.207031,20.5 26.5,19.792969 l -5.5,-5.5 z M 21,15.707031 25.792969,20.5 21,25.292969 V 22 l -5.207031,0 -0.02344,-2 v -0.002 c -3.54e-4,-0.03325 9.5e-4,-0.06649 0.0039,-0.09961 0.0035,-0.03345 0.0087,-0.06669 0.01562,-0.09961 0.0069,-0.0323 0.01535,-0.06424 0.02539,-0.0957 0.0095,-0.03178 0.02059,-0.06307 0.0332,-0.09375 0.01346,-0.03068 0.02845,-0.06067 0.04492,-0.08984 0.01549,-0.02947 0.03243,-0.05815 0.05078,-0.08594 0.01883,-0.02769 0.03904,-0.05442 0.06055,-0.08008 0.02157,-0.02521 0.04439,-0.04933 0.06836,-0.07227 0.02426,-0.02341 0.04968,-0.04557 0.07617,-0.06641 0.02571,-0.02084 0.05243,-0.0404 0.08008,-0.05859 0.02846,-0.01774 0.05779,-0.03404 0.08789,-0.04883 0.02925,-0.01514 0.05924,-0.02883 0.08984,-0.04102 0.03136,-0.01202 0.0633,-0.02245 0.0957,-0.03125 0.03217,-0.0088 0.06477,-0.01596 0.09766,-0.02148 0.03299,-0.0056 0.06623,-0.0095 0.09961,-0.01172 0.02341,-0.0015 0.04686,-0.0021 0.07031,-0.002 L 21,19 Z M 14.085938,19 h 0.955078 c -0.176442,0.303122 -0.270068,0.647315 -0.271485,0.998047 V 20 l 0.02344,2 v 5 h -2.566407 v -6 -0.0059 c -5.6e-5,-0.06653 0.0032,-0.133016 0.0098,-0.199219 0.0065,-0.0662 0.01626,-0.132039 0.0293,-0.197266 0.01363,-0.06592 0.03058,-0.131104 0.05078,-0.195312 0.01965,-0.0636 0.04247,-0.126177 0.06836,-0.1875 0.02564,-0.06129 0.05432,-0.121256 0.08594,-0.179688 0.0323,-0.05836 0.0675,-0.115076 0.105469,-0.169922 0.0376,-0.05605 0.07802,-0.11015 0.121094,-0.162109 0.0431,-0.05108 0.08873,-0.09997 0.136718,-0.146484 0.04729,-0.04604 0.09683,-0.08972 0.148438,-0.13086 0.05268,-0.0418 0.107439,-0.08091 0.164062,-0.117187 0.05624,-0.03609 0.114262,-0.06933 0.173828,-0.09961 0.05918,-0.02968 0.119806,-0.05641 0.181641,-0.08008 0.06204,-0.02463 0.125266,-0.04614 0.189453,-0.06445 0.06435,-0.01757 0.129533,-0.03191 0.195313,-0.04297 0.06601,-0.01048 0.132495,-0.01766 0.199219,-0.02148 z"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,18.854164,225.46826)"
|
||||
id="path966"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 21.391477,226.52659 -1.47898,1.47898 0.001,0.10852 v 3.96875 h 1.5865 v -0.26458 H 20.17808 v -3.70417 h 1.322917 v -1.32291 h 2.645833 v 1.85208 h 0.264583 v -2.11667 h -2.910416 z m -0.15503,0.52917 v 0.79375 h -0.79375 z"
|
||||
id="path1214-6"
|
||||
sodipodi:nodetypes="cccccccccccccccccccc" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect846"
|
||||
width="2.9104166"
|
||||
height="0.26458332"
|
||||
x="20.706247"
|
||||
y="228.64326" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect846-3"
|
||||
width="2.9104166"
|
||||
height="0.26458332"
|
||||
x="20.706247"
|
||||
y="229.43701" />
|
||||
<rect
|
||||
style="opacity:1;fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.01;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect846-3-6"
|
||||
width="1.0583333"
|
||||
height="0.2645874"
|
||||
x="20.706247"
|
||||
y="230.23076" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.4 KiB |
344
icons/ui_light/design/tray.svg
Normal file
@ -0,0 +1,344 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
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"
|
||||
width="22"
|
||||
height="22"
|
||||
viewBox="0 0 5.8208333 5.8208333"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
sodipodi:docname="qv2ray_tray.svg"
|
||||
inkscape:export-filename="/media/Storage/Projects/Qv2ray/icons/ui_components/qv2ray_tray.png"
|
||||
inkscape:export-xdpi="558.54999"
|
||||
inkscape:export-ydpi="558.54999">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient876">
|
||||
<stop
|
||||
style="stop-color:#31363b;stop-opacity:0.58823532"
|
||||
offset="0"
|
||||
id="stop872" />
|
||||
<stop
|
||||
style="stop-color:#31363b;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop874" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient866">
|
||||
<stop
|
||||
style="stop-color:#31363b;stop-opacity:0.58823532"
|
||||
offset="0"
|
||||
id="stop862" />
|
||||
<stop
|
||||
style="stop-color:#31363b;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop864" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient841"
|
||||
osb:paint="solid">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop839" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5057"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop5053"
|
||||
offset="0"
|
||||
style="stop-color:#3c3c3c;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5055"
|
||||
offset="1"
|
||||
style="stop-color:#282728;stop-opacity:0.6574803" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4713">
|
||||
<stop
|
||||
style="stop-color:#3de256;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4709" />
|
||||
<stop
|
||||
style="stop-color:#2fbeba;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4711" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(38.574145,1.3181723)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="39.934193"
|
||||
x2="108.00179"
|
||||
y1="19.458199"
|
||||
x1="89.965836"
|
||||
id="linearGradient4707"
|
||||
xlink:href="#linearGradient4713"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="94.022179"
|
||||
x2="140.26065"
|
||||
y1="48.940449"
|
||||
x1="92.227142"
|
||||
id="linearGradient5059"
|
||||
xlink:href="#linearGradient5057"
|
||||
inkscape:collect="always" />
|
||||
<clipPath
|
||||
id="clipPath922"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
ry="1.0638391"
|
||||
y="284.56458"
|
||||
x="9.5367426e-08"
|
||||
height="12.170834"
|
||||
width="12.7"
|
||||
id="rect924"
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipPath922-6"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
ry="1.0638391"
|
||||
y="284.56458"
|
||||
x="9.5367426e-08"
|
||||
height="12.170834"
|
||||
width="12.7"
|
||||
id="rect924-2"
|
||||
style="fill:none;fill-opacity:1;stroke:#23d829;stroke-width:0.044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.72265625" />
|
||||
</clipPath>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter1510">
|
||||
<feFlood
|
||||
flood-opacity="0.976471"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1500" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="in"
|
||||
result="composite1"
|
||||
id="feComposite1502" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="0.1"
|
||||
result="blur"
|
||||
id="feGaussianBlur1504" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset"
|
||||
id="feOffset1506" />
|
||||
<feComposite
|
||||
in="offset"
|
||||
in2="SourceGraphic"
|
||||
operator="out"
|
||||
result="composite2"
|
||||
id="feComposite1508" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Drop Shadow"
|
||||
id="filter1859">
|
||||
<feFlood
|
||||
flood-opacity="0.266667"
|
||||
flood-color="rgb(0,0,0)"
|
||||
result="flood"
|
||||
id="feFlood1849" />
|
||||
<feComposite
|
||||
in="flood"
|
||||
in2="SourceGraphic"
|
||||
operator="in"
|
||||
result="composite1"
|
||||
id="feComposite1851" />
|
||||
<feGaussianBlur
|
||||
in="composite1"
|
||||
stdDeviation="0.2"
|
||||
result="blur"
|
||||
id="feGaussianBlur1853" />
|
||||
<feOffset
|
||||
dx="0"
|
||||
dy="0"
|
||||
result="offset"
|
||||
id="feOffset1855" />
|
||||
<feComposite
|
||||
in="offset"
|
||||
in2="SourceGraphic"
|
||||
operator="out"
|
||||
result="composite2"
|
||||
id="feComposite1857" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient866"
|
||||
id="linearGradient868"
|
||||
x1="4.2985892"
|
||||
y1="292.06757"
|
||||
x2="7.7381635"
|
||||
y2="295.50714"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient876"
|
||||
id="linearGradient878"
|
||||
x1="5.6215057"
|
||||
y1="294.44879"
|
||||
x2="6.6798391"
|
||||
y2="295.50714"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="2.5129442"
|
||||
inkscape:cy="10.477946"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
fit-margin-top="5"
|
||||
fit-margin-left="5"
|
||||
fit-margin-bottom="5"
|
||||
fit-margin-right="5"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:object-paths="false"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
scale-x="1"
|
||||
guidecolor="#00ffff"
|
||||
guideopacity="0.49803922"
|
||||
guidehicolor="#ff5184"
|
||||
guidehiopacity="0.62745098"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid815"
|
||||
originx="0"
|
||||
originy="0"
|
||||
color="#3f513e"
|
||||
opacity="0.04313725"
|
||||
empcolor="#3f3742"
|
||||
empopacity="0.16470588"
|
||||
empspacing="5"
|
||||
dotted="false" />
|
||||
<sodipodi:guide
|
||||
position="11.244792,0.79375"
|
||||
orientation="1,0"
|
||||
id="guide924"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="-1.6867187,5.0270833"
|
||||
orientation="1,0"
|
||||
id="guide932"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,255,236)" />
|
||||
<sodipodi:guide
|
||||
position="0.79375,4.4979166"
|
||||
orientation="1,0"
|
||||
id="guide1884"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="3.96875,5.0270833"
|
||||
orientation="0,1"
|
||||
id="guide1886"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="5.0270833,0.26458333"
|
||||
orientation="1,0"
|
||||
id="guide1888"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="4.4979166,0.79375"
|
||||
orientation="0,1"
|
||||
id="guide1890"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<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
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-1.9173392,-290.74464)">
|
||||
<path
|
||||
style="fill:url(#linearGradient878);stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;opacity:0.65"
|
||||
d="m 5.6215058,295.50714 v -0.79375 l 0.2645833,-0.26458 0.79375,0.79375 v 0.26458 z"
|
||||
id="path870"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient868);stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;opacity:0.65"
|
||||
d="m 4.2985892,292.86131 2.3812499,2.38125 v -1.32292 l -1.3229166,-1.32292 -0.79375,-0.52916 -0.2645833,0.26458 z"
|
||||
id="path860"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path1962"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,1.9173392,290.74464)"
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 7,11 6.2929688,11.707031 8.5859375,14 H 18 V 13 H 9 Z M 6.2929688,11.707031 5,13 H 4 v 1 H 5.4140625 L 7,12.414062 Z M 3,3 V 18.999988 H 19 V 3 Z M 3.9999999,3.9999875 H 18 V 18 H 3.9999999 Z" />
|
||||
<rect
|
||||
style="opacity:0.5;fill:none;fill-opacity:1;stroke:none;stroke-width:0.04583338;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect844"
|
||||
width="5.8208332"
|
||||
height="5.8208447"
|
||||
x="1.9173392"
|
||||
y="290.74463"
|
||||
inkscape:export-xdpi="64"
|
||||
inkscape:export-ydpi="64" />
|
||||
<path
|
||||
style="fill:#31363b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 4.5631726,292.06756 -0.2645834,0.26459 v 0.52916 l 0.2645834,-0.26458 v 0.26458 0.52917 l 0.5291666,0.79375 0.5291667,1.32291 v -0.79374 l 0.2645833,-0.26459 -0.2645833,-0.52916 v -0.79375 l -0.2645833,-0.52917 z"
|
||||
id="path1934"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
BIN
icons/ui_light/duplicate.png
Normal file
After Width: | Height: | Size: 927 B |
BIN
icons/ui_light/edit.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
icons/ui_light/import.png
Normal file
After Width: | Height: | Size: 818 B |
BIN
icons/ui_light/json.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
icons/ui_light/netspeed_arrow.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
icons/ui_light/ping_gauge.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
icons/ui_light/share.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
icons/ui_light/tray.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
@ -1,10 +1,27 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>icons/Qv2ray.ico</file>
|
||||
<file>icons/add_connection_btn.png</file>
|
||||
<file>icons/import_connection_btn.png</file>
|
||||
<file>icons/remove_connection_btn.png</file>
|
||||
<file>icons/edit_connection_btn.png</file>
|
||||
<file>icons/netspeed-arrows.svg</file>
|
||||
<file>icons/qv2ray.icns</file>
|
||||
<file>icons/qv2ray.png</file>
|
||||
<file>icons/qv2ray.ico</file>
|
||||
<file>icons/ui_dark/add.png</file>
|
||||
<file>icons/ui_dark/delete.png</file>
|
||||
<file>icons/ui_dark/duplicate.png</file>
|
||||
<file>icons/ui_dark/edit.png</file>
|
||||
<file>icons/ui_dark/import.png</file>
|
||||
<file>icons/ui_dark/json.png</file>
|
||||
<file>icons/ui_dark/netspeed_arrow.png</file>
|
||||
<file>icons/ui_dark/ping_gauge.png</file>
|
||||
<file>icons/ui_dark/share.png</file>
|
||||
<file>icons/ui_light/add.png</file>
|
||||
<file>icons/ui_light/delete.png</file>
|
||||
<file>icons/ui_light/duplicate.png</file>
|
||||
<file>icons/ui_light/edit.png</file>
|
||||
<file>icons/ui_light/import.png</file>
|
||||
<file>icons/ui_light/json.png</file>
|
||||
<file>icons/ui_light/netspeed_arrow.png</file>
|
||||
<file>icons/ui_light/ping_gauge.png</file>
|
||||
<file>icons/ui_light/share.png</file>
|
||||
<file>icons/ui_light/tray.png</file>
|
||||
<file>icons/ui_dark/tray.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
188
src/Qv2rayBase.h
@ -1,188 +0,0 @@
|
||||
#ifndef QV2RAYBASE_H
|
||||
#define QV2RAYBASE_H
|
||||
#include <QtCore>
|
||||
#include "QvTinyLog.h"
|
||||
#include "QvCoreConfigObjects.h"
|
||||
#include "QvNetSpeedPlugin.h"
|
||||
#include "QObjectMessageProxy.h"
|
||||
|
||||
#define QV2RAY_CONFIG_VERSION 8
|
||||
|
||||
// Base folder suffix.
|
||||
#ifdef QT_DEBUG
|
||||
#define QV2RAY_CONFIG_DIR_SUFFIX "_debug/"
|
||||
#else
|
||||
#define QV2RAY_CONFIG_DIR_SUFFIX "/"
|
||||
#endif
|
||||
|
||||
// Get Configured Config Dir Path
|
||||
#define QV2RAY_CONFIG_DIR (Qv2ray::Utils::GetConfigDirPath())
|
||||
#define QV2RAY_CONFIG_FILE (QV2RAY_CONFIG_DIR + "Qv2ray.conf")
|
||||
|
||||
#define QV2RAY_CONFIG_FILE_EXTENSION ".qv2ray.json"
|
||||
#define QV2RAY_GENERATED_DIR (QV2RAY_CONFIG_DIR + "generated/")
|
||||
#define QV2RAY_GENERATED_FILE_PATH (QV2RAY_GENERATED_DIR + "config.gen.json")
|
||||
|
||||
#ifndef QV2RAY_DEFAULT_VCORE_PATH
|
||||
#ifdef _WIN32
|
||||
#define QV2RAY_DEFAULT_VCORE_PATH (QV2RAY_CONFIG_DIR + "vcore/v2ray.exe")
|
||||
#else
|
||||
#define QV2RAY_DEFAULT_VCORE_PATH (QV2RAY_CONFIG_DIR + "vcore/v2ray")
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define QV2RAY_VCORE_LOG_DIRNAME "logs/"
|
||||
#define QV2RAY_VCORE_ACCESS_LOG_FILENAME "access.log"
|
||||
#define QV2RAY_VCORE_ERROR_LOG_FILENAME "error.log"
|
||||
|
||||
// GUI TOOLS
|
||||
#define RED(obj) \
|
||||
auto _temp = ui->obj->palette(); \
|
||||
_temp.setColor(QPalette::Text, Qt::red); \
|
||||
ui->obj->setPalette(_temp);
|
||||
|
||||
#define BLACK(obj) \
|
||||
auto _temp = ui->obj->palette(); \
|
||||
_temp.setColor(QPalette::Text, Qt::black); \
|
||||
ui->obj->setPalette(_temp);
|
||||
|
||||
#define QSTRING(std_string) QString::fromStdString(std_string)
|
||||
|
||||
#define NEWLINE "\r\n"
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace QvConfigModels
|
||||
{
|
||||
enum QvConfigType {
|
||||
CONFIGTYPE_CONFIG,
|
||||
CONFIGTYPE_SUBSCRIPTION
|
||||
};
|
||||
struct Qv2rayCoreInboundsConfig {
|
||||
string listenip;
|
||||
// SOCKS
|
||||
int socks_port;
|
||||
bool socks_useAuth;
|
||||
bool socksUDP;
|
||||
string socksLocalIP;
|
||||
AccountObject socksAccount;
|
||||
// HTTP
|
||||
int http_port;
|
||||
bool http_useAuth;
|
||||
AccountObject httpAccount;
|
||||
Qv2rayCoreInboundsConfig(): listenip(), socks_port(), socks_useAuth(), socksAccount(), http_port(), http_useAuth(), httpAccount() {}
|
||||
Qv2rayCoreInboundsConfig(string listen, int socksPort, int httpPort): Qv2rayCoreInboundsConfig()
|
||||
{
|
||||
socks_port = socksPort;
|
||||
http_port = httpPort;
|
||||
listenip = listen;
|
||||
socksLocalIP = "0.0.0.0";
|
||||
socksUDP = true;
|
||||
}
|
||||
XTOSTRUCT(O(listenip, socks_port, socks_useAuth, socksAccount, socksUDP, socksLocalIP, http_port, http_useAuth, httpAccount))
|
||||
};
|
||||
|
||||
struct Qv2rayConfig {
|
||||
int config_version;
|
||||
bool tProxySupport;
|
||||
int logLevel;
|
||||
//
|
||||
string language;
|
||||
string v2CorePath;
|
||||
string v2AssetsPath;
|
||||
string autoStartConfig;
|
||||
//
|
||||
string ignoredVersion;
|
||||
//
|
||||
bool bypassCN;
|
||||
bool enableProxy;
|
||||
bool withLocalDNS;
|
||||
//
|
||||
bool enableStats;
|
||||
int statsPort;
|
||||
//
|
||||
list<string> dnsList;
|
||||
//
|
||||
Qv2rayCoreInboundsConfig inBoundSettings;
|
||||
#ifdef newFeature
|
||||
map<string, QvConfigType> configs;
|
||||
#else
|
||||
list<string> configs;
|
||||
#endif
|
||||
map<string, string> subscribes;
|
||||
|
||||
QvNetSpeedBarConfig speedBarConfig;
|
||||
|
||||
Qv2rayConfig():
|
||||
config_version(QV2RAY_CONFIG_VERSION),
|
||||
tProxySupport(false),
|
||||
logLevel(),
|
||||
language(),
|
||||
v2CorePath(),
|
||||
v2AssetsPath(),
|
||||
autoStartConfig(),
|
||||
ignoredVersion(),
|
||||
bypassCN(),
|
||||
enableProxy(),
|
||||
withLocalDNS(),
|
||||
enableStats(),
|
||||
statsPort(15934),
|
||||
dnsList(),
|
||||
inBoundSettings(),
|
||||
configs(),
|
||||
subscribes(),
|
||||
speedBarConfig() { }
|
||||
Qv2rayConfig(string lang, string assetsPath, int log, Qv2rayCoreInboundsConfig _inBoundSettings): Qv2rayConfig()
|
||||
{
|
||||
// These settings below are defaults.
|
||||
ignoredVersion = "";
|
||||
autoStartConfig = "";
|
||||
language = lang;
|
||||
v2AssetsPath = assetsPath;
|
||||
inBoundSettings = _inBoundSettings;
|
||||
logLevel = log;
|
||||
tProxySupport = false;
|
||||
dnsList.push_back("8.8.8.8");
|
||||
dnsList.push_back("8.8.4.4");
|
||||
dnsList.push_back("1.1.1.1");
|
||||
bypassCN = true;
|
||||
enableProxy = true;
|
||||
withLocalDNS = true;
|
||||
enableStats = true;
|
||||
statsPort = 15934;
|
||||
}
|
||||
XTOSTRUCT(O(config_version,
|
||||
enableStats,
|
||||
statsPort,
|
||||
tProxySupport,
|
||||
logLevel,
|
||||
language,
|
||||
autoStartConfig,
|
||||
ignoredVersion,
|
||||
v2CorePath,
|
||||
v2AssetsPath,
|
||||
enableProxy,
|
||||
bypassCN,
|
||||
withLocalDNS,
|
||||
dnsList,
|
||||
inBoundSettings,
|
||||
configs,
|
||||
subscribes,
|
||||
speedBarConfig))
|
||||
};
|
||||
|
||||
// Extra header for QvConfigUpgrade.cpp
|
||||
QJsonObject UpgradeConfig(int fromVersion, int toVersion, QJsonObject root);
|
||||
}
|
||||
}
|
||||
|
||||
using namespace std;
|
||||
using namespace Qv2ray;
|
||||
using namespace Qv2ray::V2ConfigModels;
|
||||
using namespace Qv2ray::QvConfigModels;
|
||||
|
||||
#endif // QV2RAYBASE_H
|
236
src/Qv2rayBase.hpp
Normal file
@ -0,0 +1,236 @@
|
||||
#ifndef QV2RAYBASE_H
|
||||
#define QV2RAYBASE_H
|
||||
#include <QtCore>
|
||||
#include <QtGui>
|
||||
#include <QMap>
|
||||
#include <vector>
|
||||
#include "QvTinyLog.hpp"
|
||||
#include "QvCoreConfigObjects.hpp"
|
||||
#include "QObjectMessageProxy.hpp"
|
||||
|
||||
#define QV2RAY_CONFIG_VERSION 12
|
||||
|
||||
// Linux DEs should handle the ui schemes themselves.
|
||||
// --> Or.. should we change this into a modifyable setting?
|
||||
#ifdef Q_OS_LINUX
|
||||
#define QV2RAY_USE_BUILTIN_DARKTHEME false
|
||||
#else
|
||||
#define QV2RAY_USE_BUILTIN_DARKTHEME true
|
||||
#endif
|
||||
|
||||
// Base folder suffix.
|
||||
#ifdef QT_DEBUG
|
||||
#define QV2RAY_CONFIG_DIR_SUFFIX "_debug/"
|
||||
#else
|
||||
#define QV2RAY_CONFIG_DIR_SUFFIX "/"
|
||||
#endif
|
||||
|
||||
// Get Configured Config Dir Path
|
||||
#define QV2RAY_CONFIG_DIR (Qv2ray::Utils::GetConfigDirPath())
|
||||
#define QV2RAY_CONFIG_FILE (QV2RAY_CONFIG_DIR + "Qv2ray.conf")
|
||||
#define QV2RAY_QRCODE_DIR (QV2RAY_CONFIG_DIR + "qr_images/")
|
||||
|
||||
// Get GFWList and PAC file path.
|
||||
#define QV2RAY_RULES_DIR (QV2RAY_CONFIG_DIR + "rules/")
|
||||
#define QV2RAY_RULES_GFWLIST_PATH (QV2RAY_RULES_DIR + "gfwList.txt")
|
||||
#define QV2RAY_RULES_PAC_PATH (QV2RAY_RULES_DIR + "pac.txt")
|
||||
|
||||
#define QV2RAY_CONFIG_FILE_EXTENSION ".qv2ray.json"
|
||||
#define QV2RAY_GENERATED_DIR (QV2RAY_CONFIG_DIR + "generated/")
|
||||
#define QV2RAY_GENERATED_FILE_PATH (QV2RAY_GENERATED_DIR + "config.gen.json")
|
||||
|
||||
#ifndef QV2RAY_DEFAULT_VCORE_PATH
|
||||
#ifdef Q_OS_WIN
|
||||
#define QV2RAY_DEFAULT_VCORE_PATH (QV2RAY_CONFIG_DIR + "vcore/v2ray.exe")
|
||||
#else
|
||||
#define QV2RAY_DEFAULT_VCORE_PATH (QV2RAY_CONFIG_DIR + "vcore/v2ray")
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define QV2RAY_VCORE_LOG_DIRNAME "logs/"
|
||||
#define QV2RAY_VCORE_ACCESS_LOG_FILENAME "access.log"
|
||||
#define QV2RAY_VCORE_ERROR_LOG_FILENAME "error.log"
|
||||
|
||||
// GUI TOOLS
|
||||
#define QV2RAY_IS_DARKTHEME (GetGlobalConfig().uiConfig.useDarkTheme)
|
||||
#define RED(obj) \
|
||||
auto _temp = obj->palette(); \
|
||||
_temp.setColor(QPalette::Text, Qt::red); \
|
||||
obj->setPalette(_temp);
|
||||
|
||||
#define BLACK(obj) \
|
||||
obj->setPalette(this->palette());
|
||||
|
||||
#define QV2RAY_UI_RESOURCES_ROOT QSTRING(QV2RAY_IS_DARKTHEME ? ":/icons/ui_dark/" : ":/icons/ui_light/")
|
||||
#define QICON_R(file) QIcon(QV2RAY_UI_RESOURCES_ROOT + file)
|
||||
|
||||
#define QSTRING(std_string) QString::fromStdString(std_string)
|
||||
#define NEWLINE "\r\n"
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
// Extra header for QvConfigUpgrade.cpp
|
||||
QJsonObject UpgradeConfig(int fromVersion, int toVersion, QJsonObject root);
|
||||
|
||||
struct QvBarLine {
|
||||
string Family;
|
||||
bool Bold;
|
||||
bool Italic;
|
||||
int ColorA;
|
||||
int ColorR;
|
||||
int ColorG;
|
||||
int ColorB;
|
||||
int ContentType;
|
||||
double Size;
|
||||
string Message;
|
||||
QvBarLine()
|
||||
: Family("Consolas")
|
||||
, Bold(true)
|
||||
, Italic(false)
|
||||
, ColorA(255), ColorR(255), ColorG(255), ColorB(255)
|
||||
, ContentType(0)
|
||||
, Size(9),
|
||||
Message() { }
|
||||
XTOSTRUCT(O(Bold, Italic, ColorA, ColorR, ColorG, ColorB, Size, Family, Message, ContentType))
|
||||
};
|
||||
|
||||
struct QvBarPage {
|
||||
int OffsetYpx;
|
||||
vector<QvBarLine> Lines;
|
||||
QvBarPage() : OffsetYpx(5) { }
|
||||
XTOSTRUCT(O(OffsetYpx, Lines))
|
||||
};
|
||||
|
||||
struct Qv2rayToolBarConfig {
|
||||
vector<QvBarPage> Pages;
|
||||
XTOSTRUCT(O(Pages))
|
||||
};
|
||||
|
||||
namespace QvConfigModels
|
||||
{
|
||||
struct Qv2rayPACConfig {
|
||||
bool usePAC;
|
||||
int port;
|
||||
string proxyIP;
|
||||
bool useSocksProxy;
|
||||
Qv2rayPACConfig() : usePAC(false), port(8989), useSocksProxy(false) { }
|
||||
XTOSTRUCT(O(usePAC, port, proxyIP, useSocksProxy))
|
||||
};
|
||||
struct Qv2rayInboundsConfig {
|
||||
string listenip;
|
||||
bool setSystemProxy;
|
||||
Qv2rayPACConfig pacConfig;
|
||||
// SOCKS
|
||||
|
||||
bool useSocks;
|
||||
int socks_port;
|
||||
bool socks_useAuth;
|
||||
bool socksUDP;
|
||||
string socksLocalIP;
|
||||
AccountObject socksAccount;
|
||||
// HTTP
|
||||
bool useHTTP;
|
||||
int http_port;
|
||||
bool http_useAuth;
|
||||
AccountObject httpAccount;
|
||||
Qv2rayInboundsConfig():
|
||||
listenip(), setSystemProxy(), pacConfig(),
|
||||
useSocks(), socks_port(), socks_useAuth(), socksUDP(true), socksAccount(),
|
||||
useHTTP(), http_port(), http_useAuth(), httpAccount() {}
|
||||
Qv2rayInboundsConfig(const string &listen, int socksPort, int httpPort): Qv2rayInboundsConfig()
|
||||
{
|
||||
socks_port = socksPort;
|
||||
http_port = httpPort;
|
||||
listenip = listen;
|
||||
socksLocalIP = "0.0.0.0";
|
||||
socksUDP = true;
|
||||
setSystemProxy = true;
|
||||
}
|
||||
XTOSTRUCT(O(setSystemProxy, pacConfig, listenip, useSocks, useHTTP, socks_port, socks_useAuth, socksAccount, socksUDP, socksLocalIP, http_port, http_useAuth, httpAccount))
|
||||
};
|
||||
|
||||
struct Qv2rayUIConfig {
|
||||
string theme;
|
||||
string language;
|
||||
bool useDarkTheme;
|
||||
bool useDarkTrayIcon;
|
||||
Qv2rayUIConfig() : theme(""), language("en-US"), useDarkTheme(false), useDarkTrayIcon(true) { }
|
||||
XTOSTRUCT(O(theme, language, useDarkTheme, useDarkTrayIcon))
|
||||
};
|
||||
|
||||
struct Qv2rayConnectionConfig {
|
||||
bool bypassCN;
|
||||
bool enableProxy;
|
||||
bool withLocalDNS;
|
||||
list<string> dnsList;
|
||||
bool enableStats;
|
||||
int statsPort;
|
||||
Qv2rayConnectionConfig() : bypassCN(true), enableProxy(true), withLocalDNS(true), dnsList(), enableStats(true), statsPort(15490) { }
|
||||
XTOSTRUCT(O(bypassCN, enableProxy, withLocalDNS, dnsList, enableStats, statsPort))
|
||||
};
|
||||
|
||||
struct Qv2rayConfig {
|
||||
int config_version;
|
||||
bool tProxySupport;
|
||||
int logLevel;
|
||||
//
|
||||
string v2CorePath;
|
||||
string v2AssetsPath;
|
||||
string autoStartConfig;
|
||||
string ignoredVersion;
|
||||
//
|
||||
list<string> configs;
|
||||
map<string, string> subscribes;
|
||||
//
|
||||
Qv2rayUIConfig uiConfig;
|
||||
Qv2rayInboundsConfig inboundConfig;
|
||||
Qv2rayConnectionConfig connectionConfig;
|
||||
Qv2rayToolBarConfig toolBarConfig;
|
||||
|
||||
Qv2rayConfig():
|
||||
config_version(QV2RAY_CONFIG_VERSION),
|
||||
tProxySupport(false),
|
||||
logLevel(),
|
||||
v2CorePath(),
|
||||
v2AssetsPath(),
|
||||
autoStartConfig(),
|
||||
ignoredVersion(),
|
||||
configs(),
|
||||
subscribes(),
|
||||
uiConfig(),
|
||||
inboundConfig(),
|
||||
connectionConfig(),
|
||||
toolBarConfig() { }
|
||||
//
|
||||
Qv2rayConfig(const string &assetsPath, int log, const Qv2rayInboundsConfig &_inBoundSettings): Qv2rayConfig()
|
||||
{
|
||||
// These settings below are defaults.
|
||||
v2AssetsPath = assetsPath;
|
||||
inboundConfig = _inBoundSettings;
|
||||
logLevel = log;
|
||||
tProxySupport = false;
|
||||
}
|
||||
XTOSTRUCT(O(config_version,
|
||||
ignoredVersion,
|
||||
tProxySupport,
|
||||
logLevel,
|
||||
autoStartConfig,
|
||||
v2CorePath, v2AssetsPath,
|
||||
configs,
|
||||
uiConfig,
|
||||
subscribes, inboundConfig, connectionConfig, toolBarConfig))
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
using namespace std;
|
||||
using namespace Qv2ray;
|
||||
using namespace Qv2ray::V2ConfigModels;
|
||||
using namespace Qv2ray::QvConfigModels;
|
||||
|
||||
#endif // QV2RAYBASE_H
|
@ -1,16 +1,14 @@
|
||||
//
|
||||
//
|
||||
// This file handles some important migration
|
||||
// from old to newer versions of Qv2ray.
|
||||
//
|
||||
|
||||
#include "QvUtils.h"
|
||||
#include "QvUtils.hpp"
|
||||
|
||||
#define UPDATELOG(msg) LOG(MODULE_CONFIG, " [" + to_string(fromVersion) + "-" + to_string(fromVersion + 1) + "] --> " msg)
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace QvConfigModels
|
||||
{
|
||||
// Private member
|
||||
QJsonObject UpgradeConfig_Inc(int fromVersion, QJsonObject root)
|
||||
{
|
||||
@ -31,7 +29,7 @@ namespace Qv2ray
|
||||
// We also need v2ctl
|
||||
auto v2CtlFilePath = QFileInfo(vCoreFilePath).dir().path() + "/v2ctl";
|
||||
auto v2CtlDestPath = QFileInfo(vCoreDestPath).dir().path() + "/v2ctl";
|
||||
#ifdef __WIN32
|
||||
#ifdef Q_OS_WIN
|
||||
v2CtlFilePath = v2CtlFilePath.append(".exe");
|
||||
v2CtlDestPath = v2CtlDestPath.append(".exe");
|
||||
#endif
|
||||
@ -54,6 +52,8 @@ namespace Qv2ray
|
||||
break;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// Below is for version 2
|
||||
case 4: {
|
||||
// From 2 to 3, we changed the "proxyCN" to "bypassCN" as it's easier to understand....
|
||||
auto v2_oldProxyCN = root["proxyCN"].toBool();
|
||||
@ -85,6 +85,42 @@ namespace Qv2ray
|
||||
UPDATELOG("Added v2CorePath to the config file.")
|
||||
break;
|
||||
}
|
||||
|
||||
case 8: {
|
||||
auto lang = root["language"].toString();
|
||||
QJsonObject uiSettings;
|
||||
uiSettings["language"] = lang;
|
||||
root["uiConfig"] = uiSettings;
|
||||
UPDATELOG("Reconstructing config file.")
|
||||
break;
|
||||
}
|
||||
|
||||
case 9: {
|
||||
root["uiConfig"] = root["UISettings"];
|
||||
root.remove("UISettings");
|
||||
UPDATELOG("Renamed UISettings to uiConfig.")
|
||||
break;
|
||||
}
|
||||
|
||||
case 10: {
|
||||
root["inboundConfig"] = root["inBoundSettings"];
|
||||
root.remove("inBoundSettings");
|
||||
UPDATELOG("Renamed inBoundSettings to inboundConfig.")
|
||||
break;
|
||||
}
|
||||
|
||||
case 11: {
|
||||
//connectionConfig
|
||||
QJsonObject o;
|
||||
o["dnsList"] = root["dnsList"];
|
||||
o["withLocalDNS"] = root["withLocalDNS"];
|
||||
o["enableProxy"] = root["enableProxy"];
|
||||
o["bypassCN"] = root["bypassCN"];
|
||||
o["enableStats"] = root["enableStats"];
|
||||
o["statsPort"] = root["statsPort"];
|
||||
root["connectionConfig"] = o;
|
||||
UPDATELOG("Renamed some connection configs to connectionConfig.")
|
||||
}
|
||||
}
|
||||
|
||||
root["config_version"] = root["config_version"].toInt() + 1;
|
||||
@ -102,6 +138,4 @@ namespace Qv2ray
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ namespace Qv2ray
|
||||
struct RuleObject {
|
||||
// Added due to the request of @aliyuchang33
|
||||
bool QV2RAY_RULE_ENABLED;
|
||||
bool QV2RAY_RULE_USE_BALANCER;
|
||||
//
|
||||
string type;
|
||||
list<string> domain;
|
||||
@ -76,8 +77,8 @@ namespace Qv2ray
|
||||
string attrs;
|
||||
string outboundTag;
|
||||
string balancerTag;
|
||||
RuleObject() : QV2RAY_RULE_ENABLED(true), type("field"), domain(), ip(), port(""), network(""), source(), user(), inboundTag(), protocol(), attrs(), outboundTag(""), balancerTag("") {}
|
||||
XTOSTRUCT(O(QV2RAY_RULE_ENABLED, type, domain, ip, port, network, source, user, inboundTag, protocol, attrs, outboundTag, balancerTag))
|
||||
RuleObject() : QV2RAY_RULE_ENABLED(true), QV2RAY_RULE_USE_BALANCER(false), type("field"), domain(), ip(), port(""), network(""), source(), user(), inboundTag(), protocol(), attrs(), outboundTag(""), balancerTag("") {}
|
||||
XTOSTRUCT(O(QV2RAY_RULE_ENABLED, QV2RAY_RULE_USE_BALANCER, type, domain, ip, port, network, source, user, inboundTag, protocol, attrs, outboundTag, balancerTag))
|
||||
};
|
||||
//
|
||||
//
|
48
src/QvCoreConfigOperations.cpp
Normal file
@ -0,0 +1,48 @@
|
||||
#include "QvCoreConfigOperations.hpp"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace ConfigOperations
|
||||
{
|
||||
|
||||
QMap<QString, QJsonObject> GetConnections(list<string> connectionNames)
|
||||
{
|
||||
QMap<QString, QJsonObject> list;
|
||||
|
||||
for (auto conn : connectionNames) {
|
||||
QString jsonString = StringFromFile(new QFile(QV2RAY_CONFIG_DIR + QSTRING(conn) + QV2RAY_CONFIG_FILE_EXTENSION));
|
||||
QJsonObject connectionObject = JsonFromString(jsonString);
|
||||
list.insert(QString::fromStdString(conn), connectionObject);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
bool CheckIsComplexConfig(QJsonObject root)
|
||||
{
|
||||
bool cRouting = root.contains("routing");
|
||||
bool cRule = cRouting && root["routing"].toObject().contains("rules");
|
||||
bool cRules = cRule && root["routing"].toObject()["rules"].toArray().count() > 0;
|
||||
return cRules;
|
||||
}
|
||||
|
||||
int StartPreparation(QJsonObject fullConfig)
|
||||
{
|
||||
// Writes the final configuration to the disk.
|
||||
QString json = JsonToString(fullConfig);
|
||||
StringToFile(&json, new QFile(QV2RAY_GENERATED_FILE_PATH));
|
||||
return 0;
|
||||
}
|
||||
int FindIndexByTag(QJsonArray list, QString *tag)
|
||||
{
|
||||
for (int i = 0; i < list.count(); i++) {
|
||||
auto value = list[i].toObject();
|
||||
|
||||
if (value.contains("tag") && value["tag"].toString() == *tag)
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,76 +0,0 @@
|
||||
#ifndef CONFIGGENERATION_H
|
||||
#define CONFIGGENERATION_H
|
||||
|
||||
#include "QvUtils.h"
|
||||
#include "QJsonObjectInsertMacros.h"
|
||||
|
||||
#define OUTBOUND_TAG_DIRECT "outBound_DIRECT"
|
||||
#define OUTBOUND_TAG_PROXY "outBound_PROXY"
|
||||
#define API_TAG_DEFAULT "_QV2RAY_API_"
|
||||
#define API_TAG_INBOUND "_QV2RAY_API_INBOUND_"
|
||||
|
||||
#define DROOT QJsonObject root;
|
||||
#define RROOT return root;
|
||||
|
||||
#define JSON_ROOT_TRY_REMOVE(obj) if (root.contains(obj)) { root.remove(obj); }
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace ConfigOperations
|
||||
{
|
||||
// -------------------------- BEGIN CONFIG GENERATIONS ---------------------------------------------
|
||||
QJsonObject GenerateRoutes(bool enableProxy, bool cnProxy);
|
||||
QJsonObject GenerateSingleRouteRule(QStringList list, bool isDomain, QString outboundTag, QString type = "field");
|
||||
QJsonObject GenerateDNS(bool withLocalhost, QStringList dnsServers);
|
||||
QJsonObject GenerateAPIEntry(QString tag, bool withHandler = true, bool withLogger = true, bool withStats = true);
|
||||
//
|
||||
// OutBoundProtocols
|
||||
QJsonObject GenerateFreedomOUT(QString domainStrategy, QString redirect, int userLevel);
|
||||
QJsonObject GenerateBlackHoleOUT(bool useHTTP);
|
||||
QJsonObject GenerateShadowSocksServerOUT(QString email, QString address, int port, QString method, QString password, bool ota, int level);
|
||||
QJsonObject GenerateShadowSocksOUT(QList<QJsonObject> servers);
|
||||
//
|
||||
// InBoundsProtocols
|
||||
QJsonObject GenerateDokodemoIN(QString address, int port, QString network, int timeout, bool followRedirect, int userLevel);
|
||||
QJsonObject GenerateHTTPIN(QList<AccountObject> accounts, int timeout = 300, bool allowTransparent = true, int userLevel = 0);
|
||||
QJsonObject GenerateSocksIN(QString auth, QList<AccountObject> _accounts, bool udp = false, QString ip = "127.0.0.1", int userLevel = 0);
|
||||
//
|
||||
// Misc
|
||||
template<typename T>
|
||||
QJsonObject GetRootObject(T t)
|
||||
{
|
||||
auto json = StructToJsonString(t);
|
||||
QJsonDocument doc = QJsonDocument::fromJson(QByteArray::fromStdString(json.toStdString()));
|
||||
return doc.object();
|
||||
}
|
||||
template QJsonObject GetRootObject<RuleObject>(RuleObject t);
|
||||
template QJsonObject GetRootObject<StreamSettingsObject>(StreamSettingsObject t);
|
||||
template QJsonObject GetRootObject<VMessServerObject>(VMessServerObject t);
|
||||
//
|
||||
// Generate FINAL Configs
|
||||
QJsonObject GenerateRuntimeConfig(QJsonObject root);
|
||||
QJsonObject GenerateOutboundEntry(QString protocol, QJsonObject settings, QJsonObject streamSettings, QJsonObject mux = QJsonObject(), QString sendThrough = "0.0.0.0", QString tag = "");
|
||||
QJsonObject GenerateInboundEntry(QString listen, int port, QString protocol, QJsonObject settings, QString tag, QJsonObject sniffing = QJsonObject(), QJsonObject allocate = QJsonObject());
|
||||
//
|
||||
// -------------------------- BEGIN CONFIG VALIDATIONS ---------------------------------------------
|
||||
int VerifyVMessProtocolString(QString vmess);
|
||||
QString GetVmessFromBase64OrPlain(QByteArray arr);
|
||||
//
|
||||
// -------------------------- BEGIN CONFIG CONVERSIONS ---------------------------------------------
|
||||
// Save Connection Config
|
||||
bool SaveConnectionConfig(QJsonObject obj, QString *alias, bool canOverrideExisting);
|
||||
bool RemoveConnection(const QString *alias);
|
||||
bool RenameConnection(QString originalName, QString newName);
|
||||
// VMess Protocol
|
||||
QJsonObject ConvertConfigFromVMessString(QString vmess);
|
||||
QJsonObject ConvertConfigFromFile(QString sourceFilePath, bool overrideInbounds);
|
||||
// Load Configs
|
||||
QMap<QString, QJsonObject> GetConnections(list<string> connections);
|
||||
// Startup Prepares
|
||||
int StartPreparation(QJsonObject fullConfig);
|
||||
int FindIndexByTag(QJsonArray list, QString *tag);
|
||||
|
||||
}
|
||||
}
|
||||
using namespace Qv2ray::ConfigOperations;
|
||||
#endif // CONFIGGENERATION_H
|
73
src/QvCoreConfigOperations.hpp
Normal file
@ -0,0 +1,73 @@
|
||||
#ifndef CONFIGGENERATION_H
|
||||
#define CONFIGGENERATION_H
|
||||
|
||||
#include "QvUtils.hpp"
|
||||
#include "QJsonObjectInsertMacros.h"
|
||||
|
||||
#define OUTBOUND_TAG_DIRECT "outBound_DIRECT"
|
||||
#define OUTBOUND_TAG_PROXY "outBound_PROXY"
|
||||
#define QV2RAY_API_TAG_DEFAULT "_QV2RAY_API_"
|
||||
#define QV2RAY_API_TAG_INBOUND "_QV2RAY_API_INBOUND_"
|
||||
|
||||
#define JSON_ROOT_TRY_REMOVE(obj) if (root.contains(obj)) { root.remove(obj); }
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
// -------------------------- BEGIN GENERAL FUNCTIONS ----------------------------------------------
|
||||
namespace ConfigOperations
|
||||
{
|
||||
QMap<QString, QJsonObject> GetConnections(list<string> connections);
|
||||
bool CheckIsComplexConfig(QJsonObject root);
|
||||
int StartPreparation(QJsonObject fullConfig);
|
||||
int FindIndexByTag(QJsonArray list, QString *tag);
|
||||
|
||||
//
|
||||
// -------------------------- BEGIN CONFIG CONVERSIONS --------------------------
|
||||
namespace Convertion
|
||||
{
|
||||
//int VerifyVMessProtocolString(QString vmess);
|
||||
QString DecodeSubscriptionString(QByteArray arr);
|
||||
//
|
||||
// Save Connection Config
|
||||
bool SaveConnectionConfig(QJsonObject obj, QString *alias, bool canOverrideExisting);
|
||||
bool RemoveConnection(const QString &alias);
|
||||
bool RenameConnection(QString originalName, QString newName);
|
||||
// VMess URI Protocol
|
||||
QJsonObject ConvertConfigFromVMessString(QString vmess, QString *alias, QString *errMessage);
|
||||
QJsonObject ConvertConfigFromFile(QString sourceFilePath, bool keepInbounds);
|
||||
QString ConvertConfigToVMessString(const StreamSettingsObject &transfer, const VMessServerObject &serverConfig, const QString &alias);
|
||||
}
|
||||
|
||||
//
|
||||
// -------------------------- BEGIN CONFIG GENERATIONS ---------------------------------------------
|
||||
namespace Generation
|
||||
{
|
||||
QJsonObject GenerateRoutes(bool enableProxy, bool cnProxy);
|
||||
QJsonObject GenerateSingleRouteRule(QStringList list, bool isDomain, QString outboundTag, QString type = "field");
|
||||
QJsonObject GenerateDNS(bool withLocalhost, QStringList dnsServers);
|
||||
QJsonObject GenerateAPIEntry(QString tag, bool withHandler = true, bool withLogger = true, bool withStats = true);
|
||||
//
|
||||
// Outbound Protocols
|
||||
QJsonObject GenerateFreedomOUT(QString domainStrategy, QString redirect, int userLevel);
|
||||
QJsonObject GenerateBlackHoleOUT(bool useHTTP);
|
||||
QJsonObject GenerateShadowSocksServerOUT(QString email, QString address, int port, QString method, QString password, bool ota, int level);
|
||||
QJsonObject GenerateShadowSocksOUT(QList<QJsonObject> servers);
|
||||
//
|
||||
// Inbounds Protocols
|
||||
QJsonObject GenerateDokodemoIN(QString address, int port, QString network, int timeout, bool followRedirect, int userLevel);
|
||||
QJsonObject GenerateHTTPIN(QList<AccountObject> accounts, int timeout = 300, bool allowTransparent = true, int userLevel = 0);
|
||||
QJsonObject GenerateSocksIN(QString auth, QList<AccountObject> _accounts, bool udp = false, QString ip = "127.0.0.1", int userLevel = 0);
|
||||
//
|
||||
// Generate FINAL Configs
|
||||
QJsonObject GenerateRuntimeConfig(QJsonObject root);
|
||||
QJsonObject GenerateOutboundEntry(QString protocol, QJsonObject settings, QJsonObject streamSettings, QJsonObject mux = QJsonObject(), QString sendThrough = "0.0.0.0", QString tag = "");
|
||||
QJsonObject GenerateInboundEntry(QString listen, int port, QString protocol, QJsonObject settings, QString tag, QJsonObject sniffing = QJsonObject(), QJsonObject allocate = QJsonObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using namespace Qv2ray::ConfigOperations;
|
||||
using namespace Qv2ray::ConfigOperations::Convertion;
|
||||
using namespace Qv2ray::ConfigOperations::Generation;
|
||||
|
||||
#endif // CONFIGGENERATION_H
|
@ -1,8 +1,58 @@
|
||||
#include "QvCoreConfigOperations.h"
|
||||
#include "QvCoreConfigOperations.hpp"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace ConfigOperations
|
||||
{
|
||||
namespace Convertion
|
||||
{
|
||||
// From https://github.com/2dust/v2rayN/wiki/%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E(ver-2)
|
||||
QString ConvertConfigToVMessString(const StreamSettingsObject &transfer, const VMessServerObject &serverConfig, const QString &alias)
|
||||
{
|
||||
QJsonObject vmessUriRoot;
|
||||
// Constant
|
||||
vmessUriRoot["v"] = 2;
|
||||
vmessUriRoot["ps"] = alias;
|
||||
vmessUriRoot["add"] = QSTRING(serverConfig.address);
|
||||
vmessUriRoot["port"] = serverConfig.port;
|
||||
vmessUriRoot["id"] = QSTRING(serverConfig.users.front().id);
|
||||
vmessUriRoot["aid"] = serverConfig.users.front().alterId;
|
||||
vmessUriRoot["net"] = QSTRING(transfer.network);
|
||||
vmessUriRoot["tls"] = QSTRING(transfer.security);
|
||||
|
||||
if (transfer.network == "tcp") {
|
||||
vmessUriRoot["type"] = QSTRING(transfer.tcpSettings.header.type);
|
||||
} else if (transfer.network == "kcp") {
|
||||
vmessUriRoot["type"] = QSTRING(transfer.kcpSettings.header.type);
|
||||
} else if (transfer.network == "quic") {
|
||||
vmessUriRoot["type"] = QSTRING(transfer.quicSettings.header.type);
|
||||
vmessUriRoot["host"] = QSTRING(transfer.quicSettings.security);
|
||||
vmessUriRoot["path"] = QSTRING(transfer.quicSettings.key);
|
||||
} else if (transfer.network == "ws") {
|
||||
auto x = QMap<string, string>(transfer.wsSettings.headers);
|
||||
auto host = x.contains("host");
|
||||
auto CapHost = x.contains("Host");
|
||||
auto realHost = host ? x["host"] : (CapHost ? x["Host"] : "");
|
||||
//
|
||||
vmessUriRoot["host"] = QSTRING(realHost);
|
||||
vmessUriRoot["path"] = QSTRING(transfer.wsSettings.path);
|
||||
} else if (transfer.network == "h2" || transfer.network == "http") {
|
||||
vmessUriRoot["host"] = Stringify(transfer.httpSettings.host, ",");
|
||||
vmessUriRoot["path"] = QSTRING(transfer.httpSettings.path);
|
||||
}
|
||||
|
||||
//
|
||||
auto vmessPart = Base64Encode(JsonToString(vmessUriRoot, QJsonDocument::JsonFormat::Compact));
|
||||
return "vmess://" + vmessPart;
|
||||
}
|
||||
QString DecodeSubscriptionString(QByteArray arr)
|
||||
{
|
||||
// Some subscription providers may use plain vmess:// saperated by lines
|
||||
// But others may use base64 of above.
|
||||
auto result = QString::fromUtf8(arr).trimmed();
|
||||
return result.startsWith("vmess://") ? result : Base64Decode(result);
|
||||
}
|
||||
//
|
||||
/// Save Connection to a place, with checking if there's existing file.
|
||||
/// If so, append "_N" to the name.
|
||||
bool SaveConnectionConfig(QJsonObject obj, QString *alias, bool canOverrideExisting)
|
||||
@ -12,36 +62,90 @@ namespace Qv2ray
|
||||
|
||||
// If there's already a file AND we CANNOT override existing file.
|
||||
if (config->exists() && !canOverrideExisting) {
|
||||
// I don't think there will be someone using the same name for
|
||||
// a connection for more than 50 times...
|
||||
for (int i = 1; i < 50; i++) {
|
||||
if (QFile(QV2RAY_CONFIG_DIR + *alias + "_" + QString::number(i) + QV2RAY_CONFIG_FILE_EXTENSION).exists()) {
|
||||
LOG(MODULE_CONFIG, "Config file with name: " << (*alias + QV2RAY_CONFIG_FILE_EXTENSION).toStdString() << " already exists")
|
||||
LOG(MODULE_CONFIG, "canOverride is off, we try another filename.")
|
||||
continue;
|
||||
} else {
|
||||
*alias = *alias + QString("_") + QString::number(i);
|
||||
// Alias is a pointer to a QString.
|
||||
DeducePossibleFileName(QV2RAY_CONFIG_DIR, alias, QV2RAY_CONFIG_FILE_EXTENSION);
|
||||
config = new QFile(QV2RAY_CONFIG_DIR + *alias + QV2RAY_CONFIG_FILE_EXTENSION);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LOG(MODULE_CONFIG, "Saving a config named: " + alias->toStdString())
|
||||
return StringToFile(&str, config);
|
||||
}
|
||||
|
||||
bool RemoveConnection(const QString *alias)
|
||||
bool RemoveConnection(const QString &alias)
|
||||
{
|
||||
QFile config(QV2RAY_CONFIG_DIR + *alias + QV2RAY_CONFIG_FILE_EXTENSION);
|
||||
return config.exists() && config.remove();
|
||||
QFile config(QV2RAY_CONFIG_DIR + alias + QV2RAY_CONFIG_FILE_EXTENSION);
|
||||
|
||||
if (!config.exists()) {
|
||||
LOG(MODULE_FILE, "Trying to remove a non-existing file?")
|
||||
return false;
|
||||
} else {
|
||||
return config.remove();
|
||||
}
|
||||
}
|
||||
|
||||
// This generates global config containing only one outbound....
|
||||
QJsonObject ConvertConfigFromVMessString(QString str)
|
||||
QJsonObject ConvertConfigFromVMessString(QString vmess, QString *alias, QString *errMessage)
|
||||
{
|
||||
// Reset errMessage
|
||||
*errMessage = "";
|
||||
|
||||
if (!vmess.toLower().startsWith("vmess://")) {
|
||||
*errMessage = QObject::tr("VMess string should start with 'vmess://'");
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
try {
|
||||
QStringRef vmessJsonB64(&vmess, 8, vmess.length() - 8);
|
||||
auto b64Str = vmessJsonB64.toString();
|
||||
|
||||
if (b64Str.isEmpty()) {
|
||||
*errMessage = QObject::tr("VMess string should be a valid base64 string");
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
auto vmessString = Base64Decode(b64Str);
|
||||
auto jsonErr = VerifyJsonString(&vmessString);
|
||||
|
||||
if (!jsonErr.isEmpty()) {
|
||||
*errMessage = jsonErr;
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
auto vmessConf = JsonFromString(vmessString);
|
||||
|
||||
if (vmessConf.isEmpty()) {
|
||||
*errMessage = QObject::tr("JSON should not be empty");
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
// C is a quick hack...
|
||||
#define C(k) vmessConf.contains(k)
|
||||
bool flag = true;
|
||||
flag = flag && C("id");
|
||||
flag = flag && C("aid");
|
||||
flag = flag && C("port");
|
||||
flag = flag && C("add");
|
||||
// Stream Settings
|
||||
auto net = C("net") ? vmessConf["net"].toString() : "tcp";
|
||||
|
||||
if (net == "http" || net == "ws")
|
||||
flag = flag && C("host") && C("path");
|
||||
else if (net == "domainsocket")
|
||||
flag = flag && C("path");
|
||||
else if (net == "quic")
|
||||
flag = flag && C("host") && C("type") && C("path");
|
||||
|
||||
#undef C
|
||||
//return flag ? 0 : 1;
|
||||
} catch (exception *e) {
|
||||
LOG(MODULE_CONNECTION_VMESS, "Failed to decode vmess string: " << e->what())
|
||||
*errMessage = QSTRING(e->what());
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
DROOT
|
||||
QStringRef vmessJsonB64(&str, 8, str.length() - 8);
|
||||
QStringRef vmessJsonB64(&vmess, 8, vmess.length() - 8);
|
||||
auto vmessConf = JsonFromString(Base64Decode(vmessJsonB64.toString()));
|
||||
//
|
||||
string ps, add, id, net, type, host, path, tls;
|
||||
@ -85,9 +189,9 @@ namespace Qv2ray
|
||||
|
||||
if (net == "tcp") {
|
||||
streaming.tcpSettings.header.type = type;
|
||||
} else if (net == "http") {
|
||||
} else if (net == "http" || net == "h2") {
|
||||
// Fill hosts for HTTP
|
||||
foreach (auto _host, QString::fromStdString(host).split(',')) {
|
||||
for (auto _host : QString::fromStdString(host).split(',')) {
|
||||
streaming.httpSettings.host.push_back(_host.toStdString());
|
||||
}
|
||||
|
||||
@ -111,20 +215,27 @@ namespace Qv2ray
|
||||
streaming.network = net;
|
||||
//
|
||||
// WARN Mux is missing here.
|
||||
auto outbound = GenerateOutboundEntry("vmess", vConf, GetRootObject(streaming), QJsonObject() /*GetRootObject(GetGlobalConfig().mux) */, "0.0.0.0", OUTBOUND_TAG_PROXY);
|
||||
auto outbound = GenerateOutboundEntry("vmess", vConf, GetRootObject(streaming), QJsonObject(), "0.0.0.0", OUTBOUND_TAG_PROXY);
|
||||
//
|
||||
QJsonArray outbounds;
|
||||
outbounds.append(outbound);
|
||||
root.insert("outbounds", outbounds);
|
||||
root.insert("QV2RAY_ALIAS", QString::fromStdString(ps));
|
||||
root["outbounds"] = outbounds;
|
||||
*alias = *alias + "_" + QSTRING(ps);
|
||||
RROOT
|
||||
}
|
||||
|
||||
QJsonObject ConvertConfigFromFile(QString sourceFilePath, bool overrideInbounds)
|
||||
QJsonObject ConvertConfigFromFile(QString sourceFilePath, bool keepInbounds)
|
||||
{
|
||||
auto root = JsonFromString(StringFromFile(new QFile(sourceFilePath)));
|
||||
QFile source(sourceFilePath);
|
||||
|
||||
if (overrideInbounds) {
|
||||
if (!source.exists()) {
|
||||
LOG(MODULE_FILE, "Trying to import from an non-existing file.")
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
auto root = JsonFromString(StringFromFile(&source));
|
||||
|
||||
if (!keepInbounds) {
|
||||
JSON_ROOT_TRY_REMOVE("inbounds")
|
||||
}
|
||||
|
||||
@ -139,7 +250,7 @@ namespace Qv2ray
|
||||
{
|
||||
QMap<QString, QJsonObject> list;
|
||||
|
||||
foreach (auto conn, connectionNames) {
|
||||
for (auto conn : connectionNames) {
|
||||
QString jsonString = StringFromFile(new QFile(QV2RAY_CONFIG_DIR + QSTRING(conn) + QV2RAY_CONFIG_FILE_EXTENSION));
|
||||
QJsonObject connectionObject = JsonFromString(jsonString);
|
||||
list.insert(QString::fromStdString(conn), connectionObject);
|
||||
@ -150,7 +261,8 @@ namespace Qv2ray
|
||||
|
||||
bool RenameConnection(QString originalName, QString newName)
|
||||
{
|
||||
return QFile(QV2RAY_CONFIG_DIR + originalName + QV2RAY_CONFIG_FILE_EXTENSION).rename(QV2RAY_CONFIG_DIR + newName + QV2RAY_CONFIG_FILE_EXTENSION);
|
||||
LOG(MODULE_FILE, "[RENAME] --> ORIGINAL: " + originalName.toStdString() + ", NEW: " + newName.toStdString())
|
||||
return QFile::rename(QV2RAY_CONFIG_DIR + originalName + QV2RAY_CONFIG_FILE_EXTENSION, QV2RAY_CONFIG_DIR + newName + QV2RAY_CONFIG_FILE_EXTENSION);
|
||||
}
|
||||
|
||||
int StartPreparation(QJsonObject fullConfig)
|
||||
@ -173,4 +285,5 @@ namespace Qv2ray
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
#include "QvCoreConfigOperations.h"
|
||||
#include "QvCoreConfigOperations.hpp"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace ConfigOperations
|
||||
{
|
||||
namespace Generation
|
||||
{
|
||||
// Important config generation algorithms.
|
||||
static const QStringList vLogLevels = {"none", "debug", "info", "warning", "error"};
|
||||
@ -84,6 +86,8 @@ namespace Qv2ray
|
||||
if (withLocalhost) {
|
||||
// https://github.com/lhy0403/Qv2ray/issues/64
|
||||
// The fix patch didn't touch this line below.
|
||||
//
|
||||
// Should we APPEND localhost or PUSH_FRONT localhost?
|
||||
servers.append("localhost");
|
||||
}
|
||||
|
||||
@ -179,27 +183,26 @@ namespace Qv2ray
|
||||
//
|
||||
QStringList dnsList;
|
||||
|
||||
foreach (auto str, gConf.dnsList) {
|
||||
foreach (auto str, gConf.connectionConfig.dnsList) {
|
||||
dnsList.append(QString::fromStdString(str));
|
||||
}
|
||||
|
||||
auto dnsObject = GenerateDNS(gConf.withLocalDNS, dnsList);
|
||||
auto dnsObject = GenerateDNS(gConf.connectionConfig.withLocalDNS, dnsList);
|
||||
root.insert("dns", dnsObject);
|
||||
//
|
||||
//
|
||||
//
|
||||
QJsonArray inboundsList;
|
||||
|
||||
// HTTP InBound
|
||||
if (gConf.inBoundSettings.http_port != 0) {
|
||||
if (gConf.inboundConfig.http_port != 0) {
|
||||
QJsonObject httpInBoundObject;
|
||||
httpInBoundObject.insert("listen", QString::fromStdString(gConf.inBoundSettings.listenip));
|
||||
httpInBoundObject.insert("port", gConf.inBoundSettings.http_port);
|
||||
httpInBoundObject.insert("listen", QString::fromStdString(gConf.inboundConfig.listenip));
|
||||
httpInBoundObject.insert("port", gConf.inboundConfig.http_port);
|
||||
httpInBoundObject.insert("protocol", "http");
|
||||
httpInBoundObject.insert("tag", "http_IN");
|
||||
|
||||
if (gConf.inBoundSettings.http_useAuth) {
|
||||
auto httpInSettings = GenerateHTTPIN(QList<AccountObject>() << gConf.inBoundSettings.httpAccount);
|
||||
if (gConf.inboundConfig.http_useAuth) {
|
||||
auto httpInSettings = GenerateHTTPIN(QList<AccountObject>() << gConf.inboundConfig.httpAccount);
|
||||
httpInBoundObject.insert("settings", httpInSettings);
|
||||
}
|
||||
|
||||
@ -207,16 +210,16 @@ namespace Qv2ray
|
||||
}
|
||||
|
||||
// SOCKS InBound
|
||||
if (gConf.inBoundSettings.socks_port != 0) {
|
||||
if (gConf.inboundConfig.socks_port != 0) {
|
||||
QJsonObject socksInBoundObject;
|
||||
socksInBoundObject.insert("listen", QString::fromStdString(gConf.inBoundSettings.listenip));
|
||||
socksInBoundObject.insert("port", gConf.inBoundSettings.socks_port);
|
||||
socksInBoundObject.insert("listen", QString::fromStdString(gConf.inboundConfig.listenip));
|
||||
socksInBoundObject.insert("port", gConf.inboundConfig.socks_port);
|
||||
socksInBoundObject.insert("protocol", "socks");
|
||||
socksInBoundObject.insert("tag", "socks_IN");
|
||||
auto socksInSettings = GenerateSocksIN(gConf.inBoundSettings.socks_useAuth ? "password" : "noauth",
|
||||
QList<AccountObject>() << gConf.inBoundSettings.socksAccount,
|
||||
gConf.inBoundSettings.socksUDP,
|
||||
QSTRING(gConf.inBoundSettings.socksLocalIP));
|
||||
auto socksInSettings = GenerateSocksIN(gConf.inboundConfig.socks_useAuth ? "password" : "noauth",
|
||||
QList<AccountObject>() << gConf.inboundConfig.socksAccount,
|
||||
gConf.inboundConfig.socksUDP,
|
||||
QSTRING(gConf.inboundConfig.socksLocalIP));
|
||||
socksInBoundObject.insert("settings", socksInSettings);
|
||||
inboundsList.append(socksInBoundObject);
|
||||
}
|
||||
@ -227,27 +230,16 @@ namespace Qv2ray
|
||||
|
||||
// Note: The part below always makes the whole functionality in trouble......
|
||||
// BE EXTREME CAREFUL when changing these code below...
|
||||
// See: https://github.com/lhy0403/Qv2ray/issues/129
|
||||
// routeCountLabel in Mainwindow makes here failed to ENOUGH-ly check the routing tables
|
||||
bool isComplex = CheckIsComplexConfig(root);
|
||||
|
||||
// For SOME configs, there is no "route" entries, so, we add some...
|
||||
|
||||
if (!root.contains("routing")) {
|
||||
if (root["outbounds"].toArray().count() != 1) {
|
||||
// There are no ROUTING but 2 or more outbounds.... This is rare, but possible.
|
||||
LOG(MODULE_CONNECTION, "WARN: This message usually indicates the config file has some logic errors:")
|
||||
LOG(MODULE_CONNECTION, "WARN: --> The config file has NO routing section, however more than 1 outbounds are detected.")
|
||||
}
|
||||
|
||||
LOG(MODULE_CONNECTION, "Current connection has NO ROUTING section, we insert default values.")
|
||||
auto routeObject = GenerateRoutes(gConf.enableProxy, gConf.bypassCN);
|
||||
root.insert("routing", routeObject);
|
||||
QJsonArray outbounds = root["outbounds"].toArray();
|
||||
outbounds.append(GenerateOutboundEntry("freedom", GenerateFreedomOUT("AsIs", ":0", 0), QJsonObject(), QJsonObject(), "0.0.0.0", OUTBOUND_TAG_DIRECT));
|
||||
root["outbounds"] = outbounds;
|
||||
} else {
|
||||
// For some config files that has routing entries already.
|
||||
// We don't add extra routings.
|
||||
//
|
||||
if (isComplex) { // For some config files that has routing entries already.
|
||||
// We DO NOT add extra routings.
|
||||
//
|
||||
// HOWEVER, we need to verify the QV2RAY_RULE_ENABLED entry.
|
||||
// And what's more, process (by removing unused items) from a rule object.
|
||||
QJsonObject routing = root["routing"].toObject();
|
||||
QJsonArray rules;
|
||||
LOG(MODULE_CONNECTION, "Processing an existing routing table.")
|
||||
@ -255,6 +247,19 @@ namespace Qv2ray
|
||||
for (auto _a : routing["rules"].toArray()) {
|
||||
auto _b = _a.toObject();
|
||||
|
||||
if (_b.contains("QV2RAY_RULE_USE_BALANCER")) {
|
||||
if (_b["QV2RAY_RULE_USE_BALANCER"].toBool()) {
|
||||
// We use balancer
|
||||
_b.remove("outboundTag");
|
||||
} else {
|
||||
// We only use the normal outbound
|
||||
_b.remove("balancerTag");
|
||||
}
|
||||
} else {
|
||||
LOG(MODULE_CONFIG, "We found a rule without QV2RAY_RULE_USE_BALANCER, and we didn't process it.")
|
||||
}
|
||||
|
||||
// If this entry has been disabled.
|
||||
if (_b.contains("QV2RAY_RULE_ENABLED") && _b["QV2RAY_RULE_ENABLED"].toBool() == true) {
|
||||
rules.append(_b);
|
||||
} else {
|
||||
@ -264,31 +269,47 @@ namespace Qv2ray
|
||||
|
||||
routing["rules"] = rules;
|
||||
root["routing"] = routing;
|
||||
} else {
|
||||
//
|
||||
LOG(MODULE_CONNECTION, "Current connection has NO ROUTING section, we insert default values.")
|
||||
|
||||
if (root["outbounds"].toArray().count() != 1) {
|
||||
// There are no ROUTING but 2 or more outbounds.... This is rare, but possible.
|
||||
LOG(MODULE_CONNECTION, "WARN: This message usually indicates the config file has logic errors:")
|
||||
LOG(MODULE_CONNECTION, "WARN: --> The config file has NO routing section, however more than 1 outbounds are detected.")
|
||||
}
|
||||
|
||||
auto routeObject = GenerateRoutes(gConf.connectionConfig.enableProxy, gConf.connectionConfig.bypassCN);
|
||||
root.insert("routing", routeObject);
|
||||
QJsonArray outbounds = root["outbounds"].toArray();
|
||||
outbounds.append(GenerateOutboundEntry("freedom", GenerateFreedomOUT("AsIs", ":0", 0), QJsonObject(), QJsonObject(), "0.0.0.0", OUTBOUND_TAG_DIRECT));
|
||||
root["outbounds"] = outbounds;
|
||||
}
|
||||
|
||||
// Let's process some api features.
|
||||
if (gConf.enableStats) {
|
||||
if (gConf.connectionConfig.enableStats) {
|
||||
//
|
||||
// Stats
|
||||
{
|
||||
//
|
||||
root.insert("stats", QJsonObject());
|
||||
}
|
||||
//
|
||||
// Routes
|
||||
{
|
||||
//
|
||||
QJsonObject routing = root["routing"].toObject();
|
||||
QJsonArray routingRules = routing["rules"].toArray();
|
||||
QJsonObject APIRouteRoot;
|
||||
APIRouteRoot["type"] = "field";
|
||||
APIRouteRoot["outboundTag"] = API_TAG_DEFAULT;
|
||||
APIRouteRoot["outboundTag"] = QV2RAY_API_TAG_DEFAULT;
|
||||
QJsonArray inboundTag;
|
||||
inboundTag.append(API_TAG_INBOUND);
|
||||
inboundTag.append(QV2RAY_API_TAG_INBOUND);
|
||||
APIRouteRoot["inboundTag"] = inboundTag;
|
||||
// Add this to root.
|
||||
routingRules.push_front(APIRouteRoot);
|
||||
routing["rules"] = routingRules;
|
||||
root["routing"] = routing;
|
||||
}
|
||||
//
|
||||
// Policy
|
||||
{
|
||||
//
|
||||
QJsonObject policyRoot = root.contains("policy") ? root["policy"].toObject() : QJsonObject();
|
||||
QJsonObject systemPolicy = policyRoot.contains("system") ? policyRoot["system"].toObject() : QJsonObject();
|
||||
systemPolicy["statsInboundUplink"] = true;
|
||||
@ -296,23 +317,24 @@ namespace Qv2ray
|
||||
policyRoot["system"] = systemPolicy;
|
||||
// Add this to root.
|
||||
root["policy"] = policyRoot;
|
||||
}
|
||||
//
|
||||
// Inbounds
|
||||
{
|
||||
//
|
||||
QJsonArray inbounds = root["inbounds"].toArray();
|
||||
QJsonObject fakeDocodemoDoor;
|
||||
fakeDocodemoDoor["address"] = "127.0.0.1";
|
||||
QJsonObject apiInboundsRoot = GenerateInboundEntry("127.0.0.1", gConf.statsPort, "dokodemo-door", fakeDocodemoDoor, API_TAG_INBOUND);
|
||||
QJsonObject apiInboundsRoot = GenerateInboundEntry("127.0.0.1", gConf.connectionConfig.statsPort, "dokodemo-door", fakeDocodemoDoor, QV2RAY_API_TAG_INBOUND);
|
||||
inbounds.push_front(apiInboundsRoot);
|
||||
root["inbounds"] = inbounds;
|
||||
}
|
||||
//
|
||||
// API
|
||||
{
|
||||
root["api"] = GenerateAPIEntry(API_TAG_DEFAULT);
|
||||
}
|
||||
//
|
||||
root["api"] = GenerateAPIEntry(QV2RAY_API_TAG_DEFAULT);
|
||||
//
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,52 +0,0 @@
|
||||
#include "QvCoreConfigOperations.h"
|
||||
#include "QvUtils.h"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace ConfigOperations
|
||||
{
|
||||
// -------------------------- BEGIN CONFIG VALIDATIONS ----------------------------------------------------------------------------
|
||||
|
||||
int VerifyVMessProtocolString(QString vmess)
|
||||
{
|
||||
if (!vmess.toLower().startsWith("vmess://")) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
try {
|
||||
QStringRef vmessJsonB64(&vmess, 8, vmess.length() - 8);
|
||||
auto vmessString = Base64Decode(vmessJsonB64.toString());
|
||||
auto vmessConf = JsonFromString(vmessString);
|
||||
// C is a quick hack...
|
||||
#define C(k) vmessConf.contains(k)
|
||||
bool flag = true;
|
||||
flag = flag && C("id");
|
||||
flag = flag && C("aid");
|
||||
flag = flag && C("port");
|
||||
flag = flag && C("add");
|
||||
// Stream Settings
|
||||
auto net = C("net") ? vmessConf["net"].toString() : "tcp";
|
||||
|
||||
if (net == "http" || net == "ws")
|
||||
flag = flag && C("host") && C("path");
|
||||
else if (net == "domainsocket")
|
||||
flag = flag && C("path");
|
||||
else if (net == "quic")
|
||||
flag = flag && C("host") && C("type") && C("path");
|
||||
|
||||
#undef C
|
||||
return flag ? 0 : 1;
|
||||
} catch (exception *e) {
|
||||
LOG(MODULE_CONNECTION_VMESS, "Failed to decode vmess string: " << e->what())
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
QString GetVmessFromBase64OrPlain(QByteArray arr)
|
||||
{
|
||||
// Fine this is just a hack due to some EXTREMELY strange proxy providers.
|
||||
auto result = QString::fromUtf8(arr).trimmed();
|
||||
return result.startsWith("vmess://") ? result : Base64Decode(result);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,159 +0,0 @@
|
||||
#include <QObject>
|
||||
#include <QWidget>
|
||||
#include <QDesktopServices>
|
||||
#include "QvCoreInteractions.h"
|
||||
#include "QvCoreConfigOperations.h"
|
||||
|
||||
#include "QvTinyLog.h"
|
||||
#include "w_MainWindow.h"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
bool Qv2Instance::ValidateConfig(const QString *path)
|
||||
{
|
||||
if (ValidateKernal()) {
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
env.insert("V2RAY_LOCATION_ASSET", QString::fromStdString(GetGlobalConfig().v2AssetsPath));
|
||||
QProcess process;
|
||||
process.setProcessEnvironment(env);
|
||||
process.start(QSTRING(GetGlobalConfig().v2CorePath), QStringList() << "-test" << "-config" << *path, QIODevice::ReadWrite | QIODevice::Text);
|
||||
|
||||
if (!process.waitForFinished()) {
|
||||
LOG(MODULE_VCORE, "v2ray core failed with exitcode: " << process.exitCode())
|
||||
return false;
|
||||
}
|
||||
|
||||
QString output = QString(process.readAllStandardOutput());
|
||||
|
||||
if (process.exitCode() != 0) {
|
||||
Utils::QvMessageBox(nullptr, QObject::tr("Configuration Error"), output.mid(output.indexOf("anti-censorship.") + 17));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Qv2Instance::Qv2Instance(QWidget *parent)
|
||||
{
|
||||
auto proc = new QProcess();
|
||||
vProcess = proc;
|
||||
QObject::connect(vProcess, &QProcess::readyReadStandardOutput, static_cast<MainWindow *>(parent), &MainWindow::UpdateLog);
|
||||
VCoreStatus = STOPPED;
|
||||
}
|
||||
|
||||
void Qv2Instance::SetAPIPort(int port)
|
||||
{
|
||||
// Config API
|
||||
this->port = port;
|
||||
Channel = grpc::CreateChannel("127.0.0.1:" + to_string(port), grpc::InsecureChannelCredentials());
|
||||
StatsService service;
|
||||
Stub = service.NewStub(Channel);
|
||||
}
|
||||
|
||||
QString Qv2Instance::ReadProcessOutput()
|
||||
{
|
||||
return vProcess->readAllStandardOutput();
|
||||
}
|
||||
|
||||
bool Qv2Instance::ValidateKernal()
|
||||
{
|
||||
if (!QFile::exists(QSTRING(GetGlobalConfig().v2CorePath))) {
|
||||
Utils::QvMessageBox(nullptr, QObject::tr("Cannot start v2ray"),
|
||||
QObject::tr("v2ray core file cannot be found at:") + NEWLINE +
|
||||
QSTRING(GetGlobalConfig().v2CorePath) + NEWLINE + NEWLINE +
|
||||
QObject::tr("Please go to prefrence window to change the location.") + NEWLINE +
|
||||
QObject::tr("Or put v2ray core file in the location above."));
|
||||
return false;
|
||||
} else return true;
|
||||
}
|
||||
|
||||
bool Qv2Instance::StartVCore()
|
||||
{
|
||||
if (VCoreStatus != STOPPED) {
|
||||
return false;
|
||||
}
|
||||
|
||||
VCoreStatus = STARTING;
|
||||
|
||||
if (ValidateKernal()) {
|
||||
auto filePath = QV2RAY_GENERATED_FILE_PATH;
|
||||
|
||||
if (ValidateConfig(&filePath)) {
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
env.insert("V2RAY_LOCATION_ASSET", QSTRING(GetGlobalConfig().v2AssetsPath));
|
||||
vProcess->setProcessEnvironment(env);
|
||||
vProcess->start(QSTRING(GetGlobalConfig().v2CorePath), QStringList() << "-config" << filePath, QIODevice::ReadWrite | QIODevice::Text);
|
||||
vProcess->waitForStarted();
|
||||
VCoreStatus = STARTED;
|
||||
return true;
|
||||
} else {
|
||||
VCoreStatus = STOPPED;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
VCoreStatus = STOPPED;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void Qv2Instance::StopVCore()
|
||||
{
|
||||
vProcess->close();
|
||||
totalDataTransfered = QMap<QString, long>();
|
||||
dataTransferSpeed = QMap<QString, long>();
|
||||
VCoreStatus = STOPPED;
|
||||
}
|
||||
|
||||
Qv2Instance::~Qv2Instance()
|
||||
{
|
||||
StopVCore();
|
||||
delete vProcess;
|
||||
}
|
||||
|
||||
long Qv2Instance::CallStatsAPIByName(QString name)
|
||||
{
|
||||
GetStatsRequest request;
|
||||
request.set_name(name.toStdString());
|
||||
request.set_reset(false);
|
||||
GetStatsResponse response;
|
||||
ClientContext context;
|
||||
Status status = Stub->GetStats(&context, request, &response);
|
||||
|
||||
if (!status.ok()) {
|
||||
LOG(MODULE_VCORE, "API call returns: " + to_string(status.error_code()))
|
||||
}
|
||||
|
||||
return response.stat().value();
|
||||
}
|
||||
|
||||
long Qv2Instance::getTagLastUplink(QString tag)
|
||||
{
|
||||
auto val = CallStatsAPIByName("inbound>>>" + tag + ">>>traffic>>>uplink");
|
||||
auto data = val - totalDataTransfered[tag + "_up"];
|
||||
totalDataTransfered[tag + "_up"] = val;
|
||||
dataTransferSpeed[tag + "_up"] = data;
|
||||
return data;
|
||||
}
|
||||
|
||||
long Qv2Instance::getTagLastDownlink(QString tag)
|
||||
{
|
||||
auto val = CallStatsAPIByName("inbound>>>" + tag + ">>>traffic>>>downlink");
|
||||
auto data = val - totalDataTransfered[tag + "_down"];
|
||||
totalDataTransfered[tag + "_down"] = val;
|
||||
dataTransferSpeed[tag + "_down"] = data;
|
||||
return data;
|
||||
}
|
||||
|
||||
long Qv2Instance::getTagTotalUplink(QString tag)
|
||||
{
|
||||
return totalDataTransfered[tag + "_up"];
|
||||
}
|
||||
|
||||
long Qv2Instance::getTagTotalDownlink(QString tag)
|
||||
{
|
||||
return totalDataTransfered[tag + "_down"];
|
||||
}
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
#ifndef VINTERACT_H
|
||||
#define VINTERACT_H
|
||||
#include <QProcess>
|
||||
#include <QString>
|
||||
#include "Qv2rayBase.h"
|
||||
#include <grpc++/grpc++.h>
|
||||
#include "QvUtils.h"
|
||||
#include "v2ray_api_commands.pb.h"
|
||||
#include "v2ray_api_commands.grpc.pb.h"
|
||||
|
||||
using grpc::Channel;
|
||||
using grpc::ClientContext;
|
||||
using grpc::Status;
|
||||
using namespace std;
|
||||
using namespace v2ray::core::app::stats::command;
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace QvInteration
|
||||
{
|
||||
enum V2RAY_INSTANCE_STARTUP_STATUS {
|
||||
STOPPED,
|
||||
STARTING,
|
||||
STARTED
|
||||
};
|
||||
|
||||
class Qv2Instance
|
||||
{
|
||||
public:
|
||||
explicit Qv2Instance(QWidget *parent = nullptr);
|
||||
void SetAPIPort(int port);
|
||||
long getTagTotalDownlink(QString tag);
|
||||
long getTagTotalUplink(QString tag);
|
||||
long getTagLastDownlink(QString tag);
|
||||
long getTagLastUplink(QString tag);
|
||||
bool StartVCore();
|
||||
void StopVCore();
|
||||
V2RAY_INSTANCE_STARTUP_STATUS VCoreStatus;
|
||||
static bool ValidateConfig(const QString *path);
|
||||
static bool ValidateKernal();
|
||||
QString ReadProcessOutput();
|
||||
|
||||
~Qv2Instance();
|
||||
QMap<QString, long> totalDataTransfered;
|
||||
QMap<QString, long> dataTransferSpeed;
|
||||
private:
|
||||
long CallStatsAPIByName(QString name);
|
||||
QProcess *vProcess;
|
||||
std::shared_ptr<::grpc::Channel> Channel;
|
||||
std::unique_ptr<StatsService::Stub> Stub;
|
||||
int port;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
using namespace Qv2ray::QvInteration;
|
||||
|
||||
#endif // VINTERACT_H
|
@ -1,4 +1,4 @@
|
||||
#include "QvUtils.h"
|
||||
#include "QvUtils.hpp"
|
||||
#include <QTextStream>
|
||||
|
||||
namespace Qv2ray
|
||||
@ -21,8 +21,9 @@ namespace Qv2ray
|
||||
QString randomString;
|
||||
|
||||
for (int i = 0; i < len; ++i) {
|
||||
int index = qrand() % possibleCharacters.length();
|
||||
QChar nextChar = possibleCharacters.at(index);
|
||||
uint rand = QRandomGenerator::system()->generate();
|
||||
uint max = static_cast<uint>(possibleCharacters.length());
|
||||
QChar nextChar = possibleCharacters[rand % max];
|
||||
randomString.append(nextChar);
|
||||
}
|
||||
|
||||
@ -104,18 +105,18 @@ namespace Qv2ray
|
||||
return JsonFromString(json);
|
||||
}
|
||||
|
||||
QString JsonToString(QJsonObject json)
|
||||
QString JsonToString(QJsonObject json, QJsonDocument::JsonFormat format)
|
||||
{
|
||||
QJsonDocument doc;
|
||||
doc.setObject(json);
|
||||
return doc.toJson();
|
||||
return doc.toJson(format);
|
||||
}
|
||||
|
||||
QString JsonToString(QJsonArray array)
|
||||
QString JsonToString(QJsonArray array, QJsonDocument::JsonFormat format)
|
||||
{
|
||||
QJsonDocument doc;
|
||||
doc.setArray(array);
|
||||
return doc.toJson();
|
||||
return doc.toJson(format);
|
||||
}
|
||||
|
||||
QString VerifyJsonString(const QString *source)
|
||||
@ -140,15 +141,13 @@ namespace Qv2ray
|
||||
|
||||
QString Base64Encode(QString string)
|
||||
{
|
||||
QByteArray ba;
|
||||
ba.append(string);
|
||||
QByteArray ba = string.toUtf8();
|
||||
return ba.toBase64();
|
||||
}
|
||||
|
||||
QString Base64Decode(QString string)
|
||||
{
|
||||
QByteArray ba;
|
||||
ba.append(string);
|
||||
QByteArray ba = string.toUtf8();
|
||||
return QString(QByteArray::fromBase64(ba));
|
||||
}
|
||||
|
||||
@ -178,14 +177,14 @@ namespace Qv2ray
|
||||
file.close();
|
||||
}
|
||||
|
||||
QStringList getFileList(QDir dir)
|
||||
QStringList GetFileList(QDir dir)
|
||||
{
|
||||
return dir.entryList(QStringList() << "*" << "*.*", QDir::Hidden | QDir::Files);
|
||||
}
|
||||
|
||||
bool CheckFile(QDir dir, QString fileName)
|
||||
{
|
||||
return getFileList(dir).indexOf(fileName) >= 0;
|
||||
return GetFileList(dir).indexOf(fileName) >= 0;
|
||||
}
|
||||
|
||||
void QvMessageBox(QWidget *parent, QString title, QString text)
|
||||
@ -213,11 +212,34 @@ namespace Qv2ray
|
||||
}
|
||||
|
||||
|
||||
QTranslator *getTranslator(const QString *lang)
|
||||
QTranslator *getTranslator(const QString &lang)
|
||||
{
|
||||
QTranslator *translator = new QTranslator();
|
||||
translator->load(*lang + ".qm", ":/translations/");
|
||||
translator->load(lang + ".qm", ":/translations/");
|
||||
return translator;
|
||||
}
|
||||
|
||||
/// This returns a file name without extensions.
|
||||
void DeducePossibleFileName(const QString &baseDir, QString *fileName, const QString &extension)
|
||||
{
|
||||
int i = 1;
|
||||
|
||||
if (!QDir(baseDir).exists()) {
|
||||
QDir(baseDir).mkpath(baseDir);
|
||||
LOG(MODULE_FILE, "Making path: " + baseDir.toStdString())
|
||||
}
|
||||
|
||||
while (true) {
|
||||
if (!QFile(baseDir + "/" + fileName + "_" + QString::number(i) + extension).exists()) {
|
||||
*fileName = *fileName + "_" + QString::number(i);
|
||||
return;
|
||||
} else {
|
||||
//LOG(MODULE_FILE, "File with name: " << (fileName + "_" + QString::number(i) + extension).toStdString() << " already exists")
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef UTILS_H
|
||||
#ifndef UTILS_H
|
||||
#define UTILS_H
|
||||
|
||||
#include "Qv2rayBase.h"
|
||||
#include "Qv2rayBase.hpp"
|
||||
#include <QMessageBox>
|
||||
#include <QUuid>
|
||||
|
||||
@ -9,9 +9,9 @@ namespace Qv2ray
|
||||
{
|
||||
namespace Utils
|
||||
{
|
||||
QTranslator *getTranslator(const QString *lang);
|
||||
QTranslator *getTranslator(const QString &lang);
|
||||
|
||||
QStringList getFileList(QDir dir);
|
||||
QStringList GetFileList(QDir dir);
|
||||
|
||||
QString Base64Encode(QString string);
|
||||
QString Base64Decode(QString string);
|
||||
@ -37,8 +37,8 @@ namespace Qv2ray
|
||||
bool StringToFile(const QString *text, QFile *target);
|
||||
//
|
||||
QJsonObject JsonFromString(QString string);
|
||||
QString JsonToString(QJsonObject json);
|
||||
QString JsonToString(QJsonArray array);
|
||||
QString JsonToString(QJsonObject json, QJsonDocument::JsonFormat format = QJsonDocument::JsonFormat::Indented);
|
||||
QString JsonToString(QJsonArray array, QJsonDocument::JsonFormat format = QJsonDocument::JsonFormat::Indented);
|
||||
//
|
||||
QString VerifyJsonString(const QString *source);
|
||||
//
|
||||
@ -60,7 +60,20 @@ namespace Qv2ray
|
||||
X::loadjson(str.toStdString(), v, false);
|
||||
return v;
|
||||
}
|
||||
|
||||
//
|
||||
// Misc
|
||||
template<typename T>
|
||||
QJsonObject GetRootObject(T t)
|
||||
{
|
||||
auto json = StructToJsonString(t);
|
||||
QJsonDocument doc = QJsonDocument::fromJson(QByteArray::fromStdString(json.toStdString()));
|
||||
return doc.object();
|
||||
}
|
||||
template QJsonObject GetRootObject<RuleObject>(RuleObject t);
|
||||
template QJsonObject GetRootObject<StreamSettingsObject>(StreamSettingsObject t);
|
||||
template QJsonObject GetRootObject<VMessServerObject>(VMessServerObject t);
|
||||
//
|
||||
//
|
||||
template <typename T>
|
||||
void RemoveItem(std::vector<T> &vec, size_t pos)
|
||||
{
|
||||
@ -70,6 +83,10 @@ namespace Qv2ray
|
||||
}
|
||||
|
||||
QString FormatBytes(long long bytes);
|
||||
void DeducePossibleFileName(const QString &baseDir, QString *fileName, const QString &extension);
|
||||
//
|
||||
//
|
||||
QString ConvertGFWToPAC(const QString &rawContent, const QString &customProxyString);
|
||||
}
|
||||
}
|
||||
|
3
src/components/QvComponentsHandler.cpp
Normal file
@ -0,0 +1,3 @@
|
||||
#include "QvComponentsHandler.hpp"
|
||||
|
||||
|
14
src/components/QvComponentsHandler.hpp
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef QVCOMPONENTSHANDLER_H
|
||||
#define QVCOMPONENTSHANDLER_H
|
||||
#include "QvUtils.hpp"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace Components
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
using namespace Qv2ray::Components;
|
||||
|
||||
#endif // QVCOMPONENTSHANDLER_H
|
189
src/components/QvCoreInteractions.cpp
Normal file
@ -0,0 +1,189 @@
|
||||
#include <QObject>
|
||||
#include <QWidget>
|
||||
#include <QDesktopServices>
|
||||
#include "QvCoreInteractions.hpp"
|
||||
#include "QvCoreConfigOperations.hpp"
|
||||
|
||||
#include "QvTinyLog.hpp"
|
||||
#include "w_MainWindow.hpp"
|
||||
|
||||
using namespace v2ray::core::app::stats::command;
|
||||
using grpc::Channel;
|
||||
using grpc::ClientContext;
|
||||
using grpc::Status;
|
||||
|
||||
// Check 20 times before telling user that API has failed.
|
||||
#define QV2RAY_API_CALL_FAILEDCHECK_THRESHOLD 10
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace QvCoreInteration
|
||||
{
|
||||
bool ConnectionInstance::ValidateConfig(const QString &path)
|
||||
{
|
||||
if (ValidateKernal()) {
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
env.insert("V2RAY_LOCATION_ASSET", QString::fromStdString(GetGlobalConfig().v2AssetsPath));
|
||||
QProcess process;
|
||||
process.setProcessEnvironment(env);
|
||||
process.start(QSTRING(GetGlobalConfig().v2CorePath), QStringList() << "-test" << "-config" << path, QIODevice::ReadWrite | QIODevice::Text);
|
||||
|
||||
if (!process.waitForFinished()) {
|
||||
LOG(MODULE_VCORE, "v2ray core failed with exitcode: " << process.exitCode())
|
||||
return false;
|
||||
}
|
||||
|
||||
QString output = QString(process.readAllStandardOutput());
|
||||
|
||||
if (process.exitCode() != 0) {
|
||||
Utils::QvMessageBox(nullptr, tr("Configuration Error"), output.mid(output.indexOf("anti-censorship.") + 17));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
ConnectionInstance::ConnectionInstance(QWidget *parent) : apiFailedCounter(0), port(0)
|
||||
{
|
||||
auto proc = new QProcess();
|
||||
vProcess = proc;
|
||||
connect(vProcess, &QProcess::readyReadStandardOutput, static_cast<MainWindow *>(parent), &MainWindow::UpdateLog);
|
||||
ConnectionStatus = STOPPED;
|
||||
}
|
||||
|
||||
void ConnectionInstance::SetAPIPort(int port)
|
||||
{
|
||||
// Config API
|
||||
this->port = port;
|
||||
Channel = grpc::CreateChannel("127.0.0.1:" + to_string(port), grpc::InsecureChannelCredentials());
|
||||
StatsService service;
|
||||
Stub = service.NewStub(Channel);
|
||||
}
|
||||
|
||||
QString ConnectionInstance::ReadProcessOutput()
|
||||
{
|
||||
return vProcess->readAllStandardOutput();
|
||||
}
|
||||
|
||||
bool ConnectionInstance::ValidateKernal()
|
||||
{
|
||||
if (!QFile::exists(QSTRING(GetGlobalConfig().v2CorePath))) {
|
||||
Utils::QvMessageBox(nullptr, tr("Cannot start v2ray"),
|
||||
tr("v2ray core file cannot be found at:") + NEWLINE +
|
||||
QSTRING(GetGlobalConfig().v2CorePath) + NEWLINE + NEWLINE +
|
||||
tr("Please go to prefrence window to change the location.") + NEWLINE +
|
||||
tr("Or put v2ray core file in the location above."));
|
||||
return false;
|
||||
} else return true;
|
||||
}
|
||||
|
||||
bool ConnectionInstance::StartV2rayCore()
|
||||
{
|
||||
if (ConnectionStatus != STOPPED) {
|
||||
LOG(MODULE_VCORE, "Status is invalid, expect STOPPED when calling StartV2rayCore")
|
||||
return false;
|
||||
}
|
||||
|
||||
ConnectionStatus = STARTING;
|
||||
|
||||
if (ValidateKernal()) {
|
||||
auto filePath = QV2RAY_GENERATED_FILE_PATH;
|
||||
|
||||
if (ValidateConfig(filePath)) {
|
||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||
env.insert("V2RAY_LOCATION_ASSET", QSTRING(GetGlobalConfig().v2AssetsPath));
|
||||
vProcess->setProcessEnvironment(env);
|
||||
vProcess->start(QSTRING(GetGlobalConfig().v2CorePath), QStringList() << "-config" << filePath, QIODevice::ReadWrite | QIODevice::Text);
|
||||
vProcess->waitForStarted();
|
||||
ConnectionStatus = STARTED;
|
||||
return true;
|
||||
} else {
|
||||
ConnectionStatus = STOPPED;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
ConnectionStatus = STOPPED;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectionInstance::StopV2rayCore()
|
||||
{
|
||||
vProcess->close();
|
||||
apiFailedCounter = 0;
|
||||
totalDataTransfered.clear();
|
||||
dataTransferSpeed.clear();
|
||||
ConnectionStatus = STOPPED;
|
||||
}
|
||||
|
||||
ConnectionInstance::~ConnectionInstance()
|
||||
{
|
||||
StopV2rayCore();
|
||||
delete vProcess;
|
||||
}
|
||||
|
||||
long ConnectionInstance::CallStatsAPIByName(QString name)
|
||||
{
|
||||
if (ConnectionStatus != STARTED) {
|
||||
LOG(MODULE_VCORE, "Invalid connection status when calling API")
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (apiFailedCounter == QV2RAY_API_CALL_FAILEDCHECK_THRESHOLD) {
|
||||
LOG(MODULE_VCORE, "API call failure threshold reached, cancelling further API aclls.")
|
||||
QvMessageBox(nullptr, tr("API Call Failed"), tr("Failed to get statistics data, please check if v2ray is running properly"));
|
||||
totalDataTransfered.clear();
|
||||
dataTransferSpeed.clear();
|
||||
apiFailedCounter++;
|
||||
return 0;
|
||||
} else if (apiFailedCounter > QV2RAY_API_CALL_FAILEDCHECK_THRESHOLD) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
GetStatsRequest request;
|
||||
request.set_name(name.toStdString());
|
||||
request.set_reset(false);
|
||||
GetStatsResponse response;
|
||||
ClientContext context;
|
||||
Status status = Stub->GetStats(&context, request, &response);
|
||||
|
||||
if (!status.ok()) {
|
||||
LOG(MODULE_VCORE, "API call returns: " << status.error_code() << " (" << status.error_message() << ")")
|
||||
apiFailedCounter++;
|
||||
}
|
||||
|
||||
return response.stat().value();
|
||||
}
|
||||
|
||||
long ConnectionInstance::getTagLastUplink(const QString &tag)
|
||||
{
|
||||
auto val = CallStatsAPIByName("inbound>>>" + tag + ">>>traffic>>>uplink");
|
||||
auto data = val - totalDataTransfered[tag + "_up"];
|
||||
totalDataTransfered[tag + "_up"] = val;
|
||||
dataTransferSpeed[tag + "_up"] = data;
|
||||
return data;
|
||||
}
|
||||
|
||||
long ConnectionInstance::getTagLastDownlink(const QString &tag)
|
||||
{
|
||||
auto val = CallStatsAPIByName("inbound>>>" + tag + ">>>traffic>>>downlink");
|
||||
auto data = val - totalDataTransfered[tag + "_down"];
|
||||
totalDataTransfered[tag + "_down"] = val;
|
||||
dataTransferSpeed[tag + "_down"] = data;
|
||||
return data;
|
||||
}
|
||||
|
||||
long ConnectionInstance::getTagTotalUplink(const QString &tag)
|
||||
{
|
||||
return totalDataTransfered[tag + "_up"];
|
||||
}
|
||||
|
||||
long ConnectionInstance::getTagTotalDownlink(const QString &tag)
|
||||
{
|
||||
return totalDataTransfered[tag + "_down"];
|
||||
}
|
||||
}
|
||||
}
|
57
src/components/QvCoreInteractions.hpp
Normal file
@ -0,0 +1,57 @@
|
||||
#ifndef VINTERACT_H
|
||||
#define VINTERACT_H
|
||||
#include <QProcess>
|
||||
#include <QString>
|
||||
#include "Qv2rayBase.hpp"
|
||||
#include <grpc++/grpc++.h>
|
||||
#include "QvUtils.hpp"
|
||||
#include "v2ray_api_commands.pb.h"
|
||||
#include "v2ray_api_commands.grpc.pb.h"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace QvCoreInteration
|
||||
{
|
||||
enum QvInstanceStatus {
|
||||
STOPPED,
|
||||
STARTING,
|
||||
STARTED
|
||||
};
|
||||
|
||||
class ConnectionInstance : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ConnectionInstance(QWidget *parent = nullptr);
|
||||
void SetAPIPort(int port);
|
||||
//
|
||||
long getTagTotalDownlink(const QString &tag);
|
||||
long getTagTotalUplink(const QString &tag);
|
||||
long getTagLastDownlink(const QString &tag);
|
||||
long getTagLastUplink(const QString &tag);
|
||||
//
|
||||
bool StartV2rayCore();
|
||||
void StopV2rayCore();
|
||||
QvInstanceStatus ConnectionStatus;
|
||||
QString ReadProcessOutput();
|
||||
//
|
||||
static bool ValidateConfig(const QString &path);
|
||||
static bool ValidateKernal();
|
||||
|
||||
~ConnectionInstance();
|
||||
QMap<QString, long> totalDataTransfered;
|
||||
QMap<QString, long> dataTransferSpeed;
|
||||
private:
|
||||
int apiFailedCounter;
|
||||
long CallStatsAPIByName(QString name);
|
||||
QProcess *vProcess;
|
||||
std::shared_ptr<::grpc::Channel> Channel;
|
||||
std::unique_ptr<::v2ray::core::app::stats::command::StatsService::Stub> Stub;
|
||||
int port;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
using namespace Qv2ray::QvCoreInteration;
|
||||
|
||||
#endif // VINTERACT_H
|
132
src/components/QvGFWPACConverter.cpp
Normal file
@ -0,0 +1,132 @@
|
||||
/* ORIGINAL LICENSE: Do What The F*ck You Want To Public License
|
||||
* AUTHOR: LBYPatrick
|
||||
*
|
||||
* MODIFIED BY Leroy.H.Y @lhy0403 re-licenced under GPLv3
|
||||
*/
|
||||
|
||||
#include "QvUtils.hpp"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace Utils
|
||||
{
|
||||
// Private function
|
||||
string getRawDomain(string originLine)
|
||||
{
|
||||
size_t startPosition = 0;
|
||||
size_t endPosition = originLine.size();
|
||||
string returnBuffer;
|
||||
bool skipRule1 = originLine.find("[") != string::npos; // [Auto xxxx...
|
||||
bool skipRule2 = originLine.find("!") != string::npos; // Comments
|
||||
bool skipRule3 = originLine.find("@") != string::npos; // Non-proxy Lines
|
||||
bool skipRule4 = originLine.find("*") != string::npos;
|
||||
bool passRule1 = originLine.find("|") != string::npos; // Proxy Lines
|
||||
bool passRule2 = originLine.find(".") != string::npos; // Link-Contained Lines
|
||||
|
||||
if (originLine[endPosition] == '\n') {
|
||||
endPosition -= 1;
|
||||
}
|
||||
|
||||
if (originLine.find("http://") != string::npos) {
|
||||
startPosition += 8;
|
||||
} else if (originLine.find("https://") != string::npos) {
|
||||
startPosition += 9;
|
||||
}
|
||||
|
||||
// Skip unrelated lines
|
||||
if (skipRule1 || skipRule2 || skipRule3 || skipRule4) {
|
||||
return "";
|
||||
} else if (passRule2) {
|
||||
if (passRule1) {
|
||||
startPosition += originLine.find_last_of("|") + 1;
|
||||
}
|
||||
|
||||
if (originLine[startPosition] == '\n') startPosition += 1;
|
||||
|
||||
for (size_t i = startPosition; i < endPosition; ++i) {
|
||||
returnBuffer += originLine[i];
|
||||
}
|
||||
}
|
||||
|
||||
return returnBuffer;
|
||||
}
|
||||
|
||||
QString ConvertGFWToPAC(const QString &rawContent, const QString &customProxyString)
|
||||
{
|
||||
auto rawFileContent = Base64Decode(rawContent).toStdString();
|
||||
string readBuffer = ""; //cleanup
|
||||
string writeBuffer;
|
||||
string domainListCache = "";
|
||||
|
||||
for (size_t i = 0; i < rawFileContent.size(); ++i) {
|
||||
readBuffer += rawFileContent[i];
|
||||
|
||||
if (rawFileContent[i + 1] == '\n') {
|
||||
writeBuffer = getRawDomain(readBuffer);
|
||||
|
||||
if (writeBuffer != "") {
|
||||
domainListCache += writeBuffer + "\n";
|
||||
}
|
||||
|
||||
readBuffer = "";
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
size_t rotatorTwo = 0;
|
||||
string readDomainBuffer = "";
|
||||
bool isFirstLine = true;
|
||||
string outputContent = "";
|
||||
//Header
|
||||
outputContent += "var domains = {\n";
|
||||
|
||||
//Read and process output content line by line
|
||||
while (rotatorTwo < domainListCache.size()) {
|
||||
while (true) {
|
||||
//Get Domain
|
||||
readDomainBuffer += domainListCache[rotatorTwo];
|
||||
|
||||
if (domainListCache[rotatorTwo + 1] == '\n') {
|
||||
rotatorTwo += 2;
|
||||
break;
|
||||
}
|
||||
|
||||
rotatorTwo++;
|
||||
}
|
||||
|
||||
//Format
|
||||
if (!isFirstLine) outputContent += ",\n";
|
||||
else isFirstLine = false;
|
||||
|
||||
outputContent += "\t\"";
|
||||
outputContent += readDomainBuffer;
|
||||
outputContent += "\" : 1";
|
||||
readDomainBuffer = "";
|
||||
}
|
||||
|
||||
//End Message
|
||||
outputContent += "\n\n};\n\n\n";
|
||||
outputContent += "var proxy = \"";
|
||||
outputContent += customProxyString.toStdString();
|
||||
outputContent += "\";\n";
|
||||
outputContent += "var direct = 'DIRECT;';\n";
|
||||
outputContent += "var hasOwnProperty = Object.hasOwnProperty;\n\n";
|
||||
outputContent += "function FindProxyForURL(url, host) {\n\n";
|
||||
outputContent += "\tvar suffix;\n";
|
||||
outputContent += "\tvar pos = host.lastIndexOf('.');\n";
|
||||
outputContent += "\tpos = host.lastIndexOf('.', pos - 1);\n\n";
|
||||
outputContent += "\twhile(1) {\n";
|
||||
outputContent += "\t\tif (pos <= 0) {\n";
|
||||
outputContent += "\t\t\tif (hasOwnProperty.call(domains, host)) ";
|
||||
outputContent += "return proxy;\n";
|
||||
outputContent += "\t\t\telse ";
|
||||
outputContent += "return direct;\n";
|
||||
outputContent += "\t\t}\n\n";
|
||||
outputContent += "\tsuffix = host.substring(pos + 1);\n";
|
||||
outputContent += "\tif (hasOwnProperty.call(domains, suffix))";
|
||||
outputContent += "return proxy;\n";
|
||||
outputContent += "\tpos = host.lastIndexOf('.', pos - 1);\n\t}\n}";
|
||||
return QSTRING(outputContent);
|
||||
}
|
||||
}
|
||||
}
|
105
src/components/QvHTTPRequestHelper.cpp
Normal file
@ -0,0 +1,105 @@
|
||||
#include "QvHTTPRequestHelper.hpp"
|
||||
#include <QByteArray>
|
||||
#include <QNetworkProxy>
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
QvHttpRequestHelper::QvHttpRequestHelper() : reply()
|
||||
{
|
||||
}
|
||||
|
||||
QvHttpRequestHelper::~QvHttpRequestHelper()
|
||||
{
|
||||
accessManager.disconnect();
|
||||
}
|
||||
|
||||
bool QvHttpRequestHelper::setUrl(const QString &url)
|
||||
{
|
||||
QUrl qUrl = QUrl(url);
|
||||
|
||||
if (!qUrl.isValid()) {
|
||||
LOG(MODULE_NETWORK, "Provided URL is invalid")
|
||||
return false;
|
||||
}
|
||||
|
||||
request.setUrl(qUrl);
|
||||
return true;
|
||||
}
|
||||
|
||||
void QvHttpRequestHelper::setHeader(const QByteArray &key, const QByteArray &value)
|
||||
{
|
||||
request.setRawHeader(key, value);
|
||||
}
|
||||
|
||||
QByteArray QvHttpRequestHelper::syncget(const QString &url)
|
||||
{
|
||||
this->setUrl(url);
|
||||
LOG(MODULE_NETWORK, "Using system proxy settings");
|
||||
accessManager.setProxy(QNetworkProxyFactory::systemProxyForQuery().first());
|
||||
reply = accessManager.get(request);
|
||||
connect(reply, &QNetworkReply::finished, this, &QvHttpRequestHelper::onRequestFinished);
|
||||
//
|
||||
QEventLoop loop;
|
||||
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
||||
loop.exec();
|
||||
// Data or timeout?
|
||||
auto data = reply->readAll();
|
||||
return data;
|
||||
}
|
||||
|
||||
void QvHttpRequestHelper::get(const QString &url)
|
||||
{
|
||||
this->setUrl(url);
|
||||
// request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
reply = accessManager.get(request);
|
||||
connect(reply, &QNetworkReply::finished, this, &QvHttpRequestHelper::onRequestFinished);
|
||||
connect(reply, &QNetworkReply::readyRead, this, &QvHttpRequestHelper::onReadyRead);
|
||||
}
|
||||
|
||||
//void QvHttpRequestHelper::post(const QString &url, const QByteArray &data)
|
||||
//{
|
||||
// this->setUrl(url);
|
||||
// request.setRawHeader("Content-Type", "application/json");
|
||||
// reply = accessManager.post(request, data);
|
||||
// connect(reply, &QNetworkReply::finished, this, &QvHttpRequestHelper::onRequestFinished);
|
||||
// connect(reply, &QNetworkReply::readyRead, this, &QvHttpRequestHelper::onReadyRead);
|
||||
//}
|
||||
|
||||
// void QvHttpRequestHelper::put(const QString &url, const QByteArray &data)
|
||||
// {
|
||||
// this->setUrl(url);
|
||||
// request.setRawHeader("Content-Type", "application/json");
|
||||
// reply = accessManager.put(request, data);
|
||||
// connect(reply, &QNetworkReply::finished, this, &QvHttpRequestHelper::onRequestFinished);
|
||||
// connect(reply, &QNetworkReply::readyRead, this, &QvHttpRequestHelper::onReadyRead);
|
||||
// }
|
||||
|
||||
// void QvHttpRequestHelper::del(const QString &url)
|
||||
// {
|
||||
// this->setUrl(url);
|
||||
// request.setRawHeader("Content-Type", "application/json");
|
||||
// reply = accessManager.deleteResource(request);
|
||||
// connect(reply, &QNetworkReply::finished, this, &QvHttpRequestHelper::onRequestFinished);
|
||||
// connect(reply, &QNetworkReply::readyRead, this, &QvHttpRequestHelper::onReadyRead);
|
||||
// }
|
||||
|
||||
// void QvHttpRequestHelper::login(const QString &url, const QByteArray &data)
|
||||
// {
|
||||
// this->setUrl(url);
|
||||
// request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
// reply = accessManager.post(request, data);
|
||||
// connect(reply, &QNetworkReply::finished, this, &QvHttpRequestHelper::onRequestFinished);
|
||||
// connect(reply, &QNetworkReply::readyRead, this, &QvHttpRequestHelper::onReadyRead);
|
||||
// }
|
||||
|
||||
void QvHttpRequestHelper::onRequestFinished()
|
||||
{
|
||||
LOG(MODULE_NETWORK, "Network request errcode: " + to_string(reply->error()))
|
||||
emit httpRequestFinished(this->data);
|
||||
}
|
||||
|
||||
void QvHttpRequestHelper::onReadyRead()
|
||||
{
|
||||
this->data += reply->readAll();
|
||||
}
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
/*
|
||||
* Qv2ray
|
||||
/*
|
||||
Copyright (C) 2019 SoneWinstone (jianwenzhen@qq.com)
|
||||
Copyright (C) 2019 Leroy.H.Y
|
||||
|
||||
@ -24,7 +23,7 @@
|
||||
#include <QNetworkRequest>
|
||||
#include <QNetworkReply>
|
||||
#include <QNetworkAccessManager>
|
||||
#include "QvUtils.h"
|
||||
#include "QvUtils.hpp"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
@ -39,13 +38,13 @@ namespace Qv2ray
|
||||
// get
|
||||
QByteArray syncget(const QString &url);
|
||||
void get(const QString &url);
|
||||
// insert
|
||||
void post(const QString &url, const QByteArray &data);
|
||||
// update
|
||||
void put(const QString &url, const QByteArray &data);
|
||||
// delete
|
||||
void del(const QString &url);
|
||||
void login(const QString &url, const QByteArray &data);
|
||||
//// insert
|
||||
//void post(const QString &url, const QByteArray &data);
|
||||
//// update
|
||||
//void put(const QString &url, const QByteArray &data);
|
||||
//// delete
|
||||
//void del(const QString &url);
|
||||
//void login(const QString &url, const QByteArray &data);
|
||||
signals:
|
||||
void httpRequestFinished(QByteArray &data);
|
||||
|
@ -1,11 +1,10 @@
|
||||
#ifndef QVNETSPEEDBARJSON_H
|
||||
#define QVNETSPEEDBARJSON_H
|
||||
|
||||
#include "x2struct/x2struct.hpp"
|
||||
#include <QtGui>
|
||||
#include "Qv2rayBase.hpp"
|
||||
//
|
||||
// For Windows
|
||||
#ifdef _WIN32
|
||||
#ifdef Q_OS_WIN
|
||||
#include <windows.h>
|
||||
#endif
|
||||
//
|
||||
@ -14,7 +13,7 @@
|
||||
//
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace Utils
|
||||
namespace Components
|
||||
{
|
||||
namespace NetSpeedPlugin
|
||||
{
|
||||
@ -40,14 +39,14 @@ namespace Qv2ray
|
||||
};
|
||||
void StartProcessingPlugins(QWidget *mainWindow);
|
||||
void StopProcessingPlugins();
|
||||
#ifdef _WIN32
|
||||
#ifdef Q_OS_WIN
|
||||
namespace _win
|
||||
{
|
||||
void StartNamedPipeThread();
|
||||
void KillNamedPipeThread();
|
||||
}
|
||||
#endif
|
||||
#ifdef __linux__
|
||||
#ifdef Q_OS_LINUX
|
||||
namespace _linux
|
||||
{
|
||||
// This function is called within a QThread
|
||||
@ -58,40 +57,6 @@ namespace Qv2ray
|
||||
}
|
||||
#endif
|
||||
|
||||
struct QvBarLine {
|
||||
std::string Family;
|
||||
bool Bold;
|
||||
bool Italic;
|
||||
int ColorA;
|
||||
int ColorR;
|
||||
int ColorG;
|
||||
int ColorB;
|
||||
int ContentType;
|
||||
double Size;
|
||||
std::string Message;
|
||||
QvBarLine()
|
||||
: Family("Consolas")
|
||||
, Bold(true)
|
||||
, Italic(false)
|
||||
, ColorA(255), ColorR(255), ColorG(255), ColorB(255)
|
||||
, ContentType(0)
|
||||
, Size(9),
|
||||
Message() { }
|
||||
XTOSTRUCT(O(Bold, Italic, ColorA, ColorR, ColorG, ColorB, Size, Family, Message, ContentType))
|
||||
};
|
||||
|
||||
struct QvBarPage {
|
||||
int OffsetYpx;
|
||||
std::vector<QvBarLine> Lines;
|
||||
XTOSTRUCT(O(OffsetYpx, Lines))
|
||||
QvBarPage() : OffsetYpx(5) { }
|
||||
};
|
||||
|
||||
struct QvNetSpeedBarConfig {
|
||||
std::vector<QvBarPage> Pages;
|
||||
XTOSTRUCT(O(Pages))
|
||||
};
|
||||
|
||||
QString GetAnswerToRequest(const QString &pchRequest);
|
||||
|
||||
}
|
||||
@ -102,5 +67,5 @@ namespace Qv2ray
|
||||
|
||||
//
|
||||
//
|
||||
using namespace Qv2ray::Utils::NetSpeedPlugin;
|
||||
using namespace Qv2ray::Components::NetSpeedPlugin;
|
||||
#endif // QVNETSPEEDBARJSON_H
|
77
src/components/QvPACHandler.cpp
Normal file
@ -0,0 +1,77 @@
|
||||
#include "QvPACHandler.hpp"
|
||||
#include "qhttprequest.h"
|
||||
#include "qhttpresponse.h"
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace Components
|
||||
{
|
||||
PACHandler::PACHandler() : QObject()
|
||||
{
|
||||
pacServer = new QHttpServer();
|
||||
connect(pacServer, &QHttpServer::newRequest, this, &PACHandler::onNewRequest);
|
||||
}
|
||||
PACHandler::~PACHandler()
|
||||
{
|
||||
pacServer->close();
|
||||
delete pacServer;
|
||||
}
|
||||
void PACHandler::SetProxyString(const QString &proxyString)
|
||||
{
|
||||
this->proxyString = proxyString;
|
||||
}
|
||||
void PACHandler::StartListen()
|
||||
{
|
||||
LOG(MODULE_PROXY, "Starting PAC listener")
|
||||
pacServer = new QHttpServer();
|
||||
connect(pacServer, &QHttpServer::newRequest, this, &PACHandler::onNewRequest);
|
||||
//
|
||||
auto conf = GetGlobalConfig();
|
||||
auto address = QSTRING(conf.inboundConfig.listenip);
|
||||
auto port = conf.inboundConfig.pacConfig.port;
|
||||
//
|
||||
QString gfwContent = StringFromFile(new QFile(QV2RAY_RULES_GFWLIST_PATH));
|
||||
pacContent = ConvertGFWToPAC(gfwContent, proxyString);
|
||||
//
|
||||
auto result = pacServer->listen(QHostAddress(address), static_cast<ushort>(port));
|
||||
|
||||
if (result) {
|
||||
isStarted = true;
|
||||
LOG(MODULE_PROXY, "Started PAC listener")
|
||||
} else {
|
||||
LOG(MODULE_PROXY, "Failed to listen on port " + to_string(port) + ", please verify the permission.")
|
||||
QvMessageBox(nullptr, tr("PAC Handler"), tr("Failed to listen PAC request on this port, please verify the permissions"));
|
||||
}
|
||||
}
|
||||
|
||||
void PACHandler::StopServer()
|
||||
{
|
||||
if (isStarted) {
|
||||
pacServer->close();
|
||||
delete pacServer;
|
||||
isStarted = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PACHandler::onNewRequest(QHttpRequest *req, QHttpResponse *rsp)
|
||||
{
|
||||
rsp->setHeader("Server", "Qv2ray/" QV2RAY_VERSION_STRING " PAC_Handler");
|
||||
|
||||
if (req->method() == QHttpRequest::HTTP_GET) {
|
||||
//
|
||||
if (req->path() == "/pac") {
|
||||
rsp->setHeader("Content-Type", "application/javascript; charset=utf-8");
|
||||
rsp->writeHead(QHttpResponse::StatusCode::STATUS_OK);
|
||||
rsp->end(pacContent.toUtf8());
|
||||
DEBUG(MODULE_PROXY, "Serving a pac file...")
|
||||
} else {
|
||||
rsp->writeHead(QHttpResponse::StatusCode::STATUS_NOT_FOUND);
|
||||
rsp->end("NOT FOUND");
|
||||
}
|
||||
} else {
|
||||
rsp->writeHead(QHttpResponse::StatusCode::STATUS_METHOD_NOT_ALLOWED);
|
||||
rsp->end("PAC ONLY SUPPORT GET");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
35
src/components/QvPACHandler.hpp
Normal file
@ -0,0 +1,35 @@
|
||||
#ifndef QVPACHANDLER_H
|
||||
#define QVPACHANDLER_H
|
||||
#include "QvUtils.hpp"
|
||||
#include "qhttpserver.h"
|
||||
#include <QObject>
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace Components
|
||||
{
|
||||
class PACHandler : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PACHandler();
|
||||
~PACHandler();
|
||||
void SetProxyString(const QString &proxyString);
|
||||
void StartListen();
|
||||
void StopServer();
|
||||
|
||||
QString gfwFilePath;
|
||||
|
||||
public slots:
|
||||
void onNewRequest(QHttpRequest *request, QHttpResponse *response);
|
||||
|
||||
private:
|
||||
bool isStarted;
|
||||
QHttpServer *pacServer;
|
||||
QString pacContent;
|
||||
QString proxyString;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
using namespace Qv2ray::Components;
|
||||
#endif // QVPACHANDLER_H
|
223
src/components/QvSystemProxyConfigurator.cpp
Normal file
@ -0,0 +1,223 @@
|
||||
#include "QvSystemProxyConfigurator.hpp"
|
||||
#ifdef Q_OS_WIN
|
||||
#include "wininet.h"
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace Components
|
||||
{
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
#define NO_CONST(expr) const_cast<wchar_t *>(expr)
|
||||
//static auto DEFAULT_CONNECTION_NAME = NO_CONST(L"DefaultConnectionSettings");
|
||||
///
|
||||
/// INTERNAL FUNCTION
|
||||
bool __QueryProxyOptions()
|
||||
{
|
||||
INTERNET_PER_CONN_OPTION_LIST List;
|
||||
INTERNET_PER_CONN_OPTION Option[5];
|
||||
//
|
||||
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
|
||||
Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
|
||||
Option[1].dwOption = INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
|
||||
Option[2].dwOption = INTERNET_PER_CONN_FLAGS;
|
||||
Option[3].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
|
||||
Option[4].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
|
||||
//
|
||||
List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
|
||||
List.pszConnection = nullptr;// NO_CONST(DEFAULT_CONNECTION_NAME);
|
||||
List.dwOptionCount = 5;
|
||||
List.dwOptionError = 0;
|
||||
List.pOptions = Option;
|
||||
|
||||
if (!InternetQueryOption(nullptr, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
|
||||
LOG(MODULE_PROXY, "InternetQueryOption failed: " << GetLastError());
|
||||
|
||||
LOG(MODULE_PROXY, "System default proxy info:")
|
||||
|
||||
if (Option[0].Value.pszValue != nullptr)
|
||||
LOG(MODULE_PROXY, QString::fromWCharArray(Option[0].Value.pszValue).toStdString());
|
||||
|
||||
if ((Option[2].Value.dwValue & PROXY_TYPE_AUTO_PROXY_URL) == PROXY_TYPE_AUTO_PROXY_URL)
|
||||
LOG(MODULE_PROXY, "PROXY_TYPE_AUTO_PROXY_URL");
|
||||
|
||||
if ((Option[2].Value.dwValue & PROXY_TYPE_AUTO_DETECT) == PROXY_TYPE_AUTO_DETECT)
|
||||
LOG(MODULE_PROXY, "PROXY_TYPE_AUTO_DETECT");
|
||||
|
||||
if ((Option[2].Value.dwValue & PROXY_TYPE_DIRECT) == PROXY_TYPE_DIRECT)
|
||||
LOG(MODULE_PROXY, "PROXY_TYPE_DIRECT");
|
||||
|
||||
if ((Option[2].Value.dwValue & PROXY_TYPE_PROXY) == PROXY_TYPE_PROXY)
|
||||
LOG(MODULE_PROXY, "PROXY_TYPE_PROXY");
|
||||
|
||||
if (!InternetQueryOption(nullptr, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
|
||||
LOG(MODULE_PROXY, "InternetQueryOption failed: " << GetLastError());
|
||||
|
||||
if (Option[4].Value.pszValue != nullptr)
|
||||
LOG(MODULE_PROXY, Option[4].Value.pszValue);
|
||||
|
||||
INTERNET_VERSION_INFO Version;
|
||||
nSize = sizeof(INTERNET_VERSION_INFO);
|
||||
InternetQueryOption(nullptr, INTERNET_OPTION_VERSION, &Version, &nSize);
|
||||
|
||||
if (Option[0].Value.pszValue != nullptr)
|
||||
GlobalFree(Option[0].Value.pszValue);
|
||||
|
||||
if (Option[3].Value.pszValue != nullptr)
|
||||
GlobalFree(Option[3].Value.pszValue);
|
||||
|
||||
if (Option[4].Value.pszValue != nullptr)
|
||||
GlobalFree(Option[4].Value.pszValue);
|
||||
|
||||
return false;
|
||||
}
|
||||
bool __SetProxyOptions(LPWSTR proxy_full_addr, bool isPAC)
|
||||
{
|
||||
INTERNET_PER_CONN_OPTION_LIST list;
|
||||
BOOL bReturn;
|
||||
DWORD dwBufSize = sizeof(list);
|
||||
// Fill the list structure.
|
||||
list.dwSize = sizeof(list);
|
||||
// NULL == LAN, otherwise connectoid name.
|
||||
list.pszConnection = nullptr;
|
||||
|
||||
if (isPAC) {
|
||||
LOG(MODULE_PROXY, "Setting system proxy for PAC")
|
||||
//
|
||||
list.dwOptionCount = 2;
|
||||
list.pOptions = new INTERNET_PER_CONN_OPTION[2];
|
||||
|
||||
// Ensure that the memory was allocated.
|
||||
if (nullptr == list.pOptions) {
|
||||
// Return FALSE if the memory wasn't allocated.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Set flags.
|
||||
list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
|
||||
list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT | PROXY_TYPE_AUTO_PROXY_URL;
|
||||
// Set proxy name.
|
||||
list.pOptions[1].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
|
||||
list.pOptions[1].Value.pszValue = proxy_full_addr;
|
||||
} else {
|
||||
LOG(MODULE_PROXY, "Setting system proxy for Global Proxy")
|
||||
//
|
||||
list.dwOptionCount = 3;
|
||||
list.pOptions = new INTERNET_PER_CONN_OPTION[3];
|
||||
|
||||
if (nullptr == list.pOptions) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set flags.
|
||||
list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
|
||||
list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT | PROXY_TYPE_PROXY;
|
||||
// Set proxy name.
|
||||
list.pOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
|
||||
list.pOptions[1].Value.pszValue = proxy_full_addr;
|
||||
// Set proxy override.
|
||||
list.pOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
|
||||
auto localhost = L"localhost";
|
||||
list.pOptions[2].Value.pszValue = NO_CONST(localhost);
|
||||
}
|
||||
|
||||
// Set the options on the connection.
|
||||
bReturn = InternetSetOption(nullptr, INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);
|
||||
delete [] list.pOptions;
|
||||
InternetSetOption(nullptr, INTERNET_OPTION_SETTINGS_CHANGED, nullptr, 0);
|
||||
InternetSetOption(nullptr, INTERNET_OPTION_REFRESH, nullptr, 0);
|
||||
return bReturn;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool SetSystemProxy(const QString &address, int port, bool usePAC)
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
QString __a;
|
||||
|
||||
if (usePAC) {
|
||||
__a = address;
|
||||
} else {
|
||||
__a = "http://" + address + ":" + QString::number(port);
|
||||
}
|
||||
|
||||
auto proxyStrW = new WCHAR[__a.length() + 1];
|
||||
wcscpy(proxyStrW, __a.toStdWString().c_str());
|
||||
//
|
||||
__QueryProxyOptions();
|
||||
|
||||
if (!__SetProxyOptions(proxyStrW, usePAC)) {
|
||||
LOG(MODULE_PROXY, "Failed to set proxy.")
|
||||
return false;
|
||||
}
|
||||
|
||||
__QueryProxyOptions();
|
||||
return true;
|
||||
#elif defined(Q_OS_LINUX)
|
||||
bool result = true;
|
||||
|
||||
if (usePAC) {
|
||||
result = result && QProcess::execute("gsettings set org.gnome.system.proxy mode 'auto'") == QProcess::NormalExit;
|
||||
result = result && QProcess::execute("gsettings set org.gnome.system.proxy autoconfig-url '" + address + "'") == QProcess::NormalExit;
|
||||
} else {
|
||||
result = result && QProcess::execute("gsettings set org.gnome.system.proxy mode 'manual'") == QProcess::NormalExit;
|
||||
result = result && QProcess::execute("gsettings set org.gnome.system.proxy.http host '" + address + "'") == QProcess::NormalExit;
|
||||
result = result && QProcess::execute("gsettings set org.gnome.system.proxy.http port " + QString::number(port)) == QProcess::NormalExit;
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
LOG(MODULE_PROXY, "Something wrong happens when setting system proxy -> Gnome ONLY.")
|
||||
LOG(MODULE_PROXY, "If you are using KDE Plasma and receiving this message, just simply ignore this.")
|
||||
}
|
||||
|
||||
return result;
|
||||
#else
|
||||
Q_UNUSED(port)
|
||||
Q_UNUSED(address)
|
||||
Q_UNUSED(usePAC)
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool ClearSystemProxy()
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
LOG(MODULE_PROXY, "Cleaning system proxy settings.")
|
||||
INTERNET_PER_CONN_OPTION_LIST list;
|
||||
BOOL bReturn;
|
||||
DWORD dwBufSize = sizeof(list);
|
||||
// Fill out list struct.
|
||||
list.dwSize = sizeof(list);
|
||||
// nullptr == LAN, otherwise connectoid name.
|
||||
list.pszConnection = nullptr;
|
||||
// Set three options.
|
||||
list.dwOptionCount = 1;
|
||||
list.pOptions = new INTERNET_PER_CONN_OPTION[list.dwOptionCount];
|
||||
|
||||
// Make sure the memory was allocated.
|
||||
if (nullptr == list.pOptions) {
|
||||
// Return FALSE if the memory wasn't allocated.
|
||||
LOG(MODULE_PROXY, "Failed to allocat memory in DisableConnectionProxy()");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Set flags.
|
||||
list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
|
||||
list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT;
|
||||
//
|
||||
// Set the options on the connection.
|
||||
bReturn = InternetSetOption(nullptr, INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);
|
||||
delete [] list.pOptions;
|
||||
InternetSetOption(nullptr, INTERNET_OPTION_SETTINGS_CHANGED, nullptr, 0);
|
||||
InternetSetOption(nullptr, INTERNET_OPTION_REFRESH, nullptr, 0);
|
||||
return bReturn;
|
||||
#elif defined(Q_OS_LINUX)
|
||||
return QProcess::execute("gsettings set org.gnome.system.proxy mode 'none'") == QProcess::ExitStatus::NormalExit;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
17
src/components/QvSystemProxyConfigurator.hpp
Normal file
@ -0,0 +1,17 @@
|
||||
#ifndef QVSYSTEMPROXYCONFIGURATOR_H
|
||||
#define QVSYSTEMPROXYCONFIGURATOR_H
|
||||
#include "QvUtils.hpp"
|
||||
#include <QObject>
|
||||
//
|
||||
namespace Qv2ray
|
||||
{
|
||||
namespace Components
|
||||
{
|
||||
bool ClearSystemProxy();
|
||||
bool SetSystemProxy(const QString &address, int port, bool usePAC);
|
||||
}
|
||||
}
|
||||
|
||||
using namespace Qv2ray::Components;
|
||||
|
||||
#endif // QVSYSTEMPROXYCONFIGURATOR_H
|