xref: /aosp_15_r20/bootable/recovery/minui/include/private/resources.h (revision e7c364b630b241adcb6c7726a21055250b91fdac)
1*e7c364b6SAndroid Build Coastguard Worker /*
2*e7c364b6SAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*e7c364b6SAndroid Build Coastguard Worker  *
4*e7c364b6SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*e7c364b6SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*e7c364b6SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*e7c364b6SAndroid Build Coastguard Worker  *
8*e7c364b6SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*e7c364b6SAndroid Build Coastguard Worker  *
10*e7c364b6SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*e7c364b6SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*e7c364b6SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e7c364b6SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*e7c364b6SAndroid Build Coastguard Worker  * limitations under the License.
15*e7c364b6SAndroid Build Coastguard Worker  */
16*e7c364b6SAndroid Build Coastguard Worker 
17*e7c364b6SAndroid Build Coastguard Worker #pragma once
18*e7c364b6SAndroid Build Coastguard Worker 
19*e7c364b6SAndroid Build Coastguard Worker #include <stdio.h>
20*e7c364b6SAndroid Build Coastguard Worker 
21*e7c364b6SAndroid Build Coastguard Worker #include <memory>
22*e7c364b6SAndroid Build Coastguard Worker #include <string>
23*e7c364b6SAndroid Build Coastguard Worker 
24*e7c364b6SAndroid Build Coastguard Worker #include <png.h>
25*e7c364b6SAndroid Build Coastguard Worker 
26*e7c364b6SAndroid Build Coastguard Worker // This class handles the PNG file parsing. It also holds the ownership of the PNG pointer and the
27*e7c364b6SAndroid Build Coastguard Worker // opened file pointer. Both will be destroyed / closed when this object goes out of scope.
28*e7c364b6SAndroid Build Coastguard Worker class PngHandler {
29*e7c364b6SAndroid Build Coastguard Worker  public:
30*e7c364b6SAndroid Build Coastguard Worker   // Constructs an instance by loading the PNG file from '/res/images/<name>.png', or '<name>'.
31*e7c364b6SAndroid Build Coastguard Worker   PngHandler(const std::string& name);
32*e7c364b6SAndroid Build Coastguard Worker 
33*e7c364b6SAndroid Build Coastguard Worker   ~PngHandler();
34*e7c364b6SAndroid Build Coastguard Worker 
width()35*e7c364b6SAndroid Build Coastguard Worker   png_uint_32 width() const {
36*e7c364b6SAndroid Build Coastguard Worker     return width_;
37*e7c364b6SAndroid Build Coastguard Worker   }
38*e7c364b6SAndroid Build Coastguard Worker 
height()39*e7c364b6SAndroid Build Coastguard Worker   png_uint_32 height() const {
40*e7c364b6SAndroid Build Coastguard Worker     return height_;
41*e7c364b6SAndroid Build Coastguard Worker   }
42*e7c364b6SAndroid Build Coastguard Worker 
channels()43*e7c364b6SAndroid Build Coastguard Worker   png_byte channels() const {
44*e7c364b6SAndroid Build Coastguard Worker     return channels_;
45*e7c364b6SAndroid Build Coastguard Worker   }
46*e7c364b6SAndroid Build Coastguard Worker 
bit_depth()47*e7c364b6SAndroid Build Coastguard Worker   int bit_depth() const {
48*e7c364b6SAndroid Build Coastguard Worker     return bit_depth_;
49*e7c364b6SAndroid Build Coastguard Worker   }
50*e7c364b6SAndroid Build Coastguard Worker 
color_type()51*e7c364b6SAndroid Build Coastguard Worker   int color_type() const {
52*e7c364b6SAndroid Build Coastguard Worker     return color_type_;
53*e7c364b6SAndroid Build Coastguard Worker   }
54*e7c364b6SAndroid Build Coastguard Worker 
png_ptr()55*e7c364b6SAndroid Build Coastguard Worker   png_structp png_ptr() const {
56*e7c364b6SAndroid Build Coastguard Worker     return png_ptr_;
57*e7c364b6SAndroid Build Coastguard Worker   }
58*e7c364b6SAndroid Build Coastguard Worker 
info_ptr()59*e7c364b6SAndroid Build Coastguard Worker   png_infop info_ptr() const {
60*e7c364b6SAndroid Build Coastguard Worker     return info_ptr_;
61*e7c364b6SAndroid Build Coastguard Worker   }
62*e7c364b6SAndroid Build Coastguard Worker 
error_code()63*e7c364b6SAndroid Build Coastguard Worker   int error_code() const {
64*e7c364b6SAndroid Build Coastguard Worker     return error_code_;
65*e7c364b6SAndroid Build Coastguard Worker   };
66*e7c364b6SAndroid Build Coastguard Worker 
67*e7c364b6SAndroid Build Coastguard Worker   operator bool() const {
68*e7c364b6SAndroid Build Coastguard Worker     return error_code_ == 0;
69*e7c364b6SAndroid Build Coastguard Worker   }
70*e7c364b6SAndroid Build Coastguard Worker 
71*e7c364b6SAndroid Build Coastguard Worker  private:
72*e7c364b6SAndroid Build Coastguard Worker   png_structp png_ptr_{ nullptr };
73*e7c364b6SAndroid Build Coastguard Worker   png_infop info_ptr_{ nullptr };
74*e7c364b6SAndroid Build Coastguard Worker   png_uint_32 width_;
75*e7c364b6SAndroid Build Coastguard Worker   png_uint_32 height_;
76*e7c364b6SAndroid Build Coastguard Worker   png_byte channels_;
77*e7c364b6SAndroid Build Coastguard Worker   int bit_depth_;
78*e7c364b6SAndroid Build Coastguard Worker   int color_type_;
79*e7c364b6SAndroid Build Coastguard Worker 
80*e7c364b6SAndroid Build Coastguard Worker   // The |error_code_| is set to a negative value if an error occurs when opening the png file.
81*e7c364b6SAndroid Build Coastguard Worker   int error_code_{ 0 };
82*e7c364b6SAndroid Build Coastguard Worker   // After initialization, we'll keep the file pointer open before destruction of PngHandler.
83*e7c364b6SAndroid Build Coastguard Worker   std::unique_ptr<FILE, decltype(&fclose)> png_fp_{ nullptr, fclose };
84*e7c364b6SAndroid Build Coastguard Worker };
85*e7c364b6SAndroid Build Coastguard Worker 
86*e7c364b6SAndroid Build Coastguard Worker // Overrides the default resource dir, for testing purpose.
87*e7c364b6SAndroid Build Coastguard Worker void res_set_resource_dir(const std::string&);
88