protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            double x = e.GetPosition(TileEditorGroup).X, y = e.GetPosition(TileEditorGroup).Y;
            int locX = (int)x / 64;
            int locY = (int)y / 64;
            if (x < 0 || x >= baseImage.ActualWidth || y < 0 || y >= baseImage.ActualHeight) return;

            if (!Editable) return;

            if (createTileInProgress)
            {
                if (findOriginInProgress)
                {
                    TileEditor t = new TileEditor(); t.Tile = new Tile(); t.Editable = Editable;
                    t.Tile.LeftX = (int)Area.Margin.Left / 64; t.Tile.TopY = (int)Area.Margin.Top / 64;
                    t.Tile.RightX = t.Tile.LeftX + (int)Area.Width / 64 - 1; t.Tile.BottomY = t.Tile.TopY + (int)Area.Height / 64 - 1;
                    t.Tile.OriginX = (int)Origin.Margin.Left / 64; t.Tile.OriginY = (int)Origin.Margin.Top / 64;
                    t.Changed += HandleTileChanged;
                    TileEditorGroup.Children.Add(t);
                    OnModify();
                    endCreateTile();
                }
                else
                {
                    if (Area.Width == 64 && Area.Height == 64)
                    {
                        TileEditor t = new TileEditor(); t.Tile = new Tile(); t.Editable = Editable;
                        t.Tile.PositionX = (int)Area.Margin.Left / 64;
                        t.Tile.PositionY = (int)Area.Margin.Top / 64;
                        t.Changed += HandleTileChanged;
                        TileEditorGroup.Children.Add(t);
                        OnModify();
                        endCreateTile();
                    }
                    else
                    {
                        if (isValidBounds((int)Area.Margin.Left / 64, (int)Area.Margin.Top / 64, locX, locY))
                        {
                            findOriginInProgress = true;
                        }
                        else
                        {
                            endCreateTile();
                        }
                    }
                }
            }
        }
 public void OpenFromTileSet(TileSet tset)
 {
     baseTileSet = tset;
     baseImage.Source = new BitmapImage(new Uri(BaseTexturePath));
     foreach (Tile t in baseTileSet)
     {
         TileEditor ed = new TileEditor(); ed.Editable = Editable;
         ed.Tile = t; ed.Changed += HandleTileChanged;
         TileEditorGroup.Children.Add(ed);
     }
 }