[TexMap] Seperate BitmapTexture related classes implementations from TextureMapper
[WebKit-https.git] / Source / WebCore / platform / graphics / texmap / TextureMapperImageBuffer.cpp
1 /*
2  Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies)
3
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  Library General Public License for more details.
13
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB.  If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18  */
19
20 #include "config.h"
21 #include "TextureMapperImageBuffer.h"
22
23 #include "BitmapTexturePool.h"
24 #include "GraphicsLayer.h"
25 #include "NotImplemented.h"
26
27 #if USE(TEXTURE_MAPPER)
28 namespace WebCore {
29
30 static const int s_maximumAllowedImageBufferDimension = 4096;
31
32 TextureMapperImageBuffer::TextureMapperImageBuffer()
33     : TextureMapper(SoftwareMode)
34 {
35     m_texturePool = std::make_unique<BitmapTexturePool>();
36 }
37
38 IntSize TextureMapperImageBuffer::maxTextureSize() const
39 {
40     return IntSize(s_maximumAllowedImageBufferDimension, s_maximumAllowedImageBufferDimension);
41 }
42
43 void TextureMapperImageBuffer::beginClip(const TransformationMatrix& matrix, const FloatRect& rect)
44 {
45     GraphicsContext* context = currentContext();
46     if (!context)
47         return;
48 #if ENABLE(3D_RENDERING)
49     TransformationMatrix previousTransform = context->get3DTransform();
50 #else
51     AffineTransform previousTransform = context->getCTM();
52 #endif
53     context->save();
54
55 #if ENABLE(3D_RENDERING)
56     context->concat3DTransform(matrix);
57 #else
58     context->concatCTM(matrix.toAffineTransform());
59 #endif
60
61     context->clip(rect);
62
63 #if ENABLE(3D_RENDERING)
64     context->set3DTransform(previousTransform);
65 #else
66     context->setCTM(previousTransform);
67 #endif
68 }
69
70 void TextureMapperImageBuffer::drawTexture(const BitmapTexture& texture, const FloatRect& targetRect, const TransformationMatrix& matrix, float opacity, unsigned /* exposedEdges */)
71 {
72     GraphicsContext* context = currentContext();
73     if (!context)
74         return;
75
76     const BitmapTextureImageBuffer& textureImageBuffer = static_cast<const BitmapTextureImageBuffer&>(texture);
77     ImageBuffer* image = textureImageBuffer.image();
78     context->save();
79     context->setCompositeOperation(isInMaskMode() ? CompositeDestinationIn : CompositeSourceOver);
80     context->setAlpha(opacity);
81 #if ENABLE(3D_RENDERING)
82     context->concat3DTransform(matrix);
83 #else
84     context->concatCTM(matrix.toAffineTransform());
85 #endif
86     context->drawImageBuffer(image, ColorSpaceDeviceRGB, targetRect);
87     context->restore();
88 }
89
90 void TextureMapperImageBuffer::drawSolidColor(const FloatRect& rect, const TransformationMatrix& matrix, const Color& color)
91 {
92     GraphicsContext* context = currentContext();
93     if (!context)
94         return;
95
96     context->save();
97     context->setCompositeOperation(isInMaskMode() ? CompositeDestinationIn : CompositeSourceOver);
98 #if ENABLE(3D_RENDERING)
99     context->concat3DTransform(matrix);
100 #else
101     context->concatCTM(matrix.toAffineTransform());
102 #endif
103
104     context->fillRect(rect, color, ColorSpaceDeviceRGB);
105     context->restore();
106 }
107
108 void TextureMapperImageBuffer::drawBorder(const Color&, float /* borderWidth */, const FloatRect&, const TransformationMatrix&)
109 {
110     notImplemented();
111 }
112
113 void TextureMapperImageBuffer::drawNumber(int /* number */, const Color&, const FloatPoint&, const TransformationMatrix&)
114 {
115     notImplemented();
116 }
117
118 PassRefPtr<BitmapTexture> BitmapTextureImageBuffer::applyFilters(TextureMapper*, const FilterOperations&)
119 {
120     ASSERT_NOT_REACHED();
121     return this;
122 }
123
124 }
125 #endif