skia2/experimental/SkV8Example/Global.h
jcgregorio e22f45fd89 Doing the "using namespace" penance by adding in v8:: everywhere, like I should have to begin with.
Also:
  - SkWindow now has createSurface, not createCanvas.
  - Add the platform init code v8 now seems to require.
  - Fix library linkage.
  - Call isolate->Enter(); because it doesn't look
    like v8 starts with a default isolate to begin with.

BUG=skia:

Review URL: https://codereview.chromium.org/673223002
2014-10-24 12:49:17 -07:00

85 lines
2.1 KiB
C++

/*
* 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