/* * Copyright (C) 2016 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 #include #include #include "windowmanager_adaptor.h" #ifdef HAVE_IVI_LAYERMANAGEMENT_API #include #endif class WindowManager : public QObject { Q_OBJECT public: explicit WindowManager(int displayId, QObject *parent = 0); ~WindowManager(); void start(); private: WindowmanagerAdaptor *mp_windowManagerAdaptor; QList m_layouts; QMap *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 m_appSurfaces; QMap 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); #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 &surfaceAreas); int deleteLayoutById(int layoutId); QList getAllLayouts(); // QList getAllSurfacesOfProcess(int pid); QList getAvailableLayouts(int numberOfAppSurfaces); // QList 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