QmlMaterial 0.1.0
Loading...
Searching...
No Matches
qquickmaterialtextcontainer_p.h
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#pragma once
5
6#include <QtGui/qcolor.h>
7#include <QtQuick/qquickpainteditem.h>
8
9namespace qml_material {
10
11class QQuickMaterialTextContainer : public QQuickPaintedItem
12{
13 Q_OBJECT
14 Q_PROPERTY(bool filled READ isFilled WRITE setFilled FINAL)
15 Q_PROPERTY(bool controlHasActiveFocus READ controlHasActiveFocus
16 WRITE setControlHasActiveFocus NOTIFY controlHasActiveFocusChanged FINAL)
17 Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor FINAL)
18 Q_PROPERTY(QColor outlineColor READ outlineColor WRITE setOutlineColor FINAL)
19 Q_PROPERTY(QColor focusedOutlineColor READ focusedOutlineColor WRITE setFocusedOutlineColor FINAL)
20 Q_PROPERTY(qreal focusAnimationProgress READ focusAnimationProgress WRITE setFocusAnimationProgress FINAL)
21 Q_PROPERTY(qreal placeholderTextWidth READ placeholderTextWidth WRITE setPlaceholderTextWidth FINAL)
22 Q_PROPERTY(PlaceHolderHAlignment placeholderTextHAlign READ placeholderTextHAlign WRITE setPlaceholderTextHAlign FINAL)
23 Q_PROPERTY(bool controlHasText READ controlHasText WRITE setControlHasText NOTIFY controlHasTextChanged FINAL)
24 Q_PROPERTY(bool placeholderHasText READ placeholderHasText WRITE setPlaceholderHasText NOTIFY placeholderHasTextChanged FINAL)
25 Q_PROPERTY(int horizontalPadding READ horizontalPadding WRITE setHorizontalPadding NOTIFY horizontalPaddingChanged FINAL)
26 QML_NAMED_ELEMENT(MaterialTextContainer)
27 QML_ADDED_IN_VERSION(6, 5)
28
29public:
30 explicit QQuickMaterialTextContainer(QQuickItem *parent = nullptr);
31
32 enum PlaceHolderHAlignment {
33 AlignLeft = Qt::AlignLeft,
34 AlignRight = Qt::AlignRight,
35 AlignHCenter = Qt::AlignHCenter,
36 AlignJustify = Qt::AlignJustify
37 };
38 Q_ENUM(PlaceHolderHAlignment)
39
40 bool isFilled() const;
41 void setFilled(bool filled);
42
43 QColor fillColor() const;
44 void setFillColor(const QColor &fillColor);
45
46 QColor outlineColor() const;
47 void setOutlineColor(const QColor &outlineColor);
48
49 QColor focusedOutlineColor() const;
50 void setFocusedOutlineColor(const QColor &focusedOutlineColor);
51
52 qreal focusAnimationProgress() const;
53 void setFocusAnimationProgress(qreal progress);
54
55 qreal placeholderTextWidth() const;
56 void setPlaceholderTextWidth(qreal placeholderTextWidth);
57
58 bool controlHasActiveFocus() const;
59 void setControlHasActiveFocus(bool controlHasActiveFocus);
60
61 bool controlHasText() const;
62 void setControlHasText(bool controlHasText);
63
64 bool placeholderHasText() const;
65 void setPlaceholderHasText(bool placeholderHasText);
66
67 int horizontalPadding() const;
68 void setHorizontalPadding(int horizontalPadding);
69
70 void paint(QPainter *painter) override;
71
72 PlaceHolderHAlignment placeholderTextHAlign() const;
73 void setPlaceholderTextHAlign(PlaceHolderHAlignment placeHolderTextHAlign);
74
75signals:
76 void animateChanged();
77 void controlHasActiveFocusChanged();
78 void controlHasTextChanged();
79 void placeholderHasTextChanged();
80 void horizontalPaddingChanged();
81
82private:
83 bool shouldAnimateOutline() const;
84
85 QQuickItem *textControl() const;
86 void controlGotActiveFocus();
87 void controlLostActiveFocus();
88 void startFocusAnimation();
89
90 void maybeSetFocusAnimationProgress();
91
92 void componentComplete() override;
93
94 QColor m_fillColor;
95 QColor m_outlineColor;
96 QColor m_focusedOutlineColor;
97 qreal m_focusAnimationProgress = 0;
98 qreal m_placeholderTextWidth = 0;
99 bool m_filled = false;
100 bool m_controlHasActiveFocus = false;
101 bool m_controlHasText = false;
102 bool m_placeholderHasText = false;
103 int m_horizontalPadding = 0;
104 PlaceHolderHAlignment m_placeholderTextHAlign;
105};
106
107}