Planet KDE logo

Welcome to Planet KDE

This is a feed aggregator that collects what the contributors to the KDE community are writing on their respective blogs
To have your blog added to this aggregator, please read the instructions

Ramon Miranda has just finished a new video, this time he’s doing impressionism in Krita! And with that, there’s also a new brush preset bundle for you to download! Click on the image to go to the video on Krita’s channel!

The post New Video by Ramon appeared first on Krita.

Alejandro López (right), CEO at Slimbook, with Adriaan de Groot from the KDE e.V. board.

After several product collaborations, today we celebrate an extension of this partnership by welcoming Slimbook to the KDE Patrons family.

Alejandro López, Slimbook CEO explains,

“Since our early days in 2015, we at SLIMBOOK have been trying our best not only to sell GNU/Linux compatible quality hardware, but also to contribute and help those who make Free and Open Source Software.

Our variety of contributions range from giving support to local groups of developers, the making of forums and tutorials to help the Linux community and sharing a common vision with KDE, to hit the market with a device able to provide the end user with the best out-of-the-box Linux experience available.

But our mission doesn’t end there and there’s more than meets the eye. Our main goal is to share our knowledge and experience, help each other, and of course, to give the GNU/Linux users the best in hardware excellence the same way as the KDE Team do with their excellent software experience.

We take our duty of supporting the KDE Community full of pride, and we are honored to be KDE Patrons."

Aleix Pol i Gonzalez, President of KDE e.V. stated,

“Slimbook’s attention towards FOSS users as a hardware provider is very important to KDE and the community at large. For KDE, being able to reach beyond the software experience to tangible and properly integrated solutions has been a dream come true. Working together in the different collaborations over the years has been really exciting, and we look forward to continuing doing so with Slimbook as a Patron.”

Slimbook will join KDE e.V.’s other Patrons: The Qt Company, SUSE, Google, Blue Systems, Canonical and Enioka to continue to support Free Software and KDE development through the KDE e.V.


24 February, 2021

Qt Quick Rendering Engine

Here, at KDAB, we get to spend 10% of our time on learning what we don’t know or practicing and improving what we already know. Recently, I decided to use that time to learn more about the Qt Quick Rendering Engine. The best way to do so, I found, is to use it in a way it wasn’t intended to be used: for making simple 3D graphics — creating my own little 3D paintings, as one would in Minecraft, starting with a ground plane. I’d like to take this time to share with you how to play.

How to play

My mini voxel-editor should be using Isometric Perspective to display colorful cubes, which can be placed in a world. Therefore, I create a QML Rectangle that contains the transformations necessary for isometric perspective.

By combining three transforms, I create my ground plane:

ground plane

  • 0 — Starting with a normal rectangle
  • 1 — Rotating 45 degrees (around transform origin)
  • 2 — Downscaling of the original y-component
  • 3 — Flipping of the coordinate system towards the viewer

These actions can be achieved by combining three 4-by-4 matrices for each of the transformations, via multiplication. Note that, although QML comes with predefined Transform Items, I use raw matrices for each transform, to keep the code consistent.

//The ISO perspective transform:
transform: Matrix4x4 {
    id: isometric_perspective
    property real rotationZ: 45/360 * Math.PI * 2
    property matrix4x4 flipMatrix:
        Qt.matrix4x4(1,  0, 0, 0,
                     0, -1, 0, 0,
                     0,  0, 1, 0,
                     0,  0, 0, 1)
    property matrix4x4 rotationZMatrix:
        Qt.matrix4x4(Math.cos(rotationZ), -Math.sin(rotationZ), 0, 0,
                     Math.sin(rotationZ),  Math.cos(rotationZ), 0, 0,
                     0, 0, 1, 0,
                     0, 0, 0, 1)
    property real flatness: 0.5
    property matrix4x4 scaleYMatrix:
        Qt.matrix4x4(1,   0, 0, 0,
                     0, flatness, 0, 0,
                     0,   0, 1, 0,
                     0,   0, 0, 1)
    matrix: flipMatrix.times(scaleYMatrix).times(rotationZMatrix)

Because all transforms originate in the top-right of my window, I position my world-origin to the bottom-center of my window, to reveal the full world inside of it. Since QML’s scene graph is hierarchical, all of its child Items (RectanglesCircles, …) are inherently in the right perspective and appear as lying on the ground of my iso-world. Both the empty world and the world filled with RectangleCircle, and a star Image can be seen here:

ground plane

Next would be the cubes. I already have the top faces, since they would be simple squares in my iso-world (just like the red rectangle in the image above). To “elevate” them to the cubes height (32px), I apply an offset of 32 in x, as well as in y, as a transform. Going up in the iso-world means adding the same value to x and y, thus moving straight out of the corner pointing towards you. Sometimes, this additional axis combined out of x and y is called the w axis, for the isometric perspectives. There is a certain ambiguity, still, since the viewer does not know if a shape was moved on the ground plane (a), or elevated (b). Small tricks in lighting, such as adding a shadow, can help here:

scene graph

For the side faces, I also would need an upwards-effect to make them rise from the bottom to the top of my cubes. This, I achieve with a transform matrix, increasing x as well as y. For the right side, this happens in the first row of the transform matrix. Conversely, the left side has this double increase in its second row.

scene graph

For the colors, I decided to simply make the top Qt.lighter(cubeColor), the left normal cubeColor, and the right Qt.darker(cubeColor). So, overall, it looks like light is coming from top left.

I found out that all MouseAreas are transformed, together with the visible Item (as they behave as transformed Rectangles). So, just by filling a MouseArea to each of the sides, I could make them clickable, individually, also working with all the transforms. To reuse the MouseArea, I refactored out a universal FaceArea, which allows you to create a cube at an arbitrarily chosen vector offset.

So, to give an example, I instantiate it with the vector Qt.vector3D(0, 0, 1), for the top face to create the new cube on top, when clicking.

    property var creationOffset: Qt.vector3d(001)
    anchors.fill: parent
    acceptedButtons: Qt.AllButtons
    onWheel: {isoCube.color = Qt.hsla(Math.random(),0.80.51)}
    onClicked: {
        if (mouse.button & Qt.LeftButton) {
            isoWorld.createCubeAt(isoCube.xpos + creationOffset.x,
                                              isoCube.ypos + creationOffset.y,
                                              isoCube.level + creationOffset.z);
        else {

There are 3 possibilities of interaction:

  • Wheel randomly changes the color
  • Normal left click adds a new cube on that face, using QML’s Dynamic Item Creation.
  • Right click deletes the cube.

Bonus: To make the whole thing a bit more vivid, I made it wobble up and down. I also added an indicator where new cubes are placed on the ground plane.

Here is the final result in a video:

Tip: To make the Cubes stack well, Z-ordering has to be done right. There are 3 simple rules:

  1. If it’s above, it is in front.
  2. If it has a lower x or y, it is in front (because it’s more towards the viewer)
  3. But “above” is way more important.

So, I simply set the z to 1000 * stacklevel – x – y, and it worked well.


Although QML is intended to be used with 2D graphics, mainly 2.5D, including interaction is well possible through Item-specific transforms. The QML Scene Graph implicitly allows nested transforms and makes perspective drawings an easy task.

I had lots of fun while playing and learning through this small example. Maybe it’s useful to you, or maybe it just makes you as happy as it made me.

The code for this mini Minecraft can be found and played with at:


KDAB offers unique Qt expert services. Develop unique Qt and QML applications with KDAB’s expertise. For more information on our services surrounding Qt and QML, click here.


About KDAB

If you like this blog and want to read similar articles, consider subscribing via our RSS feed.

Subscribe to KDAB TV for similar informative short video content.

KDAB provides market leading software consulting and development services and training in Qt, C++ and 3D/OpenGL. Contact us.

The post A 3D Block Building Game in QML appeared first on KDAB.

The Krita team is releasing the first beta of Krita 4.4.3. This is purely a bugfix release.

Bug Fixes


  • Crash when back button was pressed on splash screen
  • Crash when loading files while app is still booting
  • Use lastUpdateTime for copying assets
  • Provide host so pathPattern could be effective
  • Fix color selector covering entire screen (BUG:432459)
  • Saved configs aren’t loaded after restart (BUG:432433)
  • Add key functions to psd_layer_effects_shadow_base (BUG:432904)
  • Fix reloading presets from user-imported bundles (BUG:432488)


  • Fix crash in halftone filter due to an access to an invalid pointer
  • Fix crash when reapplying a filter with reprompting
  • Fix crash when painting on a filter mask created from a vector selection (BUG:432329)


  • MacOS: fix the finder plugins for showing a thumbnail or a quick look preview (BUG:432328)


  • Fix handling the channel flags. Patch by Chris Venter, thanks! (BUG:432226)

Stability and Performance

  • Fix synchronization of zoom level between canvas and the scratchpad
  • Fix normalization in Smart Patch Tool (BUG:430953)
  • Fix performance issues in the foreground/background color button (BUG:432936)
  • Fix saving incremental backups (BUG:432701)
  • Fix a problem where the scratchpad could be unresponsive (BUG:431708)
  • Fix Color as Alpha and Preserve Alpha in Custom and Clipboard brushes (BUG:432274)
  • Fix the RGBA_brushes bundle so Krita doesn’t try to recreate it on startup (BUG:431832)
  • Fix handling of style in KisAngleSelector when the spin box must be shown flat and use the new angle selector everywhere



If you’re using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.


(If, for some reason, Firefox thinks it needs to load this as text: to download, right-click on the link.)


Note: the gmic-qt is not available on OSX.


This time, the Android releases are made from the release tarball, so there are translations. We consider Krita on ChromeOS and Android still beta. There are many things that don’t work and other things that are impossible without a real keyboard.

Source code


For all downloads:


The Linux appimage and the source .tar.gz and .tar.xz tarballs are signed. You can retrieve the public key with gpg: “gpg –recv-key 7468332F”. The signatures are here (filenames ending in .sig).

Support Krita

Krita is a free and open source project. Please consider supporting the project with donations or by buying training videos! With your support, we can keep the core team working on Krita full-time.

The post First Beta Release for Krita 4.4.3 appeared first on Krita.

In Okular:


Some settings are okular wide, if you change them, they will be changed in all the future okular instances, an easy example is if you change the shortcut for saving from Ctrl+S to Ctrl+Shift+E. 


Some other settings are document specific, for example zoom, if you change the zoom of a document it will only be restored when opening the same document again, but not if you open a different one. There's also a "default zoom value for documents you've never opened before" in the settings.

Some other settings like "Continuous View" are a bit of a mess and are both. "Continuous View" wants to be a global setting (i.e. so that if you hate continuous view you always get a non continous view) but it is also restored to the status it had when you closed the document you're just opening.

That's understandably a bit confusing for users :D

My suggestion for continuous view would be to make it work like Zoom, be purely document specific but also have a default option in the settings dialog for people that hate continous view.


I'm guessing this should cover all our bases?


Opinions? Anything i may have missed?

Featured image of post NeoChat 1.1

Exactly 2 months after NeoChat 1.0, the NeoChat team is happy to announce a new release of NeoChat. NeoChat is a native client for the decentralized communication network Matrix.

Aside from the many bug fixes, performance improvements, and subtle appearance improvements, NeoChat 1.1 brings many new features that will make your experience with it more convenient.

Thanks to the work of Hannah, Nicolas, and Tobias, this release also brings NeoChat to many more platforms. Nightly builds of NeoChat are now available on Android, Flatpak, AppImage, macOS and Windows. Not all of them are considered production ready, but we hope to improve the support for them in future release.

New features

First launch experience improvements

Probably the highlight of this release is the completely new login page. It detects the server configuration based on your Matrix Id. This allows you to login to servers requiring Single Sign On (SSO) (like the Mozilla or the incoming Fedora Matrix instance).

Servers that require agreeing to the TOS before usage are correctly detected now and redirect to their TOS webpage, allowing the user to agree to them instead of silently failing to load the account.

TOS webpage, allowing the user to agree to them instead of silently failing to load the account.

Login Page
Login Page


Everyone loves cute stickers, so now NeoChat supports displaying them too. We don’t yet support sending them.

Viewing a Sticker
Viewing a Sticker

Editing messages

Editing messages is another popular feature of every IM client. NeoChat is now able to show edited messages correctly and also make it possible to edit your messages. The behavior is the same as in Element.

Editing messages
Editing messages

Multimodal mode

It is now possible to open a room into a new window. This allows you to view and interact with multiple rooms at the same time.

Multimodal mode
Multimodal mode


We added a few commands to NeoChat. Previously you could use /me and /rainbow, and we added a few mores: /shrug, /lenny, /rainbowme, /join, /invite, /part, /ignore, /unignore.

Plasma integration

We improved the Plasma integration a bit. Now the number of unread messages is displayed in the Plasma Taskbar. It is using the com.canonical.Unity.LauncherEntry DBus protocol, so that should be reasonably supported across desktops.


Version 1.1.1 of NeoChat is availabe here. The package is signed with my gpg key 14B0ED91B5783415D0AA1E0A06B35D38387B67BE.

For users, a Flathub version will be updated shortly.

Sok 2021 Update 2

Here is the second update on Sok 2021 Promo team project : Make a single app to post to multiple platforms.

What's Complete

I have completed a lot of the server side work now . I have figured out the endpoints on which the API will work . I have decided that /post/{platform} is going to be the endpoint where platforms are  hard-coded as Twitter , Mastodon and Reddit.

To complete the post you will have to call the API  like this

/post/{platform}?image=<path to image>&text=<text you want to post>

One big advantage with FastAPI is that you can just do localhost:8000/redoc to get the redocs api documentaion fo the same and no additional work needs to be on the server side.

I have also made a very initial prototype of the desktop client we are planning to use.

Sok 2021 Update 2

This client is based on PySide2.

What's Next

  • Currently I am developing a robust way to schedule posts so that we don't miss anything we schedule and then I will incorporate that into the server side.
  • After scheduling on server side has been implemented I will work on driving the client to completion and properly call the API.
  • The server will be dockerized and be sent to the promo team for testing .
  • Enable creation of a proper log file with each request .

If you want to suggest some addition to the project or just want to chat , hit me up on or mail [at]

Plasma Mobile team is happy to announce availability of tarballs for several of Plasma Mobile applications, they are available to download from

Following are their details,

  • plasma-dialer:
    a228f6d41b5524bfbb0a63fdeb28dfb71c31c4a0468afda86769931a52373102  plasma-dialer-0.2.tar.xz.sig
            92c2425ebd0aaaa074b69c6b243fbdbe090468c9207f8f1cb0f77e1b9c2aa31b  plasma-dialer-0.2.tar.xz
  • spacebar:
    1eea821ad160a45a39cfae13fae18cc0ffde353a4c1365db0b764354fbd120f0  spacebar-0.1.tar.xz.sig
            678746dca09866fae1d1ffe2f5e267c16f10f739abaeca6981762938e36fbb5b  spacebar-0.1.tar.xz
  • angelfish:
    88d57876dc28fff9fad79c99d2d239282f9cd24bcd372152084c2ca7a91f1845  angelfish-1.8.0.tar.xz.sig
            def9a40de962c634304eadb91d505aa21faa70d327270e9de85b34c471ca8cd8  angelfish-1.8.0.tar.xz
  • plasma-settings:
    ec7fee1b4dcf07f98be5a631de397638e035608d52ed3fbc074f15a7c6697e5b  plasma-settings-0.1.tar.xz.sig
            909123625ba916bcf3ef2e35077817387b84f4f28e0a81368ac8465f86d538c9  plasma-settings-0.1.tar.xz
  • alligator:
    f1ccb64c88ab9c8a5d680e3d3a79795e2174b4acf44cb92cfa34810935ce4d1a  alligator-0.1.tar.xz.sig
            bca28252907cee344e551bd0801c5fff58d52f1c033dabf1c82bbcfdb14fe051  alligator-0.1.tar.xz
  • plasma-phonebook:
    11185c7358dfc82e8b86473b967b7333c16db52406c8802e4d425798afdb9e81  plasma-phonebook-0.1.tar.xz.sig
            c8cf9bbd3518353b30402b233e1ce1506a5878aa2d319dc2b8d4aa777ffbd68e  plasma-phonebook-0.1.tar.xz
  • kclock:
    f548be1fafbd6041d09f4c4f2a8e48b9a0da607a1acdbc762291924529cfd6d6  kclock-0.4.0.tar.xz.sig
            434b66e3c88a799e3f39e161620a0f944b3d0782f3ac54f10bd3c9e3912903e8  kclock-0.4.0.tar.xz
  • kalk:
    124e136d4b5734bd93f9eed719a88ea01d27cda42a92373db0f4e30fb8398dd3  kalk-v0.2.tar.xz
            13c4a2dff831f7eb5ee7521f531ce2a4888a90bf7fc8e65d3e4062d89c1c2d90  kalk-v0.2.tar.xz.asc
  • kweather:
    e2847139663eecba36b27c6e050b80235ec9fa1c82e8530b36c8f0d67e14c32c  kweather-0.4.tar.xz
            edf976d24408909f5205b14366851fab584dd21477ba2e9c08bf4076a3b4a901  kweather-0.4.tar.xz.asc

All of the tarballs are signed with my PGP key,

0AAC775BB6437A8D9AF7A3ACFE0784117FBCE11D bshah at mykolab dot com


23 February, 2021

Tuesday, 23 February 2021

Today KDE releases a bugfix update to KDE Plasma 5, versioned 5.21.1. Plasma 5.21 was released in February with many feature refinements and new modules to complete the desktop experience.

This release adds a week’s worth of new translations and fixes from KDE’s contributors. The bugfixes are typically small but important and include:

  • KRunner: Launch runners KCM in systemsettings. Commit. Fixes bug #433101
  • Powerdevil: when we get request to wakeup turn dpms on. Commit.
  • SDDM KCM: Allow for easier syncing of Plasma font. Commit. Phabricator Code review D23257. Fixes bug #432930


22 February, 2021

It’s been a long time since I have published my first blog on SoK. To make up for that, I plan on writing successive blog posts to catch you all up with the progress of my project, foKusfoKus is a simple task management app for plasma mobile. 

I have written why we need a dedicated task management app instead of using a calendar app to plan our days in my proposal for SoK. Here I want to highlight the main reason for the need for a dedicated task management app. Calendar apps are great for static events like meetings, appointments, etc. Tasks management apps are great for actionable items(tasks) that we need to do in a day or a week. Sometimes the Calendar might become overpopulated with the “tasks”(which may be small things like listening to a podcastwalk the dog) and might be counter-productive. Using the Calendar and the Task management app in tandem together, we can be our most productive selves. As the task management app isn’t heavy, it won’t affect the performance of the device(if that is your concern). 

Like most other apps of KDE, foKus is also built using the Kirigami and Qt. I had to start the app from scratch as there were no todo apps that I could use as a base for my app. As I was new to this community (and also to programming, this is my first coding project), these past 40 days have been a challenge. I had a tough time writing the backend logic as it was full of pointers, classes, and objects which I didn’t understand back then(admitting the weakness was the first sign of improvement). But with the help of my mentor, I am learning more than ever and getting better every day.

As of today, foKus is at a better place than I have expected it to be. The basic model of the app will be ready after I add the local storage(to store the tasks, which I plan on doing tonight or mostly by tomorrow). The user interface of the app is still crude. I’ll refine it once the basic model is ready. 

That’s it for this post, and thank you for reading. Until next time, cheers!