diff options
author | Tianjie Xu <xunchang@google.com> | 2017-09-27 19:39:05 +0200 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-09-27 19:39:05 +0200 |
commit | 4c7608f3cacfcb9e585e8bc254fb01eb5af40978 (patch) | |
tree | b245d108a23ee6d630fd30046e4eea84057f88f4 /minui/resources.cpp | |
parent | Merge "clang-format: Remove the override of PenaltyExcessCharacter." (diff) | |
parent | Add a new option in recovery menu to test the background texts (diff) | |
download | android_bootable_recovery-4c7608f3cacfcb9e585e8bc254fb01eb5af40978.tar android_bootable_recovery-4c7608f3cacfcb9e585e8bc254fb01eb5af40978.tar.gz android_bootable_recovery-4c7608f3cacfcb9e585e8bc254fb01eb5af40978.tar.bz2 android_bootable_recovery-4c7608f3cacfcb9e585e8bc254fb01eb5af40978.tar.lz android_bootable_recovery-4c7608f3cacfcb9e585e8bc254fb01eb5af40978.tar.xz android_bootable_recovery-4c7608f3cacfcb9e585e8bc254fb01eb5af40978.tar.zst android_bootable_recovery-4c7608f3cacfcb9e585e8bc254fb01eb5af40978.zip |
Diffstat (limited to 'minui/resources.cpp')
-rw-r--r-- | minui/resources.cpp | 35 |
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) { |