| /* |
| * Copyright 2013 Google Inc. |
| * |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| */ |
| |
| #ifndef SkV8Example_Global_DEFINED |
| #define SkV8Example_Global_DEFINED |
| |
| #include <map> |
| |
| #include <v8.h> |
| |
| |
| #include "SkTypes.h" |
| #include "SkEvent.h" |
| |
| class SkOSWindow; |
| |
| typedef v8::Persistent<v8::Function, v8::CopyablePersistentTraits<v8::Function> > CopyablePersistentFn; |
| |
| // Provides the global isolate and context for our V8 instance. |
| // Also implements all the global level functions. |
| class Global : SkNoncopyable { |
| public: |
| Global(v8::Isolate* isolate) |
| : fIsolate(isolate) |
| , fWindow(NULL) |
| , fLastTimerID(0) |
| { |
| gGlobal = this; |
| this->initialize(); |
| } |
| virtual ~Global() {} |
| |
| // The script will be parsed into the context this Global contains. |
| bool parseScript(const char script[]); |
| |
| v8::Local<v8::Context> getContext() { |
| return v8::Local<v8::Context>::New(fIsolate, fContext); |
| } |
| |
| v8::Isolate* getIsolate() { |
| return fIsolate; |
| } |
| |
| void setWindow(SkOSWindow* win) { |
| fWindow = win; |
| } |
| SkOSWindow* getWindow() { |
| return fWindow; |
| } |
| |
| void reportException(v8::TryCatch* tryCatch); |
| |
| private: |
| void initialize(); |
| v8::Handle<v8::Context> createRootContext(); |
| int32_t getNextTimerID(); |
| |
| static bool TimeOutProc(const SkEvent& evt); |
| |
| // Static functions that implement the global JS functions we add to |
| // the context. |
| static void SetTimeout(const v8::FunctionCallbackInfo<v8::Value>& args); |
| static void Print(const v8::FunctionCallbackInfo<v8::Value>& args); |
| static void Inval(const v8::FunctionCallbackInfo<v8::Value>& args); |
| |
| v8::Persistent<v8::Context> fContext; |
| v8::Isolate* fIsolate; |
| SkOSWindow* fWindow; |
| static Global* gGlobal; |
| |
| // Handle to the functions to call when a timeout triggers as indexed by id. |
| std::map<int32_t, CopyablePersistentFn > fTimeouts; |
| |
| // Last timer ID generated. |
| int32_t fLastTimerID; |
| }; |
| |
| #endif |