Compare commits
66 Commits
1.1.0
...
adammathes
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7e3dfed00 | ||
|
|
aa82250232 | ||
|
|
88f59d2016 | ||
|
|
8021ff4256 | ||
|
|
32eab18da9 | ||
|
|
52140c4c45 | ||
|
|
6e4d5cfddd | ||
|
|
10fd2a11ee | ||
|
|
749ea88909 | ||
|
|
d81485a8bf | ||
|
|
a9260d956c | ||
|
|
025bb560bc | ||
|
|
cdd1488e13 | ||
|
|
b8b2644969 | ||
|
|
09b5c0a5d0 | ||
|
|
1ed66f3aa2 | ||
|
|
3b4d5d1c3f | ||
|
|
f98fd5a7ad | ||
|
|
b961109623 | ||
|
|
8f0d1023a4 | ||
|
|
79773ba95c | ||
|
|
ff3f02fb8c | ||
|
|
0af2b20b3a | ||
|
|
b026fe357e | ||
|
|
ade36c013b | ||
|
|
54a6a7f590 | ||
|
|
20728e4a0f | ||
|
|
afa456f6b3 | ||
|
|
3fbfb77430 | ||
|
|
051bcb62c6 | ||
|
|
d2c57eed6d | ||
|
|
f2f38c0e0d | ||
|
|
4046bdbc6a | ||
|
|
c83cc206fd | ||
|
|
41ac14fbd3 | ||
|
|
e4c1cad1a7 | ||
|
|
db7a7f38f7 | ||
|
|
3f0653106e | ||
|
|
9954fde6f1 | ||
|
|
3ec46ea833 | ||
|
|
4bff6efe97 | ||
|
|
c514dc7a24 | ||
|
|
24754edb6a | ||
|
|
79fbb76524 | ||
|
|
b85aede966 | ||
|
|
c66ca6e44f | ||
|
|
a192024fef | ||
|
|
918df9098a | ||
|
|
c9271bfa36 | ||
|
|
fa162c818b | ||
|
|
ff976e3ec2 | ||
|
|
17c5651305 | ||
|
|
7c7b049ba1 | ||
|
|
0823fe8b3d | ||
|
|
e787fd0fb5 | ||
|
|
650497bff4 | ||
|
|
2f25bd30b0 | ||
|
|
d58157a450 | ||
|
|
9d049bd041 | ||
|
|
988222b711 | ||
|
|
f42bd3036f | ||
|
|
297239fb5c | ||
|
|
dbd46d44aa | ||
|
|
254f4d6e92 | ||
|
|
d59ac20e38 | ||
|
|
7ce6571e1f |
37
.travis.yml
Normal file
37
.travis.yml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
sudo: required
|
||||||
|
dist: trusty
|
||||||
|
language: c++
|
||||||
|
|
||||||
|
install:
|
||||||
|
- sudo add-apt-repository -y ppa:beineri/opt-qt58-trusty
|
||||||
|
- sudo apt-get update -qq
|
||||||
|
- sudo apt-get -y install build-essential qt58declarative qt58graphicaleffects qt58quickcontrols libgl1-mesa-dev
|
||||||
|
- source /opt/qt*/bin/qt*-env.sh
|
||||||
|
|
||||||
|
script:
|
||||||
|
- qmake CONFIG+=release PREFIX=/usr
|
||||||
|
- make -j$(nproc)
|
||||||
|
- mkdir -p appdir/usr/share/metainfo appdir/usr/bin
|
||||||
|
- cp packaging/appdata/cool-retro-term.appdata.xml appdir/usr/share/metainfo/
|
||||||
|
- cp cool-retro-term appdir/usr/bin/
|
||||||
|
- cp ./cool-retro-term.desktop appdir/
|
||||||
|
- cp ./app/icons/128x128/cool-retro-term.png appdir/
|
||||||
|
- cp -r ./app/qml appdir/usr/
|
||||||
|
- cp -r ./qmltermwidget/QMLTermWidget appdir/usr/qml/ # Workaround for https://github.com/probonopd/linuxdeployqt/issues/78
|
||||||
|
- wget -c https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
|
||||||
|
- chmod a+x linuxdeployqt-*.AppImage
|
||||||
|
- unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
|
||||||
|
- export VERSION=$(git rev-parse --short HEAD) # linuxdeployqt uses this for naming the file
|
||||||
|
- ./linuxdeployqt-*.AppImage appdir/usr/bin/cool-retro-term -qmldir=./app/qml/ -qmldir=./qmltermwidget/ # -verbose=3 2>&1 | grep "path:" -C 3
|
||||||
|
- ./linuxdeployqt-*.AppImage appdir/usr/bin/cool-retro-term -qmldir=./app/qml/ -qmldir=./qmltermwidget/ -verbose=2 -appimage
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
|
||||||
|
- # curl --upload-file Cool*.AppImage https://transfer.sh/Cool_Retro_Term-git.$(git rev-parse --short HEAD)-x86_64.AppImage
|
||||||
|
- wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh
|
||||||
|
- bash upload.sh Cool*.AppImage*
|
||||||
|
|
||||||
|
branches:
|
||||||
|
except:
|
||||||
|
- # Do not build tags that we create when we upload to GitHub Releases
|
||||||
|
- /^(?i:continuous)/
|
||||||
39
README.md
39
README.md
@@ -13,18 +13,24 @@ It uses the QML port of qtermwidget (Konsole) developed by me: https://github.co
|
|||||||
This terminal emulator works under Linux and macOS and requires Qt 5.2 or higher.
|
This terminal emulator works under Linux and macOS and requires Qt 5.2 or higher.
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
## Get cool-retro-term
|
## Install
|
||||||
You can either build cool-retro-term yourself (see below) or walk the easy way and install one of these packages:
|
Walk the easy way and install cool-retro-term using one of these convenient packages:
|
||||||
|
|
||||||
Fedora has the `cool-retro-term` in the offcial repositories. All you have to do is `sudo dnf install cool-retro-term`.
|
Just grab the latest AppImage from the release page and make it executable and run it:
|
||||||
|
|
||||||
Users of openSUSE can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term).
|
wget https://github.com/Swordfish90/cool-retro-term/releases/download/1.1.1/Cool-Retro-Term-1.1.1-x86_64.AppImage
|
||||||
|
chmod a+x Cool-Retro-Term-1.1.1-x86_64.AppImage
|
||||||
|
./Cool-Retro-Term-1.1.1-x86_64.AppImage
|
||||||
|
|
||||||
Arch users can install this [package](https://aur.archlinux.org/packages/cool-retro-term-git/) directly via the [AUR](https://aur.archlinux.org):
|
**Fedora** has the `cool-retro-term` in the offcial repositories. All you have to do is `sudo dnf install cool-retro-term`.
|
||||||
|
|
||||||
|
Users of **openSUSE** can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term).
|
||||||
|
|
||||||
|
**Arch** users can install this [package](https://aur.archlinux.org/packages/cool-retro-term-git/) directly via the [AUR](https://aur.archlinux.org):
|
||||||
|
|
||||||
yaourt -S aur/cool-retro-term-git
|
yaourt -S aur/cool-retro-term-git
|
||||||
|
|
||||||
@@ -34,25 +40,32 @@ or use:
|
|||||||
|
|
||||||
to install precompiled from community repository.
|
to install precompiled from community repository.
|
||||||
|
|
||||||
Gentoo users can now install the second release "1.0.1" from a 3rd-party repository preferably via layman:
|
**Gentoo** users can now install the third release "1.1.0" from a 3rd-party repository preferably via layman:
|
||||||
|
|
||||||
USE="git" emerge app-portage/layman
|
USE="git" emerge app-portage/layman
|
||||||
wget https://www.gerczei.eu/files/gerczei.xml -O /etc/layman/overlays/gerczei.xml
|
wget https://www.gerczei.eu/files/gerczei.xml -O /etc/layman/overlays/gerczei.xml
|
||||||
layman -f -a qt -a gerczei # those who've added the repo before 27/08/17 should remove, update and add it again as its source has changed
|
layman -f -a qt -a gerczei # those who've added the repo before 27/08/17 should remove, update and add it again as its source has changed
|
||||||
ACCEPT_KEYWORDS="~*" emerge =x11-terms/cool-retro-term-1.0.1::gerczei
|
ACCEPT_KEYWORDS="~*" emerge =x11-terms/cool-retro-term-1.1.0::gerczei
|
||||||
|
|
||||||
The live ebuild (version 9999-r1) tracking the bleeding-edge WIP codebase also remains available.
|
The live ebuild (version 9999-r1) tracking the bleeding-edge WIP codebase also remains available.
|
||||||
|
|
||||||
A word of warning: USE flags and keywords are to be added to portage's configuration files and every emerge operation should be executed with '-p' (short option for --pretend) appended to the command line first as per best practice!
|
A word of warning: USE flags and keywords are to be added to portage's configuration files and every emerge operation should be executed with '-p' (short option for --pretend) appended to the command line first as per best practice!
|
||||||
|
|
||||||
Ubuntu users of 14.04 LTS (Trusty) up to 15.10 (Wily) can use [this PPA](https://launchpad.net/~bugs-launchpad-net-falkensweb).
|
Users of **Ubuntu 14.04 LTS (Trusty) up to 15.10 (Wily)** can use [this PPA](https://launchpad.net/~bugs-launchpad-net-falkensweb).
|
||||||
|
|
||||||
Ubuntu 17.10 can use [this PPA](https://launchpad.net/%7Evantuz/+archive/ubuntu/cool-retro-term)
|
**Ubuntu 17.10** can use [this PPA](https://launchpad.net/%7Evantuz/+archive/ubuntu/cool-retro-term)
|
||||||
|
|
||||||
macOS users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
|
**Solus** users can install using `eopg`:
|
||||||
|
```
|
||||||
|
eopkg it cool-retro-term
|
||||||
|
```
|
||||||
|
|
||||||
|
**macOS** users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
|
||||||
|
|
||||||
## Build instructions (Linux)
|
## Build instructions (Linux)
|
||||||
|
|
||||||
|
Build cool-retro-term yourself, you know, the retro way.
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
Make sure to install these first.
|
Make sure to install these first.
|
||||||
|
|
||||||
|
|||||||
11
app/main.cpp
11
app/main.cpp
@@ -33,6 +33,10 @@ int main(int argc, char *argv[])
|
|||||||
// This disables QT appmenu under Ubuntu, which is not working with QML apps.
|
// This disables QT appmenu under Ubuntu, which is not working with QML apps.
|
||||||
setenv("QT_QPA_PLATFORMTHEME", "", 1);
|
setenv("QT_QPA_PLATFORMTHEME", "", 1);
|
||||||
|
|
||||||
|
#if defined (Q_OS_LINUX)
|
||||||
|
setenv("QSG_RENDER_LOOP", "threaded", 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(Q_OS_MAC)
|
#if defined(Q_OS_MAC)
|
||||||
// This allows UTF-8 characters usage in OSX.
|
// This allows UTF-8 characters usage in OSX.
|
||||||
setenv("LC_CTYPE", "UTF-8", 1);
|
setenv("LC_CTYPE", "UTF-8", 1);
|
||||||
@@ -70,8 +74,10 @@ int main(int argc, char *argv[])
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString appVersion("1.1.1");
|
||||||
|
|
||||||
if (args.contains("-v") || args.contains("--version")) {
|
if (args.contains("-v") || args.contains("--version")) {
|
||||||
qDebug() << "cool-retro-term 1.0.1";
|
qDebug() << ("cool-retro-term " + appVersion).toStdString().c_str();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,6 +88,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
QVariant command(cmdList.empty() ? QVariant() : cmdList[0]);
|
QVariant command(cmdList.empty() ? QVariant() : cmdList[0]);
|
||||||
QVariant commandArgs(cmdList.size() <= 1 ? QVariant() : QVariant(cmdList.mid(1)));
|
QVariant commandArgs(cmdList.size() <= 1 ? QVariant() : QVariant(cmdList.mid(1)));
|
||||||
|
engine.rootContext()->setContextProperty("appVersion", appVersion);
|
||||||
engine.rootContext()->setContextProperty("defaultCmd", command);
|
engine.rootContext()->setContextProperty("defaultCmd", command);
|
||||||
engine.rootContext()->setContextProperty("defaultCmdArgs", commandArgs);
|
engine.rootContext()->setContextProperty("defaultCmdArgs", commandArgs);
|
||||||
|
|
||||||
@@ -98,7 +105,7 @@ int main(int argc, char *argv[])
|
|||||||
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../../../qmltermwidget");
|
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../../../qmltermwidget");
|
||||||
engine.setImportPathList(importPathList);
|
engine.setImportPathList(importPathList);
|
||||||
|
|
||||||
engine.load(QUrl(QStringLiteral ("qrc:/main.qml")));
|
engine.load(QUrl(QStringLiteral ("qrc:/root.qml")));
|
||||||
|
|
||||||
if (engine.rootObjects().isEmpty()) {
|
if (engine.rootObjects().isEmpty()) {
|
||||||
qDebug() << "Cannot load QML interface";
|
qDebug() << "Cannot load QML interface";
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import QtQuick.Controls 1.0
|
|||||||
import "utils.js" as Utils
|
import "utils.js" as Utils
|
||||||
|
|
||||||
QtObject{
|
QtObject{
|
||||||
readonly property string version: "1.1.0"
|
readonly property string version: appVersion
|
||||||
readonly property int profileVersion: 2
|
readonly property int profileVersion: 2
|
||||||
|
|
||||||
// STATIC CONSTANTS ////////////////////////////////////////////////////////
|
// STATIC CONSTANTS ////////////////////////////////////////////////////////
|
||||||
@@ -33,6 +33,9 @@ QtObject{
|
|||||||
readonly property real minimumFontScaling: 0.25
|
readonly property real minimumFontScaling: 0.25
|
||||||
readonly property real maximumFontScaling: 2.50
|
readonly property real maximumFontScaling: 2.50
|
||||||
|
|
||||||
|
readonly property real minBurnInFadeTime: 160
|
||||||
|
readonly property real maxBurnInFadeTime: 1600
|
||||||
|
|
||||||
// GENERAL SETTINGS ///////////////////////////////////////////////////////
|
// GENERAL SETTINGS ///////////////////////////////////////////////////////
|
||||||
|
|
||||||
property int x: 100
|
property int x: 100
|
||||||
@@ -52,7 +55,9 @@ QtObject{
|
|||||||
property bool verbose: false
|
property bool verbose: false
|
||||||
|
|
||||||
property real bloomQuality: 0.5
|
property real bloomQuality: 0.5
|
||||||
|
|
||||||
property real burnInQuality: 0.5
|
property real burnInQuality: 0.5
|
||||||
|
property bool useFastBurnIn: Qt.platform.os === "osx" ? false : true
|
||||||
|
|
||||||
onWindowScalingChanged: handleFontChanged();
|
onWindowScalingChanged: handleFontChanged();
|
||||||
|
|
||||||
@@ -129,7 +134,7 @@ QtObject{
|
|||||||
|
|
||||||
property FontLoader fontLoader: FontLoader { }
|
property FontLoader fontLoader: FontLoader { }
|
||||||
|
|
||||||
onFontScalingChanged: handleFontChanged();
|
onTotalFontScalingChanged: handleFontChanged();
|
||||||
onFontWidthChanged: handleFontChanged();
|
onFontWidthChanged: handleFontChanged();
|
||||||
|
|
||||||
function getIndexByName(name) {
|
function getIndexByName(name) {
|
||||||
@@ -202,7 +207,8 @@ QtObject{
|
|||||||
bloomQuality: bloomQuality,
|
bloomQuality: bloomQuality,
|
||||||
burnInQuality: burnInQuality,
|
burnInQuality: burnInQuality,
|
||||||
useCustomCommand: useCustomCommand,
|
useCustomCommand: useCustomCommand,
|
||||||
customCommand: customCommand
|
customCommand: customCommand,
|
||||||
|
useFastBurnIn: useFastBurnIn
|
||||||
}
|
}
|
||||||
return stringify(settings);
|
return stringify(settings);
|
||||||
}
|
}
|
||||||
@@ -288,6 +294,8 @@ QtObject{
|
|||||||
|
|
||||||
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
|
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
|
||||||
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
|
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
|
||||||
|
|
||||||
|
useFastBurnIn = settings.useFastBurnIn !== undefined ? settings.useFastBurnIn : useFastBurnIn;
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadProfileString(profileString){
|
function loadProfileString(profileString){
|
||||||
|
|||||||
@@ -13,10 +13,12 @@ Loader {
|
|||||||
property real delay: (1.0 / appSettings.fps) * 1000
|
property real delay: (1.0 / appSettings.fps) * 1000
|
||||||
property real burnIn: appSettings.burnIn
|
property real burnIn: appSettings.burnIn
|
||||||
property real burnInFadeTime: 1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
|
property real burnInFadeTime: 1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
|
||||||
property real _minBurnInFadeTime: 160
|
property real _minBurnInFadeTime: appSettings.minBurnInFadeTime
|
||||||
property real _maxBurnInFadeTime: 1600
|
property real _maxBurnInFadeTime: appSettings.maxBurnInFadeTime
|
||||||
|
|
||||||
active: appSettings.burnIn !== 0
|
active: appSettings.useFastBurnIn && appSettings.burnIn !== 0
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
function completelyUpdate() {
|
function completelyUpdate() {
|
||||||
prevLastUpdate = lastUpdate;
|
prevLastUpdate = lastUpdate;
|
||||||
@@ -33,16 +35,6 @@ Loader {
|
|||||||
sourceComponent: Item {
|
sourceComponent: Item {
|
||||||
property alias source: burnInEffectSource
|
property alias source: burnInEffectSource
|
||||||
|
|
||||||
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
|
||||||
|
|
||||||
width: appSettings.lowResolutionFont
|
|
||||||
? kterminal.totalWidth * Math.max(1, burnInScaling)
|
|
||||||
: kterminal.totalWidth * scaleTexture * appSettings.burnInQuality
|
|
||||||
|
|
||||||
height: appSettings.lowResolutionFont
|
|
||||||
? kterminal.totalHeight * Math.max(1, burnInScaling)
|
|
||||||
: kterminal.totalHeight * scaleTexture * appSettings.burnInQuality
|
|
||||||
|
|
||||||
ShaderEffectSource {
|
ShaderEffectSource {
|
||||||
id: burnInEffectSource
|
id: burnInEffectSource
|
||||||
|
|
||||||
@@ -88,7 +80,6 @@ Loader {
|
|||||||
property real prevLastUpdate: burnInEffect.prevLastUpdate
|
property real prevLastUpdate: burnInEffect.prevLastUpdate
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
blending: false
|
blending: false
|
||||||
|
|
||||||
fragmentShader:
|
fragmentShader:
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ MenuBar {
|
|||||||
visible: defaultMenuBar.visible
|
visible: defaultMenuBar.visible
|
||||||
MenuItem {action: quitAction}
|
MenuItem {action: quitAction}
|
||||||
}
|
}
|
||||||
|
Menu {
|
||||||
|
title: qsTr("Terminal")
|
||||||
|
visible: defaultMenuBar.visible
|
||||||
|
MenuItem {action: newAction}
|
||||||
|
MenuItem {action: closeAction}
|
||||||
|
}
|
||||||
Menu {
|
Menu {
|
||||||
title: qsTr("Edit")
|
title: qsTr("Edit")
|
||||||
visible: defaultMenuBar.visible && appSettings.showMenubar
|
visible: defaultMenuBar.visible && appSettings.showMenubar
|
||||||
|
|||||||
@@ -236,7 +236,9 @@ QtObject{
|
|||||||
function addSystemFonts() {
|
function addSystemFonts() {
|
||||||
var families = monospaceSystemFonts;
|
var families = monospaceSystemFonts;
|
||||||
for (var i = 0; i < families.length; i++) {
|
for (var i = 0; i < families.length; i++) {
|
||||||
console.log("Adding system font: ", families[i])
|
if (verbose) {
|
||||||
|
console.log("Adding system font: ", families[i])
|
||||||
|
}
|
||||||
fontlist.append(convertToListElement(families[i]))
|
fontlist.append(convertToListElement(families[i]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ ShaderEffect {
|
|||||||
float inShadowLength = shadowLength * 0.5;
|
float inShadowLength = shadowLength * 0.5;
|
||||||
|
|
||||||
float outShadow = max2(1.0 - smoothstep(vec2(-outShadowLength), vec2(0.0), coords) + smoothstep(vec2(1.0), vec2(1.0 + outShadowLength), coords));
|
float outShadow = max2(1.0 - smoothstep(vec2(-outShadowLength), vec2(0.0), coords) + smoothstep(vec2(1.0), vec2(1.0 + outShadowLength), coords));
|
||||||
outShadow = clamp(0.0, 1.0, sqrt(outShadow));
|
outShadow = clamp(sqrt(outShadow), 0.0, 1.0);
|
||||||
color += frameColor.rgb * outShadow;
|
color += frameColor.rgb * outShadow;
|
||||||
alpha = sum2(1.0 - smoothstep(vec2(0.0), aadelta, coords) + smoothstep(vec2(1.0) - aadelta, vec2(1.0), coords));
|
alpha = sum2(1.0 - smoothstep(vec2(0.0), aadelta, coords) + smoothstep(vec2(1.0) - aadelta, vec2(1.0), coords));
|
||||||
alpha = clamp(alpha, 0.0, 1.0) * mix(1.0, 0.9, outShadow);
|
alpha = clamp(alpha, 0.0, 1.0) * mix(1.0, 0.9, outShadow);
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ Item{
|
|||||||
|
|
||||||
property ShaderEffectSource mainSource: kterminalSource
|
property ShaderEffectSource mainSource: kterminalSource
|
||||||
property BurnInEffect burnInEffect: burnInEffect
|
property BurnInEffect burnInEffect: burnInEffect
|
||||||
|
property SlowBurnIn slowBurnInEffect: slowBurnInEffect
|
||||||
property real fontWidth: 1.0
|
property real fontWidth: 1.0
|
||||||
property real screenScaling: 1.0
|
property real screenScaling: 1.0
|
||||||
property real scaleTexture: 1.0
|
property real scaleTexture: 1.0
|
||||||
@@ -70,12 +71,23 @@ Item{
|
|||||||
QMLTermWidget {
|
QMLTermWidget {
|
||||||
id: kterminal
|
id: kterminal
|
||||||
|
|
||||||
|
property int textureResolutionScale: appSettings.lowResolutionFont ? devicePixelRatio : 1
|
||||||
property int margin: appSettings.margin / screenScaling
|
property int margin: appSettings.margin / screenScaling
|
||||||
property int totalWidth: Math.floor(parent.width / (screenScaling * fontWidth))
|
property int totalWidth: Math.floor(parent.width / (screenScaling * fontWidth))
|
||||||
property int totalHeight: Math.floor(parent.height / screenScaling)
|
property int totalHeight: Math.floor(parent.height / screenScaling)
|
||||||
|
|
||||||
width: totalWidth - 2 * margin
|
property int rawWidth: totalWidth - 2 * margin
|
||||||
height: totalHeight - 2 * margin
|
property int rawHeight: totalHeight - 2 * margin
|
||||||
|
|
||||||
|
textureSize: Qt.size(width / textureResolutionScale, height / textureResolutionScale)
|
||||||
|
|
||||||
|
width: ensureMultiple(rawWidth, devicePixelRatio)
|
||||||
|
height: ensureMultiple(rawHeight, devicePixelRatio)
|
||||||
|
|
||||||
|
/** Ensure size is a multiple of factor. This is needed for pixel perfect scaling on highdpi screens. */
|
||||||
|
function ensureMultiple(size, factor) {
|
||||||
|
return Math.round(size / factor) * factor;
|
||||||
|
}
|
||||||
|
|
||||||
colorScheme: "cool-retro-term"
|
colorScheme: "cool-retro-term"
|
||||||
|
|
||||||
@@ -227,7 +239,26 @@ Item{
|
|||||||
sourceRect: Qt.rect(-kterminal.margin, -kterminal.margin, kterminal.totalWidth, kterminal.totalHeight)
|
sourceRect: Qt.rect(-kterminal.margin, -kterminal.margin, kterminal.totalWidth, kterminal.totalHeight)
|
||||||
}
|
}
|
||||||
|
|
||||||
BurnInEffect {
|
Item {
|
||||||
id: burnInEffect
|
id: burnInContainer
|
||||||
|
|
||||||
|
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
||||||
|
|
||||||
|
width: Math.round(appSettings.lowResolutionFont
|
||||||
|
? kterminal.totalWidth * Math.max(1, burnInScaling)
|
||||||
|
: kterminal.totalWidth * scaleTexture * appSettings.burnInQuality)
|
||||||
|
|
||||||
|
height: Math.round(appSettings.lowResolutionFont
|
||||||
|
? kterminal.totalHeight * Math.max(1, burnInScaling)
|
||||||
|
: kterminal.totalHeight * scaleTexture * appSettings.burnInQuality)
|
||||||
|
|
||||||
|
|
||||||
|
BurnInEffect {
|
||||||
|
id: burnInEffect
|
||||||
|
}
|
||||||
|
|
||||||
|
SlowBurnIn {
|
||||||
|
id: slowBurnInEffect
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,6 +133,12 @@ Tab{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
|
SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
|
||||||
|
CheckBox{
|
||||||
|
Layout.columnSpan: 2
|
||||||
|
text: qsTr("Burnin optimization (Might display timing artifacts)")
|
||||||
|
checked: appSettings.useFastBurnIn
|
||||||
|
onCheckedChanged: appSettings.useFastBurnIn = checked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import QtGraphicalEffects 1.0
|
|||||||
import "utils.js" as Utils
|
import "utils.js" as Utils
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
property SlowBurnIn slowBurnInEffect
|
||||||
property ShaderEffectSource source
|
property ShaderEffectSource source
|
||||||
property BurnInEffect burnInEffect
|
property BurnInEffect burnInEffect
|
||||||
property ShaderEffectSource bloomSource
|
property ShaderEffectSource bloomSource
|
||||||
@@ -56,9 +57,16 @@ Item {
|
|||||||
property real horizontalSync: appSettings.horizontalSync
|
property real horizontalSync: appSettings.horizontalSync
|
||||||
property real horizontalSyncStrength: Utils.lint(0.05, 0.35, horizontalSync)
|
property real horizontalSyncStrength: Utils.lint(0.05, 0.35, horizontalSync)
|
||||||
property real glowingLine: appSettings.glowingLine * 0.2
|
property real glowingLine: appSettings.glowingLine * 0.2
|
||||||
property real burnIn: appSettings.burnIn
|
|
||||||
|
// Fast burnin properties
|
||||||
|
property real burnIn: appSettings.useFastBurnIn ? appSettings.burnIn : 0
|
||||||
property real burnInLastUpdate: burnInEffect.lastUpdate
|
property real burnInLastUpdate: burnInEffect.lastUpdate
|
||||||
property real burnInTime: burnInEffect.burnInFadeTime
|
property real burnInTime: burnInEffect.burnInFadeTime
|
||||||
|
|
||||||
|
// Slow burnin properties
|
||||||
|
property real slowBurnIn: appSettings.useFastBurnIn ? 0 : appSettings.burnIn
|
||||||
|
property ShaderEffectSource slowBurnInSource: slowBurnInEffect.source
|
||||||
|
|
||||||
property real jitter: appSettings.jitter
|
property real jitter: appSettings.jitter
|
||||||
property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter)
|
property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter)
|
||||||
property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight)
|
property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight)
|
||||||
@@ -162,6 +170,8 @@ Item {
|
|||||||
uniform sampler2D burnInSource;
|
uniform sampler2D burnInSource;
|
||||||
uniform highp float burnInLastUpdate;
|
uniform highp float burnInLastUpdate;
|
||||||
uniform highp float burnInTime;" : "") +
|
uniform highp float burnInTime;" : "") +
|
||||||
|
(slowBurnIn !== 0 ? "
|
||||||
|
uniform sampler2D slowBurnInSource;" : "") +
|
||||||
(staticNoise !== 0 ? "
|
(staticNoise !== 0 ? "
|
||||||
uniform highp float staticNoise;" : "") +
|
uniform highp float staticNoise;" : "") +
|
||||||
(((staticNoise !== 0 || jitter !== 0)
|
(((staticNoise !== 0 || jitter !== 0)
|
||||||
@@ -292,6 +302,11 @@ Item {
|
|||||||
txt_color = max(txt_color, convertWithChroma(burnInColor));"
|
txt_color = max(txt_color, convertWithChroma(burnInColor));"
|
||||||
: "") +
|
: "") +
|
||||||
|
|
||||||
|
(slowBurnIn !== 0 ? "
|
||||||
|
vec4 txt_blur = texture2D(slowBurnInSource, staticCoords);
|
||||||
|
txt_color = max(txt_color, convertWithChroma(txt_blur.rgb * txt_blur.a));
|
||||||
|
" : "") +
|
||||||
|
|
||||||
"txt_color += fontColor.rgb * vec3(color);" +
|
"txt_color += fontColor.rgb * vec3(color);" +
|
||||||
|
|
||||||
"vec3 finalColor = txt_color;" +
|
"vec3 finalColor = txt_color;" +
|
||||||
@@ -482,7 +497,7 @@ Item {
|
|||||||
|
|
||||||
(screenCurvature !== 0 ? "
|
(screenCurvature !== 0 ? "
|
||||||
float reflectionMask = sum2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
|
float reflectionMask = sum2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
|
||||||
reflectionMask = clamp(0.0, 1.0, reflectionMask);"
|
reflectionMask = clamp(reflectionMask, 0.0, 1.0);"
|
||||||
:
|
:
|
||||||
"float reflectionMask = 1.0;") +
|
"float reflectionMask = 1.0;") +
|
||||||
|
|
||||||
|
|||||||
122
app/qml/SlowBurnIn.qml
Normal file
122
app/qml/SlowBurnIn.qml
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
|
||||||
|
import "utils.js" as Utils
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
property ShaderEffectSource source: item ? item.source : null
|
||||||
|
|
||||||
|
active: !appSettings.useFastBurnIn && appSettings.burnIn !== 0
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
sourceComponent: Item {
|
||||||
|
property alias source: burnInSourceEffect
|
||||||
|
|
||||||
|
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
||||||
|
|
||||||
|
ShaderEffectSource {
|
||||||
|
property bool updateBurnIn: false
|
||||||
|
property real burnIn: appSettings.burnIn
|
||||||
|
property real fps: appSettings.fps !== 0 ? appSettings.fps : 60
|
||||||
|
property real burnInFadeTime: Utils.lint(minBurnInFadeTime, maxBurnInFadeTime, burnIn)
|
||||||
|
property real burnInCoefficient: 1000 / (fps * burnInFadeTime)
|
||||||
|
property real minBurnInFadeTime: appSettings.minBurnInFadeTime
|
||||||
|
property real maxBurnInFadeTime: appSettings.maxBurnInFadeTime
|
||||||
|
|
||||||
|
id: burnInSourceEffect
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
sourceItem: burnInEffect
|
||||||
|
recursive: true
|
||||||
|
live: false
|
||||||
|
hideSource: true
|
||||||
|
wrapMode: kterminalSource.wrapMode
|
||||||
|
|
||||||
|
visible: false
|
||||||
|
|
||||||
|
function restartBlurSource(){
|
||||||
|
livetimer.restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This updates the burnin synched with the timer.
|
||||||
|
Connections {
|
||||||
|
target: burnInSourceEffect.updateBurnIn ? timeManager : null
|
||||||
|
ignoreUnknownSignals: false
|
||||||
|
onTimeChanged: {
|
||||||
|
burnInSourceEffect.scheduleUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer{
|
||||||
|
id: livetimer
|
||||||
|
|
||||||
|
// The interval assumes 60 fps. This is the time needed burnout a white pixel.
|
||||||
|
// We multiply 1.1 to have a little bit of margin over the theoretical value.
|
||||||
|
// This solution is not extremely clean, but it's probably the best to avoid measuring fps.
|
||||||
|
|
||||||
|
interval: burnInSourceEffect.burnInFadeTime * 1.1
|
||||||
|
running: true
|
||||||
|
onTriggered: burnInSourceEffect.updateBurnIn = false;
|
||||||
|
}
|
||||||
|
Connections{
|
||||||
|
target: kterminal
|
||||||
|
onImagePainted:{
|
||||||
|
burnInSourceEffect.scheduleUpdate();
|
||||||
|
burnInSourceEffect.updateBurnIn = true;
|
||||||
|
livetimer.restart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Restart blurred source settings change.
|
||||||
|
Connections{
|
||||||
|
target: appSettings
|
||||||
|
onBurnInChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
onTerminalFontChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
onRasterizationChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
onBurnInQualityChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
}
|
||||||
|
Connections {
|
||||||
|
target: kterminalScrollbar
|
||||||
|
onOpacityChanged: burnInSourceEffect.restartBlurSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
ShaderEffect {
|
||||||
|
id: burnInEffect
|
||||||
|
|
||||||
|
property variant txt_source: kterminalSource
|
||||||
|
property variant blurredSource: burnInSourceEffect
|
||||||
|
property real burnInCoefficient: burnInSourceEffect.burnInCoefficient
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
blending: false
|
||||||
|
|
||||||
|
fragmentShader:
|
||||||
|
"#ifdef GL_ES
|
||||||
|
precision mediump float;
|
||||||
|
#endif\n" +
|
||||||
|
|
||||||
|
"uniform lowp float qt_Opacity;" +
|
||||||
|
"uniform lowp sampler2D txt_source;" +
|
||||||
|
|
||||||
|
"varying highp vec2 qt_TexCoord0;
|
||||||
|
uniform lowp sampler2D blurredSource;
|
||||||
|
uniform highp float burnInCoefficient;" +
|
||||||
|
|
||||||
|
"float max3(vec3 v) {
|
||||||
|
return max (max (v.x, v.y), v.z);
|
||||||
|
}" +
|
||||||
|
|
||||||
|
"void main() {" +
|
||||||
|
"vec2 coords = qt_TexCoord0;" +
|
||||||
|
"vec3 origColor = texture2D(txt_source, coords).rgb;" +
|
||||||
|
"vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(burnInCoefficient);" +
|
||||||
|
"vec3 color = min(origColor + blur_color, max(origColor, blur_color));" +
|
||||||
|
|
||||||
|
"gl_FragColor = vec4(color, max3(color - origColor));" +
|
||||||
|
"}"
|
||||||
|
|
||||||
|
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ ShaderTerminal {
|
|||||||
|
|
||||||
source: terminal.mainSource
|
source: terminal.mainSource
|
||||||
burnInEffect: terminal.burnInEffect
|
burnInEffect: terminal.burnInEffect
|
||||||
|
slowBurnInEffect: terminal.slowBurnInEffect
|
||||||
virtual_resolution: terminal.virtualResolution
|
virtual_resolution: terminal.virtualResolution
|
||||||
|
|
||||||
TimeManager{
|
TimeManager{
|
||||||
|
|||||||
@@ -67,6 +67,22 @@ ApplicationWindow{
|
|||||||
color: "#00000000"
|
color: "#00000000"
|
||||||
title: terminalContainer.title || qsTr(appSettings.wintitle)
|
title: terminalContainer.title || qsTr(appSettings.wintitle)
|
||||||
|
|
||||||
|
Action {
|
||||||
|
id: newAction
|
||||||
|
text: qsTr("New Window")
|
||||||
|
shortcut: Qt.platform.os === "osx" ? StandardKey.New : "Ctrl+Shift+N"
|
||||||
|
onTriggered: {
|
||||||
|
root.newWindow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Action {
|
||||||
|
id: closeAction
|
||||||
|
text: qsTr("Close Window")
|
||||||
|
shortcut: Qt.platform.os === "osx" ? StandardKey.Close : "Ctrl+Shift+W"
|
||||||
|
onTriggered: {
|
||||||
|
terminalWindow.close()
|
||||||
|
}
|
||||||
|
}
|
||||||
Action {
|
Action {
|
||||||
id: showMenubarAction
|
id: showMenubarAction
|
||||||
text: qsTr("Show Menubar")
|
text: qsTr("Show Menubar")
|
||||||
@@ -157,9 +173,6 @@ ApplicationWindow{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
onClosing: {
|
onClosing: {
|
||||||
// OSX Since we are currently supporting only one window
|
root.closeWindow()
|
||||||
// quit the application when it is closed.
|
|
||||||
if (Qt.platform.os === "osx")
|
|
||||||
Qt.quit()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
<file>InsertNameDialog.qml</file>
|
<file>InsertNameDialog.qml</file>
|
||||||
<file>SettingsEffectsTab.qml</file>
|
<file>SettingsEffectsTab.qml</file>
|
||||||
<file>main.qml</file>
|
<file>main.qml</file>
|
||||||
|
<file>root.qml</file>
|
||||||
<file>SettingsTerminalTab.qml</file>
|
<file>SettingsTerminalTab.qml</file>
|
||||||
<file>FontScanlines.qml</file>
|
<file>FontScanlines.qml</file>
|
||||||
<file>fonts/1977-apple2/PrintChar21.ttf</file>
|
<file>fonts/1977-apple2/PrintChar21.ttf</file>
|
||||||
@@ -43,5 +44,6 @@
|
|||||||
<file>BurnInEffect.qml</file>
|
<file>BurnInEffect.qml</file>
|
||||||
<file>fonts/modern-terminus/TerminusTTF-4.46.0.ttf</file>
|
<file>fonts/modern-terminus/TerminusTTF-4.46.0.ttf</file>
|
||||||
<file>NewTerminalFrame.qml</file>
|
<file>NewTerminalFrame.qml</file>
|
||||||
|
<file>SlowBurnIn.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
43
app/qml/root.qml
Normal file
43
app/qml/root.qml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||||
|
* https://github.com/Swordfish90/cool-retro-term
|
||||||
|
*
|
||||||
|
* This file is part of cool-retro-term.
|
||||||
|
*
|
||||||
|
* cool-retro-term is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*******************************************************************************/
|
||||||
|
import QtQuick 2.2
|
||||||
|
import QtQuick.Window 2.1
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: root
|
||||||
|
property int terminalCount
|
||||||
|
|
||||||
|
function newWindow() {
|
||||||
|
var component = Qt.createComponent("main.qml")
|
||||||
|
var window = component.createObject()
|
||||||
|
window.show()
|
||||||
|
terminalCount = terminalCount + 1
|
||||||
|
}
|
||||||
|
function closeWindow() {
|
||||||
|
terminalCount = terminalCount - 1
|
||||||
|
if (terminalCount == 0) {
|
||||||
|
Qt.quit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: {
|
||||||
|
terminalCount = 0
|
||||||
|
root.newWindow()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,39 +1,53 @@
|
|||||||
name: cool-retro-term # check to see if it's available
|
name: cool-retro-term # check to see if it's available
|
||||||
version: '1.1.0' # this is freakin' awesome
|
version: '1.1.1' # this is freakin' awesome
|
||||||
summary: cool-retro-term is a terminal emulator. # 79 char long summary
|
summary: cool-retro-term is a cool and retro terminal emulator. # 79 char long summary
|
||||||
description: |
|
description: |
|
||||||
cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens. It has been designed to be eye-candy, customizable, and reasonably lightweight.
|
cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens. It has been designed to be eye-candy, customizable, and reasonably lightweight.
|
||||||
grade: stable # must be 'stable' to release into candidate/stable channels
|
grade: stable # must be 'stable' to release into candidate/stable channels
|
||||||
confinement: strict # use 'strict' once you have the right plugs
|
confinement: classic # use 'strict' once you have the right plugs
|
||||||
|
|
||||||
|
base: core18
|
||||||
|
|
||||||
apps:
|
apps:
|
||||||
cool-retro-term:
|
cool-retro-term:
|
||||||
command: desktop-launch $SNAP/usr/bin/cool-retro-term
|
command: bin/desktop-launch $SNAP/usr/bin/cool-retro-term
|
||||||
desktop: usr/share/applications/cool-retro-term.desktop
|
desktop: usr/share/applications/cool-retro-term.desktop
|
||||||
plugs:
|
environment:
|
||||||
- unity7
|
QML2_IMPORT_PATH: $SNAP/usr/lib/x86_64-linux-gnu/qt5/qml
|
||||||
- x11
|
|
||||||
- desktop
|
|
||||||
- home
|
|
||||||
- network
|
|
||||||
- network-bind
|
|
||||||
- network-manager
|
|
||||||
- password-manager-service
|
|
||||||
- locale-control
|
|
||||||
- gsettings
|
|
||||||
- shutdown
|
|
||||||
- firewall-control
|
|
||||||
- process-control
|
|
||||||
- system-observe
|
|
||||||
|
|
||||||
parts:
|
parts:
|
||||||
|
desktop-qt5:
|
||||||
|
source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
|
||||||
|
source-subdir: qt
|
||||||
|
plugin: make
|
||||||
|
make-parameters: ["FLAVOR=qt5"]
|
||||||
|
build-packages:
|
||||||
|
- build-essential
|
||||||
|
- qtbase5-dev
|
||||||
|
- dpkg-dev
|
||||||
|
stage-packages:
|
||||||
|
- libxkbcommon0
|
||||||
|
- ttf-ubuntu-font-family
|
||||||
|
- dmz-cursor-theme
|
||||||
|
- light-themes
|
||||||
|
- adwaita-icon-theme
|
||||||
|
- gnome-themes-standard
|
||||||
|
- shared-mime-info
|
||||||
|
- libqt5gui5
|
||||||
|
- libgdk-pixbuf2.0-0
|
||||||
|
- libqt5svg5 # for loading icon themes which are svg
|
||||||
|
- try: [appmenu-qt5] # not available on core18
|
||||||
|
- locales-all
|
||||||
|
- xdg-user-dirs
|
||||||
|
- fcitx-frontend-qt5
|
||||||
|
|
||||||
my-part:
|
my-part:
|
||||||
source: https://github.com/Swordfish90/cool-retro-term
|
source: https://github.com/Swordfish90/cool-retro-term
|
||||||
source-type: git
|
source-type: git
|
||||||
plugin: qmake # See 'snapcraft plugins'
|
plugin: qmake # See 'snapcraft plugins'
|
||||||
qt-version: qt5
|
qt-version: qt5
|
||||||
after: [desktop-qt5]
|
after: [desktop-qt5]
|
||||||
|
|
||||||
build-packages:
|
build-packages:
|
||||||
- build-essential
|
- build-essential
|
||||||
- qmlscene
|
- qmlscene
|
||||||
@@ -44,11 +58,12 @@ parts:
|
|||||||
stage-packages:
|
stage-packages:
|
||||||
- qmlscene
|
- qmlscene
|
||||||
- qml-module-qtquick-controls
|
- qml-module-qtquick-controls
|
||||||
- qtdeclarative5-qtquick2-plugin
|
- qml-module-qtquick2
|
||||||
- libqt5qml-graphicaleffects
|
- qml-module-qtgraphicaleffects
|
||||||
- qml-module-qtquick-dialogs
|
- qml-module-qtquick-dialogs
|
||||||
- qtdeclarative5-localstorage-plugin
|
- qml-module-qtquick-localstorage
|
||||||
- qtdeclarative5-window-plugin
|
- qml-module-qtquick-window2
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- qtdeclarative5-dev-tools
|
- qtdeclarative5-dev-tools
|
||||||
- qml-module-qtquick-extras
|
- qml-module-qtquick-extras
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user