From c74fbaf78788610dc17fe72bb437b99db19705b8 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 8 Apr 2007 16:46:35 +0000 Subject: [PATCH] Add cursor blink time preview and change blink time on the fly. svn path=/trunk/; revision=26284 --- reactos/dll/cpl/main/Cz.rc | 1 + reactos/dll/cpl/main/De.rc | 7 +++-- reactos/dll/cpl/main/En.rc | 1 + reactos/dll/cpl/main/Es.rc | 1 + reactos/dll/cpl/main/Fr.rc | 1 + reactos/dll/cpl/main/Hu.rc | 1 + reactos/dll/cpl/main/Id.rc | 1 + reactos/dll/cpl/main/Ja.rc | 1 + reactos/dll/cpl/main/Nl.rc | 1 + reactos/dll/cpl/main/Uk.rc | 1 + reactos/dll/cpl/main/it-IT.rc | 1 + reactos/dll/cpl/main/keyboard.c | 54 +++++++++++++++++++++++++++++---- reactos/dll/cpl/main/resource.h | 2 +- reactos/dll/cpl/main/ru-RU.rc | 1 + 14 files changed, 64 insertions(+), 10 deletions(-) diff --git a/reactos/dll/cpl/main/Cz.rc b/reactos/dll/cpl/main/Cz.rc index 4461a7890fb..4c67eed455c 100644 --- a/reactos/dll/cpl/main/Cz.rc +++ b/reactos/dll/cpl/main/Cz.rc @@ -19,6 +19,7 @@ BEGIN LTEXT "Zde mùžete vyzkoušet rychlost opakování:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Rychlost &blikání kurzoru:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "Žádná", -1, 40, 165, 30, 10 LTEXT "Velká", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/De.rc b/reactos/dll/cpl/main/De.rc index c687f70ed27..b56ef9e4e7a 100644 --- a/reactos/dll/cpl/main/De.rc +++ b/reactos/dll/cpl/main/De.rc @@ -12,18 +12,19 @@ BEGIN LTEXT "&Verzögerung:", -1, 40, 15, 50, 10 LTEXT "Lang", -1, 40, 30, 24, 10 LTEXT "Kurz", -1, 200, 30, 24, 10 - CONTROL "",IDC_SLIDER_REPEAT_DELAY, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 30, 130, 17 + CONTROL "", IDC_SLIDER_REPEAT_DELAY, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 30, 130, 17 ICON -1, IDC_ICON_REPEAT_RATE, 15, 70, 15, 15 LTEXT "&Wiederholrate:", -1, 40, 70, 50, 10 LTEXT "Niedrig", -1, 40, 85, 24, 10 LTEXT "Hoch", -1, 200, 85, 24, 10 - CONTROL "",IDC_SLIDER_REPEAT_RATE, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 85, 130, 17 + CONTROL "", IDC_SLIDER_REPEAT_RATE, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 85, 130, 17 LTEXT "&Klicken Sie hier, und drücken Sie zum Testen eine Taste:", -1, 15, 105, 180, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "&Cursorblinkgeschwindgkeit", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "Langsam", -1, 35, 165, 33, 10 LTEXT "Schnell", -1, 200, 165, 33, 10 - CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 + CONTROL "", IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 END IDD_HARDWARE DIALOGEX 0, 0, 246, 228 diff --git a/reactos/dll/cpl/main/En.rc b/reactos/dll/cpl/main/En.rc index 115bc5fa462..f8fd59c9918 100644 --- a/reactos/dll/cpl/main/En.rc +++ b/reactos/dll/cpl/main/En.rc @@ -19,6 +19,7 @@ BEGIN LTEXT "Click here and hold down a key to &test repeat rate:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Cursor &blink rate:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "None", -1, 40, 165, 30, 10 LTEXT "Fast", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/Es.rc b/reactos/dll/cpl/main/Es.rc index 60b63487163..ae7f0ab9224 100644 --- a/reactos/dll/cpl/main/Es.rc +++ b/reactos/dll/cpl/main/Es.rc @@ -19,6 +19,7 @@ BEGIN LTEXT "Click here and hold down a key to &test repeat rate:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Cursor &blink rate:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "None", -1, 40, 165, 30, 10 LTEXT "Fast", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/Fr.rc b/reactos/dll/cpl/main/Fr.rc index b6e9935675e..6c2608d30f2 100644 --- a/reactos/dll/cpl/main/Fr.rc +++ b/reactos/dll/cpl/main/Fr.rc @@ -19,6 +19,7 @@ BEGIN LTEXT "Cliquer ici et enfoncer une touche pour &tester le délai de répétition:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Taux de &clignotement du curseur:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "Aucun", -1, 40, 165, 30, 10 LTEXT "Rapide", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/Hu.rc b/reactos/dll/cpl/main/Hu.rc index 1faa514039f..51491df03dd 100644 --- a/reactos/dll/cpl/main/Hu.rc +++ b/reactos/dll/cpl/main/Hu.rc @@ -19,6 +19,7 @@ BEGIN LTEXT "Click here and hold down a key to &test repeat rate:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Cursor &blink rate:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "None", -1, 40, 165, 30, 10 LTEXT "Fast", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/Id.rc b/reactos/dll/cpl/main/Id.rc index 7474e694d86..09ba591337b 100644 --- a/reactos/dll/cpl/main/Id.rc +++ b/reactos/dll/cpl/main/Id.rc @@ -19,6 +19,7 @@ BEGIN LTEXT "Klik di sini dan tekan tombol untuk mengu&ji rata-rata pengulangan:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Rata-rata &kedip kursor:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "Tidak ada", -1, 40, 165, 30, 10 LTEXT "Cepat", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/Ja.rc b/reactos/dll/cpl/main/Ja.rc index e05ca52b647..d2bb36a7cc0 100644 --- a/reactos/dll/cpl/main/Ja.rc +++ b/reactos/dll/cpl/main/Ja.rc @@ -19,6 +19,7 @@ BEGIN LTEXT "Click here and hold down a key to &test repeat rate:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Cursor &blink rate:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "None", -1, 40, 165, 30, 10 LTEXT "Fast", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/Nl.rc b/reactos/dll/cpl/main/Nl.rc index ca8262f2b4f..6566cd049e5 100644 --- a/reactos/dll/cpl/main/Nl.rc +++ b/reactos/dll/cpl/main/Nl.rc @@ -18,6 +18,7 @@ BEGIN LTEXT "Click here and hold down a key to &test repeat rate:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Cursor &blink rate:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "None", -1, 40, 165, 30, 10 LTEXT "Fast", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/Uk.rc b/reactos/dll/cpl/main/Uk.rc index aba024345c9..79c93c9ae2e 100644 --- a/reactos/dll/cpl/main/Uk.rc +++ b/reactos/dll/cpl/main/Uk.rc @@ -27,6 +27,7 @@ BEGIN LTEXT "Çàòèñí³òü êëàâ³øó â ïîë³ äëÿ &ïåðåâ³ðêè øâèäêîñò³ ïîâòîðó:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "×àñòîòà ì&åðåõò³ííÿ êóðñîðà:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "Íåìàº", -1, 40, 165, 30, 10 LTEXT "Øâèäêî", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/it-IT.rc b/reactos/dll/cpl/main/it-IT.rc index 96e1904bb3d..9f05c73589a 100644 --- a/reactos/dll/cpl/main/it-IT.rc +++ b/reactos/dll/cpl/main/it-IT.rc @@ -21,6 +21,7 @@ BEGIN LTEXT "Clicca qui e tieni premuto un tasto per provare la frequenza di ripetizione:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Frequenza di lampeggio del Cursore:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "Nessuna", -1, 40, 165, 30, 10 LTEXT "Veloce", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 diff --git a/reactos/dll/cpl/main/keyboard.c b/reactos/dll/cpl/main/keyboard.c index bd4ee85deb3..e040583a04f 100644 --- a/reactos/dll/cpl/main/keyboard.c +++ b/reactos/dll/cpl/main/keyboard.c @@ -1,6 +1,6 @@ /* * ReactOS - * Copyright (C) 2004 ReactOS Team + * Copyright (C) 2004, 2007 ReactOS Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -33,12 +33,17 @@ #include "main.h" #include "resource.h" +#define ID_BLINK_TIMER 345 + + typedef struct _SPEED_DATA { INT nKeyboardDelay; DWORD dwKeyboardSpeed; UINT uCaretBlinkTime; - + UINT uOrigCaretBlinkTime; + BOOL fShowCursor; + RECT rcCursor; } SPEED_DATA, *PSPEED_DATA; @@ -77,8 +82,14 @@ KeyboardSpeedProc(IN HWND hwndDlg, pSpeedData->dwKeyboardSpeed = 31; } - /* Get the caret blink time */ - pSpeedData->uCaretBlinkTime = GetCaretBlinkTime(); + pSpeedData->fShowCursor = TRUE; + GetWindowRect(GetDlgItem(hwndDlg, IDC_TEXT_CURSOR_BLINK), &pSpeedData->rcCursor); + ScreenToClient(hwndDlg, (LPPOINT)&pSpeedData->rcCursor.left); + ScreenToClient(hwndDlg, (LPPOINT)&pSpeedData->rcCursor.right); + + /* Get the caret blink time and save its original value */ + pSpeedData->uOrigCaretBlinkTime = GetCaretBlinkTime(); + pSpeedData->uCaretBlinkTime = pSpeedData->uOrigCaretBlinkTime; SendDlgItemMessage(hwndDlg, IDC_SLIDER_REPEAT_DELAY, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 3)); SendDlgItemMessage(hwndDlg, IDC_SLIDER_REPEAT_DELAY, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(3 - pSpeedData->nKeyboardDelay)); @@ -89,6 +100,8 @@ KeyboardSpeedProc(IN HWND hwndDlg, SendDlgItemMessage(hwndDlg, IDC_SLIDER_CURSOR_BLINK, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(0, 10)); SendDlgItemMessage(hwndDlg, IDC_SLIDER_CURSOR_BLINK, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(12 - (pSpeedData->uCaretBlinkTime / 100))); + /* Start the blink timer */ + SetTimer(hwndDlg, ID_BLINK_TIMER, pSpeedData->uCaretBlinkTime, NULL); break; case WM_HSCROLL: @@ -146,17 +159,43 @@ KeyboardSpeedProc(IN HWND hwndDlg, case TB_BOTTOM: case TB_ENDTRACK: pSpeedData->uCaretBlinkTime = (12 - (UINT)SendDlgItemMessage(hwndDlg, IDC_SLIDER_CURSOR_BLINK, TBM_GETPOS, 0, 0)) * 100; + KillTimer(hwndDlg, ID_BLINK_TIMER); + SetTimer(hwndDlg, ID_BLINK_TIMER, pSpeedData->uCaretBlinkTime, NULL); + SetCaretBlinkTime(pSpeedData->uCaretBlinkTime); PropSheet_Changed(GetParent(hwndDlg), hwndDlg); break; case TB_THUMBTRACK: pSpeedData->uCaretBlinkTime = (12 - (UINT)HIWORD(wParam)) * 100; + KillTimer(hwndDlg, ID_BLINK_TIMER); + SetTimer(hwndDlg, ID_BLINK_TIMER, pSpeedData->uCaretBlinkTime, NULL); + SetCaretBlinkTime(pSpeedData->uCaretBlinkTime); PropSheet_Changed(GetParent(hwndDlg), hwndDlg); break; } } break; + case WM_TIMER: + if (wParam == ID_BLINK_TIMER) + { + if (pSpeedData->fShowCursor) + { + HDC hDC = GetDC(hwndDlg); + HBRUSH hBrush = GetSysColorBrush(COLOR_BTNTEXT); + FillRect(hDC, &pSpeedData->rcCursor, hBrush); + DeleteObject(hBrush); + ReleaseDC(hwndDlg, hDC); + } + else + { + InvalidateRect(hwndDlg, &pSpeedData->rcCursor, TRUE); + } + + pSpeedData->fShowCursor = !pSpeedData->fShowCursor; + } + break; + case WM_NOTIFY: { LPNMHDR lpnm = (LPNMHDR)lParam; @@ -164,8 +203,6 @@ KeyboardSpeedProc(IN HWND hwndDlg, switch(lpnm->code) { case PSN_APPLY: - SetCaretBlinkTime(pSpeedData->uCaretBlinkTime); - SystemParametersInfo(SPI_SETKEYBOARDDELAY, pSpeedData->nKeyboardDelay, 0, @@ -177,6 +214,10 @@ KeyboardSpeedProc(IN HWND hwndDlg, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); return TRUE; + case PSN_RESET: + SetCaretBlinkTime(pSpeedData->uOrigCaretBlinkTime); + break; + default: break; } @@ -184,6 +225,7 @@ KeyboardSpeedProc(IN HWND hwndDlg, break; case WM_DESTROY: + KillTimer(hwndDlg, ID_BLINK_TIMER); HeapFree(GetProcessHeap(), 0, pSpeedData); break; } diff --git a/reactos/dll/cpl/main/resource.h b/reactos/dll/cpl/main/resource.h index 19a38d3c23e..b2e5671e47c 100644 --- a/reactos/dll/cpl/main/resource.h +++ b/reactos/dll/cpl/main/resource.h @@ -76,7 +76,7 @@ #define IDC_SLIDER_REPEAT_RATE 2053 #define IDC_EDIT_REPEAT_RATE 2054 #define IDC_SLIDER_CURSOR_BLINK 2055 - +#define IDC_TEXT_CURSOR_BLINK 2056 #endif /* __CPL_RESOURCE_H */ diff --git a/reactos/dll/cpl/main/ru-RU.rc b/reactos/dll/cpl/main/ru-RU.rc index 58f1e96a9e3..d913c831d35 100644 --- a/reactos/dll/cpl/main/ru-RU.rc +++ b/reactos/dll/cpl/main/ru-RU.rc @@ -19,6 +19,7 @@ BEGIN LTEXT "Click here and hold down a key to &test repeat rate:", -1, 15, 105, 150, 10 EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 115, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP GROUPBOX "Cursor &blink rate:", -1, 5, 145, 230, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 LTEXT "None", -1, 40, 165, 30, 10 LTEXT "Fast", -1, 200, 165, 30, 10 CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17