~dandrader/qtmir/surfaceItemFillMode

« back to all changes in this revision

Viewing changes to tests/modules/common/fake_mirsurface.h

  • Committer: CI Train Bot
  • Author(s): Nick Dedekind
  • Date: 2015-11-02 11:22:11 UTC
  • mfrom: (375.2.18 qtmir)
  • Revision ID: ci-train-bot@canonical.com-20151102112211-vo9a70y8fmujj59y
Support server->client visibility change to stop rendering (lp:#1475678) Fixes: #1475678
Approved by: Daniel d'Andrada

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 
22
22
#include <QSharedPointer>
23
23
#include <QSGTexture>
 
24
#include <QPointer>
24
25
 
25
26
namespace qtmir {
26
27
 
56
57
        , m_live(true)
57
58
        , m_state(Mir::RestoredState)
58
59
        , m_orientationAngle(Mir::Angle0)
59
 
        , m_viewCount(0)
 
60
        , m_visible(true)
60
61
        , m_focused(false)
61
62
    {}
62
63
 
87
88
 
88
89
    bool live() const override { return m_live; }
89
90
 
 
91
    bool visible() const override { return m_visible; }
 
92
 
90
93
    Mir::OrientationAngle orientationAngle() const override { return m_orientationAngle; }
91
94
    void setOrientationAngle(Mir::OrientationAngle angle) override {
92
95
        if (m_orientationAngle != angle) {
116
119
        }
117
120
    }
118
121
 
119
 
    bool isBeingDisplayed() const override { return m_viewCount > 0; }
120
 
    void incrementViewCount() override {
121
 
        ++m_viewCount;
122
 
        if (m_viewCount == 1) {
123
 
            Q_EMIT isBeingDisplayedChanged();
124
 
        }
125
 
    }
126
 
    void decrementViewCount() override {
127
 
        --m_viewCount;
128
 
        if (m_viewCount == 0) {
129
 
            Q_EMIT isBeingDisplayedChanged();
130
 
        }
 
122
    void setViewVisibility(qintptr viewId, bool visible) override {
 
123
        if (!m_views.contains(viewId)) return;
 
124
 
 
125
        m_views[viewId] = visible;
 
126
        updateVisibility();
 
127
    }
 
128
 
 
129
    bool isBeingDisplayed() const override { return !m_views.isEmpty(); }
 
130
 
 
131
    void registerView(qintptr viewId) override {
 
132
        m_views.insert(viewId, false);
 
133
        if (m_views.count() == 1) {
 
134
            Q_EMIT isBeingDisplayedChanged();
 
135
        }
 
136
    }
 
137
 
 
138
    void unregisterView(qintptr viewId) override {
 
139
        m_views.remove(viewId);
 
140
        if (m_views.count() == 0) {
 
141
            Q_EMIT isBeingDisplayedChanged();
 
142
        }
 
143
        updateVisibility();
131
144
    }
132
145
 
133
146
    // methods called from the rendering (scene graph) thread:
182
195
    QList<TouchEvent> &touchesReceived() { return m_touchesReceived; }
183
196
 
184
197
private:
 
198
    void updateVisibility() {
 
199
        bool newVisible = false;
 
200
        QHashIterator<int, bool> i(m_views);
 
201
        while (i.hasNext()) {
 
202
            i.next();
 
203
            newVisible |= i.value();
 
204
        }
 
205
 
 
206
        if (m_visible != newVisible) {
 
207
            m_visible = newVisible;
 
208
            Q_EMIT visibleChanged(newVisible);
 
209
        }
 
210
    }
 
211
 
185
212
 
186
213
    bool m_isFirstFrameDrawn;
187
214
    SessionInterface *m_session;
189
216
    bool m_live;
190
217
    Mir::State m_state;
191
218
    Mir::OrientationAngle m_orientationAngle;
 
219
    bool m_visible;
192
220
    QSize m_size;
193
 
    int m_viewCount;
 
221
    QHash<int, bool> m_views;
194
222
    bool m_focused;
195
223
 
196
224
    QList<TouchEvent> m_touchesReceived;