static void OnServoWindowCreated(int uid, int windowIndex, int widthPixels, int heightPixels, int formatNative) { TextureFormat format = ServoUnityTextureUtils.GetTextureFormatFromNativeTextureFormat(formatNative); if (widthPixels == 0 || heightPixels == 0 || format == (TextureFormat)0) { Debug.LogError("OnServoWindowCreated got invalid format."); return; } // If we initiated the creation of the new window, this find operation will succeed. But // if Servo initiated the creation, then there isn't yet a Unity object backing it, so // we'll need to create one. ServoUnityWindow window = ServoUnityWindow.FindWindowWithUID(uid); if (window == null) { ServoUnityController suc = FindObjectOfType <ServoUnityController>(); // Create it on the same gameobject holding the ServoUnityController. if (!suc) { Debug.LogError("ServoUnityController.OnServoWindowCreated: Couldn't find a ServoUnityController."); return; } window = ServoUnityWindow.CreateNewInParent(suc.transform.parent.gameObject); } window.WasCreated(windowIndex, widthPixels, heightPixels, format); }
void OnServoWindowCreated(int uid, int windowIndex, int widthPixels, int heightPixels, int formatNative) { ServoUnityWindow window = ServoUnityWindow.FindWindowWithUID(uid); if (window == null) { window = ServoUnityWindow.CreateNewInParent(transform.parent.gameObject); } NavbarWindow = window; // Switch to newly created window. /* * Enum values from Source/ServoUnityPlugin/servo_unity_c.h * enum { * ServoUnityTextureFormat_Invalid = 0, * ServoUnityTextureFormat_RGBA32 = 1, * ServoUnityTextureFormat_BGRA32 = 2, * ServoUnityTextureFormat_ARGB32 = 3, * ServoUnityTextureFormat_ABGR32 = 4, * ServoUnityTextureFormat_RGB24 = 5, * ServoUnityTextureFormat_BGR24 = 6, * ServoUnityTextureFormat_RGBA4444 = 7, * ServoUnityTextureFormat_RGBA5551 = 8, * ServoUnityTextureFormat_RGB565 = 9 * }; */ TextureFormat format; switch (formatNative) { case 1: format = TextureFormat.RGBA32; break; case 2: format = TextureFormat.BGRA32; break; case 3: format = TextureFormat.ARGB32; break; case 5: format = TextureFormat.RGB24; break; case 7: format = TextureFormat.RGBA4444; break; case 9: format = TextureFormat.RGB565; break; default: format = (TextureFormat)0; break; } window.WasCreated(windowIndex, widthPixels, heightPixels, format); }
static void OnServoWindowResized(int uid, int widthPixels, int heightPixels) { ServoUnityWindow window = ServoUnityWindow.FindWindowWithUID(uid); if (window == null) { Debug.LogError("ServoUnityController.OnFxWindowResized: Received update request for a window that doesn't exist."); return; } window.WasResized(widthPixels, heightPixels); }
// First argument of method is the type for which the Gizmo will be drawn. static void RenderServoUnityWindowGizmo(ServoUnityWindow suw, GizmoType gizmoType) { Matrix4x4 pose = suw.gameObject.transform.localToWorldMatrix; bool selected = (gizmoType & GizmoType.Active) != 0; float width = suw.Width; float height = width * suw.DefaultHeightToRequest / suw.DefaultWidthToRequest; Vector3 origin = pose.GetColumn(3) + new Vector4(0.0f, height / 2.0f, 0.0f, 0.0f); Vector3 right = pose.GetColumn(0); Vector3 up = pose.GetColumn(1); DrawRectangle(origin, up, right, width, height, selected ? BorderSelected : BorderUnselected); // Edge. }
static void OnServoBrowserEvent(int uid, int eventType, int eventData0, int eventData1, System.String eventDataS) { ServoUnityWindow window = ServoUnityWindow.FindWindowWithUID(uid); if (window == null) { Debug.LogError("ServoUnityController.OnServoBrowserEvent: Received event for a window that doesn't exist."); return; } ServoUnityController suc = FindObjectOfType <ServoUnityController>(); // Create it on the same gameobject holding the ServoUnityController. if (!suc) { Debug.LogError("ServoUnityController.OnServoBrowserEvent: Couldn't find a ServoUnityController."); return; } switch ((ServoUnityPlugin.ServoUnityBrowserEventType)eventType) { case ServoUnityPlugin.ServoUnityBrowserEventType.NOP: break; case ServoUnityPlugin.ServoUnityBrowserEventType.Shutdown: // Browser has shut down. suc.waitingForShutdown = false; break; case ServoUnityPlugin.ServoUnityBrowserEventType.LoadStateChanged: { Debug.Log($"Servo browser event: load {(eventData0 == 1 ? "began" : "ended")}."); if (suc.navbarController) { suc.navbarController.OnLoadStateChanged(eventData0 == 1); } } break; case ServoUnityPlugin.ServoUnityBrowserEventType.IMEStateChanged: { Debug.Log($"Servo browser event: {((eventData0 == 1 || eventData0 == 2) ? "show" : "hide")} IME with text=\"" + eventDataS + "\", textIndex=" + eventData1 + ", multiline=" + (eventData0 == 2)); if (suc.ime != null) { if (eventData0 == 1 || eventData0 == 2) { suc.ime.ShowIMEForWindowWithInitialText(window.WindowIndex, eventDataS, eventData1, (eventData0 == 2)); } else { suc.ime.HideIME(); } } } break; case ServoUnityPlugin.ServoUnityBrowserEventType.FullscreenStateChanged: { switch (eventData0) { case 0: // Will enter fullscreen. Should e.g. hide windows and other UI. Debug.Log("Servo browser event: will enter fullscreen."); break; case 1: // Did enter fullscreen. Should e.g. show an "exit fullscreen" control. Debug.Log("Servo browser event: did enter fullscreen."); break; case 2: // Will exit fullscreen. Should e.g. hide "exit fullscreen" control. Debug.Log("Servo browser event: will exit fullscreen."); break; case 3: // Did exit fullscreen. Should e.g. show windows and other UI. Debug.Log("Servo browser event: did exit fullscreen."); break; default: break; } } break; case ServoUnityPlugin.ServoUnityBrowserEventType.HistoryChanged: { Debug.Log($"Servo browser event: history changed, {(eventData0 == 1 ? "can" : "can't")} go back, {(eventData1 == 1 ? "can" : "can't")} go forward."); suc.navbarController.OnHistoryChanged(eventData0 == 1, eventData1 == 1); } break; case ServoUnityPlugin.ServoUnityBrowserEventType.TitleChanged: { Debug.Log("Servo browser event: title changed."); suc.navbarController.OnTitleChanged(suc.servo_unity_plugin.ServoUnityGetWindowTitle(window.WindowIndex)); } break; case ServoUnityPlugin.ServoUnityBrowserEventType.URLChanged: { Debug.Log("Servo browser event: URL changed."); suc.navbarController.OnURLChanged(suc.servo_unity_plugin.ServoUnityGetWindowURL(window.WindowIndex)); } break; default: Debug.Log("Servo browser event: unknown event."); break; } }
void OnServoBrowserEvent(int uid, int eventType, int eventData1, int eventData2) { ServoUnityWindow window = ServoUnityWindow.FindWindowWithUID(uid); if (window == null) { Debug.LogError("ServoUnityController.OnServoBrowserEvent: Received event for a window that doesn't exist."); return; } switch ((ServoUnityPlugin.ServoUnityBrowserEventType)eventType) { case ServoUnityPlugin.ServoUnityBrowserEventType.NOP: break; case ServoUnityPlugin.ServoUnityBrowserEventType.Shutdown: // Browser has shut down. waitingForShutdown = false; break; case ServoUnityPlugin.ServoUnityBrowserEventType.LoadStateChanged: { Debug.Log($"Servo browser event: load {(eventData1 == 1 ? "began" : "ended")}."); if (navbarController) { navbarController.OnLoadStateChanged(eventData1 == 1); } } break; case ServoUnityPlugin.ServoUnityBrowserEventType.IMEStateChanged: { Debug.Log($"Servo browser event: {(eventData1 == 1 ? "show" : "hide")} IME."); IMEActive = (eventData1 == 1); IMEWindowIndex = window.WindowIndex; } break; case ServoUnityPlugin.ServoUnityBrowserEventType.FullscreenStateChanged: { switch (eventData1) { case 0: // Will enter fullscreen. Should e.g. hide windows and other UI. Debug.Log("Servo browser event: will enter fullscreen."); break; case 1: // Did enter fullscreen. Should e.g. show an "exit fullscreen" control. Debug.Log("Servo browser event: did enter fullscreen."); break; case 2: // Will exit fullscreen. Should e.g. hide "exit fullscreen" control. Debug.Log("Servo browser event: will exit fullscreen."); break; case 3: // Did exit fullscreen. Should e.g. show windows and other UI. Debug.Log("Servo browser event: did exit fullscreen."); break; default: break; } } break; case ServoUnityPlugin.ServoUnityBrowserEventType.HistoryChanged: { Debug.Log($"Servo browser event: history changed, {(eventData1 == 1 ? "can" : "can't")} go back, {(eventData2 == 1 ? "can" : "can't")} go forward."); navbarController?.OnHistoryChanged(eventData1 == 1, eventData2 == 1); } break; case ServoUnityPlugin.ServoUnityBrowserEventType.TitleChanged: { Debug.Log("Servo browser event: title changed."); navbarController?.OnTitleChanged(servo_unity_plugin.ServoUnityGetWindowTitle(window.WindowIndex)); } break; case ServoUnityPlugin.ServoUnityBrowserEventType.URLChanged: { Debug.Log("Servo browser event: URL changed."); navbarController?.OnURLChanged(servo_unity_plugin.ServoUnityGetWindowURL(window.WindowIndex)); } break; default: Debug.Log("Servo browser event: unknown event."); break; } }