diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-25 23:46:26 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-25 23:46:26 +0000 |
commit | d8c35d690b547ac283a4b3493cf39b2c1021e7e0 (patch) | |
tree | 4b180f1ed190cffda05fb474778496d44afe8197 /content | |
parent | 6ebbaa617f76d0fc10c10391c457a74bc6f4807c (diff) | |
download | chromium_src-d8c35d690b547ac283a4b3493cf39b2c1021e7e0.zip chromium_src-d8c35d690b547ac283a4b3493cf39b2c1021e7e0.tar.gz chromium_src-d8c35d690b547ac283a4b3493cf39b2c1021e7e0.tar.bz2 |
Add pickling traits for the WebFilterOperations class.
This class will be part of the WebCompositorFrame class for transport
under ubercompositor.
R=piman,jam@chromium.org
BUG=146080
Review URL: https://chromiumcodereview.appspot.com/10966050
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158687 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/common/cc_messages.cc | 173 | ||||
-rw-r--r-- | content/common/cc_messages.h | 29 |
2 files changed, 199 insertions, 3 deletions
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc index 374d065..a8243f6 100644 --- a/content/common/cc_messages.cc +++ b/content/common/cc_messages.cc @@ -5,6 +5,9 @@ #include "content/common/cc_messages.h" #include "content/public/common/common_param_traits.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebData.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebFilterOperations.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebTransformationMatrix.h" namespace IPC { @@ -35,6 +38,176 @@ void ParamTraits<WebKit::WebData>::Log(const param_type& p, std::string* l) { l->append(")"); } +void ParamTraits<WebKit::WebFilterOperation>::Write( + Message* m, const param_type& p) { + WriteParam(m, p.type()); + switch (p.type()) { + case WebKit::WebFilterOperation::FilterTypeGrayscale: + case WebKit::WebFilterOperation::FilterTypeSepia: + case WebKit::WebFilterOperation::FilterTypeSaturate: + case WebKit::WebFilterOperation::FilterTypeHueRotate: + case WebKit::WebFilterOperation::FilterTypeInvert: + case WebKit::WebFilterOperation::FilterTypeBrightness: + case WebKit::WebFilterOperation::FilterTypeContrast: + case WebKit::WebFilterOperation::FilterTypeOpacity: + case WebKit::WebFilterOperation::FilterTypeBlur: + WriteParam(m, p.amount()); + break; + case WebKit::WebFilterOperation::FilterTypeDropShadow: + WriteParam(m, p.dropShadowOffset()); + WriteParam(m, p.amount()); + WriteParam(m, p.dropShadowColor()); + break; + case WebKit::WebFilterOperation::FilterTypeColorMatrix: + for (int i = 0; i < 20; ++i) + WriteParam(m, p.matrix()[i]); + break; + case WebKit::WebFilterOperation::FilterTypeZoom: + WriteParam(m, p.zoomRect()); + WriteParam(m, p.amount()); + break; + } +} + +bool ParamTraits<WebKit::WebFilterOperation>::Read( + const Message* m, PickleIterator* iter, param_type* r) { + WebKit::WebFilterOperation::FilterType type; + float amount; + WebKit::WebPoint dropShadowOffset; + WebKit::WebColor dropShadowColor; + SkScalar matrix[20]; + WebKit::WebRect zoomRect; + + if (!ReadParam(m, iter, &type)) + return false; + r->setType(type); + + bool success = false; + switch (type) { + case WebKit::WebFilterOperation::FilterTypeGrayscale: + case WebKit::WebFilterOperation::FilterTypeSepia: + case WebKit::WebFilterOperation::FilterTypeSaturate: + case WebKit::WebFilterOperation::FilterTypeHueRotate: + case WebKit::WebFilterOperation::FilterTypeInvert: + case WebKit::WebFilterOperation::FilterTypeBrightness: + case WebKit::WebFilterOperation::FilterTypeContrast: + case WebKit::WebFilterOperation::FilterTypeOpacity: + case WebKit::WebFilterOperation::FilterTypeBlur: + if (ReadParam(m, iter, &amount)) { + r->setAmount(amount); + success = true; + } + break; + case WebKit::WebFilterOperation::FilterTypeDropShadow: + if (ReadParam(m, iter, &dropShadowOffset) && + ReadParam(m, iter, &amount) && + ReadParam(m, iter, &dropShadowColor)) { + r->setDropShadowOffset(dropShadowOffset); + r->setAmount(amount); + r->setDropShadowColor(dropShadowColor); + success = true; + } + break; + case WebKit::WebFilterOperation::FilterTypeColorMatrix: { + int i; + for (i = 0; i < 20; ++i) { + if (!ReadParam(m, iter, &matrix[i])) + break; + } + if (i == 20) { + r->setMatrix(matrix); + success = true; + } + break; + } + case WebKit::WebFilterOperation::FilterTypeZoom: + if (ReadParam(m, iter, &zoomRect) && + ReadParam(m, iter, &amount)) { + r->setZoomRect(zoomRect); + r->setAmount(amount); + success = true; + } + break; + } + return success; +} + +void ParamTraits<WebKit::WebFilterOperation>::Log( + const param_type& p, std::string* l) { + l->append("("); + LogParam(static_cast<unsigned>(p.type()), l); + l->append(", "); + + switch (p.type()) { + case WebKit::WebFilterOperation::FilterTypeGrayscale: + case WebKit::WebFilterOperation::FilterTypeSepia: + case WebKit::WebFilterOperation::FilterTypeSaturate: + case WebKit::WebFilterOperation::FilterTypeHueRotate: + case WebKit::WebFilterOperation::FilterTypeInvert: + case WebKit::WebFilterOperation::FilterTypeBrightness: + case WebKit::WebFilterOperation::FilterTypeContrast: + case WebKit::WebFilterOperation::FilterTypeOpacity: + case WebKit::WebFilterOperation::FilterTypeBlur: + LogParam(p.amount(), l); + break; + case WebKit::WebFilterOperation::FilterTypeDropShadow: + LogParam(p.dropShadowOffset(), l); + l->append(", "); + LogParam(p.amount(), l); + l->append(", "); + LogParam(p.dropShadowColor(), l); + break; + case WebKit::WebFilterOperation::FilterTypeColorMatrix: + for (int i = 0; i < 20; ++i) { + if (i) + l->append(", "); + LogParam(p.matrix()[i], l); + } + break; + case WebKit::WebFilterOperation::FilterTypeZoom: + LogParam(p.zoomRect(), l); + l->append(", "); + LogParam(p.amount(), l); + break; + } + l->append(")"); +} + +void ParamTraits<WebKit::WebFilterOperations>::Write( + Message* m, const param_type& p) { + WriteParam(m, p.size()); + for (std::size_t i = 0; i < p.size(); ++i) { + WriteParam(m, p.at(i)); + } +} + +bool ParamTraits<WebKit::WebFilterOperations>::Read( + const Message* m, PickleIterator* iter, param_type* r) { + size_t count; + if (!ReadParam(m, iter, &count)) + return false; + + for (std::size_t i = 0; i < count; ++i) { + WebKit::WebFilterOperation op = + WebKit::WebFilterOperation::createEmptyFilter(); + if (!ReadParam(m, iter, &op)) + return false; + r->append(op); + } + return true; +} + +void ParamTraits<WebKit::WebFilterOperations>::Log( + const param_type& p, std::string* l) { + l->append("("); + for (std::size_t i = 0; i < p.size(); ++i) { + if (i) + l->append(", "); + LogParam(p.at(i), l); + } + l->append(")"); +} + void ParamTraits<WebKit::WebTransformationMatrix>::Write( Message* m, const param_type& p) { WriteParam(m, p.m11()); diff --git a/content/common/cc_messages.h b/content/common/cc_messages.h index 52b8020..4e5d337 100644 --- a/content/common/cc_messages.h +++ b/content/common/cc_messages.h @@ -3,16 +3,20 @@ // found in the LICENSE file. // // IPC Messages sent between compositor instances. -// Multiply-included message file, hence no include guard. #include "content/common/content_export.h" #include "ipc/ipc_message_macros.h" -#include "third_party/WebKit/Source/Platform/chromium/public/WebData.h" -#include "third_party/WebKit/Source/Platform/chromium/public/WebTransformationMatrix.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebFilterOperation.h" #ifndef CONTENT_COMMON_CC_MESSAGES_H_ #define CONTENT_COMMON_CC_MESSAGES_H_ +namespace WebKit { +class WebData; +class WebFilterOperations; +class WebTransformationMatrix; +} + namespace IPC { template <> @@ -24,6 +28,22 @@ struct ParamTraits<WebKit::WebData> { }; template <> +struct ParamTraits<WebKit::WebFilterOperation> { + typedef WebKit::WebFilterOperation param_type; + static void Write(Message* m, const param_type& p); + static bool Read(const Message* m, PickleIterator* iter, param_type* r); + static void Log(const param_type& p, std::string* l); +}; + +template <> +struct ParamTraits<WebKit::WebFilterOperations> { + typedef WebKit::WebFilterOperations param_type; + static void Write(Message* m, const param_type& p); + static bool Read(const Message* m, PickleIterator* iter, param_type* r); + static void Log(const param_type& p, std::string* l); +}; + +template <> struct ParamTraits<WebKit::WebTransformationMatrix> { typedef WebKit::WebTransformationMatrix param_type; static void Write(Message* m, const param_type& p); @@ -35,7 +55,10 @@ struct ParamTraits<WebKit::WebTransformationMatrix> { #endif // CONTENT_COMMON_CC_MESSAGES_H_ +// Multiply-included message file, hence no include guard. #define IPC_MESSAGE_START CCMsgStart #undef IPC_MESSAGE_EXPORT #define IPC_MESSAGE_EXPORT CONTENT_EXPORT + +IPC_ENUM_TRAITS(WebKit::WebFilterOperation::FilterType) |