public override void OnAction(Action action) { if (action.wID == Action.ActionType.ACTION_HOME || action.wID == Action.ActionType.ACTION_SWITCH_HOME) { return; } if ((DateTime.Now.Ticks / 10000) - m_dwLastTime > 500) { m_iSpeed = 1; m_iCountU = 0; m_iCountD = 0; m_iCountL = 0; m_iCountR = 0; } m_dwLastTime = (DateTime.Now.Ticks / 10000); int x, y; if (m_iControl == (int)Controls.CONTROL_TOP_LEFT) { x = GUIGraphicsContext.OverScanLeft; y = GUIGraphicsContext.OverScanTop; } else if (m_iControl == (int)Controls.CONTROL_BOTTOM_RIGHT) { x = GUIGraphicsContext.OverScanWidth + GUIGraphicsContext.OverScanLeft; y = GUIGraphicsContext.OverScanHeight + GUIGraphicsContext.OverScanTop; } else if (m_iControl == (int)Controls.CONTROL_SUBTITLES) { x = 0; y = GUIGraphicsContext.Subtitles; } else if (m_iControl == (int)Controls.CONTROL_OSD) { x = 0; y = (GUIGraphicsContext.Height + GUIGraphicsContext.OSDOffset); } else // (m_iControl == (int)Controls.CONTROL_PIXEL_RATIO) { y = 256; x = (int)(256.0f / GUIGraphicsContext.PixelRatio); } float fPixelRatio = GUIGraphicsContext.PixelRatio; if (m_iSpeed > 10) { m_iSpeed = 10; // Speed limit for accellerated cursors } switch (action.wID) { case Action.ActionType.ACTION_PREVIOUS_MENU: { GUIWindowManager.ShowPreviousWindow(); return; } case Action.ActionType.ACTION_MOVE_LEFT: { if (m_iCountL == 0) { m_iSpeed = 1; } x -= m_iSpeed; m_iCountL++; if (m_iCountL > 5 && m_iSpeed < 10) { m_iSpeed += 1; m_iCountL = 1; } m_iCountU = 0; m_iCountD = 0; m_iCountR = 0; if (m_iControl == (int)Controls.CONTROL_PIXEL_RATIO) { fPixelRatio -= 0.01f; } } break; case Action.ActionType.ACTION_MOVE_RIGHT: { if (m_iCountR == 0) { m_iSpeed = 1; } x += m_iSpeed; m_iCountR++; if (m_iCountR > 5 && m_iSpeed < 10) { m_iSpeed += 1; m_iCountR = 1; } m_iCountU = 0; m_iCountD = 0; m_iCountL = 0; if (m_iControl == (int)Controls.CONTROL_PIXEL_RATIO) { fPixelRatio += 0.01f; } } break; case Action.ActionType.ACTION_MOVE_UP: { if (m_iCountU == 0) { m_iSpeed = 1; } y -= m_iSpeed; m_iCountU++; if (m_iCountU > 5 && m_iSpeed < 10) { m_iSpeed += 1; m_iCountU = 1; } m_iCountD = 0; m_iCountL = 0; m_iCountR = 0; if (m_iControl == (int)Controls.CONTROL_PIXEL_RATIO) { fPixelRatio -= 0.05f; } } break; case Action.ActionType.ACTION_MOVE_DOWN: { if (m_iCountD == 0) { m_iSpeed = 1; } y += m_iSpeed; m_iCountD++; if (m_iCountD > 5 && m_iSpeed < 10) { m_iSpeed += 1; m_iCountD = 1; } m_iCountU = 0; m_iCountL = 0; m_iCountR = 0; if (m_iControl == (int)Controls.CONTROL_PIXEL_RATIO) { fPixelRatio += 0.05f; } } break; case Action.ActionType.ACTION_CALIBRATE_SWAP_ARROWS: m_iControl++; if (m_iControl > (int)Controls.CONTROL_OSD) { m_iControl = (int)Controls.CONTROL_TOP_LEFT; } m_iSpeed = 1; m_iCountU = 0; m_iCountD = 0; m_iCountL = 0; m_iCountR = 0; return; case Action.ActionType.ACTION_CALIBRATE_RESET: //GUIGraphicsContext.ResetScreenParameters(m_Res[m_iCurRes]); GUIGraphicsContext.OverScanLeft = 0; GUIGraphicsContext.OverScanTop = 0; GUIGraphicsContext.PixelRatio = 1.0f; GUIGraphicsContext.OSDOffset = 0; GUIGraphicsContext.Subtitles = 530; GUIGraphicsContext.OverScanWidth = GUIGraphicsContext.Width; GUIGraphicsContext.OverScanHeight = GUIGraphicsContext.Height; m_iSpeed = 1; m_iCountU = 0; m_iCountD = 0; m_iCountL = 0; m_iCountR = 0; GUIWindowManager.ResetAllControls(); return; case Action.ActionType.ACTION_CHANGE_RESOLUTION: // choose the next resolution in our list //m_iCurRes++; //if (m_iCurRes == m_Res.size()) // m_iCurRes = 0; //Sleep(1000); //GUIGraphicsContext.SetGUIResolution(m_Res[m_iCurRes]); GUIWindowManager.ResetAllControls(); return; case Action.ActionType.ACTION_ANALOG_MOVE: x += (int)(2 * action.fAmount1); y -= (int)(2 * action.fAmount2); break; } // do the movement switch (m_iControl) { case (int)Controls.CONTROL_TOP_LEFT: if (x < 0) { x = 0; } if (y < 0) { y = 0; } if (x > 128) { x = 128; } if (y > 128) { y = 128; } GUIGraphicsContext.OverScanWidth += GUIGraphicsContext.OverScanLeft - x; GUIGraphicsContext.OverScanHeight += GUIGraphicsContext.OverScanTop - y; GUIGraphicsContext.OverScanLeft = x; GUIGraphicsContext.OverScanTop = y; break; case (int)Controls.CONTROL_BOTTOM_RIGHT: if (x > GUIGraphicsContext.Width) { x = GUIGraphicsContext.Width; } if (y > GUIGraphicsContext.Height) { y = GUIGraphicsContext.Height; } if (x < GUIGraphicsContext.Width - 128) { x = GUIGraphicsContext.Width - 128; } if (y < GUIGraphicsContext.Height - 128) { y = GUIGraphicsContext.Height - 128; } GUIGraphicsContext.OverScanWidth = x - GUIGraphicsContext.OverScanLeft; GUIGraphicsContext.OverScanHeight = y - GUIGraphicsContext.OverScanTop; break; case (int)Controls.CONTROL_SUBTITLES: if (y > GUIGraphicsContext.Height) { y = GUIGraphicsContext.Height; } if (y < GUIGraphicsContext.Height - 128) { y = GUIGraphicsContext.Height - 128; } GUIGraphicsContext.Subtitles = y; break; case (int)Controls.CONTROL_OSD: GUIGraphicsContext.OSDOffset = (y - GUIGraphicsContext.Height); GUIWindow window = GUIWindowManager.GetWindow((int)Window.WINDOW_OSD); window.ResetAllControls(); break; case (int)Controls.CONTROL_PIXEL_RATIO: GUIGraphicsContext.PixelRatio = fPixelRatio; break; } base.OnAction(action); }