mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-06 10:31:34 -08:00
SailfishOS fixes and docu
This commit is contained in:
parent
48a80bf5fb
commit
c264025a60
9 changed files with 210 additions and 11 deletions
|
|
@ -60,6 +60,15 @@
|
||||||
If the conversion to 'qint64' is not possible, the hex string is returned,
|
If the conversion to 'qint64' is not possible, the hex string is returned,
|
||||||
which can be passed to READ-FROM-STRING to get arbitrary integer length.
|
which can be passed to READ-FROM-STRING to get arbitrary integer length.
|
||||||
|
|
||||||
|
Important note: because of the automatic conversion of INTEGERs, you need to
|
||||||
|
explicitly add '(float x)' to values you don't want to be converted to hex
|
||||||
|
strings, like drawing a line in a QML Canvas.
|
||||||
|
|
||||||
|
|
||||||
|
<b>mobile-p ()</b>
|
||||||
|
|
||||||
|
Returns T on android, iOS, SailfishOS.
|
||||||
|
|
||||||
|
|
||||||
<b>pixel-ratio ()</b>
|
<b>pixel-ratio ()</b>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,13 @@
|
||||||
|
|
||||||
(defmacro with-path ((color &optional (line-width 14)) &body body)
|
(defmacro with-path ((color &optional (line-width 14)) &body body)
|
||||||
`(progn
|
`(progn
|
||||||
(qjs |begin| *canvas* ,color ,line-width)
|
(qjs |begin| *canvas* ,color ,(float line-width))
|
||||||
,@body
|
,@body
|
||||||
(qjs |end| *canvas*)))
|
(qjs |end| *canvas*)))
|
||||||
|
|
||||||
(defun draw-line (x1 y1 x2 y2)
|
(defun draw-line (x1 y1 x2 y2)
|
||||||
(qjs |drawLine| *canvas*
|
(qjs |drawLine| *canvas*
|
||||||
x1 y1 x2 y2))
|
(float x1) (float y1) (float x2) (float y2)))
|
||||||
|
|
||||||
(defun draw-number (number)
|
(defun draw-number (number)
|
||||||
(setf *number* number)
|
(setf *number* number)
|
||||||
|
|
|
||||||
|
|
@ -13,17 +13,17 @@
|
||||||
(defvar *canvas* "canvas")
|
(defvar *canvas* "canvas")
|
||||||
|
|
||||||
(defun line (x1 y1 x2 y2)
|
(defun line (x1 y1 x2 y2)
|
||||||
(qjs |line| *canvas* x1 y1 x2 y2))
|
(qjs |line| *canvas* (float x1) (float y1) (float x2) (float y2)))
|
||||||
|
|
||||||
(defun move-to (x y)
|
(defun move-to (x y)
|
||||||
(qjs |moveTo| *canvas* x y))
|
(qjs |moveTo| *canvas* (float x) (float y)))
|
||||||
|
|
||||||
(defun line-to (x y)
|
(defun line-to (x y)
|
||||||
(qjs |lineTo| *canvas* x y))
|
(qjs |lineTo| *canvas* (float x) (float y)))
|
||||||
|
|
||||||
(defmacro with-path ((color line-width) &body body)
|
(defmacro with-path ((color line-width) &body body)
|
||||||
`(progn
|
`(progn
|
||||||
(qjs |begin| *canvas* ,color ,line-width)
|
(qjs |begin| *canvas* ,color ,(float line-width))
|
||||||
,@body
|
,@body
|
||||||
(qjs |end| *canvas*)))
|
(qjs |end| *canvas*)))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ QMAKE_EXTRA_COMPILERS += lisp
|
||||||
win32: PRE_TARGETDEPS = tmp/app.lib
|
win32: PRE_TARGETDEPS = tmp/app.lib
|
||||||
!win32: PRE_TARGETDEPS = tmp/libapp.a
|
!win32: PRE_TARGETDEPS = tmp/libapp.a
|
||||||
|
|
||||||
QT += quick qml bluetooth sql positioning location
|
QT += quick qml bluetooth sql location
|
||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
CONFIG += c++17 no_keywords release
|
CONFIG += c++17 no_keywords release
|
||||||
DEFINES += DESKTOP_APP BACKGROUND_INI_LISP INI_ECL_CONTRIB QT_EXTENSION
|
DEFINES += DESKTOP_APP BACKGROUND_INI_LISP INI_ECL_CONTRIB QT_EXTENSION
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
QT += bluetooth sql positioning network
|
QT += bluetooth sql network # positioning
|
||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
CONFIG += c++17 plugin release no_keywords
|
CONFIG += c++17 plugin release no_keywords
|
||||||
DEFINES += PLUGIN
|
DEFINES += PLUGIN
|
||||||
|
|
|
||||||
105
platforms/sailfish/qt5.15-rpm-installation.md
Normal file
105
platforms/sailfish/qt5.15-rpm-installation.md
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
Manual installation of Qt5.15 rpms directly on device
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
Please note that this is not a straightforward way to install, and may turn out
|
||||||
|
being tedious (I'm not a SailfishOS expert and have very limited experience).
|
||||||
|
|
||||||
|
(for **armv7hl**, replace with **aarch64** for 64bit)
|
||||||
|
|
||||||
|
Download from repo (see file list at bottom):
|
||||||
|
```
|
||||||
|
https://repo.sailfishos.org/obs/sailfishos:/chum/4.5.0.19_armv7hl/armv7hl/
|
||||||
|
```
|
||||||
|
|
||||||
|
Download all files in one directory and install with:
|
||||||
|
```
|
||||||
|
$ devel-su rpm -U --force *.rpm
|
||||||
|
```
|
||||||
|
|
||||||
|
On missing SailfishOS lib dependencies, search for package providing the lib
|
||||||
|
with:
|
||||||
|
```
|
||||||
|
$ zypper search <name>
|
||||||
|
```
|
||||||
|
and install with:
|
||||||
|
```
|
||||||
|
$ devel-su zypper install <name>
|
||||||
|
```
|
||||||
|
|
||||||
|
To force package install even with missing dependencies - may occur with rpms
|
||||||
|
that require e.g. `pkgconfig(...)`, even with standard `pkgconfig` already
|
||||||
|
installed - you can extract the rpm locally with:
|
||||||
|
```
|
||||||
|
$ rpm2cpio <rpm> | cpio -idmv
|
||||||
|
```
|
||||||
|
and copy the extracted files under `/opt/` and `/usr/`:
|
||||||
|
```
|
||||||
|
$ devel-su cp -r opt/* /opt/
|
||||||
|
$ devel-su cp -r usr/* /usr/
|
||||||
|
```
|
||||||
|
File list to download:
|
||||||
|
```
|
||||||
|
opt-kf5-karchive-5.108.0-1.5.2.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kauth-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kbookmarks-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kcodecs-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kcompletion-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kconfig-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kconfig-core-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kconfig-gui-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kconfigwidgets-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kcoreaddons-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kcrash-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kdbusaddons-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kguiaddons-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-ki18n-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kiconthemes-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kio-core-5.108.0-1.7.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kio-core-libs-5.108.0-1.7.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kio-file-widgets-5.108.0-1.7.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kio-gui-5.108.0-1.7.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kio-widgets-5.108.0-1.7.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kio-widgets-libs-5.108.0-1.7.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kirigami2-5.108.0-1.6.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kitemviews-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kjobwidgets-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-knotifications-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kquickcharts-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kservice-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kwallet-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kwallet-libs-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kwidgetsaddons-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kwindowsystem-5.108.0-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-kxmlgui-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-kf5-solid-5.108.0-1.4.1.jolla.armv7hl.rpm
|
||||||
|
opt-plasma-integration-5.27.4\+git1-1.2.7.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtbase-5.15.10\+kde137-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtbase-common-5.15.10\+kde137-1.3.1.jolla.noarch.rpm
|
||||||
|
opt-qt5-qtbase-devel-5.15.10+kde137-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtbase-gui-5.15.10\+kde137-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtconnectivity-5.15.10\+kde4-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtconnectivity-devel-5.15.10+kde4-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtdeclarative-5.15.10\+kde29-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtdeclarative-devel-5.15.10+kde29-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtdeclarative-tools-5.15.10+kde29-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtgraphicaleffects-5.15.10-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtimageformats-5.15.10+kde9-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtlocation-5.15.10\+kde4-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtlocation-devel-5.15.10+kde4-1.5.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtmultimedia-5.15.10+kde3-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtmultimedia-devel-5.15.10+kde3-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtquickcontrols-5.15.10-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtquickcontrols2-5.15.10\+kde6-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtquickcontrols2-devel-5.15.10+kde6-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtsensors-5.15.10-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtsvg-5.15.10\+kde8-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtwayland-5.15.10\+kde52-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtwebchannel-5.15.10\+kde3-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtwebengine-5.15.14-1.2307312104.armv7hl.rpm
|
||||||
|
opt-qt5-qtwebsockets-5.15.10+kde2-1.3.1.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-qtwebview-5.15.10-1.3.2.jolla.armv7hl.rpm
|
||||||
|
opt-qt5-rpm-macros-5.15.10-1.4.1.jolla.noarch.rpm
|
||||||
|
opt-qt5-sfos-maliit-platforminputcontext-1.0.1-1.1.4.jolla.armv7hl.rpm
|
||||||
|
qqc2-breeze-style-5.27.4\+git1-1.2.8.jolla.armv7hl.rpm
|
||||||
|
qt-runner-0.4.0-1.6.1.jolla.armv7hl.rpm
|
||||||
|
```
|
||||||
73
readme-sailfish.md
Normal file
73
readme-sailfish.md
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
Building ECL + LQML
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
If you run Linux on your desktop, the simplest way to build and develop is just
|
||||||
|
doing it directly on the device (only this route is described here - no bloated
|
||||||
|
SDK or similar is needed, but Qt5.15 installation may result being tedious, but
|
||||||
|
I got it to work like described here).
|
||||||
|
|
||||||
|
After connecting your Sailfish device via USB, open 2 console tabs on Linux:
|
||||||
|
|
||||||
|
tab 1: shell
|
||||||
|
```
|
||||||
|
ssh -L4005:127.0.0.1:4005 defaultuser@192.168.2.15`
|
||||||
|
```
|
||||||
|
You need to manually do `source ~/.bashrc` for e.g. your personal aliases to
|
||||||
|
work.
|
||||||
|
|
||||||
|
tab 2: file access
|
||||||
|
```
|
||||||
|
mkdir ~/phone
|
||||||
|
sshfs defaultuser@192.168.2.15: ~/phone
|
||||||
|
```
|
||||||
|
|
||||||
|
First try to compile/install ECL (tab 1) just like you would do on the desktop.
|
||||||
|
|
||||||
|
Then follow the description
|
||||||
|
[qt5.15-rpm-installation](platforms/sailfish/qt5.15-rpm-installation.md).
|
||||||
|
|
||||||
|
Add an alias in `~/.bashrc` on the device:
|
||||||
|
```
|
||||||
|
alias qmake5.15=/opt/qt5/bin/qmake
|
||||||
|
```
|
||||||
|
|
||||||
|
Run `qt-runner` without arguments to check the following 2 settings:
|
||||||
|
|
||||||
|
- "Override DPI": set to 2/3 of max value, e.g. 458 * 2/3 = 305 (on my phone)
|
||||||
|
- Select "Reduce window when keyboard is shown"
|
||||||
|
- apply changes (top right)
|
||||||
|
|
||||||
|
Now you should be able to build/install lqml using `qmake` from above
|
||||||
|
installation. Note that you always need to start the apps using `qt-runner`:
|
||||||
|
```
|
||||||
|
qt-runner lqml run.lisp
|
||||||
|
```
|
||||||
|
|
||||||
|
For your final apps, just compile them in `build/`, rename `app` accordingly
|
||||||
|
and copy it under e.g. `/usr/local/bin/`. Since the executables contain all
|
||||||
|
resources, nothing else needs to be installed.
|
||||||
|
|
||||||
|
|
||||||
|
Developing with Slime directly on device
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
Using the 2 console tabs as described above, you can start Swank in tab 1:
|
||||||
|
```
|
||||||
|
qt-runner lqml run.lisp -slime
|
||||||
|
```
|
||||||
|
Add `-auto` for QML auto reload (just like on the desktop).
|
||||||
|
|
||||||
|
In tab 2 switch to a lqml example directory on device, open any Lisp file in
|
||||||
|
Emacs and connect:
|
||||||
|
```
|
||||||
|
:slime-connect RET RET
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Tips
|
||||||
|
----
|
||||||
|
|
||||||
|
You should always kill `sshfs` after you are done using it:
|
||||||
|
```
|
||||||
|
pkill sshfs
|
||||||
|
```
|
||||||
12
readme.md
12
readme.md
|
|
@ -6,7 +6,7 @@ A lightweight ECL based QML-only binding to Qt5/Qt6.
|
||||||
|
|
||||||
This small project aims to simplify all the steps needed for building
|
This small project aims to simplify all the steps needed for building
|
||||||
cross-platform apps. The same sources can be used to build executables for both
|
cross-platform apps. The same sources can be used to build executables for both
|
||||||
desktop (Linux/macOS/Windows) and mobile (android/iOS).
|
desktop (Linux/macOS/Windows) and mobile (android/iOS/SailfishOS).
|
||||||
|
|
||||||
|
|
||||||
QML auto reload
|
QML auto reload
|
||||||
|
|
@ -48,7 +48,6 @@ Qt Creator.
|
||||||
TODO
|
TODO
|
||||||
----
|
----
|
||||||
|
|
||||||
* port to SailfishOS (using the SFOS Qt5.15 libs project)
|
|
||||||
* port to CMake (?)
|
* port to CMake (?)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -69,6 +68,15 @@ The Windows version is only meant to run on the desktop, using the (free) MSVC
|
||||||
compiler. Please see [readme-windows](readme-windows.md) for details.
|
compiler. Please see [readme-windows](readme-windows.md) for details.
|
||||||
|
|
||||||
|
|
||||||
|
SailfishOS note
|
||||||
|
---------------
|
||||||
|
|
||||||
|
On Sailfish it runs using **Qt5.15** and **qt-runner**, so it's not really
|
||||||
|
'native' (in a pure sense) and doesn't have native look and feel, but that's
|
||||||
|
the only feasable way to run it on that platform, see
|
||||||
|
[readme-sailfish](readme-sailfish.md).
|
||||||
|
|
||||||
|
|
||||||
Known issues
|
Known issues
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,11 @@
|
||||||
Those hex strings are automatically converted back to a 'qint64' integer when
|
Those hex strings are automatically converted back to a 'qint64' integer when
|
||||||
passed with 'Lisp.call()'.
|
passed with 'Lisp.call()'.
|
||||||
If the conversion to 'qint64' is not possible, the hex string is returned,
|
If the conversion to 'qint64' is not possible, the hex string is returned,
|
||||||
which can be passed to READ-FROM-STRING to get arbitrary integer length."
|
which can be passed to READ-FROM-STRING to get arbitrary integer length.
|
||||||
|
|
||||||
|
Important note: because of the automatic conversion of INTEGERs, you need to
|
||||||
|
explicitly add '(float x)' to values you don't want to be converted to hex
|
||||||
|
strings, like drawing a line in a QML Canvas."
|
||||||
(assert (integerp integer))
|
(assert (integerp integer))
|
||||||
(let ((*print-base* 16))
|
(let ((*print-base* 16))
|
||||||
(x:cc "#x" (princ-to-string integer))))
|
(x:cc "#x" (princ-to-string integer))))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue