FETurbulence.h revision a94275402997c11dd2e778633dacf4b7e630a35d
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> 3dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> 4dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2005 Eric Seidel <eric@webkit.org> 5dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> 6dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2010 Renata Hodovan <reni@inf.u-szeged.hu> 7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 8dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is free software; you can redistribute it and/or 9dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * modify it under the terms of the GNU Library General Public 10dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * License as published by the Free Software Foundation; either 11dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * version 2 of the License, or (at your option) any later version. 12dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 13dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is distributed in the hope that it will be useful, 14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 15dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Library General Public License for more details. 17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 18dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * You should have received a copy of the GNU Library General Public License 19dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * along with this library; see the file COPYING.LIB. If not, write to 20dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Boston, MA 02110-1301, USA. 22dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch */ 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 24bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#ifndef FETurbulence_h 25bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#define FETurbulence_h 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 27bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if ENABLE(FILTERS) 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FilterEffect.h" 295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "Filter.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockenum TurbulanceType { 34db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block FETURBULENCE_TYPE_UNKNOWN = 0, 35db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block FETURBULENCE_TYPE_FRACTALNOISE = 1, 36db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block FETURBULENCE_TYPE_TURBULENCE = 2 37db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}; 38db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 39db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockclass FETurbulence : public FilterEffect { 40db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockpublic: 41db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static PassRefPtr<FETurbulence> create(TurbulanceType, float, float, int, float, bool); 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block TurbulanceType type() const; 44db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block void setType(TurbulanceType); 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block float baseFrequencyY() const; 47db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block void setBaseFrequencyY(float); 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block float baseFrequencyX() const; 50db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block void setBaseFrequencyX(float); 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block float seed() const; 53db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block void setSeed(float); 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int numOctaves() const; 56db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block void setNumOctaves(bool); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool stitchTiles() const; 59db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block void setStitchTiles(bool); 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 61bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void apply(Filter*); 62bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void dump(); 63a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 64a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual void determineAbsolutePaintRect(Filter*) { setAbsolutePaintRect(maxEffectRect()); } 65bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 66bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual TextStream& externalRepresentation(TextStream&, int indention) const; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 68db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockprivate: 69db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static const int s_blockSize = 256; 70db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static const int s_blockMask = s_blockSize - 1; 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 72db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block struct PaintingData { 73db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block long seed; 74db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int latticeSelector[2 * s_blockSize + 2]; 75db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block float gradient[4][2 * s_blockSize + 2][2]; 76db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int width; // How much to subtract to wrap for stitching. 77db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int height; 78db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int wrapX; // Minimum value to wrap. 79db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int wrapY; 80db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int channel; 81db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block IntSize filterSize; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 83db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block PaintingData(long paintingSeed, const IntSize& paintingSize); 84db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block inline long random(); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 87db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block FETurbulence(TurbulanceType, float, float, int, float, bool); 88db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 89db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block inline void initPaint(PaintingData&); 90db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block float noise2D(PaintingData&, const FloatPoint&); 91db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block unsigned char calculateTurbulenceValueForPoint(PaintingData&, const FloatPoint&); 92db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 93db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block TurbulanceType m_type; 94db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block float m_baseFrequencyX; 95db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block float m_baseFrequencyY; 96db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block int m_numOctaves; 97db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block float m_seed; 98db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool m_stitchTiles; 99db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}; 100db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 103bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif // ENABLE(FILTERS) 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif // FETurbulence_h 106