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

Unified Diff: src/core/SkValue.h

Issue 1585813004: SkValue: SkXfermode (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2016-01-15 (Friday) 14:43:14 EST Created 4 years, 11 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
Index: src/core/SkValue.h
diff --git a/src/core/SkValue.h b/src/core/SkValue.h
index dd42b3a889042f5843d847225de4c66939975951..be3d6d5349cd40be1aed19a2d842d43667e2c459 100644
--- a/src/core/SkValue.h
+++ b/src/core/SkValue.h
@@ -11,6 +11,15 @@
#include "SkTypes.h"
#include <functional>
+class SkData;
+
+#define SK_VALUE_OBJECT_TYPES(M) \
mtklein 2016/01/15 20:42:20 Let's expand this in place (for now). (For now) I
+ M(ArithmeticXfermode) \
+ M(LerpXfermode) \
+ M(OverdrawXfermode) \
+ M(PixelXorXfermode) \
+ M(ProcCoeffXfermode)
+
class SkValue {
public:
enum Type : uint32_t {
@@ -20,19 +29,22 @@ public:
Bytes, S16s, U16s, S32s, U32s, S64s, U64s, F32s, F64s,
Array,
- // 256-2147483647 may be used by Skia for public Object types.
+ kMaxBuiltin = 0xFF,
+ // 256-2147483647 may be used by Skia for public Object types.
+ #define FN(TYPE) TYPE,
+ SK_VALUE_OBJECT_TYPES(FN)
+ #undef FN
// 2147483648+ won't be used by Skia. They're open for client-specific use, testing, etc.
};
- enum Key : uint32_t {
- // Each Object type may define its own namespace of Key values,
- // so there are no pre-defined Keys here.
- //
- // This is just a reminder that they must fit in a uint32_t,
- // and that their namespace is distinct from other uint32_ts (e.g. Type).
- };
+ // Each Object type may define its own namespace of Key values,
+ // so there are no pre-defined Keys here.
+ //
+ // This is just a reminder that they must fit in a uint32_t,
+ // and that their namespace is distinct from other uint32_ts (e.g. Type).
+ typedef uint32_t Key;
SkValue();
SkValue(const SkValue&);
@@ -46,7 +58,7 @@ public:
static SkValue FromS32(int32_t);
static SkValue FromU32(uint32_t);
static SkValue FromF32(float);
- static SkValue FromBytes(const void*, size_t); // Copies.
+ static SkValue FromBytes(SkData*);
static SkValue Object(Type);
Type type() const;
@@ -57,25 +69,25 @@ public:
uint32_t u32() const;
float f32() const;
- const void* bytes() const;
- size_t count() const;
+ SkData* bytes() const;
void set(Key, SkValue);
const SkValue* get(Key) const;
void foreach(std::function<void(Key, const SkValue&)>) const;
private:
- class Bytes;
- class Object;
+ class Obj;
Type fType;
union {
- int32_t fS32;
- uint32_t fU32;
- float fF32;
- class Bytes* fBytes;
- class Object* fObject;
+ int32_t fS32;
+ uint32_t fU32;
+ float fF32;
+ SkData* fBytes;
+ Obj* fObject;
};
+
+ bool isObject() const { return fType > kMaxBuiltin; }
};
#endif//SkValue_DEFINED
« no previous file with comments | « include/effects/SkPixelXorXfermode.h ('k') | src/core/SkValue.cpp » ('j') | src/core/SkValue.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698