1 /*
2  * Copyright (c) 2020-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 #include "main_widget.h"
17 #include <QMetaType>
18 
19 namespace OHOS {
MainWidget(QWidget * parent)20 MainWidget::MainWidget(QWidget* parent) : QWidget(parent), guiThread_(nullptr), taskThread_(nullptr)
21 {
22     if (ui_ != nullptr) {
23         ui_->setupUi(this);
24         CreateGUIThread();
25         CreateTaskThread();
26         CreateSocketThread();
27     }
28 }
29 
~MainWidget()30 MainWidget::~MainWidget()
31 {
32     if (ui_ != nullptr) {
33         delete ui_;
34     }
35     if (guiThread_ != nullptr) {
36         guiThread_->Quit();
37         guiThread_->wait();
38         delete guiThread_;
39     }
40     if (taskThread_ != nullptr) {
41         taskThread_->Quit();
42         taskThread_->wait();
43         delete taskThread_;
44     }
45     if (socketThread_ != nullptr) {
46         socketThread_->Quit();
47         socketThread_->wait();
48         delete socketThread_;
49     }
50 }
51 
CreateGUIThread()52 void MainWidget::CreateGUIThread()
53 {
54     guiThread_ = new GUIThread(nullptr);
55     if (guiThread_ != nullptr) {
56         guiThread_->start();
57         qRegisterMetaType<uint32_t>("uint32_t");
58         connect(guiThread_->GetMonitor(), SIGNAL(UpdatePaintSignal(uint32_t*, uint32_t, uint32_t)), this,
59                 SLOT(UpdatePaintSlot(uint32_t*, uint32_t, uint32_t)));
60     }
61 }
62 
CreateTaskThread()63 void MainWidget::CreateTaskThread()
64 {
65     taskThread_ = new TaskThread();
66     if (taskThread_ != nullptr) {
67         taskThread_->start();
68     }
69 }
70 
CreateSocketThread()71 void MainWidget::CreateSocketThread()
72 {
73     socketThread_ = new SocketThread();
74     if (socketThread_ != nullptr) {
75         socketThread_->start();
76         qRegisterMetaType<size_t>("size_t");
77         connect(socketThread_->GetClientManager(), SIGNAL(SendMsgSignal(size_t)), this,
78                 SLOT(SendMsgSlot(size_t)));
79     }
80 }
81 
paintEvent(QPaintEvent * event)82 void MainWidget::paintEvent(QPaintEvent* event)
83 {
84     Q_UNUSED(event)
85     QPainter painter(this);
86     painter.drawImage(0, 0, img_);
87 }
88 
mouseMoveEvent(QMouseEvent * event)89 void MainWidget::mouseMoveEvent(QMouseEvent* event)
90 {
91     MouseInput::GetInstance()->MouseHandler(event);
92 }
93 
mousePressEvent(QMouseEvent * event)94 void MainWidget::mousePressEvent(QMouseEvent* event)
95 {
96 #if USE_MOUSE != 0
97     MouseInput::GetInstance()->MouseHandler(event);
98 #endif
99 }
100 
mouseReleaseEvent(QMouseEvent * event)101 void MainWidget::mouseReleaseEvent(QMouseEvent* event)
102 {
103 #if USE_MOUSE != 0
104     MouseInput::GetInstance()->MouseHandler(event);
105 #endif
106 }
wheelEvent(QWheelEvent * event)107 void MainWidget::wheelEvent(QWheelEvent* event)
108 {
109 #if USE_MOUSEWHEEL && ENABLE_ROTATE_INPUT
110     MousewheelInput::GetInstance()->MousewheelHandler(event);
111 #endif
112 }
113 
keyPressEvent(QKeyEvent * event)114 void MainWidget::keyPressEvent(QKeyEvent* event)
115 {
116 #if USE_KEY != 0
117     KeyInput::GetInstance()->KeyHandler(event);
118 #endif
119 }
keyReleaseEvent(QKeyEvent * event)120 void MainWidget::keyReleaseEvent(QKeyEvent* event)
121 {
122 #if USE_KEY != 0
123     KeyInput::GetInstance()->KeyHandler(event);
124 #endif
125 }
126 } // namespace OHOS
127