1 /*
2  * Copyright (c) 2020-2021 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 "ui_test_render.h"
17 
18 #include "common/screen.h"
19 
20 namespace OHOS {
SetUp()21 void UITestRender::SetUp()
22 {
23     if (container_ == nullptr) {
24         container_ = new UIScrollView();
25         container_->Resize(Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight() - BACK_BUTTON_HEIGHT);
26     }
27 }
28 
TearDown()29 void UITestRender::TearDown()
30 {
31     DeleteChildren(container_);
32     container_ = nullptr;
33 }
34 
GetTestView()35 const UIView* UITestRender::GetTestView()
36 {
37     UIKitRenderTestRender001();
38     UIKitRenderTestRenderMeasure001();
39     return container_;
40 }
41 
42 class TestRenderClickListener : public UIView::OnClickListener {
43 public:
OnClick(UIView & view,const ClickEvent & event)44     bool OnClick(UIView& view, const ClickEvent& event) override
45     {
46         static uint8_t r = 20;
47         static uint8_t g = 120;
48         static uint8_t b = 50;
49         view.SetStyle(STYLE_BACKGROUND_COLOR, Color::GetColorFromRGB(r, g, b).full);
50         view.Invalidate();
51 
52         r = r + 30; // 30: red add
53         g = g + 30; // 30: green add
54         b = b + 30; // 30: blue add
55         return true;
56     }
57 };
58 
CreateTestCaseGroup() const59 UIViewGroup* UITestRender::CreateTestCaseGroup() const
60 {
61     UIViewGroup* group = new UIViewGroup();
62     group->Resize(Screen::GetInstance().GetWidth(), 200); // 200: height
63     return group;
64 }
65 
CreateTitleLabel() const66 UILabel* UITestRender::CreateTitleLabel() const
67 {
68     UILabel* label = new UILabel();
69     // 216: label width
70     label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, TEXT_DISTANCE_TO_TOP_SIDE, 216, TITLE_LABEL_DEFAULT_HEIGHT);
71     label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
72     return label;
73 }
74 
UIKitRenderTestRender001()75 void UITestRender::UIKitRenderTestRender001()
76 {
77     if (container_ == nullptr) {
78         return;
79     }
80 
81     UIViewGroup* group = CreateTestCaseGroup();
82     group->SetViewId("UIKit_Render_Test_Render_001");
83     group->SetPosition(0, 0);
84 
85     UILabel* label = CreateTitleLabel();
86     group->Add(label);
87     label->SetText("UIKit绘制效果:");
88 
89     UIView* view = new UIView();
90     view->Resize(200, 50);     // 200: width 50: height
91     view->SetPosition(50, 50); // 50: position x 50: position y
92     view->SetStyle(STYLE_BACKGROUND_COLOR, Color::Yellow().full);
93     group->Add(view);
94     view->SetTouchable(true);
95     view->SetOnClickListener(new TestRenderClickListener());
96 
97     UIView* view1 = new UIView();
98     view1->Resize(100, 50);      // 100: width 50: height
99     view1->SetPosition(50, 120); // 50: position x 120: position y
100     view1->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
101     view1->SetTouchable(true);
102     view1->SetOnClickListener(new TestRenderClickListener());
103     group->Add(view1);
104     container_->Add(group);
105 }
106 
UIKitRenderTestRenderMeasure001()107 void UITestRender::UIKitRenderTestRenderMeasure001()
108 {
109     if (container_ == nullptr) {
110         return;
111     }
112 
113     UIViewGroup* group = CreateTestCaseGroup();
114     group->SetViewId("UIKit_Render_Test_RenderMeasure_001");
115     container_->Add(group);
116 
117     UILabel* label = CreateTitleLabel();
118     group->Add(label);
119     // 2: half of screen width
120     label->Resize(Screen::GetInstance().GetWidth() / 2, TITLE_LABEL_DEFAULT_HEIGHT);
121     label->SetText("UIKit绘制Measure效果:");
122 
123     testLabel_ = new UILabel();
124     group->Add(testLabel_);
125     testLabel_->SetPosition(VIEW_DISTANCE_TO_LEFT_SIDE, VIEW_DISTANCE_TO_TOP_SIDE);
126     testLabel_->Resize(150, 80); // 150: width 80: height
127     testLabel_->SetViewId("label_text");
128     testLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
129     testLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
130     testLabel_->SetText("示例文字,示例文字");
131 
132     labelButton_ = new UILabelButton();
133     group->Add(labelButton_);
134     labelButton_->Resize(BUTTON_WIDHT3, BUTTON_HEIGHT3);
135     labelButton_->SetText("更新label");
136     labelButton_->SetViewId(UI_TEST_RENDER_UPDATA_BUTTON_ID_01);
137     labelButton_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
138     labelButton_->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED);
139     labelButton_->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);
140     labelButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);
141     labelButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_PRESS, UIButton::PRESSED);
142     labelButton_->SetPosition(VIEW_DISTANCE_TO_LEFT_SIDE, VIEW_DISTANCE_TO_TOP_SIDE);
143     labelButton_->SetOnClickListener(this);
144     labelButton_->LayoutBottomToSibling("label_text"); // 10: offset
145 
146     group->LayoutBottomToSibling("UIKit_Render_Test_Render_001", 10); // 10: offset
147 }
148 
OnClick(UIView & view,const ClickEvent & event)149 bool UITestRender::OnClick(UIView& view, const ClickEvent& event)
150 {
151     if (&view == labelButton_) {
152         testLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 15); // 18: font size
153     }
154     return true;
155 }
156 } // namespace OHOS