summaryrefslogtreecommitdiffstats
path: root/minui/resources.cpp
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-09-29 10:44:09 +0200
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-09-29 10:44:09 +0200
commit327dd7875ea9663c97ae3c0fed2eb21fece6e199 (patch)
treecf230368696562e4ccb25a830a3071d32fd5e8f7 /minui/resources.cpp
parentrelease-request-ccf2fffc-f042-4ff3-9aa0-53d7f927fbf8-for-git_pi-release-4362679 snap-temp-L24900000106498589 (diff)
parentMerge "Add a new option in recovery menu to test the background texts" am: 4c7608f3ca am: 8874d3c309 am: 5e969aa10d (diff)
downloadandroid_bootable_recovery-327dd7875ea9663c97ae3c0fed2eb21fece6e199.tar
android_bootable_recovery-327dd7875ea9663c97ae3c0fed2eb21fece6e199.tar.gz
android_bootable_recovery-327dd7875ea9663c97ae3c0fed2eb21fece6e199.tar.bz2
android_bootable_recovery-327dd7875ea9663c97ae3c0fed2eb21fece6e199.tar.lz
android_bootable_recovery-327dd7875ea9663c97ae3c0fed2eb21fece6e199.tar.xz
android_bootable_recovery-327dd7875ea9663c97ae3c0fed2eb21fece6e199.tar.zst
android_bootable_recovery-327dd7875ea9663c97ae3c0fed2eb21fece6e199.zip
Diffstat (limited to 'minui/resources.cpp')
-rw-r--r--minui/resources.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/minui/resources.cpp b/minui/resources.cpp
index 8f8d36d27..756f29d21 100644
--- a/minui/resources.cpp
+++ b/minui/resources.cpp
@@ -396,6 +396,41 @@ bool matches_locale(const std::string& prefix, const std::string& locale) {
return std::regex_match(locale, loc_regex);
}
+std::vector<std::string> get_locales_in_png(const std::string& png_name) {
+ png_structp png_ptr = nullptr;
+ png_infop info_ptr = nullptr;
+ png_uint_32 width, height;
+ png_byte channels;
+
+ int status = open_png(png_name.c_str(), &png_ptr, &info_ptr, &width, &height, &channels);
+ if (status < 0) {
+ printf("Failed to open %s\n", png_name.c_str());
+ return {};
+ }
+ if (channels != 1) {
+ printf("Expect input png to have 1 data channel, this file has %d\n", channels);
+ png_destroy_read_struct(&png_ptr, &info_ptr, nullptr);
+ return {};
+ }
+
+ std::vector<std::string> result;
+ std::vector<unsigned char> row(width);
+ for (png_uint_32 y = 0; y < height; ++y) {
+ png_read_row(png_ptr, row.data(), nullptr);
+ int h = (row[3] << 8) | row[2];
+ std::string loc(reinterpret_cast<char*>(&row[5]));
+ if (!loc.empty()) {
+ result.push_back(loc);
+ }
+ for (int i = 0; i < h; ++i, ++y) {
+ png_read_row(png_ptr, row.data(), NULL);
+ }
+ }
+
+ png_destroy_read_struct(&png_ptr, &info_ptr, nullptr);
+ return result;
+}
+
int res_create_localized_alpha_surface(const char* name,
const char* locale,
GRSurface** pSurface) {