OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> |
3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2005 Eric Seidel <eric@webkit.org> | 4 * Copyright (C) 2005 Eric Seidel <eric@webkit.org> |
5 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 5 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
6 * Copyright (C) 2010 Zoltan Herczeg <zherczeg@webkit.org> | 6 * Copyright (C) 2010 Zoltan Herczeg <zherczeg@webkit.org> |
7 * Copyright (C) 2013 Google Inc. All rights reserved. | 7 * Copyright (C) 2013 Google Inc. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 paintingData.bias = m_bias * 255; | 453 paintingData.bias = m_bias * 255; |
454 | 454 |
455 // Drawing fully covered pixels | 455 // Drawing fully covered pixels |
456 int clipRight = paintSize.width() - m_kernelSize.width(); | 456 int clipRight = paintSize.width() - m_kernelSize.width(); |
457 int clipBottom = paintSize.height() - m_kernelSize.height(); | 457 int clipBottom = paintSize.height() - m_kernelSize.height(); |
458 | 458 |
459 if (clipRight >= 0 && clipBottom >= 0) { | 459 if (clipRight >= 0 && clipBottom >= 0) { |
460 | 460 |
461 int optimalThreadNumber = (absolutePaintRect().width() * absolutePaintRe
ct().height()) / s_minimalRectDimension; | 461 int optimalThreadNumber = (absolutePaintRect().width() * absolutePaintRe
ct().height()) / s_minimalRectDimension; |
462 if (optimalThreadNumber > 1) { | 462 if (optimalThreadNumber > 1) { |
463 ParallelJobs<InteriorPixelParameters> parallelJobs(&blink::FEConvolv
eMatrix::setInteriorPixelsWorker, optimalThreadNumber); | 463 ParallelJobs<InteriorPixelParameters> parallelJobs(&FEConvolveMatrix
::setInteriorPixelsWorker, optimalThreadNumber); |
464 const int numOfThreads = parallelJobs.numberOfJobs(); | 464 const int numOfThreads = parallelJobs.numberOfJobs(); |
465 | 465 |
466 // Split the job into "heightPerThread" jobs but there a few jobs th
at need to be slightly larger since | 466 // Split the job into "heightPerThread" jobs but there a few jobs th
at need to be slightly larger since |
467 // heightPerThread * jobs < total size. These extras are handled by
the remainder "jobsWithExtra". | 467 // heightPerThread * jobs < total size. These extras are handled by
the remainder "jobsWithExtra". |
468 const int heightPerThread = clipBottom / numOfThreads; | 468 const int heightPerThread = clipBottom / numOfThreads; |
469 const int jobsWithExtra = clipBottom % numOfThreads; | 469 const int jobsWithExtra = clipBottom % numOfThreads; |
470 | 470 |
471 int startY = 0; | 471 int startY = 0; |
472 for (int job = 0; job < numOfThreads; ++job) { | 472 for (int job = 0; job < numOfThreads; ++job) { |
473 InteriorPixelParameters& param = parallelJobs.parameter(job); | 473 InteriorPixelParameters& param = parallelJobs.parameter(job); |
(...skipping 21 matching lines...) Expand all Loading... |
495 if (m_targetOffset.x() > 0) | 495 if (m_targetOffset.x() > 0) |
496 setOuterPixels(paintingData, 0, m_targetOffset.y(), m_targetOffset.x
(), clipBottom); | 496 setOuterPixels(paintingData, 0, m_targetOffset.y(), m_targetOffset.x
(), clipBottom); |
497 if (clipRight < paintSize.width()) | 497 if (clipRight < paintSize.width()) |
498 setOuterPixels(paintingData, clipRight, m_targetOffset.y(), paintSiz
e.width(), clipBottom); | 498 setOuterPixels(paintingData, clipRight, m_targetOffset.y(), paintSiz
e.width(), clipBottom); |
499 } else { | 499 } else { |
500 // Rare situation, not optimizied for speed | 500 // Rare situation, not optimizied for speed |
501 setOuterPixels(paintingData, 0, 0, paintSize.width(), paintSize.height()
); | 501 setOuterPixels(paintingData, 0, 0, paintSize.width(), paintSize.height()
); |
502 } | 502 } |
503 } | 503 } |
504 | 504 |
505 SkMatrixConvolutionImageFilter::TileMode toSkiaTileMode(blink::EdgeModeType edge
Mode) | 505 SkMatrixConvolutionImageFilter::TileMode toSkiaTileMode(EdgeModeType edgeMode) |
506 { | 506 { |
507 switch (edgeMode) { | 507 switch (edgeMode) { |
508 case blink::EDGEMODE_DUPLICATE: | 508 case EDGEMODE_DUPLICATE: |
509 return SkMatrixConvolutionImageFilter::kClamp_TileMode; | 509 return SkMatrixConvolutionImageFilter::kClamp_TileMode; |
510 case blink::EDGEMODE_WRAP: | 510 case EDGEMODE_WRAP: |
511 return SkMatrixConvolutionImageFilter::kRepeat_TileMode; | 511 return SkMatrixConvolutionImageFilter::kRepeat_TileMode; |
512 case blink::EDGEMODE_NONE: | 512 case EDGEMODE_NONE: |
513 return SkMatrixConvolutionImageFilter::kClampToBlack_TileMode; | 513 return SkMatrixConvolutionImageFilter::kClampToBlack_TileMode; |
514 default: | 514 default: |
515 return SkMatrixConvolutionImageFilter::kClamp_TileMode; | 515 return SkMatrixConvolutionImageFilter::kClamp_TileMode; |
516 } | 516 } |
517 } | 517 } |
518 | 518 |
519 }; // unnamed namespace | |
520 | |
521 namespace blink { | |
522 | |
523 PassRefPtr<SkImageFilter> FEConvolveMatrix::createImageFilter(SkiaImageFilterBui
lder* builder) | 519 PassRefPtr<SkImageFilter> FEConvolveMatrix::createImageFilter(SkiaImageFilterBui
lder* builder) |
524 { | 520 { |
525 RefPtr<SkImageFilter> input(builder->build(inputEffect(0), operatingColorSpa
ce())); | 521 RefPtr<SkImageFilter> input(builder->build(inputEffect(0), operatingColorSpa
ce())); |
526 | 522 |
527 SkISize kernelSize(SkISize::Make(m_kernelSize.width(), m_kernelSize.height()
)); | 523 SkISize kernelSize(SkISize::Make(m_kernelSize.width(), m_kernelSize.height()
)); |
528 int numElements = kernelSize.width() * kernelSize.height(); | 524 int numElements = kernelSize.width() * kernelSize.height(); |
529 SkScalar gain = SkFloatToScalar(1.0f / m_divisor); | 525 SkScalar gain = SkFloatToScalar(1.0f / m_divisor); |
530 SkScalar bias = SkFloatToScalar(m_bias * 255); | 526 SkScalar bias = SkFloatToScalar(m_bias * 255); |
531 SkIPoint target = SkIPoint::Make(m_targetOffset.x(), m_targetOffset.y()); | 527 SkIPoint target = SkIPoint::Make(m_targetOffset.x(), m_targetOffset.y()); |
532 SkMatrixConvolutionImageFilter::TileMode tileMode = toSkiaTileMode(m_edgeMod
e); | 528 SkMatrixConvolutionImageFilter::TileMode tileMode = toSkiaTileMode(m_edgeMod
e); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 << "bias=\"" << m_bias << "\" " | 564 << "bias=\"" << m_bias << "\" " |
569 << "target=\"" << m_targetOffset << "\" " | 565 << "target=\"" << m_targetOffset << "\" " |
570 << "edgeMode=\"" << m_edgeMode << "\" " | 566 << "edgeMode=\"" << m_edgeMode << "\" " |
571 << "kernelUnitLength=\"" << m_kernelUnitLength << "\" " | 567 << "kernelUnitLength=\"" << m_kernelUnitLength << "\" " |
572 << "preserveAlpha=\"" << m_preserveAlpha << "\"]\n"; | 568 << "preserveAlpha=\"" << m_preserveAlpha << "\"]\n"; |
573 inputEffect(0)->externalRepresentation(ts, indent + 1); | 569 inputEffect(0)->externalRepresentation(ts, indent + 1); |
574 return ts; | 570 return ts; |
575 } | 571 } |
576 | 572 |
577 }; // namespace blink | 573 }; // namespace blink |
OLD | NEW |