mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
profile: port picture code to qt-quick
This was very painful, because I had to implement rearranging the paint order of the QSGNodes. The resulting code appears quite brittle. Let's see where that brings us. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
d0c26f42d7
commit
ebf9ce6d86
22 changed files with 979 additions and 592 deletions
66
qt-quick/chartitem_private.h
Normal file
66
qt-quick/chartitem_private.h
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
// Private template implementation for ChartItem child classes
|
||||
|
||||
#ifndef CHARTITEM_PRIVATE_H
|
||||
#define CHARTITEM_PRIVATE_H
|
||||
|
||||
#include "chartitem.h"
|
||||
#include "chartview.h"
|
||||
|
||||
template <typename Node>
|
||||
template<class... Args>
|
||||
void HideableChartItem<Node>::createNode(Args&&... args)
|
||||
{
|
||||
node.reset(new Node(visible, std::forward<Args>(args)...));
|
||||
visibleChanged = false;
|
||||
}
|
||||
|
||||
template <typename Node>
|
||||
void HideableChartItem<Node>::addNodeToView()
|
||||
{
|
||||
view.addQSGNode(node.get(), zValue, moveMode == MoveMode::after, moveNode);
|
||||
moveNode = nullptr;
|
||||
moveMode = MoveMode::none;
|
||||
}
|
||||
|
||||
template <typename Node>
|
||||
HideableChartItem<Node>::HideableChartItem(ChartView &v, size_t z, bool dragable) : ChartItem(v, z, dragable),
|
||||
visible(true), visibleChanged(false), moveMode(MoveMode::none), moveNode(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
template <typename Node>
|
||||
void HideableChartItem<Node>::updateVisible()
|
||||
{
|
||||
if (visibleChanged)
|
||||
node->setVisible(visible);
|
||||
visibleChanged = false;
|
||||
}
|
||||
|
||||
template <typename Node>
|
||||
void HideableChartItem<Node>::doRearrange()
|
||||
{
|
||||
if (!node)
|
||||
return;
|
||||
switch (moveMode) {
|
||||
default:
|
||||
case MoveMode::none:
|
||||
return;
|
||||
case MoveMode::before:
|
||||
if (moveNode)
|
||||
view.moveNodeBefore(node.get(), zValue, moveNode);
|
||||
else
|
||||
view.moveNodeBack(node.get(), zValue);
|
||||
break;
|
||||
case MoveMode::after:
|
||||
if (moveNode)
|
||||
view.moveNodeAfter(node.get(), zValue, moveNode);
|
||||
else
|
||||
view.moveNodeFront(node.get(), zValue);
|
||||
break;
|
||||
}
|
||||
moveNode = nullptr;
|
||||
moveMode = MoveMode::none;
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue