Browse Source

Remove UI object as the UI subsystem is now exposed to script, remove interim dev enums, initialize Editor UI in Editor class

Josh Engebretson 10 years ago
parent
commit
63f9d6bb0a

+ 12 - 0
Script/AtomicEditor/editor/Editor.ts

@@ -23,6 +23,8 @@ class Editor extends Atomic.ScriptObject {
 
         Editor.instance = this;
 
+        this.initUI();
+
         this.editorLicense = new EditorLicense();
 
         Preferences.getInstance().read();
@@ -46,6 +48,16 @@ class Editor extends Atomic.ScriptObject {
         this.parseArguments();
     }
 
+    initUI() {
+
+      var ui = Atomic.ui;
+      ui.loadSkin("AtomicEditor/resources/default_skin/skin.tb.txt", "AtomicEditor/editor/skin/skin.tb.txt");
+      ui.addFont("AtomicEditor/resources/vera.ttf", "Vera");
+      ui.addFont("AtomicEditor/resources/MesloLGS-Regular.ttf", "Monaco");
+      ui.setDefaultFont("Vera", 12);
+
+    }
+
     handleEditorLoadProject(event: EditorEvents.LoadProjectEvent): boolean {
 
         var system = ToolCore.getToolSystem();

+ 1 - 1
Script/Packages/Atomic/UI.json

@@ -3,7 +3,7 @@
 	"sources" : ["Source/Atomic/UI"],
 	"includes" : ["<Atomic/Graphics/Material.h>", "<Atomic/Scene/Node.h>", "<Atomic/Scene/Scene.h>", "<Atomic/Graphics/Texture2D.h>",
 								"<Atomic/UI/UIBatch.h>"],
-	"classes" : ["UIWidget", "UILayout", "UIView", "UIWindow", "UIButton", "UITextField",
+	"classes" : ["UI", "UIWidget", "UILayout", "UIView", "UIWindow", "UIButton", "UITextField",
 								"UISelectItem", "UISelectItemSource", "UIMenuWindow", "UIEditField",
 								"UIImageWidget", "UIClickLabel", "UICheckBox", "UIMenuItem", "UIMenuItemSource",
 								"UISelectList", "UIListView", "UIMessageWindow", "UILayoutParams", "UIFontDescription",

+ 2 - 0
Script/TypeScript/AtomicWork.d.ts

@@ -18,6 +18,7 @@ declare module Atomic {
     export var input: Input;
     export var fileSystem: FileSystem;
     export var network: Network;
+    export var ui: UI;
 
     export var editorMode: Editor.EditorMode;
 
@@ -182,6 +183,7 @@ declare module Atomic {
     export function getResourceCache(): ResourceCache;
     export function getRenderer(): Atomic.Renderer;
     export function getNetwork(): Atomic.Network;
+    export function getUI(): Atomic.UI;
 
     export function assert();
     export function js_module_read_file(path: string);

+ 0 - 4
Source/AtomicEditor/Application/AEEditorApp.cpp

@@ -56,10 +56,6 @@ void AEEditorApp::Start()
     // move UI initialization to JS
     UI* ui = GetSubsystem<UI>();
     ui->Initialize("AtomicEditor/resources/language/lng_en.tb.txt");
-    ui->LoadSkin("AtomicEditor/resources/default_skin/skin.tb.txt", "AtomicEditor/editor/skin/skin.tb.txt");
-    ui->AddFont("AtomicEditor/resources/vera.ttf", "Vera");
-    ui->AddFont("AtomicEditor/resources/MesloLGS-Regular.ttf", "Monaco");
-    ui->SetDefaultFont("Vera", 12);
 
     SubscribeToEvent(E_JSERROR, HANDLER(AEEditorApp, HandleJSError));
     SubscribeToEvent(E_EXITREQUESTED, HANDLER(AEEditorApp, HandleExitRequested));

+ 16 - 1
Source/AtomicJS/Javascript/JSAtomic.cpp

@@ -10,6 +10,7 @@
 #include <Atomic/Graphics/Renderer.h>
 #include <Atomic/Graphics/Graphics.h>
 #include <Atomic/Engine/Engine.h>
+#include <Atomic/UI/UI.h>
 
 #ifdef ATOMIC_NETWORK
 #include <Atomic/Network/Network.h>
@@ -156,6 +157,14 @@ static int js_atomic_GetNetwork(duk_context* ctx)
 }
 #endif
 
+static int js_atomic_GetUI(duk_context* ctx)
+{
+    JSVM* vm = JSVM::GetJSVM(ctx);
+    js_push_class_object_instance(ctx, vm->GetSubsystem<UI>());
+    return 1;
+}
+
+
 static int js_atomic_script(duk_context* ctx)
 {
     JSVM* vm = JSVM::GetJSVM(ctx);
@@ -361,7 +370,13 @@ void jsapi_init_atomic(JSVM* vm)
     duk_put_prop_string(ctx, -2, "network");
 #endif
 
-    // end filesystems
+    duk_push_c_function(ctx, js_atomic_GetUI, 0);
+    duk_put_prop_string(ctx, -2, "getUI");
+
+    js_push_class_object_instance(ctx, vm->GetSubsystem<UI>(), "UI");
+    duk_put_prop_string(ctx, -2, "ui");
+
+    // end subsystems
 
     duk_push_c_function(ctx, js_atomic_script, 1);
     duk_put_prop_string(ctx, -2, "script");

+ 3 - 133
Source/AtomicJS/Javascript/JSUIAPI.cpp

@@ -166,10 +166,9 @@ void jsapi_init_ui(JSVM* vm)
 {
     duk_context* ctx = vm->GetJSContext();
 
-    // UI object
+    // UI class object
     duk_get_global_string(ctx, "Atomic");
-
-    duk_push_object(ctx);
+    duk_get_prop_string(ctx, -1, "UI");
 
     duk_push_c_function(ctx, UI_Init, DUK_VARARGS);
     duk_put_prop_string(ctx, -2, "__init");
@@ -183,136 +182,7 @@ void jsapi_init_ui(JSVM* vm)
     duk_push_c_function(ctx, UI_DebugShowSettingsWindow, 1);
     duk_put_prop_string(ctx, -2, "debugShowSettingsWindow");
 
-
-    // Layout
-
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_NONE);
-    duk_put_prop_string(ctx, -2, "GRAVITY_NONE");
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_LEFT);
-    duk_put_prop_string(ctx, -2, "GRAVITY_LEFT");
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_RIGHT);
-    duk_put_prop_string(ctx, -2, "GRAVITY_RIGHT");
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_TOP);
-    duk_put_prop_string(ctx, -2, "GRAVITY_TOP");
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_BOTTOM);
-    duk_put_prop_string(ctx, -2, "GRAVITY_BOTTOM");
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_LEFT_RIGHT);
-    duk_put_prop_string(ctx, -2, "GRAVITY_LEFT_RIGHT");
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_TOP_BOTTOM);
-    duk_put_prop_string(ctx, -2, "GRAVITY_TOP_BOTTOM");
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_ALL);
-    duk_put_prop_string(ctx, -2, "GRAVITY_ALL");
-    duk_push_number(ctx, (double) tb::WIDGET_GRAVITY_DEFAULT);
-    duk_put_prop_string(ctx, -2, "GRAVITY_DEFAULT");
-
-    duk_push_number(ctx, (double) tb::AXIS_X);
-    duk_put_prop_string(ctx, -2, "AXIS_X");
-    duk_push_number(ctx, (double) tb::AXIS_Y);
-    duk_put_prop_string(ctx, -2, "AXIS_Y");
-
-    duk_push_number(ctx, (double) tb::LAYOUT_SIZE_GRAVITY);
-    duk_put_prop_string(ctx, -2, "LAYOUT_SIZE_GRAVITY");
-    duk_push_number(ctx, (double) tb::LAYOUT_SIZE_PREFERRED);
-    duk_put_prop_string(ctx, -2, "LAYOUT_SIZE_PREFERRED");
-    duk_push_number(ctx, (double) tb::LAYOUT_SIZE_AVAILABLE);
-    duk_put_prop_string(ctx, -2, "LAYOUT_SIZE_AVAILABLE");
-
-    duk_push_number(ctx, (double) tb::LAYOUT_DISTRIBUTION_PREFERRED);
-    duk_put_prop_string(ctx, -2, "LAYOUT_DISTRIBUTION_PREFERRED");
-    duk_push_number(ctx, (double) tb::LAYOUT_DISTRIBUTION_AVAILABLE);
-    duk_put_prop_string(ctx, -2, "LAYOUT_DISTRIBUTION_AVAILABLE");
-    duk_push_number(ctx, (double) tb::LAYOUT_DISTRIBUTION_GRAVITY);
-    duk_put_prop_string(ctx, -2, "LAYOUT_DISTRIBUTION_GRAVITY");
-
-    duk_push_number(ctx, (double) tb::LAYOUT_POSITION_CENTER);
-    duk_put_prop_string(ctx, -2, "LAYOUT_POSITION_CENTER");
-    duk_push_number(ctx, (double) tb::LAYOUT_POSITION_LEFT_TOP);
-    duk_put_prop_string(ctx, -2, "LAYOUT_POSITION_LEFT_TOP");
-    duk_push_number(ctx, (double) tb::LAYOUT_POSITION_RIGHT_BOTTOM);
-    duk_put_prop_string(ctx, -2, "LAYOUT_POSITION_RIGHT_BOTTOM");
-    duk_push_number(ctx, (double) tb::LAYOUT_POSITION_GRAVITY);
-    duk_put_prop_string(ctx, -2, "LAYOUT_POSITION_GRAVITY");
-
-    duk_push_number(ctx, (double) tb::LAYOUT_DISTRIBUTION_POSITION_CENTER);
-    duk_put_prop_string(ctx, -2, "LAYOUT_DISTRIBUTION_POSITION_CENTER");
-    duk_push_number(ctx, (double) tb::LAYOUT_DISTRIBUTION_POSITION_LEFT_TOP);
-    duk_put_prop_string(ctx, -2, "LAYOUT_DISTRIBUTION_POSITION_LEFT_TOP");
-    duk_push_number(ctx, (double) tb::LAYOUT_DISTRIBUTION_POSITION_RIGHT_BOTTOM);
-    duk_put_prop_string(ctx, -2, "LAYOUT_DISTRIBUTION_POSITION_RIGHT_BOTTOM");
-
-    // Window Settings
-    duk_push_number(ctx, (double) tb::WINDOW_SETTINGS_NONE);
-    duk_put_prop_string(ctx, -2, "WINDOW_SETTINGS_NONE");
-    duk_push_number(ctx, (double) tb::WINDOW_SETTINGS_TITLEBAR);
-    duk_put_prop_string(ctx, -2, "WINDOW_SETTINGS_TITLEBAR");
-    duk_push_number(ctx, (double) tb::WINDOW_SETTINGS_RESIZABLE);
-    duk_put_prop_string(ctx, -2, "WINDOW_SETTINGS_RESIZABLE");
-    duk_push_number(ctx, (double) tb::WINDOW_SETTINGS_CLOSE_BUTTON);
-    duk_put_prop_string(ctx, -2, "WINDOW_SETTINGS_CLOSE_BUTTON");
-    duk_push_number(ctx, (double) tb::WINDOW_SETTINGS_CAN_ACTIVATE);
-    duk_put_prop_string(ctx, -2, "WINDOW_SETTINGS_CAN_ACTIVATE");
-    duk_push_number(ctx, (double) tb::WINDOW_SETTINGS_DEFAULT);
-    duk_put_prop_string(ctx, -2, "WINDOW_SETTINGS_DEFAULT");
-
-    duk_push_number(ctx, (double) tb::WIDGET_STATE_NONE);
-    duk_put_prop_string(ctx, -2, "WIDGET_STATE_NONE");
-    duk_push_number(ctx, (double) tb::WIDGET_STATE_DISABLED);
-    duk_put_prop_string(ctx, -2, "WIDGET_STATE_DISABLED");
-    duk_push_number(ctx, (double) tb::WIDGET_STATE_FOCUSED);
-    duk_put_prop_string(ctx, -2, "WIDGET_STATE_FOCUSED");
-    duk_push_number(ctx, (double) tb::WIDGET_STATE_PRESSED);
-    duk_put_prop_string(ctx, -2, "WIDGET_STATE_PRESSED");
-    duk_push_number(ctx, (double) tb::WIDGET_STATE_SELECTED);
-    duk_put_prop_string(ctx, -2, "WIDGET_STATE_SELECTED");
-    duk_push_number(ctx, (double) tb::WIDGET_STATE_HOVERED);
-    duk_put_prop_string(ctx, -2, "WIDGET_STATE_HOVERED");
-    duk_push_number(ctx, (double) tb::WIDGET_STATE_ALL);
-    duk_put_prop_string(ctx, -2, "WIDGET_STATE_ALL");
-
-    // Events
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_CLICK);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_CLICK");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_LONG_CLICK);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_LONG_CLICK");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_POINTER_DOWN);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_POINTER_DOWN");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_POINTER_UP);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_POINTER_UP");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_POINTER_MOVE);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_POINTER_MOVE");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_RIGHT_POINTER_DOWN);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_RIGHT_POINTER_DOWN");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_RIGHT_POINTER_UP);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_RIGHT_POINTER_UP");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_WHEEL);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_WHEEL");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_CHANGED);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_CHANGED");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_KEY_DOWN);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_KEY_DOWN");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_KEY_UP);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_KEY_UP");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_SHORTCUT);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_SHORTCUT");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_CONTEXT_MENU);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_CONTEXT_MENU");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_FILE_DROP);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_FILE_DROP");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_TAB_CHANGED);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_TAB_CHANGED");
-    duk_push_number(ctx, (double) tb::EVENT_TYPE_CUSTOM);
-    duk_put_prop_string(ctx, -2, "EVENT_TYPE_CUSTOM");
-
-    duk_push_number(ctx, (double) tb::WIDGET_VISIBILITY_GONE);
-    duk_put_prop_string(ctx, -2, "VISIBILITY_GONE");
-    duk_push_number(ctx, (double) tb::WIDGET_VISIBILITY_INVISIBLE);
-    duk_put_prop_string(ctx, -2, "VISIBILITY_INVISIBLE");
-    duk_push_number(ctx, (double) tb::WIDGET_VISIBILITY_VISIBLE);
-    duk_put_prop_string(ctx, -2, "VISIBILITY_VISIBLE");
-
-    duk_put_prop_string(ctx, -2, "UI");
-
-    duk_pop(ctx);
+    duk_pop_2(ctx);
 
     js_class_get_prototype(ctx, "Atomic", "UIButton");
     duk_push_c_function(ctx, UIButton_Popup, 2);

+ 2 - 0
Source/AtomicJS/Javascript/JSVM.h

@@ -258,6 +258,8 @@ inline bool js_push_class_object_instance(duk_context* ctx, const RefCounted *in
     duk_get_global_string(ctx, package);
     duk_get_prop_string(ctx, -1, jclassname);
 
+    assert(duk_is_function(ctx, -1));
+
     duk_push_pointer(ctx, (void*) instance);
     duk_new(ctx, 1);
     duk_remove(ctx, -2); // remove Atomic object