示例#1
0
        private Rectangle GetElementRegion()
        {
            IDDTexture        Texture = CurrentFile.Textures[LstTextures.SelectedIndex];
            IDDTextureElement Element = Texture.Elements[LstItems.SelectedIndex];

            Rectangle Region = new Rectangle();

            Region.X      = (int)(Element.X1 * Texture.Resolution.Width);
            Region.Y      = (int)(Element.Y1 * Texture.Resolution.Height);
            Region.Width  = (int)(Element.X2 * Texture.Resolution.Width) - Region.X;
            Region.Height = (int)(Element.Y2 * Texture.Resolution.Height) - Region.Y;

            return(Region);
        }
示例#2
0
        private void SetNewSizes(Rectangle NewRect)
        {
            IDDTexture        Texture = CurrentFile.Textures[LstTextures.SelectedIndex];
            IDDTextureElement Element = Texture.Elements[LstItems.SelectedIndex];

            Element.X1 = (float)NewRect.X / Texture.Resolution.Width;
            Element.Y1 = (float)NewRect.Y / Texture.Resolution.Height;
            Element.X2 = (float)(NewRect.X + NewRect.Width) / Texture.Resolution.Width;
            Element.Y2 = (float)(NewRect.Y + NewRect.Height) / Texture.Resolution.Height;

            Texture.Elements.RemoveAt(LstItems.SelectedIndex);
            Texture.Elements.Insert(LstItems.SelectedIndex, Element);
            CurrentFile.Textures.RemoveAt(LstTextures.SelectedIndex);
            CurrentFile.Textures.Insert(LstTextures.SelectedIndex, Texture);
        }
示例#3
0
        private void TextureImg_MouseMove(object sender, MouseEventArgs e)
        {
            if (LstItems.SelectedIndex > -1)
            {
                IDDTexture        Texture = CurrentFile.Textures[LstTextures.SelectedIndex];
                IDDTextureElement Element = Texture.Elements[LstItems.SelectedIndex];

                int X1 = (int)(Element.X1 * Texture.Resolution.Width);
                int Y1 = (int)(Element.Y1 * Texture.Resolution.Height);
                int X2 = (int)(Element.X2 * Texture.Resolution.Width);
                int Y2 = (int)(Element.Y2 * Texture.Resolution.Height);

                if (IsResizing)
                {
                    int DiffX = e.X - ResizeStart.X;
                    int DiffY = e.Y - ResizeStart.Y;

                    if (CurrentCorner == ResizeCorner.None)
                    {
                        int W = X2 - X1;
                        int H = Y2 - Y1;

                        X1 += DiffX;
                        Y1 += DiffY;

                        NewSizes = new Rectangle(X1, Y1, W, H);
                    }
                    else
                    {
                        if ((CurrentCorner & ResizeCorner.Top) != 0)
                        {
                            Y1 = Math.Min(Y1 + DiffY, Y2 - 1);
                        }
                        if ((CurrentCorner & ResizeCorner.Left) != 0)
                        {
                            X1 = Math.Min(X1 + DiffX, X2 - 1);
                        }
                        if ((CurrentCorner & ResizeCorner.Bottom) != 0)
                        {
                            Y2 = Math.Max(Y2 + DiffY, Y1 + 1);
                        }
                        if ((CurrentCorner & ResizeCorner.Right) != 0)
                        {
                            X2 = Math.Max(X2 + DiffX, X1 + 1);
                        }

                        NewSizes = new Rectangle(X1, Y1, X2 - X1, Y2 - Y1);
                    }

                    TextureImg.Refresh();
                }
                else
                {
                    int W = X2 - X1;
                    int H = Y2 - Y1;

                    const int GS  = 12; //Grip size
                    const int GS2 = GS * 2;
                    bool      OldHoveringResize = IsHoveringReisze;
                    IsHoveringReisze = false;
                    CurrentCorner    = ResizeCorner.None;
                    Point P = e.Location;

                    //Diamond
                    CheckIntersection(new Rectangle(X1 + GS, Y1, W - GS2, GS), P, Cursors.SizeNS, ResizeCorner.Top);
                    CheckIntersection(new Rectangle(X1, Y1 + GS, GS, H - GS2), P, Cursors.SizeWE, ResizeCorner.Left);
                    CheckIntersection(new Rectangle(X1 + GS, Y2 - GS, W - GS2, GS), P, Cursors.SizeNS, ResizeCorner.Bottom);
                    CheckIntersection(new Rectangle(X2 - GS, Y1 + GS, GS, H - GS2), P, Cursors.SizeWE, ResizeCorner.Right);

                    //Square
                    CheckIntersection(new Rectangle(X1, Y1, GS, GS), P, Cursors.SizeNWSE, ResizeCorner.TopLeft);
                    CheckIntersection(new Rectangle(X2 - GS, Y1, GS, GS), P, Cursors.SizeNESW, ResizeCorner.TopRight);
                    CheckIntersection(new Rectangle(X1, Y2 - GS, GS, GS), P, Cursors.SizeNESW, ResizeCorner.BottomLeft);
                    CheckIntersection(new Rectangle(X2 - GS, Y2 - GS, GS, GS), P, Cursors.SizeNWSE, ResizeCorner.BottomRight);

                    if (IsHoveringReisze || (IsHoveringReisze != OldHoveringResize))
                    {
                        TextureImg.Refresh();
                    }
                    if (!IsHoveringReisze)
                    {
                        if (new Rectangle(X1, Y1, W, H).Contains(e.Location))
                        {
                            Cursor = Cursors.SizeAll;
                        }
                        else
                        {
                            Cursor = Cursors.Default;
                        }
                    }
                }
            }
        }