10c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com/* 20c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * Copyright 2012 Google Inc. 30c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * 40c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * Use of this source code is governed by a BSD-style license that can be 50c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * found in the LICENSE file. 60c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com */ 70c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com 80c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkBitmap.h" 90c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkCanvas.h" 100c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkColor.h" 110c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkColorFilter.h" 120c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkGradientShader.h" 130c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkPaint.h" 140c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkPictureFlat.h" 150c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkShader.h" 160c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com#include "SkXfermode.h" 178f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 180c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com 1907adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.orgstruct SkFlattenableTraits { 20186c0ccac25229534ec6fb84726043083304d4d1commit-bot@chromium.org static void Flatten(SkWriteBuffer& buffer, const SkFlattenable& flattenable) { 2107adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org buffer.writeFlattenable(&flattenable); 2207adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org } 2307adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org}; 240c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com 251554360a9511d996e1618d19c163c810ef3f128cscroggo@google.comclass Controller : public SkChunkFlatController { 261554360a9511d996e1618d19c163c810ef3f128cscroggo@google.compublic: 271554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com Controller() : INHERITED(1024) { 281554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com this->INHERITED::setNamedFactorySet(SkNEW(SkNamedFactorySet))->unref(); 291554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com } 301554360a9511d996e1618d19c163c810ef3f128cscroggo@google.comprivate: 311554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com typedef SkChunkFlatController INHERITED; 321554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com}; 331554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com 340c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com/** 350c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * Verify that two SkFlatData objects that created from the same object are 360c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * identical when using an SkNamedFactorySet. 370c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * @param reporter Object to report failures. 380c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * @param obj Flattenable object to be flattened. 390c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com * @param flattenProc Function that flattens objects with the same type as obj. 400c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com */ 4107adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.orgtemplate <typename Traits, typename T> 4207adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.orgstatic void testCreate(skiatest::Reporter* reporter, const T& obj) { 431554360a9511d996e1618d19c163c810ef3f128cscroggo@google.com Controller controller; 4407adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org // No need to delete data because that will be taken care of by the controller. 4507adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org SkFlatData* data1 = SkFlatData::Create<Traits>(&controller, obj, 0); 4607adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org SkFlatData* data2 = SkFlatData::Create<Traits>(&controller, obj, 1); 479e3074e968f52eb02fdc329bb9fbe7be5e674268mtklein@google.com REPORTER_ASSERT(reporter, *data1 == *data2); 480c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com} 490c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com 50e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(FlatData, reporter) { 510c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com // Test flattening SkShader 520c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com SkPoint points[2]; 530c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com points[0].set(0, 0); 540c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com points[1].set(SkIntToScalar(20), SkIntToScalar(20)); 550c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com SkColor colors[2]; 560c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com colors[0] = SK_ColorRED; 570c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com colors[1] = SK_ColorBLUE; 5807adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org 5907adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org SkAutoTUnref<SkShader> shader(SkGradientShader::CreateLinear(points, colors, NULL, 2, 6007adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org SkShader::kRepeat_TileMode)); 6107adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org testCreate<SkFlattenableTraits>(reporter, *shader); 620c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com 630c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com // Test SkColorFilter 6407adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateLightingFilter(SK_ColorBLUE, SK_ColorRED)); 6507adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org testCreate<SkFlattenableTraits>(reporter, *cf); 660c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com 670c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com // Test SkXfermode 6807adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(SkXfermode::kDstOver_Mode)); 6907adb6359fd137ccb633b2c64ee2287c8edfd701commit-bot@chromium.org testCreate<SkFlattenableTraits>(reporter, *xfer); 700c3e5fe728ce4b8606819ee919a4b82f4d9efc85scroggo@google.com} 71