/// <summary>
        /// Constructor
        /// </summary>
        /// <param name="spineAnimationItem"></param>
        /// <param name="title_path">The path of the spine animation to set as title</param>
        public SpineAnimationWindow(WzSpineAnimationItem spineAnimationItem, string title_path)
        {
            IsMouseVisible = true;

            //Window.IsBorderless = true;
            //Window.Position = new Point(0, 0);
            Window.Title          = title_path;
            IsFixedTimeStep       = false;       // dont cap fps
            Content.RootDirectory = "Content";

            // Res
            this.UserScreenScaleFactor = (float)ScreenDPIUtil.GetScreenScaleFactor();
            this.matrixScale           = Matrix.CreateScale(UserScreenScaleFactor);

            // Graphics
            graphicsDeviceMgr = new GraphicsDeviceManager(this)
            {
                SynchronizeWithVerticalRetrace = true,                 // max fps with the monitor
                HardwareModeSwitch             = true,
                GraphicsProfile             = GraphicsProfile.HiDef,
                IsFullScreen                = false,
                PreferMultiSampling         = true,
                SupportedOrientations       = DisplayOrientation.Default,
                PreferredBackBufferWidth    = (int)(1366 * UserScreenScaleFactor),               // XNA isnt DPI aware.
                PreferredBackBufferHeight   = (int)(768 * UserScreenScaleFactor),
                PreferredBackBufferFormat   = SurfaceFormat.Color /*RGBA8888*/ | SurfaceFormat.Bgr32 | SurfaceFormat.Dxt1 | SurfaceFormat.Dxt5,
                PreferredDepthStencilFormat = DepthFormat.Depth24Stencil8,
            };
            graphicsDeviceMgr.ApplyChanges();

            this.wzSpineObject = new WzSpineObject(spineAnimationItem);
        }
Esempio n. 2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="spineAnimationItem"></param>
        /// <param name="skeletonData"></param>
        public SpineAnimationWindow(WzSpineAnimationItem spineAnimationItem)
        {
            IsMouseVisible = true;

            //Window.IsBorderless = true;
            //Window.Position = new Point(0, 0);
            Window.Title    = "Spine";
            IsFixedTimeStep = false;             // dont cap fps

            graphicsDeviceMgr = new GraphicsDeviceManager(this)
            {
                SynchronizeWithVerticalRetrace = false,                 // dont cap fps
                HardwareModeSwitch             = true,
                GraphicsProfile             = GraphicsProfile.HiDef,
                IsFullScreen                = false,
                PreferMultiSampling         = true,
                SupportedOrientations       = DisplayOrientation.Default,
                PreferredBackBufferWidth    = 1366,
                PreferredBackBufferHeight   = 768,
                PreferredBackBufferFormat   = SurfaceFormat.Color,
                PreferredDepthStencilFormat = DepthFormat.Depth24Stencil8,
            };
            graphicsDeviceMgr.ApplyChanges();

            this.wzSpineObject = new WzSpineObject(spineAnimationItem);
        }
        /// <summary>
        /// On click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bgItem_Click(object sender, MouseEventArgs e)
        {
            ImageViewer    imageViewer = sender as ImageViewer;
            BackgroundInfo bgInfo      = (BackgroundInfo)((ImageViewer)sender).Tag;

            if (e.Button == MouseButtons.Left)
            {
                lock (hcsm.MultiBoard)
                {
                    hcsm.EnterEditMode(ItemTypes.Backgrounds);
                    hcsm.MultiBoard.SelectedBoard.Mouse.SetHeldInfo(bgInfo);
                    hcsm.MultiBoard.Focus();
                    ((ImageViewer)sender).IsActive = true;
                }
            }
            else // right click
            {
                if (bgInfo.Type == BackgroundInfoType.Spine) // only shows an animation preview window if its a spine object.
                {
                    ContextMenu cm = new ContextMenu();

                    MenuItem menuItem = new MenuItem();
                    menuItem.Text   = "Preview";
                    menuItem.Tag    = bgInfo;
                    menuItem.Click += new EventHandler(delegate(object sender_, EventArgs e_)
                    {
                        MenuItem menuItem_     = sender_ as MenuItem;
                        BackgroundInfo bgInfo_ = menuItem_.Tag as BackgroundInfo;

                        WzImageProperty spineAtlasProp = bgInfo_.WzImageProperty.WzProperties.FirstOrDefault(
                            wzprop => wzprop is WzStringProperty && ((WzStringProperty)wzprop).IsSpineAtlasResources);

                        if (spineAtlasProp != null)
                        {
                            WzStringProperty stringObj = (WzStringProperty)spineAtlasProp;
                            Thread thread = new Thread(() =>
                            {
                                try
                                {
                                    WzSpineAnimationItem item = new WzSpineAnimationItem(stringObj);

                                    // Create xna window
                                    SpineAnimationWindow Window = new SpineAnimationWindow(item);
                                    Window.Run();
                                }
                                catch (Exception ex)
                                {
                                }
                            });
                            thread.Start();
                            thread.Join();
                        }
                    });
                    cm.MenuItems.Add(menuItem);

                    cm.Show(imageViewer, new Point(0, 50));
                }
            }
        }
        private WzSpineAnimationItem wzSpineAnimationItem; // only applicable if its a spine item, otherwise null.

        /// <summary>
        /// Constructor
        /// Only to be initialized in Get
        /// </summary>
        /// <param name="image"></param>
        /// <param name="origin"></param>
        /// <param name="bS"></param>
        /// <param name="_type"></param>
        /// <param name="no"></param>
        /// <param name="parentObject"></param>
        /// <param name="wzSpineAnimationItem"></param>
        private BackgroundInfo(WzImageProperty imageProperty, Bitmap image, System.Drawing.Point origin, string bS, BackgroundInfoType _type, string no, WzObject parentObject,
                               WzSpineAnimationItem wzSpineAnimationItem)
            : base(image, origin, parentObject)
        {
            this.imageProperty        = imageProperty;
            this._bS                  = bS;
            this._type                = _type;
            this._no                  = no;
            this.wzSpineAnimationItem = wzSpineAnimationItem;
        }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="spineAnimationItem"></param>
        /// <param name="skeletonData"></param>
        public SpineAnimationWindow(WzSpineAnimationItem spineAnimationItem)
        {
            IsMouseVisible = true;

            graphicsDeviceMgr = new GraphicsDeviceManager(this);
            graphicsDeviceMgr.IsFullScreen              = false;
            graphicsDeviceMgr.PreferredBackBufferWidth  = 1366;
            graphicsDeviceMgr.PreferredBackBufferHeight = 768;

            this.spineAnimationItem = spineAnimationItem;
        }
        /// <summary>
        /// Load background from WzImageProperty
        /// </summary>
        /// <param name="graphicsDevice">The graphics device that the backgroundInfo is to be rendered on (loading spine)</param>
        /// <param name="parentObject"></param>
        /// <param name="spineParentObject"></param>
        /// <param name="bS"></param>
        /// <param name="type"></param>
        /// <param name="no"></param>
        /// <returns></returns>
        private static BackgroundInfo Load(GraphicsDevice graphicsDevice, WzImageProperty parentObject, string bS, BackgroundInfoType type, string no)
        {
            WzCanvasProperty frame0;

            if (type == BackgroundInfoType.Animation)
            {
                frame0 = (WzCanvasProperty)WzInfoTools.GetRealProperty(parentObject["0"]);
            }
            else if (type == BackgroundInfoType.Spine)
            {
                // TODO: make a preview of the spine image ffs
                WzCanvasProperty spineCanvas = (WzCanvasProperty)parentObject["0"];
                if (spineCanvas != null)
                {
                    // Load spine
                    WzSpineAnimationItem wzSpineAnimationItem = null;
                    if (graphicsDevice != null) // graphicsdevice needed to work.. assuming that it is loaded by now before BackgroundPanel
                    {
                        WzImageProperty spineAtlasProp = ((WzSubProperty)parentObject).WzProperties.FirstOrDefault(
                            wzprop => wzprop is WzStringProperty property && property.IsSpineAtlasResources);
                        if (spineAtlasProp != null)
                        {
                            WzStringProperty stringObj = (WzStringProperty)spineAtlasProp;
                            wzSpineAnimationItem = new WzSpineAnimationItem(stringObj);

                            wzSpineAnimationItem.LoadResources(graphicsDevice);
                        }
                    }

                    // Preview Image
                    Bitmap bitmap = spineCanvas.GetLinkedWzCanvasBitmap();

                    // Origin
                    PointF origin__ = spineCanvas.GetCanvasOriginPosition();

                    return(new BackgroundInfo(parentObject, bitmap, WzInfoTools.PointFToSystemPoint(origin__), bS, type, no, parentObject, wzSpineAnimationItem));
                }
                else
                {
                    PointF origin_ = new PointF();
                    return(new BackgroundInfo(parentObject, Properties.Resources.placeholder, WzInfoTools.PointFToSystemPoint(origin_), bS, type, no, parentObject, null));
                }
            }
            else
            {
                frame0 = (WzCanvasProperty)WzInfoTools.GetRealProperty(parentObject);
            }

            PointF origin = frame0.GetCanvasOriginPosition();

            return(new BackgroundInfo(frame0, frame0.GetLinkedWzCanvasBitmap(), WzInfoTools.PointFToSystemPoint(origin), bS, type, no, parentObject, null));
        }