From cca230055921d2df8708ed6f9abcc2d43468dc7f Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Fri, 8 Dec 2017 21:09:12 +0000 Subject: [PATCH] Revert "resources: remove most uses of GetResourcePath()" This reverts commit 5093a539def3ae09df324018f2343827009b2e05. Reason for revert: google3 seems broken Original change's description: > resources: remove most uses of GetResourcePath() > > Going forward, we will standardize on GetResourceAsData(), which will > make it easier to run tests in environments without access to the > filesystem. > > Also: GetResourceAsData() complains when a resource is missing. > This is usually an error. > > Change-Id: Iaf70b71b0ca5ed8cd1a5538a60ef185ae8736188 > Reviewed-on: https://skia-review.googlesource.com/82642 > Reviewed-by: Hal Canary > Commit-Queue: Hal Canary TBR=halcanary@google.com,scroggo@google.com Change-Id: Ic5a7c0167c995a672e6b06dc92abe00564432214 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://skia-review.googlesource.com/83001 Reviewed-by: Mike Reed Commit-Queue: Mike Reed --- bench/ColorCodecBench.cpp | 3 ++- dm/DM.cpp | 8 ++++-- dm/DMSrcSink.cpp | 3 ++- gm/makecolorspace.cpp | 3 ++- samplecode/SampleCowboy.cpp | 9 +++---- samplecode/SampleIdentityScale.cpp | 9 ++++--- samplecode/SampleSubpixelTranslate.cpp | 18 ++++++------- tests/CodecTest.cpp | 21 ++++++++-------- tests/ColorSpaceTest.cpp | 18 +++++++------ tests/GifTest.cpp | 8 +++--- tests/ICCTest.cpp | 18 +++++++------ tests/ImageIsOpaqueTest.cpp | 9 ++++--- tests/PDFJpegEmbedTest.cpp | 3 ++- tests/SerializationTest.cpp | 6 ++--- tools/Resources.cpp | 35 +++++++++++++++++--------- tools/Resources.h | 20 ++++----------- 16 files changed, 103 insertions(+), 88 deletions(-) diff --git a/bench/ColorCodecBench.cpp b/bench/ColorCodecBench.cpp index c38a8a712b..1239e1d4fe 100644 --- a/bench/ColorCodecBench.cpp +++ b/bench/ColorCodecBench.cpp @@ -74,7 +74,8 @@ void ColorCodecBench::onDelayedSetup() { matrix.set3x3(0.30f, 0.31f, 0.28f, 0.32f, 0.33f, 0.29f, 0.27f, 0.30f, 0.30f); fDstSpace = SkColorSpace::MakeRGB(gamma, matrix); } else { - sk_sp dstData = GetResourceAsData("icc_profiles/HP_ZR30w.icc"); + sk_sp dstData = SkData::MakeFromFileName( + GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); SkASSERT(dstData); fDstSpace = SkColorSpace::MakeICC(dstData->data(), dstData->size()); } diff --git a/dm/DM.cpp b/dm/DM.cpp index ebd2fe4b56..d2c127c133 100644 --- a/dm/DM.cpp +++ b/dm/DM.cpp @@ -1357,8 +1357,12 @@ int main(int argc, char** argv) { SkTaskGroup::Enabler enabled(FLAGS_threads); gCreateTypefaceDelegate = &create_from_name; - if (nullptr == GetResourceAsData("images/color_wheel.png")) { - info("Some resources are missing. Do you need to set --resourcePath?\n"); + { + SkString testResourcePath = GetResourcePath("images/color_wheel.png"); + SkFILEStream testResource(testResourcePath.c_str()); + if (!testResource.isValid()) { + info("Some resources are missing. Do you need to set --resourcePath?\n"); + } } gather_gold(); gather_uninteresting_hashes(); diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp index 96817e0749..89a4b531e2 100644 --- a/dm/DMSrcSink.cpp +++ b/dm/DMSrcSink.cpp @@ -1066,7 +1066,8 @@ Error ColorCodecSrc::draw(SkCanvas* canvas) const { } // Load the dst ICC profile. This particular dst is fairly similar to Adobe RGB. - sk_sp dstData = GetResourceAsData("icc_profiles/HP_ZR30w.icc"); + sk_sp dstData = SkData::MakeFromFileName( + GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); if (!dstData) { return "Cannot read monitor profile. Is the resource path set correctly?"; } diff --git a/gm/makecolorspace.cpp b/gm/makecolorspace.cpp index 1435c04120..c0002b3414 100644 --- a/gm/makecolorspace.cpp +++ b/gm/makecolorspace.cpp @@ -13,7 +13,8 @@ #include "SkImagePriv.h" sk_sp make_raster_image(const char* path, SkTransferFunctionBehavior behavior) { - sk_sp resourceData = GetResourceAsData(path); + SkString resourcePath = GetResourcePath(path); + sk_sp resourceData = SkData::MakeFromFileName(resourcePath.c_str()); std::unique_ptr codec = SkCodec::MakeFromData(resourceData); SkBitmap bitmap; diff --git a/samplecode/SampleCowboy.cpp b/samplecode/SampleCowboy.cpp index bd8f7c909b..b1eec87e50 100644 --- a/samplecode/SampleCowboy.cpp +++ b/samplecode/SampleCowboy.cpp @@ -37,13 +37,12 @@ protected: }; void onOnceBeforeDraw() override { - constexpr char path[] = "Cowboy.svg"; - auto data = GetResourceAsData(path); - if (!data) { - SkDebugf("file not found: \"%s\"\n", path); + fPath = GetResourcePath("Cowboy.svg"); + SkFILEStream svgStream(fPath.c_str()); + if (!svgStream.isValid()) { + SkDebugf("file not found: \"path\"\n", fPath.c_str()); return; } - SkMemoryStream svgStream(std::move(data)); SkDOM xmlDom; if (!xmlDom.build(svgStream)) { diff --git a/samplecode/SampleIdentityScale.cpp b/samplecode/SampleIdentityScale.cpp index ad235416cd..2ec9112800 100644 --- a/samplecode/SampleIdentityScale.cpp +++ b/samplecode/SampleIdentityScale.cpp @@ -25,10 +25,11 @@ class IdentityScaleView : public SampleView { public: IdentityScaleView(const char imageFilename[]) { - if (!DecodeDataToBitmap(GetResourceAsData(imageFilename), &fBM)) { - fBM.allocN32Pixels(1, 1); - *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad - } + SkString resourcePath = GetResourcePath(imageFilename); + if (!decode_file(resourcePath.c_str(), &fBM)) { + fBM.allocN32Pixels(1, 1); + *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad + } } protected: diff --git a/samplecode/SampleSubpixelTranslate.cpp b/samplecode/SampleSubpixelTranslate.cpp index 7ce1885892..51b5ef6631 100644 --- a/samplecode/SampleSubpixelTranslate.cpp +++ b/samplecode/SampleSubpixelTranslate.cpp @@ -24,15 +24,15 @@ public: SubpixelTranslateView(const char imageFilename[], float horizontalVelocity, float verticalVelocity) - : fHorizontalVelocity(horizontalVelocity) - , fVerticalVelocity(verticalVelocity) - { - if (!DecodeDataToBitmap(GetResourceAsData(imageFilename), &fBM)) { - fBM.allocN32Pixels(1, 1); - *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad - } - fCurPos = SkPoint::Make(0,0); - fSize = 200; + : fHorizontalVelocity(horizontalVelocity), + fVerticalVelocity(verticalVelocity) { + SkString resourcePath = GetResourcePath(imageFilename); + if (!decode_file(resourcePath.c_str(), &fBM)) { + fBM.allocN32Pixels(1, 1); + *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad + } + fCurPos = SkPoint::Make(0,0); + fSize = 200; } protected: diff --git a/tests/CodecTest.cpp b/tests/CodecTest.cpp index 787e8549fc..ab21e4a2c1 100644 --- a/tests/CodecTest.cpp +++ b/tests/CodecTest.cpp @@ -846,8 +846,9 @@ private: // Test that the RawCodec works also for not asset stream. This will test the code path using // SkRawBufferedStream instead of SkRawAssetStream. DEF_TEST(Codec_raw_notseekable, r) { - constexpr char path[] = "images/dng_with_preview.dng"; - sk_sp data(GetResourceAsData(path)); + const char* path = "images/dng_with_preview.dng"; + SkString fullPath(GetResourcePath(path)); + sk_sp data(SkData::MakeFromFileName(fullPath.c_str())); if (!data) { SkDebugf("Missing resource '%s'\n", path); return; @@ -864,8 +865,9 @@ DEF_TEST(Codec_raw_notseekable, r) { // Test that even if webp_parse_header fails to peek enough, it will fall back to read() // + rewind() and succeed. DEF_TEST(Codec_webp_peek, r) { - constexpr char path[] = "images/baby_tux.webp"; - auto data = GetResourceAsData(path); + const char* path = "images/baby_tux.webp"; + SkString fullPath(GetResourcePath(path)); + auto data = SkData::MakeFromFileName(fullPath.c_str()); if (!data) { SkDebugf("Missing resource '%s'\n", path); return; @@ -1001,7 +1003,8 @@ static void check_color_xform(skiatest::Reporter* r, const char* path) { const int dstWidth = subsetWidth / opts.fSampleSize; const int dstHeight = subsetHeight / opts.fSampleSize; - sk_sp data = GetResourceAsData("icc_profiles/HP_ZR30w.icc"); + sk_sp data = SkData::MakeFromFileName( + GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); sk_sp colorSpace = SkColorSpace::MakeICC(data->data(), data->size()); SkImageInfo dstInfo = codec->getInfo().makeWH(dstWidth, dstHeight) .makeColorType(kN32_SkColorType) @@ -1383,14 +1386,12 @@ DEF_TEST(Codec_InvalidImages, r) { } static void test_invalid_header(skiatest::Reporter* r, const char* path) { - auto data = GetResourceAsData(path); - if (!data) { - return; - } - std::unique_ptr stream(new SkMemoryStream(std::move(data))); + SkString resourcePath = GetResourcePath(path); + auto stream = SkFILEStream::Make(resourcePath.c_str()); if (!stream) { return; } + std::unique_ptr codec(SkCodec::MakeFromStream(std::move(stream))); REPORTER_ASSERT(r, !codec); } diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp index d180cda425..19e1044162 100644 --- a/tests/ColorSpaceTest.cpp +++ b/tests/ColorSpaceTest.cpp @@ -245,13 +245,14 @@ DEF_TEST(ColorSpace_Serialize, r) { test_serialize(r, SkColorSpace_Base::MakeNamed(SkColorSpace_Base::kAdobeRGB_Named).get(), true); test_serialize(r, SkColorSpace::MakeSRGBLinear().get(), true); - sk_sp monitorData = GetResourceAsData("icc_profiles/HP_ZR30w.icc"); + sk_sp monitorData = SkData::MakeFromFileName( + GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); test_serialize(r, SkColorSpace::MakeICC(monitorData->data(), monitorData->size()).get(), false); - monitorData = GetResourceAsData("icc_profiles/HP_Z32x.icc"); + monitorData = SkData::MakeFromFileName( GetResourcePath("icc_profiles/HP_Z32x.icc").c_str()); test_serialize(r, SkColorSpace::MakeICC(monitorData->data(), monitorData->size()).get(), false); - monitorData = GetResourceAsData("icc_profiles/upperLeft.icc"); + monitorData = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperLeft.icc").c_str()); test_serialize(r, SkColorSpace::MakeICC(monitorData->data(), monitorData->size()).get(), false); - monitorData = GetResourceAsData("icc_profiles/upperRight.icc"); + monitorData = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperRight.icc").c_str()); test_serialize(r, SkColorSpace::MakeICC(monitorData->data(), monitorData->size()).get(), false); SkColorSpaceTransferFn fn; @@ -269,13 +270,14 @@ DEF_TEST(ColorSpace_Serialize, r) { DEF_TEST(ColorSpace_Equals, r) { sk_sp srgb = SkColorSpace::MakeSRGB(); sk_sp adobe = SkColorSpace_Base::MakeNamed(SkColorSpace_Base::kAdobeRGB_Named); - sk_sp data = GetResourceAsData("icc_profiles/HP_ZR30w.icc"); + sk_sp data = SkData::MakeFromFileName( + GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); sk_sp z30 = SkColorSpace::MakeICC(data->data(), data->size()); - data = GetResourceAsData("icc_profiles/HP_Z32x.icc"); + data = SkData::MakeFromFileName( GetResourcePath("icc_profiles/HP_Z32x.icc").c_str()); sk_sp z32 = SkColorSpace::MakeICC(data->data(), data->size()); - data = GetResourceAsData("icc_profiles/upperLeft.icc"); + data = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperLeft.icc").c_str()); sk_sp upperLeft = SkColorSpace::MakeICC(data->data(), data->size()); - data = GetResourceAsData("icc_profiles/upperRight.icc"); + data = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperRight.icc").c_str()); sk_sp upperRight = SkColorSpace::MakeICC(data->data(), data->size()); SkColorSpaceTransferFn fn; diff --git a/tests/GifTest.cpp b/tests/GifTest.cpp index 0de5fc586d..5219825f1b 100644 --- a/tests/GifTest.cpp +++ b/tests/GifTest.cpp @@ -225,12 +225,12 @@ DEF_TEST(Gif, reporter) { // Regression test for decoding a gif image with sampleSize of 4, which was // previously crashing. DEF_TEST(Gif_Sampled, r) { - auto data = GetResourceAsData("images/test640x479.gif"); - REPORTER_ASSERT(r, data); - if (!data) { + auto stream = SkFILEStream::Make(GetResourcePath("images/test640x479.gif").c_str()); + REPORTER_ASSERT(r, stream); + if (!stream) { return; } - std::unique_ptr stream(new SkMemoryStream(std::move(data))); + std::unique_ptr codec(SkAndroidCodec::MakeFromStream(std::move(stream))); REPORTER_ASSERT(r, codec); if (!codec) { diff --git a/tests/ICCTest.cpp b/tests/ICCTest.cpp index 4933155148..4bff6546ef 100644 --- a/tests/ICCTest.cpp +++ b/tests/ICCTest.cpp @@ -39,7 +39,8 @@ DEF_TEST(ICC_ToXYZD50, r) { 0.74519f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, }; - sk_sp data = GetResourceAsData("icc_profiles/HP_ZR30w.icc"); + sk_sp data = SkData::MakeFromFileName( + GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); sk_sp z30 = SkICC::Make(data->data(), data->size()); test_to_xyz_d50(r, z30.get(), true, z30Reference); @@ -48,15 +49,15 @@ DEF_TEST(ICC_ToXYZD50, r) { 0.75368f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, }; - data = GetResourceAsData("icc_profiles/HP_Z32x.icc"); + data = SkData::MakeFromFileName( GetResourcePath("icc_profiles/HP_Z32x.icc").c_str()); sk_sp z32 = SkICC::Make(data->data(), data->size()); test_to_xyz_d50(r, z32.get(), true, z32Reference); - data = GetResourceAsData("icc_profiles/upperLeft.icc"); + data = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperLeft.icc").c_str()); sk_sp upperLeft = SkICC::Make(data->data(), data->size()); test_to_xyz_d50(r, upperLeft.get(), false, z32Reference); - data = GetResourceAsData("icc_profiles/upperRight.icc"); + data = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperRight.icc").c_str()); sk_sp upperRight = SkICC::Make(data->data(), data->size()); test_to_xyz_d50(r, upperRight.get(), false, z32Reference); } @@ -81,19 +82,20 @@ DEF_TEST(ICC_IsNumericalTransferFn, r) { referenceFn.fF = 0.0f; referenceFn.fG = 2.2f; - sk_sp data = GetResourceAsData("icc_profiles/HP_ZR30w.icc"); + sk_sp data = SkData::MakeFromFileName( + GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); sk_sp z30 = SkICC::Make(data->data(), data->size()); test_is_numerical_transfer_fn(r, z30.get(), true, referenceFn); - data = GetResourceAsData("icc_profiles/HP_Z32x.icc"); + data = SkData::MakeFromFileName( GetResourcePath("icc_profiles/HP_Z32x.icc").c_str()); sk_sp z32 = SkICC::Make(data->data(), data->size()); test_is_numerical_transfer_fn(r, z32.get(), true, referenceFn); - data = GetResourceAsData("icc_profiles/upperLeft.icc"); + data = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperLeft.icc").c_str()); sk_sp upperLeft = SkICC::Make(data->data(), data->size()); test_is_numerical_transfer_fn(r, upperLeft.get(), false, referenceFn); - data = GetResourceAsData("icc_profiles/upperRight.icc"); + data = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperRight.icc").c_str()); sk_sp upperRight = SkICC::Make(data->data(), data->size()); test_is_numerical_transfer_fn(r, upperRight.get(), false, referenceFn); } diff --git a/tests/ImageIsOpaqueTest.cpp b/tests/ImageIsOpaqueTest.cpp index 38f9b6ae90..9b4837a76f 100644 --- a/tests/ImageIsOpaqueTest.cpp +++ b/tests/ImageIsOpaqueTest.cpp @@ -40,13 +40,14 @@ static void test_flatten(skiatest::Reporter* reporter, const SkImageInfo& info) } DEF_TEST(ImageInfo_flattening, reporter) { - sk_sp data = GetResourceAsData("icc_profiles/HP_ZR30w.icc"); + sk_sp data = + SkData::MakeFromFileName(GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); sk_sp space0 = SkColorSpace::MakeICC(data->data(), data->size()); - data = GetResourceAsData("icc_profiles/HP_Z32x.icc"); + data = SkData::MakeFromFileName( GetResourcePath("icc_profiles/HP_Z32x.icc").c_str()); sk_sp space1 = SkColorSpace::MakeICC(data->data(), data->size()); - data = GetResourceAsData("icc_profiles/upperLeft.icc"); + data = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperLeft.icc").c_str()); sk_sp space2 = SkColorSpace::MakeICC(data->data(), data->size()); - data = GetResourceAsData("icc_profiles/upperRight.icc"); + data = SkData::MakeFromFileName(GetResourcePath("icc_profiles/upperRight.icc").c_str()); sk_sp space3 = SkColorSpace::MakeICC(data->data(), data->size()); sk_sp spaces[] = { diff --git a/tests/PDFJpegEmbedTest.cpp b/tests/PDFJpegEmbedTest.cpp index aaac2b9f18..b62b166fc1 100644 --- a/tests/PDFJpegEmbedTest.cpp +++ b/tests/PDFJpegEmbedTest.cpp @@ -32,7 +32,8 @@ static bool is_subset_of(SkData* smaller, SkData* larger) { static sk_sp load_resource( skiatest::Reporter* r, const char* test, const char* filename) { - sk_sp data = GetResourceAsData(filename); + SkString path(GetResourcePath(filename)); + sk_sp data(SkData::MakeFromFileName(path.c_str())); if (!data) { INFOF(r, "\n%s: Resource '%s' can not be found.\n", test, filename); diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp index 2543870667..4cf605a2fc 100644 --- a/tests/SerializationTest.cpp +++ b/tests/SerializationTest.cpp @@ -358,8 +358,8 @@ static void serialize_and_compare_typeface(sk_sp typeface, const cha static void TestPictureTypefaceSerialization(skiatest::Reporter* reporter) { { // Load typeface from file to test CreateFromFile with index. - auto data = GetResourceAsData("fonts/test.ttc"); - auto typeface = SkTypeface::MakeFromStream(new SkMemoryStream(std::move(data)), 1); + SkString filename = GetResourcePath("/fonts/test.ttc"); + sk_sp typeface(SkTypeface::MakeFromFile(filename.c_str(), 1)); if (!typeface) { INFOF(reporter, "Could not run fontstream test because test.ttc not found."); } else { @@ -369,7 +369,7 @@ static void TestPictureTypefaceSerialization(skiatest::Reporter* reporter) { { // Load typeface as stream to create with axis settings. - std::unique_ptr distortable(GetResourceAsStream("fonts/Distortable.ttf")); + std::unique_ptr distortable(GetResourceAsStream("/fonts/Distortable.ttf")); if (!distortable) { INFOF(reporter, "Could not run fontstream test because Distortable.ttf not found."); } else { diff --git a/tools/Resources.cpp b/tools/Resources.cpp index 6436a0ddb8..948949bf04 100644 --- a/tools/Resources.cpp +++ b/tools/Resources.cpp @@ -26,26 +26,37 @@ void SetResourcePath(const char* resource) { FLAGS_resourcePath.set(0, resource); } - -bool DecodeDataToBitmap(sk_sp data, SkBitmap* dst) { - std::unique_ptr gen(SkImageGenerator::MakeFromEncoded(std::move(data))); - return gen && dst->tryAllocPixels(gen->getInfo()) && +bool GetResourceAsBitmap(const char* resource, SkBitmap* dst) { + SkString resourcePath = GetResourcePath(resource); + sk_sp resourceData(SkData::MakeFromFileName(resourcePath.c_str())); + std::unique_ptr gen(SkImageGenerator::MakeFromEncoded(resourceData)); + if (!gen) { + return false; + } + return dst->tryAllocPixels(gen->getInfo()) && gen->getPixels(gen->getInfo().makeColorSpace(nullptr), dst->getPixels(), dst->rowBytes(), nullptr); } +sk_sp GetResourceAsImage(const char* resource) { + SkString path = GetResourcePath(resource); + sk_sp resourceData(SkData::MakeFromFileName(path.c_str())); + return SkImage::MakeFromEncoded(resourceData); +} + std::unique_ptr GetResourceAsStream(const char* resource) { - auto data = GetResourceAsData(resource); - return data ? std::unique_ptr(new SkMemoryStream(std::move(data))) - : nullptr; + SkString resourcePath = GetResourcePath(resource); + auto stream = SkFILEStream::Make(resourcePath.c_str()); + if (!stream) { + SkDebugf("Resource %s not found.\n", resource); + return nullptr; + } + return std::move(stream); } sk_sp GetResourceAsData(const char* resource) { - auto data = SkData::MakeFromFileName(GetResourcePath(resource).c_str()); - if (!data) { - SkDebugf("Resource \"%s\" not found.\n", resource); - } - return data; + SkString resourcePath = GetResourcePath(resource); + return SkData::MakeFromFileName(resourcePath.c_str()); } sk_sp MakeResourceAsTypeface(const char* resource) { diff --git a/tools/Resources.h b/tools/Resources.h index 7d5909371b..01eaa3f214 100644 --- a/tools/Resources.h +++ b/tools/Resources.h @@ -8,32 +8,22 @@ #ifndef Resources_DEFINED #define Resources_DEFINED -#include "SkImage.h" +#include "SkRefCnt.h" #include "SkString.h" class SkBitmap; class SkData; +class SkImage; class SkStreamAsset; class SkTypeface; SkString GetResourcePath(const char* resource = ""); - void SetResourcePath(const char* ); -bool DecodeDataToBitmap(sk_sp data, SkBitmap* dst); - -sk_sp GetResourceAsData(const char* resource); - -inline bool GetResourceAsBitmap(const char* resource, SkBitmap* dst) { - return DecodeDataToBitmap(GetResourceAsData(resource), dst); -} - -inline sk_sp GetResourceAsImage(const char* resource) { - return SkImage::MakeFromEncoded(GetResourceAsData(resource)); -} - +bool GetResourceAsBitmap(const char* resource, SkBitmap* dst); +sk_sp GetResourceAsImage(const char* resource); std::unique_ptr GetResourceAsStream(const char* resource); - +sk_sp GetResourceAsData(const char* resource); sk_sp MakeResourceAsTypeface(const char* resource); #endif // Resources_DEFINED