Hello Carl,

I'm not sure about visual effect of code which you mentioned. But it looks
better in code organization. My additional work was to implement "follow
the sun" functionality, i.e. rotate earth according to current sun position
(it was present in KDE4 long time ago). When I will have opportunity to
check KDE6, I will see how it works.

pt., 23 maj 2025 o 12:21 Carl Schwan <c...@carlschwan.eu> napisał(a):

> Hi,
>
> I'm not sure I follow exactly what you are trying to do but the following
> code works with Plasma 6:
>
>
> https://invent.kde.org/education/marble/-/blob/master/src/plasma/wallpapers/worldmap/contents/ui/main.qml?ref_type=heads
>
> Cheers,
> Carl
>
> On Fri, May 23, 2025, at 10:02 AM, Piotr Frankowski wrote:
> > Hello,
> > Long time has passed, I have found some free time, and with little help
> > of LLM I have managed to reproduce your work, modify the script(?), and
> > it works. I have enabled stars, but I cannot force clouds display - I
> > think problem is inside of Marble. I have found, that in the script
> > there is marbleItem which is
> > https://api.kde.org/marble/html/MarbleQuickItem_8h_source.html - and it
> > has less properties than MarbleMap. In my setup there is a problem with
> > getting location - geolocation is returning access denied or something.
> > My KDE is 5.27, I'm just curious if this script will work on new KDE.
> > This is my sript:
> >
> > ```
> > /*
> >  * Copyright 2018  Friedrich W. H. Kossebau <kosse...@kde.org>
> >  *
> >  * This program is free software; you can redistribute it and/or
> >  * modify it under the terms of the GNU Lesser General Public
> >  * License as published by the Free Software Foundation; either
> >  * version 2.1 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
> >  * Lesser General Public License for more details.
> >  *
> >  * You should have received a copy of the GNU Lesser General Public
> >  * License along with this program. If not, see <
> http://www.gnu.org/licenses/>.
> >  */
> >
> > import QtQuick 2.1
> >
> > import org.kde.plasma.core 2.0 as PlasmaCore
> > import org.kde.plasma.extras 2.0 as PlasmaExtras
> >
> > import org.kde.marble.private.plasma 0.20
> >
> > MarbleItem {
> >     id: marbleItem
> >     // https://api.kde.org/marble/html/MarbleQuickItem_8h_source.html
> >     // available properties
> >
> >     readonly property int centerMode: wallpaper.configuration.centerMode
> >     property double fixedLongitude:
> wallpaper.configuration.fixedLongitude
> >     property double fixedLatitude: wallpaper.configuration.fixedLatitude
> >     property double locationLongitude: 0.0
> >     property double locationLatitude: 0.0
> >
> >     enabled: false // do not handle input
> >
> >     radius: {
> >         var ratio = width/height;
> >         if (ratio > 1) {
> >             return height / 2.5;
> >         }
> >         return width / 2.5
> >     }
> >
> >     // Theme settings.
> >     projection: MarbleItem.Spherical
> >     mapThemeId: "earth/bluemarble/bluemarble.dgml"
> >
> >     // Visibility of layers/plugins.
> >     showAtmosphere: true
> >     showClouds: true
> >     showBackground: true
> >
> >     showGrid: false
> >     showCrosshairs: false
> >     showCompass: false
> >     showOverviewMap: false
> >     showScaleBar: false
> >     showOtherPlaces: false
> >     showPublicTransport: false
> >     showOutdoorActivities: false
> >
> >
> >     onCenterModeChanged: handleCenterModeChange()
> >     function handleCenterModeChange() {
> >         if (centerMode === 0) {
> >             marbleItem.centerOn(locationLongitude, locationLatitude);
> >         } else if (centerMode === 1)  {
> >             marbleItem.centerOn(fixedLongitude, fixedLatitude);
> >         } else {
> >             marbleItem.centerOn(locationLongitude, locationLatitude);
> >         }
> >     }
> >
> >     onFixedLongitudeChanged: handleFixedLonLatChange()
> >     onFixedLatitudeChanged: handleFixedLonLatChange()
> >     function handleFixedLonLatChange() {
> >         if (centerMode === 1) {
> >             marbleItem.centerOn(fixedLongitude, fixedLatitude);
> >         }
> >     }
> >
> >     onLocationLongitudeChanged:handleLocationChange()
> >     onLocationLatitudeChanged:handleLocationChange()
> >     function handleLocationChange() {
> >         if (centerMode === 2) {
> >             marbleItem.centerOn(locationLongitude, locationLatitude);
> >         }
> >     }
> >
> >     Component.onCompleted: {
> >
> >         // marbleItem.setShowPlaces(false);
> >         // marbleItem.setShowCities(false);
> >         marbleItem.setShowOtherPlaces(showOtherPlaces);
> >         marbleItem.setShowBackground(showBackground);
> >
> >         handleCenterModeChange();
> >     }
> >
> >     PlasmaCore.DataSource {
> >         id: geolocationDataSource
> >         engine: "geolocation"
> >         connectedSources: (marbleItem.centerMode === 2) ? ["location"]
> > : []
> >         interval: 10 * 60 * 1000 // every 30 minutes, might be still
> > too large for users on the ISS :P
> >     }
> >
> >     Timer {
> >         id: sunPositionTimer
> >         interval: 60000 // Update every minute
> >         running: marbleItem.centerMode === 0 // Only when following sun
> >         repeat: true
> >         triggeredOnStart: true
> >
> >         onTriggered: {
> >             var sunPos = calculateSunPosition();
> >             marbleItem.locationLongitude = sunPos.longitude;
> >             marbleItem.locationLatitude = sunPos.latitude;
> >             handleCenterModeChange();
> >         }
> >     }
> >
> >     // Function to calculate sun's position
> >     function calculateSunPosition() {
> >         var now = new Date();
> >         var dayOfYear = getDayOfYear(now);
> >         var timeOfDay = now.getUTCHours() + now.getUTCMinutes() / 60.0;
> >
> >         // Solar declination (simplified)
> >         var declination = -23.45 * Math.cos(2 * Math.PI * (dayOfYear +
> > 10) / 365.25);
> >
> >         // Hour angle - sun's longitude changes 15 degrees per hour
> >         var hourAngle = 15 * (timeOfDay - 12); // 0° at solar noon
> (12:00 UTC)
> >
> >         // Sun's subsolar point
> >         var longitude = hourAngle;
> >         var latitude = declination;
> >
> >         // Normalize longitude to [-180, 180]
> >         while (longitude > 180) longitude -= 360;
> >         while (longitude < -180) longitude += 360;
> >
> >         // debug
> >         //console.log("[earthglobe]]: ", longitude);
> >         //console.log("[earthglobe]]: ", latitude);
> >
> >         return {
> >             longitude: -longitude,
> >             latitude: -latitude
> >         };
> >     }
> >
> >     function getDayOfYear(date) {
> >         var start = new Date(date.getFullYear(), 0, 0);
> >         var diff = date - start;
> >         return Math.floor(diff / (1000 * 60 * 60 * 24));
> >     }
> > }
> > ```
> >
> > image.png
> >
> >
> > pt., 12 cze 2020 o 21:26 Piotr Frankowski
> > <frankowski.piot...@gmail.com> napisał(a):
> >> Thanks - good starting point for me. Your email is like 5 hours of
> mentoring;) have a nice weekend
> >>
> >> pt., 12 cze 2020 o 01:10 Friedrich W. H. Kossebau <kosse...@kde.org>
> napisał(a):
> >>> Hi Piotr,
> >>>
> >>> Am Donnerstag, 11. Juni 2020, 20:49:57 CEST schrieb Piotr Frankowski:
> >>> > Hello,
> >>> >
> >>> > First of all,thanks for such great piece of software, which I am
> using for
> >>> > 15 years. I would like to make small contribution - but I need
> little help,
> >>> > a kind of mentoring or a plan and help at begin. I would like
> rewrite KDE4
> >>> > app - plasma-wallpaper-globe, to KDE5 using QML. I think it is
> possible to
> >>> > do - I am thinking, that I should create plasma-wallpaper plugin,
> which
> >>> > uses Marbles Maps API.
> >>>
> >>> ((quick reminder to speak with same terms: post-KDE4 there is no KDE5,
> things
> >>> got split in cross-platform apps (for platforms like Plasma, Gnome,
> >>> $OTHERLINUXSHELL, Windows, macOS, Android. HaikuOS, etc.), modular
> reusable Qt
> >>> extensions (KDE Frameworks) and the actual workspace (Plasma).))
> >>>
> >>> When it comes to the Globe plasma wallpaper, there actually has been a
> working
> >>> patch. I know because I did it :) Though just for coding fun, did not
> plan to
> >>> use it, so it died as review request because no-one pushed and no-one
> pulled.
> >>> It is up for adaption here, might still apply:
> >>>     https://phabricator.kde.org/D11969
> >>>
> >>> > First questions:
> >>> > - is there template for plasma-wallpaper-plugin?
> >>>
> >>> Yes, the blog post you linked below is referencing one, and it does
> still
> >>> exist.
> >>>
> >>> > - is there tutorial for writing plasma-plugins?
> >>>
> >>> Sadly Plasma developers are lacking here and need support. People
> learning are
> >>> some of the best people to write documentation/tutorials while they
> lean,
> >>> because they see all the problems and can mention them, so consider
> picking up
> >>> that as side-task.
> >>>
> >>> > - I have found some linke, are they actual:
> >>> >
> https://frinring.wordpress.com/2018/04/04/templates-to-create-your-own-plasm
> >>> > a-wallpaper-plugin/
> >>>
> >>> Should still apply (I just fixed some links now given you mentioned it
> and I
> >>> found they were broken). Not tested though, but I would hope Plasma
> developers
> >>> kept compatibility during Plasma 5 times ;)
> >>>
> >>> > - I should learn QML and C++, right?
> >>>
> >>> Yes. If you are completely new, best first walk yourself through all
> the Qt
> >>> tutorials to get some first sense about things before you enter the
> partially
> >>> rough world of developing for Plasma.
> >>> See https://doc.qt.io/qt-5/qtexamplesandtutorials.html and make
> yourself
> >>> familiar with Qt and QtQuick/Qml. And try to find some local people to
> talk
> >>> and learn together in real life, that also helps (it did for me when I
> >>> started).
> >>>
> >>> Sorry, not available myself for mentoring.
> >>>
> >>> Cheers
> >>> Friedrich
> >>>
> >>>
> >>
> >>
> >> --
> >> Pozdrawiam
> >> pf
> >
> >
> > --
> > Pozdrawiam
> > pf
>


-- 
Pozdrawiam
pf

Reply via email to