Compare commits

...

7 commits

Author SHA1 Message Date
Egbert de Pauw
4b9c7e820f
Merge 9bd1631103 into 8212b28641 2024-10-23 19:03:22 +13:00
Michael Keller
8212b28641 Make MXE Build on ubuntu 24.04.
As per a31368b037.

Signed-off-by: Michael Keller <github@ike.ch>
2024-10-23 12:45:45 +13:00
Michael Keller
f60f01838c Update MXE docker Image Version Number.
Signed-off-by: Michael Keller <github@ike.ch>
2024-10-23 12:45:45 +13:00
dependabot[bot]
f7d32c850d build(deps): bump ubuntu in /scripts/docker/mxe-build-container
Bumps ubuntu from 22.04 to 24.04.

---
updated-dependencies:
- dependency-name: ubuntu
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-23 12:45:45 +13:00
Egbert de Pauw
9bd1631103
Merge branch 'subsurface:master' into qt6devel 2024-08-28 15:40:29 +02:00
Egbertdepauw
7201a40c5f Removed some testing code.
There was an unneeded line in the code, just for my own testing
purposes.

Signed-off-by: Egbertdepauw <egbert@despaankamer.nl>
2024-08-27 14:51:39 +02:00
Egbertdepauw
c5e5535f51 qt6: Make subsurface buildable with Qt6 on Macos
Building on macos with the Qt6 framework.

made changes to several files to make it possible to build subsurface
desktop with the Qt 6.5.x and higher framework.

Tested versions: 6.5.2, 6.6.3, 6.7.2

code builds and googlemaps works, made some adjustments to get panning
and zooming with mouse or trackpad working.

See issue #3577 "Build Fails, macOS" for build details.

Signed-off-by: Egbertdepauw <egbert@despaankamer.nl>
2024-08-27 13:51:37 +02:00
6 changed files with 72 additions and 89 deletions

View file

@ -12,7 +12,7 @@ jobs:
windows-mxe:
runs-on: ubuntu-latest
env:
VERSION: ${{ '3.2.0' }} # 'official' images should have a dot-zero version
VERSION: ${{ '3.3.0' }} # 'official' images should have a dot-zero version
mxe_sha: '974808c2ecb02866764d236fe533ae57ba342e7a'
steps:

View file

@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0
import QtQuick 2.5
import QtLocation 5.3
import QtPositioning 5.3
import QtQuick
import QtLocation
import QtPositioning
import org.subsurfacedivelog.mobile 1.0
Item {
@ -15,7 +15,7 @@ Item {
id: mapHelper
map: map
editMode: false
onSelectedDivesChanged: rootItem.selectedDivesChanged(list)
onSelectedDivesChanged: (list) => { rootItem.selectedDivesChanged(list) }
onEditModeChanged: editMessage.isVisible = editMode === true ? 1 : 0
onCoordinatesChanged: {}
Component.onCompleted: {
@ -29,7 +29,6 @@ Item {
id: map
anchors.fill: parent
zoomLevel: defaultZoomIn
property var mapType
readonly property var defaultCenter: QtPositioning.coordinate(0, 0)
readonly property real defaultZoomIn: 12.0
@ -41,12 +40,46 @@ Item {
property real newZoomOut: 1.0
property var clickCoord: QtPositioning.coordinate(0, 0)
property bool isReady: false
Component.onCompleted: isReady = true
onZoomLevelChanged: {
if (isReady)
mapHelper.calculateSmallCircleRadius(map.center)
}
property geoCoordinate startCentroid
startCentroid: newCenter
PinchHandler {
id: pinch
target: null
onActiveChanged: if (active) {
map.startCentroid = map.toCoordinate(pinch.centroid.position, false)
}
onScaleChanged: (delta) => {
map.zoomLevel += Math.log2(delta)
map.alignCoordinateToPoint(map.startCentroid, pinch.centroid.position)
}
onRotationChanged: (delta) => {
map.bearing -= delta
map.alignCoordinateToPoint(map.startCentroid, pinch.centroid.position)
}
grabPermissions: PointerHandler.TakeOverForbidden
}
WheelHandler {
id: wheel
// workaround for QTBUG-87646 / QTBUG-112394 / QTBUG-112432:
// Magic Mouse pretends to be a trackpad but doesn't work with PinchHandler
// and we don't yet distinguish mice and trackpads on Wayland either
acceptedDevices: Qt.platform.pluginName === "cocoa" || Qt.platform.pluginName === "wayland"
? PointerDevice.Mouse | PointerDevice.TouchPad
: PointerDevice.Mouse
rotationScale: 1/120
property: "zoomLevel"
}
DragHandler {
id: drag
target: null
onTranslationChanged: (delta) => map.pan(-delta.x, -delta.y)
}
MapItemView {
id: mapItemView
@ -67,7 +100,9 @@ Item {
}
MouseArea {
drag.target: (mapHelper.editMode && model.isSelected) ? mapItem : undefined
anchors.fill: parent
anchors.fill: parent
hoverEnabled: true
onClicked: {
if (!mapHelper.editMode && model.divesite)
mapHelper.selectedLocationChanged(model.divesite)
@ -122,8 +157,8 @@ Item {
MouseArea {
anchors.fill: parent
onPressed: { map.stopZoomAnimations(); mouse.accepted = false }
onWheel: { map.stopZoomAnimations(); wheel.accepted = false }
onPressed: (mouse) => { map.stopZoomAnimations(); mouse.accepted = false }
onWheel: (wheel) => { map.stopZoomAnimations(); wheel.accepted = false }
onDoubleClicked: map.doubleClickHandler(map.toCoordinate(Qt.point(mouseX, mouseY)))
}

View file

@ -4,20 +4,20 @@
#include <QDebug>
#include <QVector>
#include "qmlmapwidgethelper.h"
#include "core/divefilter.h"
#include "core/divelist.h"
#include "core/divelog.h"
#include "core/divesite.h"
#include "core/qthelper.h"
#include "core/range.h"
#include "qt-models/maplocationmodel.h"
#include "qmlmapwidgethelper.h"
#include "qt-models/divelocationmodel.h"
#include "qt-models/maplocationmodel.h"
#ifndef SUBSURFACE_MOBILE
#include "desktop-widgets/mapwidget.h"
#endif
#define SMALL_CIRCLE_RADIUS_PX 26.0
#define SMALL_CIRCLE_RADIUS_PX 26.0
MapWidgetHelper::MapWidgetHelper(QObject *parent) : QObject(parent)
{
@ -44,7 +44,7 @@ void MapWidgetHelper::centerOnDiveSite(struct dive_site *ds)
} else {
// dive site with GPS
m_mapLocationModel->setSelected(ds);
QGeoCoordinate dsCoord (ds->location.lat.udeg * 0.000001, ds->location.lon.udeg * 0.000001);
QGeoCoordinate dsCoord(ds->location.lat.udeg * 0.000001, ds->location.lon.udeg * 0.000001);
QMetaObject::invokeMethod(m_map, "centerOnCoordinate", Q_ARG(QVariant, QVariant::fromValue(dsCoord)));
}
}
@ -69,7 +69,7 @@ void MapWidgetHelper::centerOnSelectedDiveSite()
// find the most top-left and bottom-right dive sites on the map coordinate system.
qreal minLat = 0.0, minLon = 0.0, maxLat = 0.0, maxLon = 0.0;
int count = 0;
for(struct dive_site *dss: selDS) {
for (struct dive_site *dss : selDS) {
if (!has_location(&dss->location))
continue;
qreal lat = dss->location.lat.udeg * 0.000001;
@ -92,7 +92,7 @@ void MapWidgetHelper::centerOnSelectedDiveSite()
// Pass coordinates to QML, either as a point or as a rectangle.
// If we didn't find any coordinates, do nothing.
if (count == 1) {
QGeoCoordinate dsCoord (selDS[0]->location.lat.udeg * 0.000001, selDS[0]->location.lon.udeg * 0.000001);
QGeoCoordinate dsCoord(selDS[0]->location.lat.udeg * 0.000001, selDS[0]->location.lon.udeg * 0.000001);
QMetaObject::invokeMethod(m_map, "centerOnCoordinate", Q_ARG(QVariant, QVariant::fromValue(dsCoord)));
} else if (count > 1) {
QGeoCoordinate coordTopLeft(minLat, minLon);
@ -134,7 +134,7 @@ void MapWidgetHelper::selectedLocationChanged(struct dive_site *ds_in)
return;
QGeoCoordinate locationCoord = location->coordinate;
for (auto [idx, dive]: enumerated_range(divelog.dives)) {
for (auto [idx, dive] : enumerated_range(divelog.dives)) {
struct dive_site *ds = dive->dive_site;
if (!ds || !ds->has_gps_location())
continue;
@ -151,9 +151,9 @@ void MapWidgetHelper::selectedLocationChanged(struct dive_site *ds_in)
}
int last; // get latest dive chronologically
if (!selectedDiveIds.isEmpty()) {
last = selectedDiveIds.last();
selectedDiveIds.clear();
selectedDiveIds.append(last);
last = selectedDiveIds.last();
selectedDiveIds.clear();
selectedDiveIds.append(last);
}
#endif
emit selectedDivesChanged(selectedDiveIds);
@ -162,7 +162,7 @@ void MapWidgetHelper::selectedLocationChanged(struct dive_site *ds_in)
void MapWidgetHelper::selectVisibleLocations()
{
QList<int> selectedDiveIds;
for (auto [idx, dive]: enumerated_range(divelog.dives)) {
for (auto [idx, dive] : enumerated_range(divelog.dives)) {
struct dive_site *ds = dive->dive_site;
if (!ds || ds->has_gps_location())
continue;
@ -171,7 +171,7 @@ void MapWidgetHelper::selectVisibleLocations()
QGeoCoordinate dsCoord(latitude, longitude);
QPointF point;
QMetaObject::invokeMethod(m_map, "fromCoordinate", Q_RETURN_ARG(QPointF, point),
Q_ARG(QGeoCoordinate, dsCoord));
Q_ARG(QGeoCoordinate, dsCoord));
if (!qIsNaN(point.x()))
#ifndef SUBSURFACE_MOBILE // indices on desktop
selectedDiveIds.append(idx);
@ -181,9 +181,9 @@ void MapWidgetHelper::selectVisibleLocations()
}
int last; // get latest dive chronologically
if (!selectedDiveIds.isEmpty()) {
last = selectedDiveIds.last();
selectedDiveIds.clear();
selectedDiveIds.append(last);
last = selectedDiveIds.last();
selectedDiveIds.clear();
selectedDiveIds.append(last);
}
#endif
emit selectedDivesChanged(selectedDiveIds);
@ -205,11 +205,11 @@ void MapWidgetHelper::calculateSmallCircleRadius(QGeoCoordinate coord)
{
QPointF point;
QMetaObject::invokeMethod(m_map, "fromCoordinate", Q_RETURN_ARG(QPointF, point),
Q_ARG(QGeoCoordinate, coord));
Q_ARG(QGeoCoordinate, coord));
QPointF point2(point.x() + SMALL_CIRCLE_RADIUS_PX, point.y());
QGeoCoordinate coord2;
QMetaObject::invokeMethod(m_map, "toCoordinate", Q_RETURN_ARG(QGeoCoordinate, coord2),
Q_ARG(QPointF, point2));
Q_ARG(QPointF, point2));
m_smallCircleRadius = coord2.distanceTo(coord);
}
@ -251,8 +251,8 @@ QString MapWidgetHelper::pluginObject()
{
QString lang = getUiLanguage().replace('_', '-');
QString cacheFolder = QString::fromStdString(system_default_directory() + "/googlemaps").replace("\\", "/");
return QStringLiteral("import QtQuick 2.0;"
"import QtLocation 5.3;"
return QStringLiteral("import QtQuick;"
"import QtLocation;"
"Plugin {"
" id: mapPlugin;"
" name: 'googlemaps';"
@ -263,5 +263,6 @@ QString MapWidgetHelper::pluginObject()
" console.warn('MapWidget.qml: cannot find a plugin named: ' + name);"
" }"
" }"
"}").arg(lang, cacheFolder);
"}")
.arg(lang, cacheFolder);
}

View file

@ -1,7 +1,7 @@
# Build the image using the --build-arg option, e.g.:
# docker build -t boret/myimage:0.1 --build-arg=mxe_sha=123ABC456 .
FROM ubuntu:22.04 as base
FROM ubuntu:24.04 as base
# update and set up the packages we need for the build
RUN apt-get update && \
@ -48,13 +48,14 @@ RUN apt-get install -y \
libxml-parser-perl \
python3 \
python3-mako \
python3-setuptools \
python-is-python3 \
ruby \
xz-utils \
scons
# very often master is broken, so we pass in a known good SHA
ARG mxe_sha=master
ARG mxe_sha=d6377b2f2334694dbb040294fd0d848327e63328
ENV _ver=${mxe_sha}
WORKDIR /win
@ -73,9 +74,6 @@ ADD settings.mk .
# backend is not picked
ADD qtconnectivity-1.patch src/
ADD mdbtools_version.patch .
RUN patch -p1 < mdbtools_version.patch 2>&1 | tee mxe-patch.log
# separate download from build so that we can redo the build
RUN make -j download 2>&1 | tee mxe-build.log

View file

@ -1,52 +0,0 @@
# Temporary patch to apply to MXE's src/mdbtools.mk file while building docker
# image, until it's applied upstream at github's MXE repo.
diff --git a/src/mdbtools.mk b/src/mdbtools.mk
index 42d303c2..d9d0f557 100644
--- a/src/mdbtools.mk
+++ b/src/mdbtools.mk
@@ -1,19 +1,17 @@
# This file is part of MXE. See LICENSE.md for licensing information.
PKG := mdbtools
-$(PKG)_WEBSITE := https://sourceforge.net/projects/mdbtools/
+$(PKG)_WEBSITE := https://github.com/mdbtools/mdbtools
$(PKG)_IGNORE :=
-$(PKG)_VERSION := 0.7.1
-$(PKG)_CHECKSUM := 4eac1bce55066a38d9ea6c52a8e8ecc101b79afe75118ecc16852990472c4721
-$(PKG)_SUBDIR := brianb-mdbtools-f8ce1cc
-$(PKG)_FILE := $(PKG)-$($(PKG)_VERSION).tar.gz
-$(PKG)_URL := https://github.com/brianb/$(PKG)/tarball/$($(PKG)_VERSION)/$($(PKG)_FILE)
+$(PKG)_VERSION := 1.0.0
+$(PKG)_CHECKSUM := 3446e1d71abdeb98d41e252777e67e1909b186496fda59f98f67032f7fbcd955
+$(PKG)_GH_CONF := mdbtools/mdbtools/releases, v
$(PKG)_DEPS := cc glib
define $(PKG)_UPDATE
- $(WGET) -q -O- 'https://github.com/brianb/mdbtools/tags' | \
- grep '<a href="/brianb/mdbtools/archive/' | \
- $(SED) -n 's,.*href="/brianb/mdbtools/archive/\([0-9][^"_]*\)\.tar.*,\1,p' | \
+ $(WGET) -q -O- 'https://github.com/mdbtools/mdbtools/tags' | \
+ grep 'href="/mdbtools/mdbtools/archive/' | \
+ $(SED) -n 's,.*href="/mdbtools/mdbtools/archive/refs/tags/v\([0-9][^"_]*\)\.tar.*,\1,p' | \
head -1
endef
@@ -24,10 +22,11 @@ define $(PKG)_BUILD
--build="`config.guess`" \
--disable-shared \
--disable-man \
+ --without-bash-completion-dir \
--prefix='$(PREFIX)/$(TARGET)' \
PKG_CONFIG='$(PREFIX)/bin/$(TARGET)-pkg-config'
- $(MAKE) -C '$(1)' -j '$(JOBS)' install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= html_DATA= || \
- $(MAKE) -C '$(1)' -j 1 install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= html_DATA=
+ $(MAKE) CFLAGS+='-Wno-deprecated-declarations' -C '$(1)' -j '$(JOBS)' install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= html_DATA= || \
+ $(MAKE) CFLAGS+='-Wno-deprecated-declarations' -C '$(1)' -j 1 install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= html_DATA=
endef
$(PKG)_BUILD_SHARED =
--
2.43.0

View file

@ -169,8 +169,9 @@ for package in "${PACKAGES[@]}" ; do
git_checkout_library breeze-icons $CURRENT_BREEZE_ICONS https://github.com/kde/breeze-icons.git
;;
googlemaps)
git_checkout_library googlemaps master https://github.com/Subsurface/googlemaps.git
;;
#git_checkout_library googlemaps master https://github.com/Subsurface/googlemaps.git
git_checkout_library googlemaps master https://github.com/vladest/googlemaps.git
;;
hidapi)
git_checkout_library hidapi master https://github.com/libusb/hidapi.git
;;