xref: /aosp_15_r20/system/teeui/libteeui/example/example_utils.h (revision 20bfefbe1966c142a35ae1ab84a8af250b3fd403)
1*20bfefbeSAndroid Build Coastguard Worker /*
2*20bfefbeSAndroid Build Coastguard Worker  *
3*20bfefbeSAndroid Build Coastguard Worker  * Copyright 2019, The Android Open Source Project
4*20bfefbeSAndroid Build Coastguard Worker  *
5*20bfefbeSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*20bfefbeSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*20bfefbeSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*20bfefbeSAndroid Build Coastguard Worker  *
9*20bfefbeSAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*20bfefbeSAndroid Build Coastguard Worker  *
11*20bfefbeSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*20bfefbeSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*20bfefbeSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*20bfefbeSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*20bfefbeSAndroid Build Coastguard Worker  * limitations under the License.
16*20bfefbeSAndroid Build Coastguard Worker  */
17*20bfefbeSAndroid Build Coastguard Worker 
18*20bfefbeSAndroid Build Coastguard Worker #pragma once
19*20bfefbeSAndroid Build Coastguard Worker 
20*20bfefbeSAndroid Build Coastguard Worker #include <stddef.h>
21*20bfefbeSAndroid Build Coastguard Worker 
22*20bfefbeSAndroid Build Coastguard Worker #include <teeui/label.h>
23*20bfefbeSAndroid Build Coastguard Worker 
24*20bfefbeSAndroid Build Coastguard Worker namespace teeui {
25*20bfefbeSAndroid Build Coastguard Worker namespace example {
26*20bfefbeSAndroid Build Coastguard Worker 
27*20bfefbeSAndroid Build Coastguard Worker /*
28*20bfefbeSAndroid Build Coastguard Worker  * AOSP color scheme constants.
29*20bfefbeSAndroid Build Coastguard Worker  */
30*20bfefbeSAndroid Build Coastguard Worker constexpr static const Color kShieldColor = Color(0xff778500);
31*20bfefbeSAndroid Build Coastguard Worker constexpr static const Color kShieldColorInv = Color(0xffc4cb80);
32*20bfefbeSAndroid Build Coastguard Worker constexpr static const Color kTextColor = Color(0xff212121);
33*20bfefbeSAndroid Build Coastguard Worker constexpr static const Color kTextColorInv = Color(0xffdedede);
34*20bfefbeSAndroid Build Coastguard Worker constexpr static const Color kBackGroundColor = Color(0xffffffff);
35*20bfefbeSAndroid Build Coastguard Worker constexpr static const Color kBackGroundColorInv = Color(0xff212121);
36*20bfefbeSAndroid Build Coastguard Worker 
37*20bfefbeSAndroid Build Coastguard Worker uint32_t alfaCombineChannel(uint32_t shift, double alfa, uint32_t a, uint32_t b);
38*20bfefbeSAndroid Build Coastguard Worker 
renderPixel(uint32_t x,uint32_t y,const T & e)39*20bfefbeSAndroid Build Coastguard Worker template <typename T> uint32_t renderPixel(uint32_t x, uint32_t y, const T& e) {
40*20bfefbeSAndroid Build Coastguard Worker     return e.bounds_.drawPoint(Point<pxs>(x, y));
41*20bfefbeSAndroid Build Coastguard Worker }
42*20bfefbeSAndroid Build Coastguard Worker 
43*20bfefbeSAndroid Build Coastguard Worker struct FrameBuffer {
44*20bfefbeSAndroid Build Coastguard Worker     uint32_t left_;
45*20bfefbeSAndroid Build Coastguard Worker     uint32_t top_;
46*20bfefbeSAndroid Build Coastguard Worker     uint32_t width_;
47*20bfefbeSAndroid Build Coastguard Worker     uint32_t height_;
48*20bfefbeSAndroid Build Coastguard Worker     uint32_t* buffer_;
49*20bfefbeSAndroid Build Coastguard Worker     size_t size_in_elements_;
50*20bfefbeSAndroid Build Coastguard Worker     uint32_t lineStride_;
51*20bfefbeSAndroid Build Coastguard Worker 
52*20bfefbeSAndroid Build Coastguard Worker     Error drawPixel(uint32_t x, uint32_t y, uint32_t color) const;
53*20bfefbeSAndroid Build Coastguard Worker };
54*20bfefbeSAndroid Build Coastguard Worker 
55*20bfefbeSAndroid Build Coastguard Worker template <typename... Elements>
drawElements(std::tuple<Elements...> & layout,const PixelDrawer & drawPixel)56*20bfefbeSAndroid Build Coastguard Worker Error drawElements(std::tuple<Elements...>& layout, const PixelDrawer& drawPixel) {
57*20bfefbeSAndroid Build Coastguard Worker     // Error::operator|| is overloaded, so we don't get short circuit evaluation.
58*20bfefbeSAndroid Build Coastguard Worker     // But we get the first error that occurs. We will still try and draw the remaining
59*20bfefbeSAndroid Build Coastguard Worker     // elements in the order they appear in the layout tuple.
60*20bfefbeSAndroid Build Coastguard Worker     return (std::get<Elements>(layout).draw(drawPixel) || ...);
61*20bfefbeSAndroid Build Coastguard Worker }
62*20bfefbeSAndroid Build Coastguard Worker 
63*20bfefbeSAndroid Build Coastguard Worker template <typename... Elements>
handleAllEvent(std::tuple<Elements...> & layout,const Event & event)64*20bfefbeSAndroid Build Coastguard Worker Error handleAllEvent(std::tuple<Elements...>& layout, const Event& event) {
65*20bfefbeSAndroid Build Coastguard Worker     return (std::get<Elements>(layout).hit(event) || ...);
66*20bfefbeSAndroid Build Coastguard Worker }
67*20bfefbeSAndroid Build Coastguard Worker 
68*20bfefbeSAndroid Build Coastguard Worker void translate(LabelImpl* label);
69*20bfefbeSAndroid Build Coastguard Worker 
translateLabel(Layout * layout)70*20bfefbeSAndroid Build Coastguard Worker template <typename T, typename Layout> void translateLabel(Layout* layout) {
71*20bfefbeSAndroid Build Coastguard Worker     translate(&std::get<T>(*layout));
72*20bfefbeSAndroid Build Coastguard Worker }
73*20bfefbeSAndroid Build Coastguard Worker }  // namespace example
74*20bfefbeSAndroid Build Coastguard Worker }  // namespace teeui