1 /* 2 * Copyright 2006 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkEvent_DEFINED 9 #define SkEvent_DEFINED 10 11 #include "SkMetaData.h" 12 13 /** Unique 32bit id used to identify an instance of SkEventSink. When events are 14 posted, they are posted to a specific sinkID. When it is time to dispatch the 15 event, the sinkID is used to find the specific SkEventSink object. If it is found, 16 its doEvent() method is called with the event. 17 */ 18 typedef uint32_t SkEventSinkID; 19 20 /** 21 * \class SkEvent 22 * 23 * When an event is dispatched from the event queue, it is either sent to 24 * the eventsink matching the target ID (if not 0), or the target proc is 25 * called (if not NULL). 26 */ 27 class SkEvent { 28 public: 29 SkEvent(); 30 explicit SkEvent(const char type[]); 31 SkEvent(const SkEvent& src); 32 ~SkEvent(); 33 34 /** Returns true if the event's type matches exactly the specified type (case sensitive) */ 35 bool isType(const char type[]) const; 36 37 /** 38 * Set the event's type to the specified string. 39 */ 40 void setType(const char type[]); 41 42 /** 43 * Return the event's unnamed 32bit field. Default value is 0 44 */ getFast32()45 uint32_t getFast32() const { return f32; } 46 47 /** 48 * Set the event's unnamed 32bit field. 49 */ setFast32(uint32_t x)50 void setFast32(uint32_t x) { f32 = x; } 51 52 /** Return true if the event contains the named 32bit field, and return the field 53 in value (if value is non-null). If there is no matching named field, return false 54 and ignore the value parameter. 55 */ 56 bool findS32(const char name[], int32_t* value = nullptr) const { 57 return fMeta.findS32(name, value); 58 } 59 /** Return true if the event contains the named SkScalar field, and return the field 60 in value (if value is non-null). If there is no matching named field, return false 61 and ignore the value parameter. 62 */ 63 bool findScalar(const char name[], SkScalar* value = nullptr) const { 64 return fMeta.findScalar(name, value); 65 } 66 /** Return true if the event contains the named SkScalar field, and return the fields 67 in value[] (if value is non-null), and return the number of SkScalars in count (if count is non-null). 68 If there is no matching named field, return false and ignore the value and count parameters. 69 */ 70 const SkScalar* findScalars(const char name[], int* count, SkScalar values[] = nullptr) const { 71 return fMeta.findScalars(name, count, values); 72 } 73 /** Return the value of the named string field, or if no matching named field exists, return null. 74 */ findString(const char name[])75 const char* findString(const char name[]) const { return fMeta.findString(name); } 76 /** Return true if the event contains the named pointer field, and return the field 77 in value (if value is non-null). If there is no matching named field, return false 78 and ignore the value parameter. 79 */ findPtr(const char name[],void ** value)80 bool findPtr(const char name[], void** value) const { return fMeta.findPtr(name, value); } findBool(const char name[],bool * value)81 bool findBool(const char name[], bool* value) const { return fMeta.findBool(name, value); } 82 const void* findData(const char name[], size_t* byteCount = nullptr) const { 83 return fMeta.findData(name, byteCount); 84 } 85 86 /** Returns true if ethe event contains the named 32bit field, and if it equals the specified value */ hasS32(const char name[],int32_t value)87 bool hasS32(const char name[], int32_t value) const { return fMeta.hasS32(name, value); } 88 /** Returns true if ethe event contains the named SkScalar field, and if it equals the specified value */ hasScalar(const char name[],SkScalar value)89 bool hasScalar(const char name[], SkScalar value) const { return fMeta.hasScalar(name, value); } 90 /** Returns true if ethe event contains the named string field, and if it equals (using strcmp) the specified value */ hasString(const char name[],const char value[])91 bool hasString(const char name[], const char value[]) const { return fMeta.hasString(name, value); } 92 /** Returns true if ethe event contains the named pointer field, and if it equals the specified value */ hasPtr(const char name[],void * value)93 bool hasPtr(const char name[], void* value) const { return fMeta.hasPtr(name, value); } hasBool(const char name[],bool value)94 bool hasBool(const char name[], bool value) const { return fMeta.hasBool(name, value); } hasData(const char name[],const void * data,size_t byteCount)95 bool hasData(const char name[], const void* data, size_t byteCount) const { 96 return fMeta.hasData(name, data, byteCount); 97 } 98 99 /** Add/replace the named 32bit field to the event. In XML use the subelement <data name=... s32=... /> */ setS32(const char name[],int32_t value)100 void setS32(const char name[], int32_t value) { fMeta.setS32(name, value); } 101 /** Add/replace the named SkScalar field to the event. In XML use the subelement <data name=... scalar=... /> */ setScalar(const char name[],SkScalar value)102 void setScalar(const char name[], SkScalar value) { fMeta.setScalar(name, value); } 103 /** Add/replace the named SkScalar[] field to the event. */ 104 SkScalar* setScalars(const char name[], int count, const SkScalar values[] = nullptr) { 105 return fMeta.setScalars(name, count, values); 106 } 107 /** Add/replace the named string field to the event. In XML use the subelement <data name=... string=... */ setString(const char name[],const char value[])108 void setString(const char name[], const char value[]) { fMeta.setString(name, value); } 109 /** Add/replace the named pointer field to the event. There is no XML equivalent for this call */ setPtr(const char name[],void * value)110 void setPtr(const char name[], void* value) { fMeta.setPtr(name, value); } setBool(const char name[],bool value)111 void setBool(const char name[], bool value) { fMeta.setBool(name, value); } setData(const char name[],const void * data,size_t byteCount)112 void setData(const char name[], const void* data, size_t byteCount) { 113 fMeta.setData(name, data, byteCount); 114 } 115 116 /** Return the underlying metadata object */ getMetaData()117 SkMetaData& getMetaData() { return fMeta; } 118 /** Return the underlying metadata object */ getMetaData()119 const SkMetaData& getMetaData() const { return fMeta; } 120 121 /////////////////////////////////////////////////////////////////////////// 122 123 private: 124 SkMetaData fMeta; 125 char* fType; 126 uint32_t f32; 127 128 void initialize(const char* type); 129 }; 130 131 #endif 132