| Index: skia/ext/pixel_ref_utils.cc
|
| diff --git a/skia/ext/pixel_ref_utils.cc b/skia/ext/pixel_ref_utils.cc
|
| deleted file mode 100644
|
| index 0aea6fef323d3b6d16688dda739b44f480742654..0000000000000000000000000000000000000000
|
| --- a/skia/ext/pixel_ref_utils.cc
|
| +++ /dev/null
|
| @@ -1,369 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "skia/ext/pixel_ref_utils.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "third_party/skia/include/core/SkBitmapDevice.h"
|
| -#include "third_party/skia/include/core/SkCanvas.h"
|
| -#include "third_party/skia/include/core/SkData.h"
|
| -#include "third_party/skia/include/core/SkDraw.h"
|
| -#include "third_party/skia/include/core/SkPath.h"
|
| -#include "third_party/skia/include/core/SkPixelRef.h"
|
| -#include "third_party/skia/include/core/SkRect.h"
|
| -#include "third_party/skia/include/core/SkRRect.h"
|
| -#include "third_party/skia/include/core/SkShader.h"
|
| -#include "third_party/skia/include/utils/SkNoSaveLayerCanvas.h"
|
| -#include "third_party/skia/src/core/SkRasterClip.h"
|
| -
|
| -namespace skia {
|
| -
|
| -namespace {
|
| -
|
| -// URI label for a discardable SkPixelRef.
|
| -const char kLabelDiscardable[] = "discardable";
|
| -
|
| -class DiscardablePixelRefSet {
|
| - public:
|
| - DiscardablePixelRefSet(
|
| - std::vector<PixelRefUtils::PositionPixelRef>* pixel_refs)
|
| - : pixel_refs_(pixel_refs) {}
|
| -
|
| - void Add(SkPixelRef* pixel_ref, const SkRect& rect) {
|
| - // Only save discardable pixel refs.
|
| - if (pixel_ref->getURI() &&
|
| - !strcmp(pixel_ref->getURI(), kLabelDiscardable)) {
|
| - PixelRefUtils::PositionPixelRef position_pixel_ref;
|
| - position_pixel_ref.pixel_ref = pixel_ref;
|
| - position_pixel_ref.pixel_ref_rect = rect;
|
| - pixel_refs_->push_back(position_pixel_ref);
|
| - }
|
| - }
|
| -
|
| - private:
|
| - std::vector<PixelRefUtils::PositionPixelRef>* pixel_refs_;
|
| -};
|
| -
|
| -class GatherPixelRefDevice : public SkBitmapDevice {
|
| - public:
|
| - GatherPixelRefDevice(const SkBitmap& bm,
|
| - DiscardablePixelRefSet* pixel_ref_set)
|
| - : SkBitmapDevice(bm), pixel_ref_set_(pixel_ref_set) {}
|
| -
|
| - void drawPaint(const SkDraw& draw, const SkPaint& paint) override {
|
| - SkBitmap bitmap;
|
| - if (GetBitmapFromPaint(paint, &bitmap)) {
|
| - SkRect clip_rect = SkRect::Make(draw.fRC->getBounds());
|
| - AddBitmap(bitmap, clip_rect);
|
| - }
|
| - }
|
| -
|
| - void drawPoints(const SkDraw& draw,
|
| - SkCanvas::PointMode mode,
|
| - size_t count,
|
| - const SkPoint points[],
|
| - const SkPaint& paint) override {
|
| - SkBitmap bitmap;
|
| - if (!GetBitmapFromPaint(paint, &bitmap))
|
| - return;
|
| -
|
| - if (count == 0)
|
| - return;
|
| -
|
| - SkPoint min_point = points[0];
|
| - SkPoint max_point = points[0];
|
| - for (size_t i = 1; i < count; ++i) {
|
| - const SkPoint& point = points[i];
|
| - min_point.set(std::min(min_point.x(), point.x()),
|
| - std::min(min_point.y(), point.y()));
|
| - max_point.set(std::max(max_point.x(), point.x()),
|
| - std::max(max_point.y(), point.y()));
|
| - }
|
| -
|
| - SkRect bounds = SkRect::MakeLTRB(
|
| - min_point.x(), min_point.y(), max_point.x(), max_point.y());
|
| -
|
| - GatherPixelRefDevice::drawRect(draw, bounds, paint);
|
| - }
|
| - void drawRect(const SkDraw& draw,
|
| - const SkRect& rect,
|
| - const SkPaint& paint) override {
|
| - SkBitmap bitmap;
|
| - if (GetBitmapFromPaint(paint, &bitmap)) {
|
| - SkRect mapped_rect;
|
| - draw.fMatrix->mapRect(&mapped_rect, rect);
|
| - if (mapped_rect.intersect(SkRect::Make(draw.fRC->getBounds())))
|
| - AddBitmap(bitmap, mapped_rect);
|
| - }
|
| - }
|
| - void drawOval(const SkDraw& draw,
|
| - const SkRect& rect,
|
| - const SkPaint& paint) override {
|
| - GatherPixelRefDevice::drawRect(draw, rect, paint);
|
| - }
|
| - void drawRRect(const SkDraw& draw,
|
| - const SkRRect& rect,
|
| - const SkPaint& paint) override {
|
| - GatherPixelRefDevice::drawRect(draw, rect.rect(), paint);
|
| - }
|
| - void drawPath(const SkDraw& draw,
|
| - const SkPath& path,
|
| - const SkPaint& paint,
|
| - const SkMatrix* pre_path_matrix,
|
| - bool path_is_mutable) override {
|
| - SkBitmap bitmap;
|
| - if (!GetBitmapFromPaint(paint, &bitmap))
|
| - return;
|
| -
|
| - SkRect path_bounds = path.getBounds();
|
| - SkRect final_rect;
|
| - if (pre_path_matrix != NULL)
|
| - pre_path_matrix->mapRect(&final_rect, path_bounds);
|
| - else
|
| - final_rect = path_bounds;
|
| -
|
| - GatherPixelRefDevice::drawRect(draw, final_rect, paint);
|
| - }
|
| - void drawBitmap(const SkDraw& draw,
|
| - const SkBitmap& bitmap,
|
| - const SkMatrix& matrix,
|
| - const SkPaint& paint) override {
|
| - SkMatrix total_matrix;
|
| - total_matrix.setConcat(*draw.fMatrix, matrix);
|
| -
|
| - SkRect bitmap_rect = SkRect::MakeWH(bitmap.width(), bitmap.height());
|
| - SkRect mapped_rect;
|
| - total_matrix.mapRect(&mapped_rect, bitmap_rect);
|
| - AddBitmap(bitmap, mapped_rect);
|
| -
|
| - SkBitmap paint_bitmap;
|
| - if (GetBitmapFromPaint(paint, &paint_bitmap))
|
| - AddBitmap(paint_bitmap, mapped_rect);
|
| - }
|
| - void drawBitmapRect(const SkDraw& draw,
|
| - const SkBitmap& bitmap,
|
| - const SkRect* src_or_null,
|
| - const SkRect& dst,
|
| - const SkPaint& paint,
|
| - SkCanvas::SrcRectConstraint flags) override {
|
| - SkRect bitmap_rect = SkRect::MakeWH(bitmap.width(), bitmap.height());
|
| - SkMatrix matrix;
|
| - matrix.setRectToRect(bitmap_rect, dst, SkMatrix::kFill_ScaleToFit);
|
| - GatherPixelRefDevice::drawBitmap(draw, bitmap, matrix, paint);
|
| - }
|
| - void drawSprite(const SkDraw& draw,
|
| - const SkBitmap& bitmap,
|
| - int x,
|
| - int y,
|
| - const SkPaint& paint) override {
|
| - // Sprites aren't affected by current matrix, so we can't reuse drawRect.
|
| - SkMatrix matrix;
|
| - matrix.setTranslate(x, y);
|
| -
|
| - SkRect bitmap_rect = SkRect::MakeWH(bitmap.width(), bitmap.height());
|
| - SkRect mapped_rect;
|
| - matrix.mapRect(&mapped_rect, bitmap_rect);
|
| -
|
| - AddBitmap(bitmap, mapped_rect);
|
| - SkBitmap paint_bitmap;
|
| - if (GetBitmapFromPaint(paint, &paint_bitmap))
|
| - AddBitmap(paint_bitmap, mapped_rect);
|
| - }
|
| - void drawText(const SkDraw& draw,
|
| - const void* text,
|
| - size_t len,
|
| - SkScalar x,
|
| - SkScalar y,
|
| - const SkPaint& paint) override {
|
| - SkBitmap bitmap;
|
| - if (!GetBitmapFromPaint(paint, &bitmap))
|
| - return;
|
| -
|
| - // Math is borrowed from SkBBoxRecord
|
| - SkRect bounds;
|
| - paint.measureText(text, len, &bounds);
|
| - SkPaint::FontMetrics metrics;
|
| - paint.getFontMetrics(&metrics);
|
| -
|
| - if (paint.isVerticalText()) {
|
| - SkScalar h = bounds.fBottom - bounds.fTop;
|
| - if (paint.getTextAlign() == SkPaint::kCenter_Align) {
|
| - bounds.fTop -= h / 2;
|
| - bounds.fBottom -= h / 2;
|
| - }
|
| - bounds.fBottom += metrics.fBottom;
|
| - bounds.fTop += metrics.fTop;
|
| - } else {
|
| - SkScalar w = bounds.fRight - bounds.fLeft;
|
| - if (paint.getTextAlign() == SkPaint::kCenter_Align) {
|
| - bounds.fLeft -= w / 2;
|
| - bounds.fRight -= w / 2;
|
| - } else if (paint.getTextAlign() == SkPaint::kRight_Align) {
|
| - bounds.fLeft -= w;
|
| - bounds.fRight -= w;
|
| - }
|
| - bounds.fTop = metrics.fTop;
|
| - bounds.fBottom = metrics.fBottom;
|
| - }
|
| -
|
| - SkScalar pad = (metrics.fBottom - metrics.fTop) / 2;
|
| - bounds.fLeft -= pad;
|
| - bounds.fRight += pad;
|
| - bounds.fLeft += x;
|
| - bounds.fRight += x;
|
| - bounds.fTop += y;
|
| - bounds.fBottom += y;
|
| -
|
| - GatherPixelRefDevice::drawRect(draw, bounds, paint);
|
| - }
|
| - void drawPosText(const SkDraw& draw,
|
| - const void* text,
|
| - size_t len,
|
| - const SkScalar pos[],
|
| - int scalars_per_pos,
|
| - const SkPoint& offset,
|
| - const SkPaint& paint) override {
|
| - SkBitmap bitmap;
|
| - if (!GetBitmapFromPaint(paint, &bitmap))
|
| - return;
|
| -
|
| - if (len == 0)
|
| - return;
|
| -
|
| - // Similar to SkDraw asserts.
|
| - SkASSERT(scalars_per_pos == 1 || scalars_per_pos == 2);
|
| -
|
| - SkPoint min_point = SkPoint::Make(offset.x() + pos[0],
|
| - offset.y() + (2 == scalars_per_pos ? pos[1] : 0));
|
| - SkPoint max_point = min_point;
|
| -
|
| - for (size_t i = 0; i < len; ++i) {
|
| - SkScalar x = offset.x() + pos[i * scalars_per_pos];
|
| - SkScalar y = offset.y() + (2 == scalars_per_pos ? pos[i * scalars_per_pos + 1] : 0);
|
| -
|
| - min_point.set(std::min(x, min_point.x()), std::min(y, min_point.y()));
|
| - max_point.set(std::max(x, max_point.x()), std::max(y, max_point.y()));
|
| - }
|
| -
|
| - SkRect bounds = SkRect::MakeLTRB(
|
| - min_point.x(), min_point.y(), max_point.x(), max_point.y());
|
| -
|
| - // Math is borrowed from SkBBoxRecord
|
| - SkPaint::FontMetrics metrics;
|
| - paint.getFontMetrics(&metrics);
|
| -
|
| - bounds.fTop += metrics.fTop;
|
| - bounds.fBottom += metrics.fBottom;
|
| -
|
| - SkScalar pad = (metrics.fTop - metrics.fBottom) / 2;
|
| - bounds.fLeft += pad;
|
| - bounds.fRight -= pad;
|
| -
|
| - GatherPixelRefDevice::drawRect(draw, bounds, paint);
|
| - }
|
| - void drawTextOnPath(const SkDraw& draw,
|
| - const void* text,
|
| - size_t len,
|
| - const SkPath& path,
|
| - const SkMatrix* matrix,
|
| - const SkPaint& paint) override {
|
| - SkBitmap bitmap;
|
| - if (!GetBitmapFromPaint(paint, &bitmap))
|
| - return;
|
| -
|
| - // Math is borrowed from SkBBoxRecord
|
| - SkRect bounds = path.getBounds();
|
| - SkPaint::FontMetrics metrics;
|
| - paint.getFontMetrics(&metrics);
|
| -
|
| - SkScalar pad = metrics.fTop;
|
| - bounds.fLeft += pad;
|
| - bounds.fRight -= pad;
|
| - bounds.fTop += pad;
|
| - bounds.fBottom -= pad;
|
| -
|
| - GatherPixelRefDevice::drawRect(draw, bounds, paint);
|
| - }
|
| - void drawVertices(const SkDraw& draw,
|
| - SkCanvas::VertexMode,
|
| - int vertex_count,
|
| - const SkPoint verts[],
|
| - const SkPoint texs[],
|
| - const SkColor colors[],
|
| - SkXfermode* xmode,
|
| - const uint16_t indices[],
|
| - int index_count,
|
| - const SkPaint& paint) override {
|
| - GatherPixelRefDevice::drawPoints(
|
| - draw, SkCanvas::kPolygon_PointMode, vertex_count, verts, paint);
|
| - }
|
| - void drawDevice(const SkDraw&,
|
| - SkBaseDevice*,
|
| - int x,
|
| - int y,
|
| - const SkPaint&) override {}
|
| -
|
| - protected:
|
| - bool onReadPixels(const SkImageInfo& info,
|
| - void* pixels,
|
| - size_t rowBytes,
|
| - int x,
|
| - int y) override {
|
| - return false;
|
| - }
|
| -
|
| - bool onWritePixels(const SkImageInfo& info,
|
| - const void* pixels,
|
| - size_t rowBytes,
|
| - int x,
|
| - int y) override {
|
| - return false;
|
| - }
|
| -
|
| - private:
|
| - DiscardablePixelRefSet* pixel_ref_set_;
|
| -
|
| - void AddBitmap(const SkBitmap& bm, const SkRect& rect) {
|
| - SkRect canvas_rect = SkRect::MakeWH(width(), height());
|
| - SkRect paint_rect = SkRect::MakeEmpty();
|
| - if (paint_rect.intersect(rect, canvas_rect))
|
| - pixel_ref_set_->Add(bm.pixelRef(), paint_rect);
|
| - }
|
| -
|
| - bool GetBitmapFromPaint(const SkPaint& paint, SkBitmap* bm) {
|
| - SkShader* shader = paint.getShader();
|
| - if (shader) {
|
| - // Check whether the shader is a gradient in order to prevent generation
|
| - // of bitmaps from gradient shaders, which implement asABitmap.
|
| - if (SkShader::kNone_GradientType == shader->asAGradient(NULL))
|
| - return shader->isABitmap(bm, NULL, NULL);
|
| - }
|
| - return false;
|
| - }
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -void PixelRefUtils::GatherDiscardablePixelRefs(
|
| - SkPicture* picture,
|
| - std::vector<PositionPixelRef>* pixel_refs) {
|
| - pixel_refs->clear();
|
| - DiscardablePixelRefSet pixel_ref_set(pixel_refs);
|
| -
|
| - SkRect picture_bounds = picture->cullRect();
|
| - SkIRect picture_ibounds = picture_bounds.roundOut();
|
| - SkBitmap empty_bitmap;
|
| - empty_bitmap.setInfo(SkImageInfo::MakeUnknown(picture_ibounds.width(),
|
| - picture_ibounds.height()));
|
| -
|
| - GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set);
|
| - SkNoSaveLayerCanvas canvas(&device);
|
| -
|
| - // Draw the picture pinned against our top/left corner.
|
| - canvas.translate(-picture_bounds.left(), -picture_bounds.top());
|
| - canvas.drawPicture(picture);
|
| -}
|
| -
|
| -} // namespace skia
|
|
|