VRBrowserPanel.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Net;
  3. using UnityEngine;
  4. namespace ZenFulcrum.EmbeddedBrowser {
  5. public class VRBrowserPanel : MonoBehaviour, INewWindowHandler {
  6. public Browser contentBrowser, controlBrowser;
  7. public Transform keyboardLocation;
  8. public void Awake() {
  9. //If the content browser is externally closed, make sure we go too.
  10. var dd = contentBrowser.gameObject.AddComponent<DestroyDetector>();
  11. dd.onDestroy += CloseBrowser;
  12. contentBrowser.SetNewWindowHandler(Browser.NewWindowAction.NewBrowser, this);
  13. contentBrowser.onLoad += data => controlBrowser.CallFunction("setURL", data["url"]);
  14. controlBrowser.RegisterFunction("demoNavForward", args => contentBrowser.GoForward());
  15. controlBrowser.RegisterFunction("demoNavBack", args => contentBrowser.GoBack());
  16. controlBrowser.RegisterFunction("demoNavRefresh", args => contentBrowser.Reload());
  17. controlBrowser.RegisterFunction("demoNavClose", args => CloseBrowser());
  18. controlBrowser.RegisterFunction("goTo", args => contentBrowser.LoadURL(args[0], false));
  19. VRMainControlPanel.instance.keyboard.onFocusChange += OnKeyboardOnOnFocusChange;
  20. }
  21. public void OnDestroy() {
  22. VRMainControlPanel.instance.keyboard.onFocusChange -= OnKeyboardOnOnFocusChange;
  23. }
  24. private void OnKeyboardOnOnFocusChange(Browser browser, bool editable) {
  25. if (!editable || !browser) VRMainControlPanel.instance.MoveKeyboardUnder(null);
  26. else if (browser == contentBrowser || browser == controlBrowser) VRMainControlPanel.instance.MoveKeyboardUnder(this);
  27. }
  28. public void CloseBrowser() {
  29. if (!this || !VRMainControlPanel.instance) return;
  30. VRMainControlPanel.instance.DestroyPane(this);
  31. }
  32. public Browser CreateBrowser(Browser parent) {
  33. var newPane = VRMainControlPanel.instance.OpenNewTab(this);
  34. newPane.transform.position = transform.position;
  35. newPane.transform.rotation = transform.rotation;
  36. return newPane.contentBrowser;
  37. }
  38. }
  39. internal class DestroyDetector : MonoBehaviour {
  40. public event Action onDestroy = () => {};
  41. public void OnDestroy() {
  42. onDestroy();
  43. }
  44. }
  45. }