summaryrefslogtreecommitdiffstats
path: root/minui/resources.cpp
diff options
context:
space:
mode:
authorTianjie Xu <xunchang@google.com>2017-09-27 19:45:01 +0200
committerandroid-build-merger <android-build-merger@google.com>2017-09-27 19:45:01 +0200
commit8874d3c3095a87ad546b7a7c84a7fa17c35a5f3a (patch)
tree4ce018893e091c21392e022432a50b4a84eb79cd /minui/resources.cpp
parentMerge "clang-format: Remove the override of PenaltyExcessCharacter." (diff)
parentMerge "Add a new option in recovery menu to test the background texts" (diff)
downloadandroid_bootable_recovery-8874d3c3095a87ad546b7a7c84a7fa17c35a5f3a.tar
android_bootable_recovery-8874d3c3095a87ad546b7a7c84a7fa17c35a5f3a.tar.gz
android_bootable_recovery-8874d3c3095a87ad546b7a7c84a7fa17c35a5f3a.tar.bz2
android_bootable_recovery-8874d3c3095a87ad546b7a7c84a7fa17c35a5f3a.tar.lz
android_bootable_recovery-8874d3c3095a87ad546b7a7c84a7fa17c35a5f3a.tar.xz
android_bootable_recovery-8874d3c3095a87ad546b7a7c84a7fa17c35a5f3a.tar.zst
android_bootable_recovery-8874d3c3095a87ad546b7a7c84a7fa17c35a5f3a.zip
Diffstat (limited to '')
-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) {