aboutsummaryrefslogtreecommitdiffstats
path: root/windowmanager/src/windowmanager.hpp
blob: 7a9b297f8e53c18ab3e9afa72053ecc783863a2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef WINDOWMANAGER_HPP
#define WINDOWMANAGER_HPP

#include <QObject>
#include <QList>
#include <QMap>

#include "windowmanager_adaptor.h"

#ifdef HAVE_IVI_LAYERMANAGEMENT_API
#include <ilm/ilm_control.h>
#endif
class WindowManager : public QObject
{
    Q_OBJECT

public:
    explicit WindowManager(int displayId, QObject *parent = 0);
    ~WindowManager();

    void start();
private:
    WindowmanagerAdaptor *mp_windowManagerAdaptor;
    QList<Layout> m_layouts;
    QMap<int, unsigned int> *mp_layoutAreaToSurfaceIdAssignment;

    int m_currentLayout;

    int m_screenId;
    unsigned int m_screenWidth;
    unsigned int m_screenHeight;

    void dumpScene();

#ifdef HAVE_IVI_LAYERMANAGEMENT_API
    t_ilm_layer* m_showLayers;
    QMap<pid_t, t_ilm_surface> m_appSurfaces;
    QMap<pid_t, t_ilm_layer> m_appLayers;
    int getLayerRenderOrder(t_ilm_layer* id_array);

    void createNewLayer(const int layerId);

    t_ilm_layer getAppLayerID(const pid_t pid);

    pid_t m_pending_to_show;

    void addSurface(const t_ilm_surface surfaceId);
    t_ilm_layer addSurfaceToAppLayer(pid_t pid, const int surfaceId);
    void addSurfaceToLayer(const int surfaceId, const int layerId);

    void configureHomeScreenMainSurface(const t_ilm_surface surface, const t_ilm_int width, const t_ilm_int height);
    void configureAppSurface(const pid_t pid, const t_ilm_surface surface, const t_ilm_int width, const t_ilm_int height);
    void renderLayers();

#if !defined(NO_PROCESS_GROUP) || !defined(NO_PROCESS_SESSION)
    bool otherPids(pid_t pid, pid_t &gpid, pid_t &spid);
    pid_t surfPid2AppPid(pid_t pid);
#endif
#endif
    void updateScreen();


public:
    static void* myThis;

#ifdef HAVE_IVI_LAYERMANAGEMENT_API
    // for general notifications
    void notificationFunc_non_static(ilmObjectType object,
                                        t_ilm_uint id,
                                        t_ilm_bool created);
    static void notificationFunc_static(ilmObjectType object,
                                        t_ilm_uint id,
                                        t_ilm_bool created,
                                        void* user_data);


    // for surface notifications
    void surfaceCallbackFunction_non_static(t_ilm_surface surface,
                                        struct ilmSurfaceProperties* surfaceProperties,
                                        t_ilm_notification_mask mask);
    static void surfaceCallbackFunction_static(t_ilm_surface surface,
                                        struct ilmSurfaceProperties* surfaceProperties,
                                        t_ilm_notification_mask mask);

#endif
public slots:


// from windowmanager_adaptor.h
public: // PROPERTIES
    Q_PROPERTY(int layoutId READ layoutId)
    int layoutId() const;

    Q_PROPERTY(QString layoutName READ layoutName)
    QString layoutName() const;

public Q_SLOTS: // METHODS
    int addLayout(int layoutId, const QString &layoutName, const QList<LayoutArea> &surfaceAreas);
    int deleteLayoutById(int layoutId);
    QList<Layout> getAllLayouts();
  //    QList<int> getAllSurfacesOfProcess(int pid);
    QList<int> getAvailableLayouts(int numberOfAppSurfaces);
  //    QList<int> getAvailableSurfaces();
    QString getLayoutName(int layoutId);
    void hideLayer(int layer);
    int setLayoutById(int layoutId);
    int setLayoutByName(const QString &layoutName);
    int setSurfaceToLayoutArea(int surfaceId, int layoutAreaId);
    void showLayer(int layer);
    void showAppLayer(int pid);

Q_SIGNALS: // SIGNALS
    void surfaceVisibilityChanged(int surfaceId, bool visible);
};

#endif // WINDOWMANAGER_HPP