Esempio n. 1
0
        public void Draw(bool refresh)
        {
            lock (_drawLock)
            {
                if (refresh)
                {
                    _refreshingClient = true;
                }

                Event ev = new TileUpdatedEvent
                {
                    Identifier = Guid.NewGuid(),
                    SenderId   = Identifier,
                    Tile       = GetEntity(),
                    MimeType   = _mimeType,
                    Quality    = _quality
                };

                ApplicationContext.FireEvent(ev);

                if (refresh)
                {
                    _refreshingClient = false;
                }
            }
        }
        private void ProcessIncomingQueue()
        {
            lock (_incomingEventSync)
            {
                //TODO: will renderLoopCount overflow?
                _renderLoopCount++;

                EventSet current;
                if (!_incomingEventSets.TryGetValue(_nextEventSetNumber, out current))
                {
                    return;
                }

                bool             hasTileUpdateEvent = current.Events.Any(i => i is TileUpdatedEvent);
                TileUpdatedEvent tileUpdateEv       = hasTileUpdateEvent ? current.Events.First(i => i is TileUpdatedEvent) as TileUpdatedEvent : null;

                if (hasTileUpdateEvent)
                {
                    long prevTileUpdate;
                    if (_timePrevTileUpdateEvent.TryGetValue(tileUpdateEv.SenderId, out prevTileUpdate))
                    {
                        // For some reason, image on the screen is not updated if it is changed too fast
                        // My guess is it takes another iteration to refresh the UI.
                        //
                        // NOTE: From MSDN http://msdn.microsoft.com/en-us/library/system.windows.media.compositiontarget.rendering.aspx
                        // This event handler gets called once per frame. Each time that Windows Presentation Foundation (WPF) marshals the persisted rendering data in the visual tree across to the composition tree,
                        // your event handler is called. In addition, if changes to the visual tree force updates to the composition tree, your event handler is also called.
                        // Note that your event handler is called after layout has been computed.
                        // However, you can modify layout in your event handler, which means that layout will be computed once more before rendering.
                        //
                        if (ThrottleSettings.Default.EnableFPSCap)
                        {
                            if (_renderLoopCount - prevTileUpdate < 3)
                            {
                                return;
                            }
                        }
                    }
                }

                _incomingEventSets.Remove(_nextEventSetNumber);
                _nextEventSetNumber = current.Number + 1;
                var ev = current;

                ProcessEventSet(ev);

                if (hasTileUpdateEvent)
                {
                    _timePrevTileUpdateEvent[tileUpdateEv.SenderId] = _renderLoopCount;
                }
            }
        }
        private void ChangeClientRectangle(MockApplicationContext context, TileEntityHandler handler, int left, int top, int height, int width, string errorMessageIfFailed)
        {
            Trace.WriteLine(String.Format("Simulate changing client size to {0}x{1}", width, height));

            handler.ProcessMessage(new UpdatePropertyMessage()
            {
                PropertyName = "ClientRectangle",
                Value        = new Rectangle
                {
                    Left   = left, Top = top,
                    Height = height, Width = width
                }
            });


            TileUpdatedEvent tileUpdateEvent = context.EventSent.FindLast(e => e is TileUpdatedEvent) as TileUpdatedEvent;

            Bitmap bmp = new Bitmap(new MemoryStream(tileUpdateEvent.Tile.Image));

            Trace.WriteLine(String.Format("Checking size of the image being sent"));
            Assert.AreEqual(width, bmp.Width, errorMessageIfFailed);
            Assert.AreEqual(height, bmp.Height, errorMessageIfFailed);
        }
Esempio n. 4
0
 private void RaiseTileUpdatedEvent(TileUpdatedEventArgs args)
 {
     TileUpdatedEvent?.Invoke(this, args);
 }