@@ -15,80 +15,6 @@ static const int itemPadding = 4;
1515static const int itemSpacing = 2 ;
1616static const QSize itemVisualSize = QSize(itemSize + itemPadding * 2 , itemSize + itemPadding * 2 );
1717
18- void TrayItemPositionManager::registerVisualItemSize (int index, const QSize &size)
19- {
20- while (m_registeredItemsSize.count () < (index + 1 )) {
21- m_registeredItemsSize.append (itemVisualSize);
22- }
23- QSize oldSize = m_registeredItemsSize[index];
24- m_registeredItemsSize[index] = size;
25-
26- // The registered itemsize may change, and the layout needs to be updated when it does.
27- if (oldSize != size) {
28- emit visualItemSizeChanged ();
29- }
30- }
31-
32- QSize TrayItemPositionManager::visualItemSize (int index) const
33- {
34- if (m_registeredItemsSize.count () <= index) return itemVisualSize;
35- return m_registeredItemsSize.at (index);
36- }
37-
38- QSize TrayItemPositionManager::visualSize (int index, bool includeLastSpacing) const
39- {
40- if (m_orientation == Qt::Horizontal) {
41- int width = 0 ;
42- for (int i = 0 ; i <= index; i++) {
43- width += (visualItemSize (i).width () + itemSpacing);
44- }
45- return QSize ((!includeLastSpacing && index > 0 ) ? (width - itemSpacing) : width, m_dockHeight);
46- } else {
47- int height = 0 ;
48- for (int i = 0 ; i <= index; i++) {
49- height += (visualItemSize (i).height () + itemSpacing);
50- }
51- return QSize (m_dockHeight, (!includeLastSpacing && index > 0 ) ? (height - itemSpacing) : height);
52- }
53- }
54-
55- DropIndex TrayItemPositionManager::itemIndexByPoint (const QPoint point) const
56- {
57- if (m_orientation == Qt::Horizontal) {
58- int pos = point.x ();
59- int width = 0 ;
60- for (int i = 0 ; i < m_visualItemCount; i++) {
61- int visualWidth = visualItemSize (i).width ();
62- if (pos < (width + visualWidth + itemSpacing)) {
63- pos -= width;
64- return DropIndex {
65- .index = i,
66- .isOnItem = pos <= visualWidth,
67- .isBefore = pos < (visualWidth / 2 )
68- };
69- }
70- width += (visualWidth + itemSpacing);
71- }
72- return DropIndex { .index = m_visualItemCount - 1 };
73- } else {
74- int pos = point.y ();
75- int height = 0 ;
76- for (int i = 0 ; i <= m_visualItemCount; i++) {
77- int visualHeight = visualItemSize (i).height ();
78- if (pos < (height + visualHeight + itemSpacing)) {
79- pos -= height;
80- return DropIndex {
81- .index = i,
82- .isOnItem = pos <= visualHeight,
83- .isBefore = pos < (visualHeight / 2 )
84- };
85- }
86- height += (visualHeight + itemSpacing);
87- }
88- return DropIndex { .index = m_visualItemCount - 1 };
89- }
90- }
91-
9218Qt::Orientation TrayItemPositionManager::orientation () const
9319{
9420 return m_orientation;
@@ -99,49 +25,12 @@ int TrayItemPositionManager::dockHeight() const
9925 return m_dockHeight;
10026}
10127
102- // This should only be used to check layout issue or workaround layout issues.
103- // Do NOT rely on this to correct layout issue in a long run!
104- void TrayItemPositionManager::layoutHealthCheck (int delayMs)
105- {
106- QTimer::singleShot (delayMs, [this ](){
107- if (m_dockHeight == 0 ) {
108- qWarning () << " dock height is not valid, aborting layout health check..." ;
109- return ;
110- }
111- QSize result (visualSize (m_visualItemCount - 1 , false ));
112- if (m_visualSize != result) {
113- qWarning () << " layout size not matched, will trigger a force re-layout..." ;
114- emit orientationChanged (m_orientation);
115- } else {
116- qDebug () << " no problem founded while performing layout health check!" ;
117- }
118- });
119- qDebug () << " layout health check scheduled!" ;
120- }
121-
12228TrayItemPositionManager::TrayItemPositionManager (QObject *parent)
12329 : QObject(parent)
12430{
12531 m_itemSpacing = itemSpacing;
12632 m_itemPadding = itemPadding;
12733 m_itemVisualSize = itemVisualSize;
128-
129- connect (this , &TrayItemPositionManager::visualItemCountChanged,
130- this , &TrayItemPositionManager::updateVisualSize);
131- connect (this , &TrayItemPositionManager::dockHeightChanged,
132- this , &TrayItemPositionManager::updateVisualSize);
133- connect (this , &TrayItemPositionManager::orientationChanged,
134- this , &TrayItemPositionManager::updateVisualSize);
135- connect (this , &TrayItemPositionManager::visualItemSizeChanged,
136- this , &TrayItemPositionManager::updateVisualSize);
137- }
138-
139- void TrayItemPositionManager::updateVisualSize ()
140- {
141- if (m_dockHeight == 0 ) return ;
142- QSize result (visualSize (m_visualItemCount - 1 , false ));
143- qDebug () << " updateVisualSize()" << m_dockHeight << result;
144- setProperty (" visualSize" , result);
14534}
14635
14736}
0 commit comments