Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Side by Side Diff: Source/platform/fonts/GlyphBufferTest.cpp

Issue 676523003: Offset-only GlyphBuffer (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: review nit Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "platform/fonts/GlyphBuffer.h" 6 #include "platform/fonts/GlyphBuffer.h"
7 7
8 #include "platform/fonts/SimpleFontData.h" 8 #include "platform/fonts/SimpleFontData.h"
9 #include "wtf/PassRefPtr.h" 9 #include "wtf/PassRefPtr.h"
10 #include "wtf/RefPtr.h" 10 #include "wtf/RefPtr.h"
(...skipping 29 matching lines...) Expand all
40 } 40 }
41 41
42 TEST(GlyphBufferTest, StoresGlyphs) 42 TEST(GlyphBufferTest, StoresGlyphs)
43 { 43 {
44 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); 44 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
45 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); 45 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
46 46
47 GlyphBuffer glyphBuffer; 47 GlyphBuffer glyphBuffer;
48 glyphBuffer.add(42, font1.get(), 10); 48 glyphBuffer.add(42, font1.get(), 10);
49 glyphBuffer.add(43, font1.get(), 15); 49 glyphBuffer.add(43, font1.get(), 15);
50 glyphBuffer.add(44, font2.get(), 12); 50 glyphBuffer.add(44, font2.get(), 22);
51 51
52 EXPECT_FALSE(glyphBuffer.isEmpty()); 52 EXPECT_FALSE(glyphBuffer.isEmpty());
53 EXPECT_FALSE(glyphBuffer.hasOffsets()); 53 EXPECT_FALSE(glyphBuffer.hasVerticalOffsets());
54 EXPECT_EQ(3u, glyphBuffer.size()); 54 EXPECT_EQ(3u, glyphBuffer.size());
55 55
56 EXPECT_EQ(42, glyphBuffer.glyphAt(0)); 56 EXPECT_EQ(42, glyphBuffer.glyphAt(0));
57 EXPECT_EQ(43, glyphBuffer.glyphAt(1)); 57 EXPECT_EQ(43, glyphBuffer.glyphAt(1));
58 EXPECT_EQ(44, glyphBuffer.glyphAt(2)); 58 EXPECT_EQ(44, glyphBuffer.glyphAt(2));
59 59
60 const Glyph* glyphs = glyphBuffer.glyphs(0); 60 const Glyph* glyphs = glyphBuffer.glyphs(0);
61 EXPECT_EQ(42, glyphs[0]); 61 EXPECT_EQ(42, glyphs[0]);
62 EXPECT_EQ(43, glyphs[1]); 62 EXPECT_EQ(43, glyphs[1]);
63 EXPECT_EQ(44, glyphs[2]); 63 EXPECT_EQ(44, glyphs[2]);
64 } 64 }
65 65
66 TEST(GlyphBufferTest, StoresVerticalOffsets)
67 {
68 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
69 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
70
71 GlyphBuffer glyphBuffer;
72 EXPECT_FALSE(glyphBuffer.hasVerticalOffsets());
73
74 glyphBuffer.add(42, font1.get(), FloatPoint(10, 0));
75 glyphBuffer.add(43, font1.get(), FloatPoint(15, 0));
76 glyphBuffer.add(44, font2.get(), FloatPoint(12, 2));
77
78 EXPECT_FALSE(glyphBuffer.isEmpty());
79 EXPECT_TRUE(glyphBuffer.hasVerticalOffsets());
80 EXPECT_EQ(3u, glyphBuffer.size());
81
82 const float* offsets = glyphBuffer.offsets(0);
83 EXPECT_EQ(10, glyphBuffer.xOffsetAt(0));
84 EXPECT_EQ(0, glyphBuffer.yOffsetAt(0));
85 EXPECT_EQ(15, glyphBuffer.xOffsetAt(1));
86 EXPECT_EQ(0, glyphBuffer.yOffsetAt(1));
87 EXPECT_EQ(12, glyphBuffer.xOffsetAt(2));
88 EXPECT_EQ(2, glyphBuffer.yOffsetAt(2));
89
90 EXPECT_EQ(10, offsets[0]);
91 EXPECT_EQ(0, offsets[1]);
92 EXPECT_EQ(15, offsets[2]);
93 EXPECT_EQ(0, offsets[3]);
94 EXPECT_EQ(12, offsets[4]);
95 EXPECT_EQ(2, offsets[5]);
96 }
97
66 TEST(GlyphBufferTest, StoresOffsets) 98 TEST(GlyphBufferTest, StoresOffsets)
67 { 99 {
68 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); 100 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
69 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); 101 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
70
71 GlyphBuffer glyphBuffer;
72 glyphBuffer.add(42, font1.get(), FloatSize(10, 0), 0);
73 glyphBuffer.add(43, font1.get(), FloatSize(15, 0), 0);
74 glyphBuffer.add(44, font2.get(), FloatSize(12, 2), 0);
75
76 EXPECT_FALSE(glyphBuffer.isEmpty());
77 EXPECT_TRUE(glyphBuffer.hasOffsets());
78 EXPECT_EQ(3u, glyphBuffer.size());
79
80 const FloatSize* offsets = glyphBuffer.offsets(0);
81 EXPECT_EQ(FloatSize(10, 0), offsets[0]);
82 EXPECT_EQ(FloatSize(15, 0), offsets[1]);
83 EXPECT_EQ(FloatSize(12, 2), offsets[2]);
84 }
85
86 TEST(GlyphBufferTest, StoresAdvances)
87 {
88 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
89 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
90 102
91 GlyphBuffer glyphBuffer; 103 GlyphBuffer glyphBuffer;
92 glyphBuffer.add(42, font1.get(), 10); 104 glyphBuffer.add(42, font1.get(), 10);
93 glyphBuffer.add(43, font1.get(), 15); 105 glyphBuffer.add(43, font1.get(), 15);
94 glyphBuffer.add(44, font2.get(), 20); 106 glyphBuffer.add(44, font2.get(), 20);
95 107
96 EXPECT_FALSE(glyphBuffer.isEmpty()); 108 EXPECT_FALSE(glyphBuffer.isEmpty());
109 EXPECT_FALSE(glyphBuffer.hasVerticalOffsets());
97 EXPECT_EQ(3u, glyphBuffer.size()); 110 EXPECT_EQ(3u, glyphBuffer.size());
98 111
99 EXPECT_EQ(10, glyphBuffer.advanceAt(0)); 112 EXPECT_EQ(10, glyphBuffer.xOffsetAt(0));
100 EXPECT_EQ(15, glyphBuffer.advanceAt(1)); 113 EXPECT_EQ(15, glyphBuffer.xOffsetAt(1));
101 EXPECT_EQ(20, glyphBuffer.advanceAt(2)); 114 EXPECT_EQ(20, glyphBuffer.xOffsetAt(2));
102 115
103 const float* advances = glyphBuffer.advances(0); 116 const float* offsets = glyphBuffer.offsets(0);
104 EXPECT_EQ(10, advances[0]); 117 EXPECT_EQ(10, offsets[0]);
105 EXPECT_EQ(15, advances[1]); 118 EXPECT_EQ(15, offsets[1]);
106 EXPECT_EQ(20, advances[2]); 119 EXPECT_EQ(20, offsets[2]);
107 } 120 }
108 121
109 TEST(GlyphBufferTest, StoresSimpleFontData) 122 TEST(GlyphBufferTest, StoresSimpleFontData)
110 { 123 {
111 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); 124 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
112 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); 125 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
113 126
114 GlyphBuffer glyphBuffer; 127 GlyphBuffer glyphBuffer;
115 glyphBuffer.add(42, font1.get(), 10); 128 glyphBuffer.add(42, font1.get(), 10);
116 glyphBuffer.add(43, font1.get(), 15); 129 glyphBuffer.add(43, font1.get(), 15);
(...skipping 18 matching lines...) Expand all
135 glyphBuffer.add(44, font2.get(), 12); 148 glyphBuffer.add(44, font2.get(), 12);
136 149
137 EXPECT_FALSE(glyphBuffer.isEmpty()); 150 EXPECT_FALSE(glyphBuffer.isEmpty());
138 EXPECT_EQ(3u, glyphBuffer.size()); 151 EXPECT_EQ(3u, glyphBuffer.size());
139 152
140 const Glyph* glyphs = glyphBuffer.glyphs(1); 153 const Glyph* glyphs = glyphBuffer.glyphs(1);
141 EXPECT_EQ(43, glyphs[0]); 154 EXPECT_EQ(43, glyphs[0]);
142 EXPECT_EQ(44, glyphs[1]); 155 EXPECT_EQ(44, glyphs[1]);
143 } 156 }
144 157
145 TEST(GlyphBufferTest, AdvanceArrayWithOffset) 158 TEST(GlyphBufferTest, OffsetArrayWithNonZeroIndex)
146 { 159 {
147 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); 160 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
148 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); 161 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
149 162
150 GlyphBuffer glyphBuffer; 163 {
151 glyphBuffer.add(42, font1.get(), 10); 164 GlyphBuffer glyphBuffer;
152 glyphBuffer.add(43, font1.get(), 15); 165 glyphBuffer.add(42, font1.get(), 10);
153 glyphBuffer.add(43, font1.get(), 12); 166 glyphBuffer.add(43, font1.get(), 15);
167 glyphBuffer.add(43, font2.get(), 12);
154 168
155 EXPECT_FALSE(glyphBuffer.isEmpty()); 169 EXPECT_FALSE(glyphBuffer.isEmpty());
156 EXPECT_EQ(3u, glyphBuffer.size()); 170 EXPECT_FALSE(glyphBuffer.hasVerticalOffsets());
171 EXPECT_EQ(3u, glyphBuffer.size());
157 172
158 const float* advances = glyphBuffer.advances(1); 173 const float* offsets = glyphBuffer.offsets(1);
159 EXPECT_EQ(15, advances[0]); 174 EXPECT_EQ(15, offsets[0]);
160 EXPECT_EQ(12, advances[1]); 175 EXPECT_EQ(12, offsets[1]);
176 }
177
178 {
179 GlyphBuffer glyphBuffer;
180 glyphBuffer.add(42, font1.get(), FloatPoint(10, 0));
181 glyphBuffer.add(43, font1.get(), FloatPoint(15, 0));
182 glyphBuffer.add(43, font2.get(), FloatPoint(12, 2));
183
184 EXPECT_FALSE(glyphBuffer.isEmpty());
185 EXPECT_TRUE(glyphBuffer.hasVerticalOffsets());
186 EXPECT_EQ(3u, glyphBuffer.size());
187
188 const float* offsets = glyphBuffer.offsets(1);
189 EXPECT_EQ(15, offsets[0]);
190 EXPECT_EQ(0, offsets[1]);
191 EXPECT_EQ(12, offsets[2]);
192 EXPECT_EQ(2, offsets[3]);
193 }
161 } 194 }
162 195
163 TEST(GlyphBufferTest, Reverse) 196 TEST(GlyphBufferTest, ReverseForSimpleRTL)
164 { 197 {
165 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create(); 198 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
166 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create(); 199 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
167 200
168 GlyphBuffer glyphBuffer; 201 GlyphBuffer glyphBuffer;
169 glyphBuffer.add(42, font1.get(), 10); 202 glyphBuffer.add(42, font1.get(), 10);
170 glyphBuffer.add(43, font1.get(), 15); 203 glyphBuffer.add(43, font1.get(), 15);
171 glyphBuffer.add(44, font2.get(), 20); 204 glyphBuffer.add(44, font2.get(), 25);
172 205
173 EXPECT_FALSE(glyphBuffer.isEmpty()); 206 EXPECT_FALSE(glyphBuffer.isEmpty());
174 EXPECT_EQ(3u, glyphBuffer.size()); 207 EXPECT_EQ(3u, glyphBuffer.size());
175 208
176 glyphBuffer.reverse(); 209 glyphBuffer.reverseForSimpleRTL(30, 100);
177 210
178 EXPECT_FALSE(glyphBuffer.isEmpty()); 211 EXPECT_FALSE(glyphBuffer.isEmpty());
179 EXPECT_EQ(3u, glyphBuffer.size()); 212 EXPECT_EQ(3u, glyphBuffer.size());
180 EXPECT_EQ(44, glyphBuffer.glyphAt(0)); 213 EXPECT_EQ(44, glyphBuffer.glyphAt(0));
181 EXPECT_EQ(43, glyphBuffer.glyphAt(1)); 214 EXPECT_EQ(43, glyphBuffer.glyphAt(1));
182 EXPECT_EQ(42, glyphBuffer.glyphAt(2)); 215 EXPECT_EQ(42, glyphBuffer.glyphAt(2));
183 EXPECT_EQ(20, glyphBuffer.advanceAt(0));
184 EXPECT_EQ(15, glyphBuffer.advanceAt(1));
185 EXPECT_EQ(10, glyphBuffer.advanceAt(2));
186 EXPECT_EQ(font2.get(), glyphBuffer.fontDataAt(0)); 216 EXPECT_EQ(font2.get(), glyphBuffer.fontDataAt(0));
187 EXPECT_EQ(font1.get(), glyphBuffer.fontDataAt(1)); 217 EXPECT_EQ(font1.get(), glyphBuffer.fontDataAt(1));
188 EXPECT_EQ(font1.get(), glyphBuffer.fontDataAt(2)); 218 EXPECT_EQ(font1.get(), glyphBuffer.fontDataAt(2));
189 } 219 EXPECT_EQ(70, glyphBuffer.xOffsetAt(0));
190 220 EXPECT_EQ(75, glyphBuffer.xOffsetAt(1));
191 TEST(GlyphBufferTest, ExpandLastAdvance) 221 EXPECT_EQ(85, glyphBuffer.xOffsetAt(2));
192 {
193 RefPtr<SimpleFontData> font1 = TestSimpleFontData::create();
194 RefPtr<SimpleFontData> font2 = TestSimpleFontData::create();
195
196 GlyphBuffer glyphBuffer;
197 glyphBuffer.add(42, font1.get(), 10);
198 glyphBuffer.add(43, font1.get(), 15);
199 glyphBuffer.add(44, font2.get(), 12);
200
201 glyphBuffer.expandLastAdvance(20);
202 EXPECT_EQ(32, glyphBuffer.advanceAt(2));
203 } 222 }
204 223
205 } // namespace 224 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698