Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1226)

Unified Diff: cc/ipc/filter_operation_struct_traits.h

Issue 2042413003: Implement cc::FilterOperation StructTraits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased + Addressed Enne's comment Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/ipc/filter_operation.typemap ('k') | cc/ipc/struct_traits_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/ipc/filter_operation_struct_traits.h
diff --git a/cc/ipc/filter_operation_struct_traits.h b/cc/ipc/filter_operation_struct_traits.h
new file mode 100644
index 0000000000000000000000000000000000000000..7fbe950e014426f84977133a56f62568d8b69104
--- /dev/null
+++ b/cc/ipc/filter_operation_struct_traits.h
@@ -0,0 +1,205 @@
+// Copyright 2016 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.
+
+#ifndef CC_IPC_FILTER_OPERATION_STRUCT_TRAITS_H_
+#define CC_IPC_FILTER_OPERATION_STRUCT_TRAITS_H_
+
+#include "cc/ipc/filter_operation.mojom.h"
+#include "cc/output/filter_operation.h"
+
+namespace mojo {
+
+namespace {
+cc::mojom::FilterType CCFilterTypeToMojo(
+ const cc::FilterOperation::FilterType& type) {
+ switch (type) {
+ case cc::FilterOperation::GRAYSCALE:
+ return cc::mojom::FilterType::GRAYSCALE;
+ case cc::FilterOperation::SEPIA:
+ return cc::mojom::FilterType::SEPIA;
+ case cc::FilterOperation::SATURATE:
+ return cc::mojom::FilterType::SATURATE;
+ case cc::FilterOperation::HUE_ROTATE:
+ return cc::mojom::FilterType::HUE_ROTATE;
+ case cc::FilterOperation::INVERT:
+ return cc::mojom::FilterType::INVERT;
+ case cc::FilterOperation::BRIGHTNESS:
+ return cc::mojom::FilterType::BRIGHTNESS;
+ case cc::FilterOperation::CONTRAST:
+ return cc::mojom::FilterType::CONTRAST;
+ case cc::FilterOperation::OPACITY:
+ return cc::mojom::FilterType::OPACITY;
+ case cc::FilterOperation::BLUR:
+ return cc::mojom::FilterType::BLUR;
+ case cc::FilterOperation::DROP_SHADOW:
+ return cc::mojom::FilterType::DROP_SHADOW;
+ case cc::FilterOperation::COLOR_MATRIX:
+ return cc::mojom::FilterType::COLOR_MATRIX;
+ case cc::FilterOperation::ZOOM:
+ return cc::mojom::FilterType::ZOOM;
+ case cc::FilterOperation::REFERENCE:
+ return cc::mojom::FilterType::REFERENCE;
+ case cc::FilterOperation::SATURATING_BRIGHTNESS:
+ return cc::mojom::FilterType::SATURATING_BRIGHTNESS;
+ case cc::FilterOperation::ALPHA_THRESHOLD:
+ NOTREACHED();
+ return cc::mojom::FilterType::ALPHA_THRESHOLD;
+ }
+ NOTREACHED();
+ return cc::mojom::FilterType::FILTER_TYPE_LAST;
+}
+
+cc::FilterOperation::FilterType MojoFilterTypeToCC(
+ const cc::mojom::FilterType& type) {
+ switch (type) {
+ case cc::mojom::FilterType::GRAYSCALE:
+ return cc::FilterOperation::GRAYSCALE;
+ case cc::mojom::FilterType::SEPIA:
+ return cc::FilterOperation::SEPIA;
+ case cc::mojom::FilterType::SATURATE:
+ return cc::FilterOperation::SATURATE;
+ case cc::mojom::FilterType::HUE_ROTATE:
+ return cc::FilterOperation::HUE_ROTATE;
+ case cc::mojom::FilterType::INVERT:
+ return cc::FilterOperation::INVERT;
+ case cc::mojom::FilterType::BRIGHTNESS:
+ return cc::FilterOperation::BRIGHTNESS;
+ case cc::mojom::FilterType::CONTRAST:
+ return cc::FilterOperation::CONTRAST;
+ case cc::mojom::FilterType::OPACITY:
+ return cc::FilterOperation::OPACITY;
+ case cc::mojom::FilterType::BLUR:
+ return cc::FilterOperation::BLUR;
+ case cc::mojom::FilterType::DROP_SHADOW:
+ return cc::FilterOperation::DROP_SHADOW;
+ case cc::mojom::FilterType::COLOR_MATRIX:
+ return cc::FilterOperation::COLOR_MATRIX;
+ case cc::mojom::FilterType::ZOOM:
+ return cc::FilterOperation::ZOOM;
+ case cc::mojom::FilterType::REFERENCE:
+ return cc::FilterOperation::REFERENCE;
+ case cc::mojom::FilterType::SATURATING_BRIGHTNESS:
+ return cc::FilterOperation::SATURATING_BRIGHTNESS;
+ case cc::mojom::FilterType::ALPHA_THRESHOLD:
+ NOTREACHED();
+ return cc::FilterOperation::ALPHA_THRESHOLD;
+ }
+ NOTREACHED();
+ return cc::FilterOperation::FILTER_TYPE_LAST;
+}
+
+} // namespace
+
+using FilterOperationMatrix = CArray<float>;
+
+template <>
+struct StructTraits<cc::mojom::FilterOperation, cc::FilterOperation> {
+ static cc::mojom::FilterType type(const cc::FilterOperation& op) {
+ return CCFilterTypeToMojo(op.type());
+ }
+
+ static float amount(const cc::FilterOperation& operation) {
+ if (operation.type() == cc::FilterOperation::COLOR_MATRIX ||
+ operation.type() == cc::FilterOperation::REFERENCE) {
+ return 0.f;
+ }
+ return operation.amount();
+ }
+
+ static gfx::Point drop_shadow_offset(const cc::FilterOperation& operation) {
+ if (operation.type() != cc::FilterOperation::DROP_SHADOW)
+ return gfx::Point();
+ return operation.drop_shadow_offset();
+ }
+
+ static uint32_t drop_shadow_color(const cc::FilterOperation& operation) {
+ if (operation.type() != cc::FilterOperation::DROP_SHADOW)
+ return 0;
+ return operation.drop_shadow_color();
+ }
+
+ static sk_sp<SkImageFilter> image_filter(
+ const cc::FilterOperation& operation) {
+ if (operation.type() != cc::FilterOperation::REFERENCE)
+ return sk_sp<SkImageFilter>();
+ return operation.image_filter();
+ }
+
+ static FilterOperationMatrix matrix(const cc::FilterOperation& operation) {
+ if (operation.type() != cc::FilterOperation::COLOR_MATRIX)
+ return FilterOperationMatrix();
+ constexpr size_t MATRIX_SIZE = 20;
+ return {MATRIX_SIZE, MATRIX_SIZE,
+ const_cast<float*>(&operation.matrix()[0])};
+ }
+
+ static int32_t zoom_inset(const cc::FilterOperation& operation) {
+ if (operation.type() != cc::FilterOperation::ZOOM)
+ return 0;
+ return operation.zoom_inset();
+ }
+
+ static bool Read(cc::mojom::FilterOperationDataView data,
+ cc::FilterOperation* out) {
+ out->set_type(MojoFilterTypeToCC(data.type()));
+ switch (out->type()) {
+ case cc::FilterOperation::GRAYSCALE:
+ case cc::FilterOperation::SEPIA:
+ case cc::FilterOperation::SATURATE:
+ case cc::FilterOperation::HUE_ROTATE:
+ case cc::FilterOperation::INVERT:
+ case cc::FilterOperation::BRIGHTNESS:
+ case cc::FilterOperation::SATURATING_BRIGHTNESS:
+ case cc::FilterOperation::CONTRAST:
+ case cc::FilterOperation::OPACITY:
+ case cc::FilterOperation::BLUR:
+ out->set_amount(data.amount());
+ return true;
+ case cc::FilterOperation::DROP_SHADOW: {
+ out->set_amount(data.amount());
+ gfx::Point offset;
+ if (!data.ReadDropShadowOffset(&offset))
+ return false;
+ out->set_drop_shadow_offset(offset);
+ out->set_drop_shadow_color(data.drop_shadow_color());
+ return true;
+ }
+ case cc::FilterOperation::COLOR_MATRIX: {
+ // TODO(fsamuel): It would be nice to modify cc::FilterOperation to
+ // avoid this extra copy.
+ constexpr size_t MATRIX_SIZE = 20;
+ float matrix_buffer[MATRIX_SIZE];
+ memset(&matrix_buffer[0], 0, sizeof(matrix_buffer));
+ FilterOperationMatrix matrix = {MATRIX_SIZE, MATRIX_SIZE,
+ &matrix_buffer[0]};
+ if (!data.ReadMatrix(&matrix))
+ return false;
+ out->set_matrix(matrix_buffer);
+ return true;
+ }
+ case cc::FilterOperation::ZOOM: {
+ if (data.amount() < 0.f || data.zoom_inset() < 0)
+ return false;
+ out->set_amount(data.amount());
+ out->set_zoom_inset(data.zoom_inset());
+ return true;
+ }
+ case cc::FilterOperation::REFERENCE: {
+ sk_sp<SkImageFilter> filter;
+ if (!data.ReadImageFilter(&filter))
+ return false;
+ out->set_image_filter(filter);
+ return true;
+ }
+ case cc::FilterOperation::ALPHA_THRESHOLD:
+ // TODO(fsamuel): We cannot serialize this type.
+ return false;
+ }
+ return false;
+ }
+};
+
+} // namespace mojo
+
+#endif // CC_IPC_FILTER_OPERATION_STRUCT_TRAITS_H_
« no previous file with comments | « cc/ipc/filter_operation.typemap ('k') | cc/ipc/struct_traits_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698