Exemplo n.º 1
0
        public static bool Initialize(int width, int height)
        {
            var mgr = new swig.GUIManager();

            if (mgr.Initialize("Effekseer", 960, 540, false))
            {
            }
            else
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            Native = new swig.Native();

            Viewer = new Viewer(Native);
            if (!Viewer.ShowViewer(mgr.GetNativeHandle(), 960, 540, true))
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            NativeManager = mgr;

            // Load font
            NativeManager.AddFontFromFileTTF("resources/GenShinGothic-Monospace-Normal.ttf", 16);

            // Add controls
            var mainMenu = new GUI.Menu.MainMenu();

            GUI.Manager.AddControl(mainMenu);

            NodeTreeView = new Dock.NodeTreeView();
            GUI.Manager.AddControl(NodeTreeView);
            NodeTreeView.Renew();

            ViewerController = new Dock.ViewerController();
            GUI.Manager.AddControl(ViewerController);

            Option = new Dock.Option();
            GUI.Manager.AddControl(Option);

            Network = new Network(Native);

            /*
             * Command.CommandManager.Changed += OnChanged;
             *
             * Core.EffectBehavior.Location.X.OnChanged += OnChanged;
             * Core.EffectBehavior.Location.Y.OnChanged += OnChanged;
             * Core.EffectBehavior.Location.Z.OnChanged += OnChanged;
             * Core.EffectBehavior.Rotation.X.OnChanged += OnChanged;
             * Core.EffectBehavior.Rotation.Y.OnChanged += OnChanged;
             * Core.EffectBehavior.Rotation.Z.OnChanged += OnChanged;
             * Core.EffectBehavior.Scale.X.OnChanged += OnChanged;
             * Core.EffectBehavior.Scale.Y.OnChanged += OnChanged;
             * Core.EffectBehavior.Scale.Z.OnChanged += OnChanged;
             *
             * Core.EffectBehavior.LocationVelocity.X.OnChanged += OnChanged;
             * Core.EffectBehavior.LocationVelocity.Y.OnChanged += OnChanged;
             * Core.EffectBehavior.LocationVelocity.Z.OnChanged += OnChanged;
             * Core.EffectBehavior.RotationVelocity.X.OnChanged += OnChanged;
             * Core.EffectBehavior.RotationVelocity.Y.OnChanged += OnChanged;
             * Core.EffectBehavior.RotationVelocity.Z.OnChanged += OnChanged;
             * Core.EffectBehavior.ScaleVelocity.X.OnChanged += OnChanged;
             * Core.EffectBehavior.ScaleVelocity.Y.OnChanged += OnChanged;
             * Core.EffectBehavior.ScaleVelocity.Z.OnChanged += OnChanged;
             * Core.EffectBehavior.RemovedTime.Infinite.OnChanged += OnChanged;
             * Core.EffectBehavior.RemovedTime.Value.OnChanged += OnChanged;
             *
             * Core.EffectBehavior.TargetLocation.X.OnChanged += OnChanged;
             * Core.EffectBehavior.TargetLocation.Y.OnChanged += OnChanged;
             * Core.EffectBehavior.TargetLocation.Z.OnChanged += OnChanged;
             *
             * Core.EffectBehavior.CountX.OnChanged += OnChanged;
             * Core.EffectBehavior.CountY.OnChanged += OnChanged;
             * Core.EffectBehavior.CountZ.OnChanged += OnChanged;
             *
             * Core.EffectBehavior.Distance.OnChanged += OnChanged;
             *
             * Core.EffectBehavior.TimeSpan.OnChanged += OnChanged;
             * Core.EffectBehavior.ColorAll.R.OnChanged += OnChanged;
             * Core.EffectBehavior.ColorAll.G.OnChanged += OnChanged;
             * Core.EffectBehavior.ColorAll.B.OnChanged += OnChanged;
             * Core.EffectBehavior.ColorAll.A.OnChanged += OnChanged;
             *
             * Core.Option.Magnification.OnChanged += OnChanged;
             * Core.Option.IsGridShown.OnChanged += OnChanged;
             * Core.Option.GridLength.OnChanged += OnChanged;
             * Core.Option.BackgroundColor.R.OnChanged += OnChanged;
             * Core.Option.BackgroundColor.G.OnChanged += OnChanged;
             * Core.Option.BackgroundColor.B.OnChanged += OnChanged;
             * Core.Option.BackgroundColor.A.OnChanged += OnChanged;
             * Core.Option.GridColor.R.OnChanged += OnChanged;
             * Core.Option.GridColor.G.OnChanged += OnChanged;
             * Core.Option.GridColor.B.OnChanged += OnChanged;
             * Core.Option.GridColor.A.OnChanged += OnChanged;
             * Core.Option.FPS.OnChanged += OnChanged;
             *
             * Core.Option.DistortionType.OnChanged += OnChanged;
             * Core.Option.Coordinate.OnChanged += OnChanged;
             *
             * Core.Option.BackgroundImage.OnChanged += OnChanged;
             *
             * Core.Culling.IsShown.OnChanged += OnChanged;
             * Core.Culling.Type.OnChanged += OnChanged;
             * Core.Culling.Sphere.Location.X.OnChanged += OnChanged;
             * Core.Culling.Sphere.Location.Y.OnChanged += OnChanged;
             * Core.Culling.Sphere.Location.Z.OnChanged += OnChanged;
             * Core.Culling.Sphere.Radius.OnChanged += OnChanged;
             *
             * Core.OnAfterLoad += new EventHandler(Core_OnAfterLoad);
             * Core.OnAfterNew += new EventHandler(Core_OnAfterNew);
             * Core.OnReload += new EventHandler(Core_OnReload);
             */
            return(true);
        }
Exemplo n.º 2
0
        public static void Update()
        {
            if (isFontSizeDirtied)
            {
                NativeManager.InvalidateFont();
                var appDirectory = Manager.GetEntryDirectory();
                var type         = Core.Option.Font.Value;

                NativeManager.ClearAllFonts();

                var characterTable = System.IO.Path.Combine(appDirectory, "resources/languages/characterTable.txt");

                if (type == Data.FontType.Normal)
                {
                    NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, MultiLanguageTextProvider.GetText("Font_Normal")), characterTable, MultiLanguageTextProvider.GetText("CharacterTable"), Core.Option.FontSize.Value);
                }
                else if (type == Data.FontType.Bold)
                {
                    NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, MultiLanguageTextProvider.GetText("Font_Bold")), characterTable, MultiLanguageTextProvider.GetText("CharacterTable"), Core.Option.FontSize.Value);
                }

                NativeManager.AddFontFromAtlasImage(System.IO.Path.Combine(appDirectory, "resources/icons/MenuIcons.png"), 0xec00, 24, 24, 16, 16);

                isFontSizeDirtied = false;
            }

            // Reset

            IO.Update();
            Shortcuts.Update();
            Network.Update();

            var handle = false;

            if (!handle)
            {
                if (!NativeManager.IsAnyItemActive())
                {
                    Shortcuts.ProcessCmdKey(ref handle);
                }
            }

            var mousePos = NativeManager.GetMousePosition();

            if (isFirstUpdate)
            {
                mousePos_pre = mousePos;
            }

            if ((effectViewer == null && !NativeManager.IsAnyWindowHovered()) || (effectViewer != null && effectViewer.IsHovered))
            {
                var result = ControllViewport();

                if (result.Slide)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;

                    if (Core.Option.ViewerMode.Value == Data.OptionValues.ViewMode._3D)
                    {
                        Viewer.Slide(dx / 30.0f, dy / 30.0f);
                    }
                    else if (Core.Option.ViewerMode.Value == Data.OptionValues.ViewMode._2D)
                    {
                        Viewer.Slide(dx / 16.0f, dy / 16.0f);
                    }
                }
                else if (NativeManager.GetMouseWheel() != 0)
                {
                    Viewer.Zoom(NativeManager.GetMouseWheel());
                }
                else if (result.Zoom)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;
                    Viewer.Zoom(-dy * 0.25f);
                }
                else if (result.Rotate)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;

                    if (Core.Option.ViewerMode.Value == Data.OptionValues.ViewMode._3D)
                    {
                        Viewer.Rotate(dx, dy);
                    }
                    else if (Core.Option.ViewerMode.Value == Data.OptionValues.ViewMode._2D)
                    {
                        Viewer.Slide(dx / 16.0f, dy / 16.0f);
                    }
                }
            }

            mousePos_pre = mousePos;

            Viewer.UpdateViewer();

            Native.UpdateWindow();

            Native.ClearWindow(50, 50, 50, 0);

            //if(effectViewer == null)
            //{
            //	Native.RenderWindow();
            //}

            NativeManager.ResetGUI();

            if (resetCount < 0)
            {
                resetCount++;
                if (resetCount == 0)
                {
                    Application.Current.OnResetWindowActually();
                }
            }

            if (resizedCount > 0)
            {
                resizedCount--;
            }

            Controls.Lock();

            foreach (var c in Controls.Internal)
            {
                c.Update();
            }

            foreach (var _ in Controls.Internal)
            {
                if (!_.ShouldBeRemoved)
                {
                    continue;
                }

                var dp = _ as Dock.DockPanel;
                if (dp != null)
                {
                    dp.DispatchDisposed();
                }
            }

            foreach (var _ in Controls.Internal)
            {
                if (!_.ShouldBeRemoved)
                {
                    continue;
                }
                Controls.Remove(_);
            }

            Controls.Unlock();

            for (int i = 0; i < dockTypes.Length; i++)
            {
                if (panels[i] != null && panels[i].ShouldBeRemoved)
                {
                    panels[i] = null;
                }
            }

            NativeManager.RenderGUI(resizedCount == 0);

            Native.Present();
            NativeManager.Present();

            isFirstUpdate = false;

            // TODO more smart
            // When minimized, suppress CPU activity
            if (actualWidth == 0)
            {
                System.Threading.Thread.Sleep(16);
            }
        }
Exemplo n.º 3
0
        public static bool Initialize(int width, int height, swig.DeviceType deviceType)
        {
            var mgr = new swig.GUIManager();

            if (mgr.Initialize("Effekseer", 1280, 720, deviceType, false))
            {
            }
            else
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            Native = new swig.Native();

            Viewer = new Viewer(Native);
            if (!Viewer.ShowViewer(mgr.GetNativeHandle(), 1280, 720, deviceType))
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            mgr.InitializeGUI(Native);

            NativeManager = mgr;

            Images.Load(GUI.Manager.Native);

            guiManagerCallback = new GUIManagerCallback();
            NativeManager.SetCallback(guiManagerCallback);

            panels = new Dock.DockPanel[dockTypes.Length];

            var appDirectory = Manager.GetEntryDirectory();

            // Load font
            NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, "resources/GenShinGothic-Monospace-Normal.ttf"), 16);

            // Load window icon
            NativeManager.SetWindowIcon(System.IO.Path.Combine(appDirectory, "resources/icon.png"));

            // Load config
            RecentFiles.LoadRecentConfig();
            Shortcuts.LoadShortcuts();
            Commands.Register();

            // Add controls
            var mainMenu = new GUI.Menu.MainMenu();

            GUI.Manager.AddControl(mainMenu);

            dockManager = new GUI.Dock.DockManager();
            GUI.Manager.AddControl(dockManager);

            // Default
            effectViewer = new Dock.EffectViwer();
            if (dockManager != null)
            {
                effectViewer.InitialDockSlot = swig.DockSlot.None;
                dockManager.Controls.Add(effectViewer);
            }
            else
            {
                AddControl(effectViewer);
            }

            if (LoadWindowConfig(System.IO.Path.Combine(appDirectory, "config.Dock.xml")))
            {
                Manager.NativeManager.LoadDock(System.IO.Path.Combine(appDirectory, "config.Dock.config"));
            }
            else
            {
                ResetWindowActually();
            }

            TextOffsetY = (NativeManager.GetTextLineHeightWithSpacing() - NativeManager.GetTextLineHeight()) / 2;

            Network = new Network(Native);
            Network.Load();

            Command.CommandManager.Changed += OnChanged;

            Core.EffectBehavior.Location.X.OnChanged += OnChanged;
            Core.EffectBehavior.Location.Y.OnChanged += OnChanged;
            Core.EffectBehavior.Location.Z.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.X.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.Y.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.Z.OnChanged += OnChanged;
            Core.EffectBehavior.Scale.X.OnChanged    += OnChanged;
            Core.EffectBehavior.Scale.Y.OnChanged    += OnChanged;
            Core.EffectBehavior.Scale.Z.OnChanged    += OnChanged;

            Core.EffectBehavior.LocationVelocity.X.OnChanged   += OnChanged;
            Core.EffectBehavior.LocationVelocity.Y.OnChanged   += OnChanged;
            Core.EffectBehavior.LocationVelocity.Z.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.X.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.Y.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.Z.OnChanged   += OnChanged;
            Core.EffectBehavior.ScaleVelocity.X.OnChanged      += OnChanged;
            Core.EffectBehavior.ScaleVelocity.Y.OnChanged      += OnChanged;
            Core.EffectBehavior.ScaleVelocity.Z.OnChanged      += OnChanged;
            Core.EffectBehavior.RemovedTime.Infinite.OnChanged += OnChanged;
            Core.EffectBehavior.RemovedTime.Value.OnChanged    += OnChanged;

            Core.EffectBehavior.TargetLocation.X.OnChanged += OnChanged;
            Core.EffectBehavior.TargetLocation.Y.OnChanged += OnChanged;
            Core.EffectBehavior.TargetLocation.Z.OnChanged += OnChanged;

            Core.EffectBehavior.CountX.OnChanged += OnChanged;
            Core.EffectBehavior.CountY.OnChanged += OnChanged;
            Core.EffectBehavior.CountZ.OnChanged += OnChanged;

            Core.EffectBehavior.Distance.OnChanged += OnChanged;

            Core.EffectBehavior.TimeSpan.OnChanged   += OnChanged;
            Core.EffectBehavior.ColorAll.R.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.G.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.B.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.A.OnChanged += OnChanged;

            Core.Option.Magnification.OnChanged     += OnChanged;
            Core.Option.IsGridShown.OnChanged       += OnChanged;
            Core.Option.GridLength.OnChanged        += OnChanged;
            Core.Option.BackgroundColor.R.OnChanged += OnChanged;
            Core.Option.BackgroundColor.G.OnChanged += OnChanged;
            Core.Option.BackgroundColor.B.OnChanged += OnChanged;
            Core.Option.BackgroundColor.A.OnChanged += OnChanged;
            Core.Option.GridColor.R.OnChanged       += OnChanged;
            Core.Option.GridColor.G.OnChanged       += OnChanged;
            Core.Option.GridColor.B.OnChanged       += OnChanged;
            Core.Option.GridColor.A.OnChanged       += OnChanged;
            Core.Option.FPS.OnChanged += OnChanged;

            Core.Option.DistortionType.OnChanged += OnChanged;
            Core.Option.Coordinate.OnChanged     += OnChanged;

            Core.Option.BackgroundImage.OnChanged += OnChanged;

            Core.Culling.IsShown.OnChanged           += OnChanged;
            Core.Culling.Type.OnChanged              += OnChanged;
            Core.Culling.Sphere.Location.X.OnChanged += OnChanged;
            Core.Culling.Sphere.Location.Y.OnChanged += OnChanged;
            Core.Culling.Sphere.Location.Z.OnChanged += OnChanged;
            Core.Culling.Sphere.Radius.OnChanged     += OnChanged;

            Core.OnAfterLoad += new EventHandler(Core_OnAfterLoad);
            Core.OnAfterNew  += new EventHandler(Core_OnAfterNew);
            Core.OnReload    += new EventHandler(Core_OnReload);

            // Set imgui path
            var entryDirectory = GetEntryDirectory();

            swig.GUIManager.SetIniFilename(entryDirectory + "/imgui.ini");

            return(true);
        }
Exemplo n.º 4
0
        public static bool Initialize(int width, int height)
        {
            bool isOpenGLMode = true;

            var mgr = new swig.GUIManager();

            if (mgr.Initialize("Effekseer", 1280, 720, isOpenGLMode, false))
            {
            }
            else
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            Native = new swig.Native();

            Viewer = new Viewer(Native);
            if (!Viewer.ShowViewer(mgr.GetNativeHandle(), 1280, 720, isOpenGLMode))
            {
                mgr.Dispose();
                mgr = null;
                return(false);
            }

            mgr.InitializeGUI(Native);

            NativeManager = mgr;

            Images.Load(GUI.Manager.Native);

            guiManagerCallback = new GUIManagerCallback();
            NativeManager.SetCallback(guiManagerCallback);

            panels = new Dock.DockPanel[dockTypes.Length];

            // Load font
            NativeManager.AddFontFromFileTTF("resources/GenShinGothic-Monospace-Normal.ttf", 16);

            // Load config
            RecentFiles.LoadRecentConfig();
            Shortcuts.LoadShortcuts();
            Commands.Register();

            // Add controls
            var mainMenu = new GUI.Menu.MainMenu();

            GUI.Manager.AddControl(mainMenu);

            dockManager = new GUI.Dock.DockManager();
            GUI.Manager.AddControl(dockManager);

            // Default
            effectViewer = new Dock.EffectViwer();
            if (dockManager != null)
            {
                effectViewer.InitialDockSlot = swig.DockSlot.None;
                dockManager.Controls.Add(effectViewer);
            }
            else
            {
                AddControl(effectViewer);
            }

            if (LoadWindowConfig("config.Dock.xml"))
            {
                Manager.NativeManager.LoadDock("config.Dock.config");
            }
            else
            {
                ResetWindowActually();
            }

            Network = new Network(Native);

            Command.CommandManager.Changed += OnChanged;

            Core.EffectBehavior.Location.X.OnChanged += OnChanged;
            Core.EffectBehavior.Location.Y.OnChanged += OnChanged;
            Core.EffectBehavior.Location.Z.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.X.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.Y.OnChanged += OnChanged;
            Core.EffectBehavior.Rotation.Z.OnChanged += OnChanged;
            Core.EffectBehavior.Scale.X.OnChanged    += OnChanged;
            Core.EffectBehavior.Scale.Y.OnChanged    += OnChanged;
            Core.EffectBehavior.Scale.Z.OnChanged    += OnChanged;

            Core.EffectBehavior.LocationVelocity.X.OnChanged   += OnChanged;
            Core.EffectBehavior.LocationVelocity.Y.OnChanged   += OnChanged;
            Core.EffectBehavior.LocationVelocity.Z.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.X.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.Y.OnChanged   += OnChanged;
            Core.EffectBehavior.RotationVelocity.Z.OnChanged   += OnChanged;
            Core.EffectBehavior.ScaleVelocity.X.OnChanged      += OnChanged;
            Core.EffectBehavior.ScaleVelocity.Y.OnChanged      += OnChanged;
            Core.EffectBehavior.ScaleVelocity.Z.OnChanged      += OnChanged;
            Core.EffectBehavior.RemovedTime.Infinite.OnChanged += OnChanged;
            Core.EffectBehavior.RemovedTime.Value.OnChanged    += OnChanged;

            Core.EffectBehavior.TargetLocation.X.OnChanged += OnChanged;
            Core.EffectBehavior.TargetLocation.Y.OnChanged += OnChanged;
            Core.EffectBehavior.TargetLocation.Z.OnChanged += OnChanged;

            Core.EffectBehavior.CountX.OnChanged += OnChanged;
            Core.EffectBehavior.CountY.OnChanged += OnChanged;
            Core.EffectBehavior.CountZ.OnChanged += OnChanged;

            Core.EffectBehavior.Distance.OnChanged += OnChanged;

            Core.EffectBehavior.TimeSpan.OnChanged   += OnChanged;
            Core.EffectBehavior.ColorAll.R.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.G.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.B.OnChanged += OnChanged;
            Core.EffectBehavior.ColorAll.A.OnChanged += OnChanged;

            Core.Option.Magnification.OnChanged     += OnChanged;
            Core.Option.IsGridShown.OnChanged       += OnChanged;
            Core.Option.GridLength.OnChanged        += OnChanged;
            Core.Option.BackgroundColor.R.OnChanged += OnChanged;
            Core.Option.BackgroundColor.G.OnChanged += OnChanged;
            Core.Option.BackgroundColor.B.OnChanged += OnChanged;
            Core.Option.BackgroundColor.A.OnChanged += OnChanged;
            Core.Option.GridColor.R.OnChanged       += OnChanged;
            Core.Option.GridColor.G.OnChanged       += OnChanged;
            Core.Option.GridColor.B.OnChanged       += OnChanged;
            Core.Option.GridColor.A.OnChanged       += OnChanged;
            Core.Option.FPS.OnChanged += OnChanged;

            Core.Option.DistortionType.OnChanged += OnChanged;
            Core.Option.Coordinate.OnChanged     += OnChanged;

            Core.Option.BackgroundImage.OnChanged += OnChanged;

            Core.Culling.IsShown.OnChanged           += OnChanged;
            Core.Culling.Type.OnChanged              += OnChanged;
            Core.Culling.Sphere.Location.X.OnChanged += OnChanged;
            Core.Culling.Sphere.Location.Y.OnChanged += OnChanged;
            Core.Culling.Sphere.Location.Z.OnChanged += OnChanged;
            Core.Culling.Sphere.Radius.OnChanged     += OnChanged;

            Core.OnAfterLoad += new EventHandler(Core_OnAfterLoad);
            Core.OnAfterNew  += new EventHandler(Core_OnAfterNew);
            Core.OnReload    += new EventHandler(Core_OnReload);

            return(true);
        }
Exemplo n.º 5
0
        public static void Update()
        {
            if (isFontSizeDirtied)
            {
                NativeManager.InvalidateFont();
                var appDirectory = Manager.GetEntryDirectory();
                var type         = Core.Option.Font.Value;

                if (type == Data.FontType.Normal)
                {
                    NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, "resources/GenShinGothic-Monospace-Normal.ttf"), Core.Option.FontSize.Value);
                }
                else if (type == Data.FontType.Bold)
                {
                    NativeManager.AddFontFromFileTTF(System.IO.Path.Combine(appDirectory, "resources/fonts/GenShinGothic-Monospace-Bold.ttf"), Core.Option.FontSize.Value);
                }
                isFontSizeDirtied = false;
            }

            // Reset
            NativeManager.SetNextDockRate(0.5f);
            NativeManager.SetNextDock(swig.DockSlot.Tab);
            NativeManager.ResetNextParentDock();

            IO.Update();
            Shortcuts.Update();
            Network.Update();

            var handle = false;

            if (!handle)
            {
                if (!NativeManager.IsAnyItemActive())
                {
                    Shortcuts.ProcessCmdKey(ref handle);
                }
            }

            var mousePos = NativeManager.GetMousePosition();

            if (isFirstUpdate)
            {
                mousePos_pre = mousePos;
            }

            if ((effectViewer == null && !NativeManager.IsAnyWindowHovered()) || (effectViewer != null && effectViewer.IsHovered))
            {
                if (NativeManager.GetMouseButton(2) > 0)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;

                    Viewer.Slide(dx / 30.0f, dy / 30.0f);
                }

                if (NativeManager.GetMouseButton(1) > 0)
                {
                    var dx = mousePos.X - mousePos_pre.X;
                    var dy = mousePos.Y - mousePos_pre.Y;

                    Viewer.Rotate(dx, dy);
                }

                if (NativeManager.GetMouseWheel() != 0)
                {
                    Viewer.Zoom(NativeManager.GetMouseWheel());
                }
            }

            mousePos_pre = mousePos;

            Viewer.UpdateViewer();

            Native.UpdateWindow();

            Native.ClearWindow(50, 50, 50, 0);

            if (effectViewer == null)
            {
                Native.RenderWindow();
            }

            NativeManager.ResetGUI();

            if (resetCount < 0)
            {
                resetCount++;
                if (resetCount == 0)
                {
                    ResetWindowActually();
                }
            }

            if (resizedCount > 0)
            {
                resizedCount--;
            }

            Controls.Lock();

            foreach (var c in Controls.Internal)
            {
                c.Update();
            }

            foreach (var _ in Controls.Internal)
            {
                if (!_.ShouldBeRemoved)
                {
                    continue;
                }

                var dp = _ as Dock.DockPanel;
                if (dp != null)
                {
                    dp.DispatchDisposed();
                }
            }

            foreach (var _ in Controls.Internal)
            {
                if (!_.ShouldBeRemoved)
                {
                    continue;
                }
                Controls.Remove(_);
            }

            Controls.Unlock();

            for (int i = 0; i < dockTypes.Length; i++)
            {
                if (panels[i] != null && panels[i].ShouldBeRemoved)
                {
                    panels[i] = null;
                }
            }

            NativeManager.RenderGUI(resizedCount == 0);

            Native.Present();
            NativeManager.Present();

            isFirstUpdate = false;

            // TODO more smart
            // When minimized, suppress CPU activity
            if (actualWidth == 0)
            {
                System.Threading.Thread.Sleep(16);
            }
        }