예제 #1
0
        protected override void Dispose(bool disposing)
        {
            // stop the render loop
            if (_displayLink != null)
            {
                _displayLink.Invalidate();
                _displayLink.Dispose();
                _displayLink = null;
            }

            base.Dispose(disposing);
        }
예제 #2
0
        partial void DoEnableRenderLoop(bool enable)
        {
            // stop the render loop
            if (!enable)
            {
                if (displayLink != null)
                {
                    displayLink.Invalidate();
                    displayLink.Dispose();
                    displayLink = null;
                }
                return;
            }

            // only start if we haven't already
            if (displayLink != null)
            {
                return;
            }

            // create the loop
            displayLink = CADisplayLink.Create(delegate
            {
                // redraw the view
                glView?.BeginInvokeOnMainThread(() => glView?.Display());

                // stop the render loop if it has been disabled or the views are disposed
                if (glView == null || !EnableRenderLoop)
                {
                    DoEnableRenderLoop(false);
                }
            });
            displayLink.AddToRunLoop(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
        }
 protected override void DisableTimer()
 {
     if (_link != null)
     {
         _link.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoop.NSRunLoopCommonModes);
         _link.Dispose();
     }
     _link = null;
 }
예제 #4
0
        public void Dispose()
        {
            _isDisposed     = true;
            Update          = null;
            AnimationEnd    = null;
            AnimationCancel = null;

            Stop();
            _displayLink?.Dispose();
        }
예제 #5
0
 public override void Stop()
 {
     if (link == null)
     {
         return;
     }
     link?.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoop.NSRunLoopCommonModes);
     link?.Dispose();
     link = null;
 }
예제 #6
0
        public override void Stop()
        {
            if (_link == null)
            {
                return;
            }

            _link?.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoopMode.Common);
            _link?.Dispose();
            _link = null;
        }
        protected void StopAutoScroll()
        {
            if (displayLink == null)
            {
                return;
            }

            displayLink.Paused = true;
            displayLink.Dispose();
            displayLink         = null;
            isAutoScrollingUp   = false;
            isAutoScrollingDown = false;
        }
        private bool PerformPendingExit()
        {
            if (!_isExitPending)
            {
                return(false);
            }

            _isExitPending = false;

            if (_displayLink != null)
            {
                _displayLink.Invalidate();
                _displayLink.Dispose();
                _displayLink = null;
            }

            UIApplication.SharedApplication.SetStatusBarHidden(false, UIStatusBarAnimation.Fade);

            if (_viewController != null)
            {
                _viewController.InterfaceOrientationChanged -= ViewController_InterfaceOrientationChanged;
                _viewController.View.RemoveFromSuperview();
                _viewController.View.Dispose();
                _viewController.RemoveFromParentViewController();
                //this might crash ventus?
                _viewController.Dispose();
                _viewController = null;
            }

            if (_mainWindow != null)
            {
                _mainWindow.RemoveFromSuperview();
                _mainWindow.Dispose();
                _mainWindow = null;
            }

            if (Window != null)
            {
                Window = null;
            }

            StopObservingUIApplication();
            RaiseAsyncRunLoopEnded();
            //this.Game=null;
            return(true);
        }
예제 #9
0
        void OnUpdate()
        {
            bool lowMem = false;

            while (_events.Count > 0)
            {
                EventBase e;
                _events.TryDequeue(out e);
                _frame.Enqueue(e);

                if (e is Pause)
                {
                    DoUpdate();
                    _link.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
                    _link.Dispose();
                    return;
                }
                else if (e is LowMemory)
                {
                    lowMem = true;
                }
                else if (e is Resize)
                {
                    this.InvokeOnMainThread(() => {
                        EAGLContext.SetCurrentContext(_glContext);
                        this.Initialize(false);
                    });
                }
            }

            DoUpdate();
            _frame.ClearEvents();

            if (lowMem)
            {
                _lowMemHandled = true;
            }
        }