1f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/* 25bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2008 The Android Open Source Project 3f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com * 45bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be 55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file. 6f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com */ 7f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 85bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com 9f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#ifndef SkBlurDrawLooper_DEFINED 10f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#define SkBlurDrawLooper_DEFINED 11f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 12f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkDrawLooper.h" 13f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkColor.h" 14f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 15f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comclass SkMaskFilter; 162f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.orgclass SkColorFilter; 17f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 18f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/** \class SkBlurDrawLooper 19f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com This class draws a shadow of the object (possibly offset), and then draws 20f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com the original object in its original position. 21f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com should there be an option to just draw the shadow/blur layer? webkit? 22f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com*/ 232083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.orgclass SK_API SkBlurDrawLooper : public SkDrawLooper { 24f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.compublic: 25407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org enum BlurFlags { 26407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org kNone_BlurFlag = 0x00, 271fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com /** 281fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com The blur layer's dx/dy/radius aren't affected by the canvas 29407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org transform. 30407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org */ 312f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.org kIgnoreTransform_BlurFlag = 0x01, 322f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.org kOverrideColor_BlurFlag = 0x02, 332f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.org kHighQuality_BlurFlag = 0x04, 34407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org /** mask for all blur flags */ 353d4c0be4d95d483774f1eaea3856558015ad0038senorblanco@chromium.org kAll_BlurFlag = 0x07 36407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org }; 37407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org 381fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com SkBlurDrawLooper(SkScalar radius, SkScalar dx, SkScalar dy, SkColor color, 39407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org uint32_t flags = kNone_BlurFlag); 40f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com virtual ~SkBlurDrawLooper(); 41f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 42f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com // overrides from SkDrawLooper 438196794a85b76ca1310e2fa0a54c2b6a02091397reed@google.com virtual void init(SkCanvas*); 448196794a85b76ca1310e2fa0a54c2b6a02091397reed@google.com virtual bool next(SkCanvas*, SkPaint* paint); 45f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 4673a0acf852ca3685211bc3d64c82f4c4035fa980robertphillips@google.com SK_DEVELOPER_TO_STRING() 4714f592f823cedde633bf7d468c3a14b02ee56674djsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurDrawLooper) 48f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 49f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprotected: 50f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com SkBlurDrawLooper(SkFlattenableReadBuffer&); 51e133d6ad314603114c7ef80423391f65cbb599d7djsollen@google.com virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 52f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 53f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprivate: 54f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com SkMaskFilter* fBlur; 552f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.org SkColorFilter* fColorFilter; 56f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com SkScalar fDx, fDy; 57f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com SkColor fBlurColor; 581fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com uint32_t fBlurFlags; 59f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 60f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com enum State { 61f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com kBeforeEdge, 62f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com kAfterEdge, 63f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com kDone 64f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com }; 65f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com State fState; 661fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com 67f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com typedef SkDrawLooper INHERITED; 68f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com}; 69f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 70f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif 71