/platform/external/webkit/WebCore/css/CSSGradientValue.h

https://github.com/aharish/totoro-gb-opensource-update2 · C Header · 112 lines · 57 code · 25 blank · 30 comment · 0 complexity · 5cec2b01836147fa5ce81a13d6dea8ee MD5 · raw file

  1. /*
  2. * Copyright (C) 2008 Apple Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
  14. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
  17. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  18. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  19. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  20. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  21. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  22. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  23. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. #ifndef CSSGradientValue_h
  26. #define CSSGradientValue_h
  27. #include "CSSImageGeneratorValue.h"
  28. #include "CSSPrimitiveValue.h"
  29. #include <wtf/RefPtr.h>
  30. #include <wtf/Vector.h>
  31. namespace WebCore {
  32. class FloatPoint;
  33. class Gradient;
  34. enum CSSGradientType { CSSLinearGradient, CSSRadialGradient };
  35. struct CSSGradientColorStop {
  36. CSSGradientColorStop()
  37. : m_stop(0)
  38. {
  39. }
  40. float m_stop;
  41. RefPtr<CSSPrimitiveValue> m_color;
  42. };
  43. class CSSGradientValue : public CSSImageGeneratorValue {
  44. public:
  45. static PassRefPtr<CSSGradientValue> create()
  46. {
  47. return adoptRef(new CSSGradientValue);
  48. }
  49. virtual String cssText() const;
  50. virtual Image* image(RenderObject*, const IntSize&);
  51. CSSGradientType type() const { return m_type; }
  52. void setType(CSSGradientType type) { m_type = type; }
  53. void setFirstX(PassRefPtr<CSSPrimitiveValue> val) { m_firstX = val; }
  54. void setFirstY(PassRefPtr<CSSPrimitiveValue> val) { m_firstY = val; }
  55. void setSecondX(PassRefPtr<CSSPrimitiveValue> val) { m_secondX = val; }
  56. void setSecondY(PassRefPtr<CSSPrimitiveValue> val) { m_secondY = val; }
  57. void setFirstRadius(PassRefPtr<CSSPrimitiveValue> val) { m_firstRadius = val; }
  58. void setSecondRadius(PassRefPtr<CSSPrimitiveValue> val) { m_secondRadius = val; }
  59. void addStop(const CSSGradientColorStop& stop) { m_stops.append(stop); }
  60. void sortStopsIfNeeded();
  61. private:
  62. CSSGradientValue()
  63. : m_type(CSSLinearGradient)
  64. , m_stopsSorted(false)
  65. {
  66. }
  67. // Create the gradient for a given size.
  68. PassRefPtr<Gradient> createGradient(RenderObject*, const IntSize&);
  69. // Resolve points/radii to front end values.
  70. FloatPoint resolvePoint(CSSPrimitiveValue*, CSSPrimitiveValue*, const IntSize&, float zoomFactor);
  71. float resolveRadius(CSSPrimitiveValue*, float zoomFactor);
  72. // Type
  73. CSSGradientType m_type;
  74. // Points
  75. RefPtr<CSSPrimitiveValue> m_firstX;
  76. RefPtr<CSSPrimitiveValue> m_firstY;
  77. RefPtr<CSSPrimitiveValue> m_secondX;
  78. RefPtr<CSSPrimitiveValue> m_secondY;
  79. // Radii (for radial gradients only)
  80. RefPtr<CSSPrimitiveValue> m_firstRadius;
  81. RefPtr<CSSPrimitiveValue> m_secondRadius;
  82. // Stops
  83. Vector<CSSGradientColorStop> m_stops;
  84. bool m_stopsSorted;
  85. };
  86. } // namespace WebCore
  87. #endif // CSSGradientValue_h