File AxisTickPainter.hpp¶
File List > axis > AxisTickPainter.hpp
Go to the documentation of this file
//
// SPDX-FileCopyrightText: 2026 Michal Grabarczyk
// SPDX-License-Identifier: GPL-3.0-only WITH Universal-FOSS-exception-1.0
//
// This file is also available under a separate commercial license.
// See COMMERCIAL-LICENSING.md for contact information.
//
#pragma once
#include "QAccelPlot/axis/Axis.hpp"
#include "QAccelPlot/axis/AxisTicker.hpp"
#include "QAccelPlot/axis/AxisTicks.hpp"
#include <QColor>
#include <QRectF>
#include <QSizeF>
#include <functional>
QT_FORWARD_DECLARE_CLASS(QFontMetricsF)
QT_FORWARD_DECLARE_CLASS(QPainter)
namespace QAccelPlot {
class AxisTickPainter {
public:
struct Params {
Qt::Orientation orientation{Qt::Horizontal};
Axis::Side side{Axis::Left};
bool hovered{false};
const AxisTicker* ticker{nullptr};
QColor hoverColor;
QColor defaultSubtickColor;
bool clampEdgeLabels{false};
qreal labelOverflow{0.0};
};
using MapToPosition = std::function<qreal(qreal value, qreal length)>;
struct PaintContext {
QPainter* painter;
QRectF rect;
qreal axisX;
qreal axisY;
};
static AxisTicks computeTicks(qreal viewportMin, qreal viewportMax, bool logScale, const AxisTicker* ticker);
static AxisTickValues computeTickValues(qreal viewportMin, qreal viewportMax, bool logScale, const AxisTicker* ticker);
static void paintTicks(
QPainter* painter, const QRectF& rect, qreal axisX, qreal axisY, const Params& params, const AxisTicks& ticks, const MapToPosition& mapToPosition);
static qreal computeNiceStep(qreal viewportMin, qreal viewportMax, int tickCount);
static QSizeF tickLabelSize(const QFontMetricsF& metrics, const QString& label);
private:
static AxisTickValues computeLogScaleTickValues(qreal viewportLow, qreal viewportHigh, const AxisTicker& ticker);
static AxisTickValues computeLinearTickValues(qreal viewportLow, qreal viewportHigh, const AxisTicker& ticker);
static void paintTick(const PaintContext& ctx, const AxisTick& tick, const Params& params, const MapToPosition& mapToPosition);
static void paintSubtick(const PaintContext& ctx, qreal value, const Params& params, const MapToPosition& mapToPosition);
static void drawTickLabel(QPainter* painter, const QRectF& labelRect, int alignment, const QString& label, qreal rotation);
};
} // namespace QAccelPlot