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);
    }
Beispiel #2
0
    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);
    }
Beispiel #4
0
    // 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;
        }
    }
Beispiel #6
0
    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;
        }
    }