OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/compiler_specific.h" | 5 #include "base/compiler_specific.h" |
6 #include "skia/ext/analysis_canvas.h" | 6 #include "skia/ext/analysis_canvas.h" |
7 #include "skia/ext/refptr.h" | 7 #include "skia/ext/refptr.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "third_party/skia/include/core/SkShader.h" | 9 #include "third_party/skia/include/core/SkShader.h" |
10 #include "third_party/skia/include/effects/SkOffsetImageFilter.h" | 10 #include "third_party/skia/include/effects/SkOffsetImageFilter.h" |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 | 273 |
274 TransparentFill(canvas); | 274 TransparentFill(canvas); |
275 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 275 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
276 EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); | 276 EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); |
277 | 277 |
278 SolidColorFill(canvas); | 278 SolidColorFill(canvas); |
279 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 279 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
280 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); | 280 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); |
281 } | 281 } |
282 | 282 |
| 283 TEST(AnalysisCanvasTest, HasText) { |
| 284 int width = 200; |
| 285 int height = 100; |
| 286 |
| 287 const char* text = "A"; |
| 288 size_t byteLength = 1; |
| 289 |
| 290 SkPoint point = SkPoint::Make(SkIntToScalar(25), SkIntToScalar(25)); |
| 291 SkPath path; |
| 292 path.moveTo(point); |
| 293 path.lineTo(SkIntToScalar(75), SkIntToScalar(75)); |
| 294 |
| 295 SkPaint paint; |
| 296 paint.setColor(SK_ColorGRAY); |
| 297 paint.setTextSize(SkIntToScalar(10)); |
| 298 |
| 299 { |
| 300 skia::AnalysisCanvas canvas(width, height); |
| 301 // Test after initialization. |
| 302 EXPECT_FALSE(canvas.HasText()); |
| 303 // Test drawing anything other than text. |
| 304 canvas.drawRect(SkRect::MakeWH(width/2, height), paint); |
| 305 EXPECT_FALSE(canvas.HasText()); |
| 306 } |
| 307 { |
| 308 // Test SkCanvas::drawText. |
| 309 skia::AnalysisCanvas canvas(width, height); |
| 310 canvas.drawText(text, byteLength, point.fX, point.fY, paint); |
| 311 EXPECT_TRUE(canvas.HasText()); |
| 312 } |
| 313 { |
| 314 // Test SkCanvas::drawPosText. |
| 315 skia::AnalysisCanvas canvas(width, height); |
| 316 canvas.drawPosText(text, byteLength, &point, paint); |
| 317 EXPECT_TRUE(canvas.HasText()); |
| 318 } |
| 319 { |
| 320 // Test SkCanvas::drawPosTextH. |
| 321 skia::AnalysisCanvas canvas(width, height); |
| 322 canvas.drawPosTextH(text, byteLength, &point.fX, point.fY, paint); |
| 323 EXPECT_TRUE(canvas.HasText()); |
| 324 } |
| 325 { |
| 326 // Test SkCanvas::drawTextOnPathHV. |
| 327 skia::AnalysisCanvas canvas(width, height); |
| 328 canvas.drawTextOnPathHV(text, byteLength, path, point.fX, point.fY, paint); |
| 329 EXPECT_TRUE(canvas.HasText()); |
| 330 } |
| 331 { |
| 332 // Test SkCanvas::drawTextOnPath. |
| 333 skia::AnalysisCanvas canvas(width, height); |
| 334 canvas.drawTextOnPath(text, byteLength, path, NULL, paint); |
| 335 EXPECT_TRUE(canvas.HasText()); |
| 336 } |
| 337 { |
| 338 // Text under opaque rect. |
| 339 skia::AnalysisCanvas canvas(width, height); |
| 340 canvas.drawText(text, byteLength, point.fX, point.fY, paint); |
| 341 EXPECT_TRUE(canvas.HasText()); |
| 342 canvas.drawRect(SkRect::MakeWH(width, height), paint); |
| 343 EXPECT_FALSE(canvas.HasText()); |
| 344 } |
| 345 { |
| 346 // Text under translucent rect. |
| 347 skia::AnalysisCanvas canvas(width, height); |
| 348 canvas.drawText(text, byteLength, point.fX, point.fY, paint); |
| 349 EXPECT_TRUE(canvas.HasText()); |
| 350 SkPaint translucentPaint; |
| 351 translucentPaint.setColor(0x88FFFFFF); |
| 352 canvas.drawRect(SkRect::MakeWH(width, height), translucentPaint); |
| 353 EXPECT_TRUE(canvas.HasText()); |
| 354 } |
| 355 { |
| 356 // Text under rect in clear mode. |
| 357 skia::AnalysisCanvas canvas(width, height); |
| 358 canvas.drawText(text, byteLength, point.fX, point.fY, paint); |
| 359 EXPECT_TRUE(canvas.HasText()); |
| 360 SkPaint clearModePaint; |
| 361 clearModePaint.setXfermodeMode(SkXfermode::kClear_Mode); |
| 362 canvas.drawRect(SkRect::MakeWH(width, height), clearModePaint); |
| 363 EXPECT_FALSE(canvas.HasText()); |
| 364 } |
| 365 { |
| 366 // Clear. |
| 367 skia::AnalysisCanvas canvas(width, height); |
| 368 canvas.drawText(text, byteLength, point.fX, point.fY, paint); |
| 369 EXPECT_TRUE(canvas.HasText()); |
| 370 canvas.clear(SK_ColorGRAY); |
| 371 EXPECT_FALSE(canvas.HasText()); |
| 372 } |
| 373 { |
| 374 // Text inside clip region. |
| 375 skia::AnalysisCanvas canvas(width, height); |
| 376 canvas.clipRect(SkRect::MakeWH(100, 100)); |
| 377 canvas.drawText(text, byteLength, point.fX, point.fY, paint); |
| 378 EXPECT_TRUE(canvas.HasText()); |
| 379 } |
| 380 { |
| 381 // Text outside clip region. |
| 382 skia::AnalysisCanvas canvas(width, height); |
| 383 canvas.clipRect(SkRect::MakeXYWH(100, 0, 100, 100)); |
| 384 canvas.drawText(text, byteLength, point.fX, point.fY, paint); |
| 385 // Analysis device does not do any clipping. |
| 386 // So even when text is outside the clip region, |
| 387 // it is marked as having the text. |
| 388 // TODO(alokp): We may be able to do some trivial rejection. |
| 389 EXPECT_TRUE(canvas.HasText()); |
| 390 } |
| 391 } |
| 392 |
283 } // namespace skia | 393 } // namespace skia |
OLD | NEW |