1*20bfefbeSAndroid Build Coastguard Worker /*
2*20bfefbeSAndroid Build Coastguard Worker * Copyright 2020, The Android Open Source Project
3*20bfefbeSAndroid Build Coastguard Worker *
4*20bfefbeSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*20bfefbeSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*20bfefbeSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*20bfefbeSAndroid Build Coastguard Worker *
8*20bfefbeSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*20bfefbeSAndroid Build Coastguard Worker *
10*20bfefbeSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*20bfefbeSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*20bfefbeSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*20bfefbeSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*20bfefbeSAndroid Build Coastguard Worker * limitations under the License.
15*20bfefbeSAndroid Build Coastguard Worker */
16*20bfefbeSAndroid Build Coastguard Worker
17*20bfefbeSAndroid Build Coastguard Worker #include <stddef.h>
18*20bfefbeSAndroid Build Coastguard Worker
19*20bfefbeSAndroid Build Coastguard Worker #include <teeui/label.h>
20*20bfefbeSAndroid Build Coastguard Worker #include <teeui/localization/ConfirmationUITranslations.h>
21*20bfefbeSAndroid Build Coastguard Worker
22*20bfefbeSAndroid Build Coastguard Worker #include "example_utils.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
alfaCombineChannel(uint32_t shift,double alfa,uint32_t a,uint32_t b)27*20bfefbeSAndroid Build Coastguard Worker uint32_t alfaCombineChannel(uint32_t shift, double alfa, uint32_t a, uint32_t b) {
28*20bfefbeSAndroid Build Coastguard Worker a >>= shift;
29*20bfefbeSAndroid Build Coastguard Worker a &= 0xff;
30*20bfefbeSAndroid Build Coastguard Worker b >>= shift;
31*20bfefbeSAndroid Build Coastguard Worker b &= 0xff;
32*20bfefbeSAndroid Build Coastguard Worker double acc = alfa * a + (1 - alfa) * b;
33*20bfefbeSAndroid Build Coastguard Worker if (acc <= 0) return 0;
34*20bfefbeSAndroid Build Coastguard Worker uint32_t result = acc;
35*20bfefbeSAndroid Build Coastguard Worker if (result > 255) return 255 << shift;
36*20bfefbeSAndroid Build Coastguard Worker return result << shift;
37*20bfefbeSAndroid Build Coastguard Worker }
38*20bfefbeSAndroid Build Coastguard Worker
drawPixel(uint32_t x,uint32_t y,uint32_t color) const39*20bfefbeSAndroid Build Coastguard Worker Error FrameBuffer::drawPixel(uint32_t x, uint32_t y, uint32_t color) const {
40*20bfefbeSAndroid Build Coastguard Worker size_t pos = (top_ + y) * lineStride_ + x + left_;
41*20bfefbeSAndroid Build Coastguard Worker if (pos >= size_in_elements_) {
42*20bfefbeSAndroid Build Coastguard Worker return Error::OutOfBoundsDrawing;
43*20bfefbeSAndroid Build Coastguard Worker }
44*20bfefbeSAndroid Build Coastguard Worker double alfa = (color & 0xff000000) >> 24;
45*20bfefbeSAndroid Build Coastguard Worker alfa /= 255.0;
46*20bfefbeSAndroid Build Coastguard Worker auto acc = buffer_[pos];
47*20bfefbeSAndroid Build Coastguard Worker buffer_[pos] = alfaCombineChannel(0, alfa, color, acc) |
48*20bfefbeSAndroid Build Coastguard Worker alfaCombineChannel(8, alfa, color, acc) |
49*20bfefbeSAndroid Build Coastguard Worker alfaCombineChannel(16, alfa, color, acc);
50*20bfefbeSAndroid Build Coastguard Worker return Error::OK;
51*20bfefbeSAndroid Build Coastguard Worker }
52*20bfefbeSAndroid Build Coastguard Worker
translate(LabelImpl * label)53*20bfefbeSAndroid Build Coastguard Worker void translate(LabelImpl* label) {
54*20bfefbeSAndroid Build Coastguard Worker uint64_t textId = label->textId();
55*20bfefbeSAndroid Build Coastguard Worker const char* translation =
56*20bfefbeSAndroid Build Coastguard Worker localization::lookup(static_cast<localization::TranslationId>(textId));
57*20bfefbeSAndroid Build Coastguard Worker label->setText({&translation[0], &translation[strlen(translation)]});
58*20bfefbeSAndroid Build Coastguard Worker }
59*20bfefbeSAndroid Build Coastguard Worker
60*20bfefbeSAndroid Build Coastguard Worker } // namespace example
61*20bfefbeSAndroid Build Coastguard Worker } // namespace teeui