Index: cc/proto/skia_conversions.cc |
diff --git a/cc/proto/skia_conversions.cc b/cc/proto/skia_conversions.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..84acdd4cdbb144b109e23193da5a49c5cad38249 |
--- /dev/null |
+++ b/cc/proto/skia_conversions.cc |
@@ -0,0 +1,221 @@ |
+// Copyright 2015 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 "cc/proto/skia_conversions.h" |
+ |
+#include "base/logging.h" |
+#include "cc/proto/gfx_conversions.h" |
+#include "cc/proto/skrrect.pb.h" |
+#include "third_party/skia/include/core/SkRRect.h" |
+#include "ui/gfx/skia_util.h" |
+ |
+namespace cc { |
+ |
+namespace { |
+ |
+void SkPointToProto(const SkPoint& point, proto::PointF* proto) { |
+ PointFToProto(gfx::PointF(point.x(), point.y()), proto); |
+} |
+ |
+SkPoint ProtoToSkPoint(const proto::PointF& proto) { |
+ gfx::PointF point = ProtoToPointF(proto); |
+ return SkPoint::Make(point.x(), point.y()); |
+} |
+ |
+} // namespace |
+ |
+SkRegion::Op SkRegionOpFromProto(proto::SkRegion::Op op) { |
+ switch (op) { |
+ case proto::SkRegion::Op_Difference: |
+ return SkRegion::Op::kDifference_Op; |
+ case proto::SkRegion::Op_Intersect: |
+ return SkRegion::Op::kIntersect_Op; |
+ case proto::SkRegion::Op_Union: |
+ return SkRegion::Op::kUnion_Op; |
+ case proto::SkRegion::Op_XOR: |
+ return SkRegion::Op::kXOR_Op; |
+ case proto::SkRegion::Op_ReverseDifference: |
+ return SkRegion::Op::kReverseDifference_Op; |
+ case proto::SkRegion::Op_Replace: |
+ return SkRegion::Op::kReplace_Op; |
+ } |
+ return SkRegion::Op::kDifference_Op; |
+} |
+ |
+proto::SkRegion::Op SkRegionOpToProto(SkRegion::Op op) { |
+ switch (op) { |
+ case SkRegion::Op::kDifference_Op: |
+ return proto::SkRegion::Op_Difference; |
+ case SkRegion::Op::kIntersect_Op: |
+ return proto::SkRegion::Op_Intersect; |
+ case SkRegion::Op::kUnion_Op: |
+ return proto::SkRegion::Op_Union; |
+ case SkRegion::Op::kXOR_Op: |
+ return proto::SkRegion::Op_XOR; |
+ case SkRegion::Op::kReverseDifference_Op: |
+ return proto::SkRegion::Op_ReverseDifference; |
+ case SkRegion::Op::kReplace_Op: |
+ return proto::SkRegion::Op_Replace; |
+ } |
+ return proto::SkRegion::Op_Difference; |
+} |
+ |
+SkXfermode::Mode SkXfermodeModeFromProto(proto::SkXfermode::Mode mode) { |
+ switch (mode) { |
+ case proto::SkXfermode::Mode_Clear: |
+ return SkXfermode::Mode::kClear_Mode; |
+ case proto::SkXfermode::Mode_Src: |
+ return SkXfermode::Mode::kSrc_Mode; |
+ case proto::SkXfermode::Mode_Dst: |
+ return SkXfermode::Mode::kDst_Mode; |
+ case proto::SkXfermode::Mode_SrcOver: |
+ return SkXfermode::Mode::kSrcOver_Mode; |
+ case proto::SkXfermode::Mode_DstOver: |
+ return SkXfermode::Mode::kDstOver_Mode; |
+ case proto::SkXfermode::Mode_SrcIn: |
+ return SkXfermode::Mode::kSrcIn_Mode; |
+ case proto::SkXfermode::Mode_DstIn: |
+ return SkXfermode::Mode::kDstIn_Mode; |
+ case proto::SkXfermode::Mode_SrcOut: |
+ return SkXfermode::Mode::kSrcOut_Mode; |
+ case proto::SkXfermode::Mode_DstOut: |
+ return SkXfermode::Mode::kDstOut_Mode; |
+ case proto::SkXfermode::Mode_SrcATop: |
+ return SkXfermode::Mode::kSrcATop_Mode; |
+ case proto::SkXfermode::Mode_DstATop: |
+ return SkXfermode::Mode::kDstATop_Mode; |
+ case proto::SkXfermode::Mode_XOR: |
+ return SkXfermode::Mode::kXor_Mode; |
+ case proto::SkXfermode::Mode_Plus: |
+ return SkXfermode::Mode::kPlus_Mode; |
+ case proto::SkXfermode::Mode_Modulate: |
+ return SkXfermode::Mode::kModulate_Mode; |
+ case proto::SkXfermode::Mode_Screen: |
+ return SkXfermode::Mode::kScreen_Mode; |
+ case proto::SkXfermode::Mode_Overlay: |
+ return SkXfermode::Mode::kOverlay_Mode; |
+ case proto::SkXfermode::Mode_Darken: |
+ return SkXfermode::Mode::kDarken_Mode; |
+ case proto::SkXfermode::Mode_Lighten: |
+ return SkXfermode::Mode::kLighten_Mode; |
+ case proto::SkXfermode::Mode_ColorDodge: |
+ return SkXfermode::Mode::kColorDodge_Mode; |
+ case proto::SkXfermode::Mode_ColorBurn: |
+ return SkXfermode::Mode::kColorBurn_Mode; |
+ case proto::SkXfermode::Mode_HardLight: |
+ return SkXfermode::Mode::kHardLight_Mode; |
+ case proto::SkXfermode::Mode_SoftLight: |
+ return SkXfermode::Mode::kSoftLight_Mode; |
+ case proto::SkXfermode::Mode_Difference: |
+ return SkXfermode::Mode::kDifference_Mode; |
+ case proto::SkXfermode::Mode_Exclusion: |
+ return SkXfermode::Mode::kExclusion_Mode; |
+ case proto::SkXfermode::Mode_Multiply: |
+ return SkXfermode::Mode::kMultiply_Mode; |
+ case proto::SkXfermode::Mode_Hue: |
+ return SkXfermode::Mode::kHue_Mode; |
+ case proto::SkXfermode::Mode_Saturation: |
+ return SkXfermode::Mode::kSaturation_Mode; |
+ case proto::SkXfermode::Mode_Color: |
+ return SkXfermode::Mode::kColor_Mode; |
+ case proto::SkXfermode::Mode_Luminosity: |
+ return SkXfermode::Mode::kLuminosity_Mode; |
+ } |
+ return SkXfermode::Mode::kClear_Mode; |
+} |
+ |
+proto::SkXfermode::Mode SkXfermodeModeToProto(SkXfermode::Mode mode) { |
+ switch (mode) { |
+ case SkXfermode::Mode::kClear_Mode: |
+ return proto::SkXfermode::Mode_Clear; |
+ case SkXfermode::Mode::kSrc_Mode: |
+ return proto::SkXfermode::Mode_Src; |
+ case SkXfermode::Mode::kDst_Mode: |
+ return proto::SkXfermode::Mode_Dst; |
+ case SkXfermode::Mode::kSrcOver_Mode: |
+ return proto::SkXfermode::Mode_SrcOver; |
+ case SkXfermode::Mode::kDstOver_Mode: |
+ return proto::SkXfermode::Mode_DstOver; |
+ case SkXfermode::Mode::kSrcIn_Mode: |
+ return proto::SkXfermode::Mode_SrcIn; |
+ case SkXfermode::Mode::kDstIn_Mode: |
+ return proto::SkXfermode::Mode_DstIn; |
+ case SkXfermode::Mode::kSrcOut_Mode: |
+ return proto::SkXfermode::Mode_SrcOut; |
+ case SkXfermode::Mode::kDstOut_Mode: |
+ return proto::SkXfermode::Mode_DstOut; |
+ case SkXfermode::Mode::kSrcATop_Mode: |
+ return proto::SkXfermode::Mode_SrcATop; |
+ case SkXfermode::Mode::kDstATop_Mode: |
+ return proto::SkXfermode::Mode_DstATop; |
+ case SkXfermode::Mode::kXor_Mode: |
+ return proto::SkXfermode::Mode_XOR; |
+ case SkXfermode::Mode::kPlus_Mode: |
+ return proto::SkXfermode::Mode_Plus; |
+ case SkXfermode::Mode::kModulate_Mode: |
+ return proto::SkXfermode::Mode_Modulate; |
+ case SkXfermode::Mode::kScreen_Mode: |
+ return proto::SkXfermode::Mode_Screen; |
+ case SkXfermode::Mode::kOverlay_Mode: |
+ return proto::SkXfermode::Mode_Overlay; |
+ case SkXfermode::Mode::kDarken_Mode: |
+ return proto::SkXfermode::Mode_Darken; |
+ case SkXfermode::Mode::kLighten_Mode: |
+ return proto::SkXfermode::Mode_Lighten; |
+ case SkXfermode::Mode::kColorDodge_Mode: |
+ return proto::SkXfermode::Mode_ColorDodge; |
+ case SkXfermode::Mode::kColorBurn_Mode: |
+ return proto::SkXfermode::Mode_ColorBurn; |
+ case SkXfermode::Mode::kHardLight_Mode: |
+ return proto::SkXfermode::Mode_HardLight; |
+ case SkXfermode::Mode::kSoftLight_Mode: |
+ return proto::SkXfermode::Mode_SoftLight; |
+ case SkXfermode::Mode::kDifference_Mode: |
+ return proto::SkXfermode::Mode_Difference; |
+ case SkXfermode::Mode::kExclusion_Mode: |
+ return proto::SkXfermode::Mode_Exclusion; |
+ case SkXfermode::Mode::kMultiply_Mode: |
+ return proto::SkXfermode::Mode_Multiply; |
+ case SkXfermode::Mode::kHue_Mode: |
+ return proto::SkXfermode::Mode_Hue; |
+ case SkXfermode::Mode::kSaturation_Mode: |
+ return proto::SkXfermode::Mode_Saturation; |
+ case SkXfermode::Mode::kColor_Mode: |
+ return proto::SkXfermode::Mode_Color; |
+ case SkXfermode::Mode::kLuminosity_Mode: |
+ return proto::SkXfermode::Mode_Luminosity; |
+ } |
+ return proto::SkXfermode::Mode_Clear; |
+} |
+ |
+void SkRRectToProto(const SkRRect& rect, proto::SkRRect* proto) { |
+ RectFToProto(gfx::SkRectToRectF(rect.rect()), proto->mutable_rect()); |
+ |
+ SkPointToProto(rect.radii(SkRRect::kUpperLeft_Corner), |
+ proto->mutable_radii_upper_left()); |
+ SkPointToProto(rect.radii(SkRRect::kUpperRight_Corner), |
+ proto->mutable_radii_upper_right()); |
+ SkPointToProto(rect.radii(SkRRect::kLowerRight_Corner), |
+ proto->mutable_radii_lower_right()); |
+ SkPointToProto(rect.radii(SkRRect::kLowerLeft_Corner), |
+ proto->mutable_radii_lower_left()); |
+} |
+ |
+SkRRect ProtoToSkRRect(const proto::SkRRect& proto) { |
+ SkRect parsed_rect = gfx::RectFToSkRect(ProtoToRectF(proto.rect())); |
+ SkVector parsed_radii[4]; |
+ parsed_radii[SkRRect::kUpperLeft_Corner] = |
+ ProtoToSkPoint(proto.radii_upper_left()); |
+ parsed_radii[SkRRect::kUpperRight_Corner] = |
+ ProtoToSkPoint(proto.radii_upper_right()); |
+ parsed_radii[SkRRect::kLowerRight_Corner] = |
+ ProtoToSkPoint(proto.radii_lower_right()); |
+ parsed_radii[SkRRect::kLowerLeft_Corner] = |
+ ProtoToSkPoint(proto.radii_lower_left()); |
+ SkRRect rect; |
+ rect.setRectRadii(parsed_rect, parsed_radii); |
+ return rect; |
+} |
+ |
+} // namespace cc |