protected override void OnPaint(PaintEventArgs e) { if (_guiDictionary == null) { return; } InputImageGui gui = _guiDictionary[_inputDisplayType]; e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor; Rectangle scaledRect = new Rectangle(new Point(), Size).Zoom(gui.ControllerImage.Value.Size); e.Graphics.DrawImage(gui.ControllerImage.Value, scaledRect); InputFrame inputs = _currentInputs; if (inputs == null) { return; } foreach (var input in Enum.GetValues(typeof(InputConfig.ButtonMask))) { if (inputs.IsButtonPressed((InputConfig.ButtonMask)input) && gui.ButtonImages.TryGetValue((InputConfig.ButtonMask)input, out Lazy <Image> img)) { e.Graphics.DrawImage(img.Value, scaledRect); } } float controlStickOffsetScale = GetScale(_inputDisplayType); float hOffset = inputs.ControlStickH * controlStickOffsetScale * scaledRect.Width; float vOffset = inputs.ControlStickV * controlStickOffsetScale * scaledRect.Width; RectangleF controlStickRectange = new RectangleF(scaledRect.X + hOffset, scaledRect.Y - vOffset, scaledRect.Width, scaledRect.Height); e.Graphics.DrawImage(gui.ControlStickImage.Value, controlStickRectange); }