1/*
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef FRAMEWORKS_WM_TEST_ST_WINDOW_TEST_UTILS_H
17#define FRAMEWORKS_WM_TEST_ST_WINDOW_TEST_UTILS_H
18
19#include "pointer_event.h"
20#include "display_manager.h"
21#include "window.h"
22#include "window_layout_policy.h"
23#include "window_option.h"
24#include "window_scene.h"
25#include "wm_common.h"
26
27namespace OHOS {
28namespace Rosen {
29struct SplitRects {
30    Rect primaryRect;
31    Rect secondaryRect;
32    Rect dividerRect;
33};
34
35class WindowTestUtils {
36public:
37    struct TestWindowInfo {
38        std::string name;
39        Rect rect;
40        WindowType type;
41        WindowMode mode;
42        bool needAvoid;
43        bool parentLimit;
44        bool forbidSplitMove {false};
45        bool showWhenLocked;
46        uint32_t parentId;
47        bool focusable_ { true };
48        Orientation orientation_ { Orientation::UNSPECIFIED };
49    };
50    static Rect displayRect_;
51    static Rect limitDisplayRect_;
52    static Rect statusBarRect_;
53    static Rect naviBarRect_;
54    static Rect customAppRect_;
55    static Rect customAppDecoRect_;
56    static Rect dockWindowRect_;
57    static SplitRects splitRects_;
58    static bool isVerticalDisplay_;
59    static Rect singleTileRect_;
60    static std::vector<Rect> doubleTileRects_;
61    static std::vector<Rect> tripleTileRects_;
62    static AvoidArea systemAvoidArea_;
63
64    static void InitByDisplayRect(const Rect& displayRect);
65    static sptr<Window> CreateTestWindow(const TestWindowInfo& info);
66    static sptr<Window> CreateStatusBarWindow();
67    static sptr<Window> CreateNavigationBarWindow();
68    static sptr<Window> CreateDockWindow();
69    static sptr<WindowScene> CreateWindowScene();
70    static bool RectEqualTo(const sptr<Window>& window, const Rect& r);
71    static bool InitSplitRects();
72    static void UpdateSplitRects(const sptr<Window>& window);
73    static bool RectEqualToRect(const Rect& l, const Rect& r);
74    static Rect GetDefaultFloatingRect(const sptr<Window>& window, bool avoid);
75    static Rect CalcLimitedRect(const Rect& rect, float virtualPixelRatio);
76    static Rect GetDecorateRect(const Rect& rect, float virtualPixelRatio);
77    static Rect GetFloatingLimitedRect(const Rect& rect, float virtualPixelRatio);
78    static void InitTileWindowRects(const sptr<Window>& window, bool avoid);
79    static float GetVirtualPixelRatio(DisplayId displayId);
80    static std::shared_ptr<MMI::PointerEvent> CreatePointerEvent(int32_t posX, int32_t posY, uint32_t pointerId,
81        int32_t pointerAction);
82    static uint32_t GetMaxTileWinNum();
83
84private:
85    void UpdateLimitDisplayRect(const Rect& avoidRect);
86    static void UpdateLimitSplitRects(int32_t divPos);
87    static void UpdateLimitSplitRect(Rect& limitSplitRect);
88    static AvoidPosType GetAvoidPosType(const Rect& rect);
89    AvoidArea avoidArea_;
90};
91} // namespace ROSEN
92} // namespace OHOS
93#endif // FRAMEWORKS_WM_TEST_ST_WINDOW_TEST_UTILS_H
94