blob: 8f843772662c4c19996533bb6ed7ed80d344378a [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef EMBEDDERS_OPENGLUI_COMMON_VM_GLUE_H_
#define EMBEDDERS_OPENGLUI_COMMON_VM_GLUE_H_
#include <stdlib.h>
#include "embedders/openglui/common/events.h"
#include "embedders/openglui/common/isized.h"
#include "include/dart_api.h"
class VMGlue {
public:
explicit VMGlue(ISized* surface,
const char* script_path,
const char* extension_script = NULL,
const char* main_script = NULL,
int setup_flag = 0);
~VMGlue() {
delete[] main_script_;
delete[] extension_script_;
}
int InitializeVM();
int StartMainIsolate();
int CallSetup(bool force = false);
int CallUpdate();
int CallShutdown();
int OnMotionEvent(const char* funtion, int64_t when,
float move_x, float move_y);
int OnKeyEvent(const char* funtion, int64_t when, int32_t key_code,
bool isAltKeyDown, bool isCtrlKeyDown, bool isShiftKeyDown,
int32_t repeat);
inline void OnAccelerometerEvent(float x, float y, float z) {
if (x != x_ || y != y_ || z != z_) {
x_ = x;
y_ = y;
z_ = z;
accelerometer_changed_ = true;
}
}
void FinishMainIsolate();
private:
int Invoke(const char *function, int argc, Dart_Handle* args,
bool failIfNotDefined = true);
static Dart_Handle CheckError(Dart_Handle);
static Dart_Isolate CreateIsolateAndSetupHelper(const char* script_uri,
const char* main,
void* data,
char** error);
static Dart_Isolate CreateIsolateAndSetup(const char* script_uri,
const char* main,
void* data, char** error);
static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag,
Dart_Handle library,
Dart_Handle urlHandle);
static Dart_Handle LoadSourceFromFile(const char* url);
static void ShutdownIsolate(void* callback_data);
static bool initialized_vm_;
static char* extension_script_;
ISized* surface_;
Dart_Isolate isolate_;
bool initialized_script_;
char* main_script_;
float x_, y_, z_; // Last values from accelerometer.
bool accelerometer_changed_;
int setup_flag_;
};
#endif // EMBEDDERS_OPENGLUI_COMMON_VM_GLUE_H_