コード例 #1
0
ファイル: ResizedFrame.cs プロジェクト: Isthimius/Gondwana
        private ResizedFrame(Frame orig, Size render)
        {
            OriginalFrame = orig;
            RenderSize = render;
            CreationTick = HighResTimer.GetCurrentTickCount();

            // resize original Bitmap
            CreateResizedGDIBitmap(orig.Tilesheet, ref NewBmp, ref ResizedGraphics, ref hDC, ref hBmp);

            // resize Mask of original Bitmap
            if (OriginalFrame.Tilesheet.Mask != null)
                CreateResizedGDIBitmap(orig.Tilesheet.Mask, ref NewBmpMask, ref ResizedGraphicsMask, ref hDCMask, ref hBmpMask);

            // hook into Tilesheet Disposed event
            orig.Tilesheet.Disposed += Tilesheet_Disposed;

            ResizedFrameCache.Add(this.Id, this);
        }
コード例 #2
0
ファイル: GridPointMatrix.cs プロジェクト: Isthimius/Gondwana
 public GridPoint SetGridPoint(int x, int y, Frame frame)
 {
     this[x, y].CurrentFrame = frame;
     return this[x, y];
 }
コード例 #3
0
ファイル: ResizedFrame.cs プロジェクト: Isthimius/Gondwana
 internal static string GetId(Frame frame, Size renderSize)
 {
     return string.Format("{0}_{1}_{2}_{3}_{4}", frame.Tilesheet.Name, frame.XTile.ToString(), frame.YTile.ToString(), renderSize.Width.ToString(), renderSize.Height.ToString());
 }
コード例 #4
0
ファイル: ResizedFrame.cs プロジェクト: Isthimius/Gondwana
        internal static ResizedFrame GetResizedFrame(Frame frame, Size renderSize)
        {
            var settings = EngineConfiguration.Open().Settings;
            ResizedFrame resizedFrame;

            if (ResizedFrameCache.TryGetValue(GetId(frame, renderSize), out resizedFrame) == false)
            {
                resizedFrame = new ResizedFrame(frame, renderSize);

                // check cache limit; if over, trim cache
                while (ResizedFrameCache.Count > settings.ResizedFrameCacheLimit)
                {
                    var oldestInCache = ResizedFrameCache.OrderBy(kvp => kvp.Value.CreationTick).First();
                    var oldResizedFrame = oldestInCache.Value;
                    ResizedFrameCache.Remove(oldestInCache.Key);
                    oldResizedFrame.Dispose();
                }
            }

            return resizedFrame;
        }