blob: cda3a6266984ae7624f48ec96d0ceb1229d8427d [file] [log] [blame]
// Copyright 2017 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 "ui/gfx/image/mojom/image_skia_mojom_traits.h"
#include <string.h>
#include "base/check_op.h"
namespace mojo {
// static
SkBitmap
StructTraits<gfx::mojom::ImageSkiaRepDataView, gfx::ImageSkiaRep>::bitmap(
const gfx::ImageSkiaRep& input) {
SkBitmap bitmap = input.GetBitmap();
DCHECK(!bitmap.drawsNothing());
CHECK_EQ(bitmap.colorType(), kN32_SkColorType);
return bitmap;
}
// static
float StructTraits<gfx::mojom::ImageSkiaRepDataView, gfx::ImageSkiaRep>::scale(
const gfx::ImageSkiaRep& input) {
const float scale = input.unscaled() ? 0.0f : input.scale();
DCHECK_GE(scale, 0.0f);
return scale;
}
// static
bool StructTraits<gfx::mojom::ImageSkiaRepDataView, gfx::ImageSkiaRep>::Read(
gfx::mojom::ImageSkiaRepDataView data,
gfx::ImageSkiaRep* out) {
// An acceptable scale must be greater than or equal to 0.
if (data.scale() < 0)
return false;
SkBitmap bitmap;
if (!data.ReadBitmap(&bitmap))
return false;
// Null/uninitialized bitmaps are not allowed, and an ImageSkiaRep is never
// empty-sized either.
if (bitmap.drawsNothing())
return false;
// Similar to BitmapN32, ImageSkiaReps are expected to have an N32 bitmap
// type.
if (bitmap.colorType() != kN32_SkColorType)
return false;
*out = gfx::ImageSkiaRep(bitmap, data.scale());
return true;
}
// static
std::vector<gfx::ImageSkiaRep>
StructTraits<gfx::mojom::ImageSkiaDataView, gfx::ImageSkia>::image_reps(
const gfx::ImageSkia& input) {
// Trigger the image to load everything.
input.EnsureRepsForSupportedScales();
return input.image_reps();
}
// static
bool StructTraits<gfx::mojom::ImageSkiaDataView, gfx::ImageSkia>::Read(
gfx::mojom::ImageSkiaDataView data,
gfx::ImageSkia* out) {
DCHECK(out->isNull());
std::vector<gfx::ImageSkiaRep> image_reps;
if (!data.ReadImageReps(&image_reps))
return false;
for (const auto& image_rep : image_reps)
out->AddRepresentation(image_rep);
if (out->isNull())
return false;
out->SetReadOnly();
return true;
}
} // namespace mojo