Author: dreimer Date: Mon Apr 27 01:04:01 2015 New Revision: 67455
URL: http://svn.reactos.org/svn/reactos?rev=67455&view=rev Log: [STARFIELD] Change to use scrnsave library. Tidy up all now useless stuff. Tabs -> spaces. Single language link in support added. Noticable change: Multi Monitor support!!! TBD, some user configuration stuff maybe
Modified: trunk/rosapps/applications/screensavers/starfield/CMakeLists.txt trunk/rosapps/applications/screensavers/starfield/resource.h trunk/rosapps/applications/screensavers/starfield/screensaver.c trunk/rosapps/applications/screensavers/starfield/starfield.rc
Modified: trunk/rosapps/applications/screensavers/starfield/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/applications/screensavers/s... ============================================================================== --- trunk/rosapps/applications/screensavers/starfield/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rosapps/applications/screensavers/starfield/CMakeLists.txt [iso-8859-1] Mon Apr 27 01:04:01 2015 @@ -2,5 +2,6 @@ add_executable(starfield screensaver.c starfield.rc) set_module_type(starfield win32gui UNICODE) set_target_properties(starfield PROPERTIES SUFFIX ".scr") +target_link_libraries(starfield scrnsave) add_importlibs(starfield user32 gdi32 msvcrt kernel32) add_cd_file(TARGET starfield DESTINATION reactos/system32 FOR all)
Modified: trunk/rosapps/applications/screensavers/starfield/resource.h URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/applications/screensavers/s... ============================================================================== --- trunk/rosapps/applications/screensavers/starfield/resource.h [iso-8859-1] (original) +++ trunk/rosapps/applications/screensavers/starfield/resource.h [iso-8859-1] Mon Apr 27 01:04:01 2015 @@ -1,3 +1,4 @@ +#pragma once
#define IDS_DESCRIPTION 1 #define IDS_TITLE 2
Modified: trunk/rosapps/applications/screensavers/starfield/screensaver.c URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/applications/screensavers/s... ============================================================================== --- trunk/rosapps/applications/screensavers/starfield/screensaver.c [iso-8859-1] (original) +++ trunk/rosapps/applications/screensavers/starfield/screensaver.c [iso-8859-1] Mon Apr 27 01:04:01 2015 @@ -2,6 +2,7 @@ * Copyright 2003 J Brown * Copyright 2006 Eric Kohl * Copyright 2007 Marc Piulachs (marc.piulachs@codexchange.net) + * Copyright 2015 Daniel Reimer * * 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 @@ -20,6 +21,7 @@
#include <windows.h> #include <tchar.h> +#include <scrnsave.h> #include "resource.h"
#define RANDOM( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min)) @@ -27,359 +29,199 @@ #define MAX_LOADSTRING 100 #define MAX_STARS 1000
-#define APPNAME _T("Starfield") -#define APP_TIMER 1 -#define APP_TIMER_INTERVAL 20 +#define APPNAME _T("Starfield") +#define APP_TIMER 1 +#define APP_TIMER_INTERVAL 20
#define MAX_STARS 1000
// Details of each individual star typedef struct star { - int m_nXPos, m_nYPos, m_nZPos; - int m_nOldX, m_nOldY; + int m_nXPos, m_nYPos, m_nZPos; + int m_nOldX, m_nOldY; } STAR;
-HINSTANCE hInstance; -BOOL fullscreen = FALSE; - STAR *stars;
-int m_nTotStars; -int m_nCenterX, m_nCenterY; +int m_nTotStars; +int m_nCenterX, m_nCenterY;
void DrawStarField (HDC pDC) { - int nX, nY; - int i; - for (i = 0; i < m_nTotStars; i++) - { - // Clear last position of this star - SetPixel ( - pDC, - stars[i].m_nOldX, - stars[i].m_nOldY, - RGB (0, 0, 0)); - - nX = (int)((((long)stars[i].m_nXPos << 7) / (long)stars[i].m_nZPos) + m_nCenterX); - nY = (int)((((long)stars[i].m_nYPos << 7) / (long)stars[i].m_nZPos) + m_nCenterY); - - // Draw star - SetPixel ( - pDC, - nX, - nY, - RGB (255, 255, 255)); - - // Remember current position for clearing later - stars[i].m_nOldX = nX; - stars[i].m_nOldY = nY; - } + int nX, nY; + int i; + for (i = 0; i < m_nTotStars; i++) + { + // Clear last position of this star + SetPixel ( + pDC, + stars[i].m_nOldX, + stars[i].m_nOldY, + RGB (0, 0, 0)); + + nX = (int)((((long)stars[i].m_nXPos << 7) / (long)stars[i].m_nZPos) + m_nCenterX); + nY = (int)((((long)stars[i].m_nYPos << 7) / (long)stars[i].m_nZPos) + m_nCenterY); + + // Draw star + SetPixel ( + pDC, + nX, + nY, + RGB (255, 255, 255)); + + // Remember current position for clearing later + stars[i].m_nOldX = nX; + stars[i].m_nOldY = nY; + } }
BOOL SetUpStars (int nNumStars) { - int i; - if (nNumStars > MAX_STARS) - { - MessageBox (0, - _T("Too many stars! Aborting!"), - _T("Error"), - MB_OK | MB_ICONWARNING); - return FALSE; - } - - if (stars) - free (stars); - - m_nTotStars = nNumStars; - - stars = (STAR*)malloc(nNumStars * sizeof(STAR)); - - if (!stars) - { - MessageBox (0, - _T("Unable to allocate memory! Aborting!"), - _T("Error"), - MB_OK | MB_ICONWARNING); - return FALSE; - } - - for (i = 0; i < m_nTotStars; i++) - { - do - { - stars[i].m_nXPos = RANDOM (-320, 320); - stars[i].m_nYPos = RANDOM (-200, 200); - stars[i].m_nZPos = i+1; - stars[i].m_nOldX = -1; - stars[i].m_nOldY = -1; - } while ((stars[i].m_nXPos == 0) || (stars[i].m_nYPos == 0)); - } - - return TRUE; + int i; + if (nNumStars > MAX_STARS) + { + MessageBox (0, + _T("Too many stars! Aborting!"), + _T("Error"), + MB_OK | MB_ICONWARNING); + return FALSE; + } + + if (stars) + free (stars); + + m_nTotStars = nNumStars; + + stars = (STAR*)malloc(nNumStars * sizeof(STAR)); + + if (!stars) + { + MessageBox (0, + _T("Unable to allocate memory! Aborting!"), + _T("Error"), + MB_OK | MB_ICONWARNING); + return FALSE; + } + + for (i = 0; i < m_nTotStars; i++) + { + do + { + stars[i].m_nXPos = RANDOM (-320, 320); + stars[i].m_nYPos = RANDOM (-200, 200); + stars[i].m_nZPos = i+1; + stars[i].m_nOldX = -1; + stars[i].m_nOldY = -1; + } while ((stars[i].m_nXPos == 0) || (stars[i].m_nYPos == 0)); + } + return TRUE; }
void MoveStarField (int nXofs, int nYofs, int nZofs) { - int i; - for (i = 0; i < m_nTotStars; i++) - { - stars[i].m_nXPos += nXofs; - stars[i].m_nYPos += nYofs; - stars[i].m_nZPos += nZofs; - - if (stars[i].m_nZPos > m_nTotStars) - stars[i].m_nZPos -= m_nTotStars; - if (stars[i].m_nZPos < 1) - stars[i].m_nZPos += m_nTotStars; - } + int i; + for (i = 0; i < m_nTotStars; i++) + { + stars[i].m_nXPos += nXofs; + stars[i].m_nYPos += nYofs; + stars[i].m_nZPos += nZofs; + + if (stars[i].m_nZPos > m_nTotStars) + stars[i].m_nZPos -= m_nTotStars; + if (stars[i].m_nZPos < 1) + stars[i].m_nZPos += m_nTotStars; + } }
void SetDimensions (int nWidth, int nHeight) { - m_nCenterX = nWidth / 2; - m_nCenterY = nHeight / 2; -} - -LRESULT WINAPI WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static POINT ptLast; - static POINT ptCursor; - static BOOL fFirstTime = TRUE; - static HDC pDC; - - switch (msg) - { - case WM_CREATE : - { - SetTimer ( - hwnd, - APP_TIMER, - APP_TIMER_INTERVAL, - NULL); - } - break; - case WM_PAINT : - { - PAINTSTRUCT PtStr; - HDC pDC = BeginPaint (hwnd, &PtStr); - DrawStarField (pDC); - EndPaint (hwnd, &PtStr); - return (0); - } - break; - case WM_TIMER : - { - if (wParam == APP_TIMER) - { - MoveStarField (0, 0, -3); - pDC = GetDC(hwnd); - DrawStarField (pDC); - ReleaseDC(hwnd, pDC); - } - } - break; - case WM_SIZE : - { - // Change the center point of the starfield - SetDimensions ( - LOWORD(lParam), - HIWORD(lParam)); - } - break; - case WM_DESTROY : - { - KillTimer (hwnd, APP_TIMER); - free(stars); - ShowCursor(TRUE); - PostQuitMessage (0); - return 0; - } - break; - // break out of screen-saver if any keyboard activity - case WM_NOTIFY: - case WM_SYSKEYDOWN: - { - PostMessage(hwnd, WM_CLOSE, 0, 0); - break; - } - // break out of screen-saver if any mouse activity - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_RBUTTONDOWN: - case WM_RBUTTONUP: - case WM_MBUTTONDOWN: - case WM_MBUTTONUP: - case WM_MOUSEMOVE: - { - // If we've got a parent then we must be a preview - if(GetParent(hwnd) != 0) - return 0; - - if(fFirstTime) - { - GetCursorPos(&ptLast); - fFirstTime = FALSE; - } - - GetCursorPos(&ptCursor); - - // if the mouse has moved more than 3 pixels then exit - if( (abs(ptCursor.x - ptLast.x) >= 3) || - (abs(ptCursor.y - ptLast.y) >= 3)) - { - PostMessage(hwnd, WM_CLOSE, 0, 0); - } - - ptLast = ptCursor; - return 0; - } - } - - return DefWindowProc(hwnd, msg, wParam, lParam); -} - - -void InitSaver(HWND hwndParent) -{ - WNDCLASS wc; - ZeroMemory(&wc, sizeof(wc)); - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = WndProc; - wc.lpszClassName = APPNAME; - wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); - RegisterClass(&wc); - - if (hwndParent != 0) - { - RECT rect; - GetClientRect(hwndParent, &rect); - CreateWindow(APPNAME, APPNAME, - WS_VISIBLE | WS_CHILD, - 0, 0, - rect.right, - rect.bottom, - hwndParent, 0, - hInstance, NULL); - fullscreen = FALSE; - } - else - { - HWND hwnd; - hwnd = CreateWindowEx(WS_EX_TOPMOST, - APPNAME, - APPNAME, - WS_VISIBLE | WS_POPUP, - 0, 0, - GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), - HWND_DESKTOP, 0, - hInstance, NULL); - - SetWindowPos(hwnd, - 0, 0, 0, 0, 0, - SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_SHOWWINDOW); - - ShowCursor(FALSE); - fullscreen = TRUE; - } - - SetUpStars(250); -} - -// -// Look for any options Windows has passed to us: -// -// -a <hwnd> (set password) -// -s (screensave) -// -p <hwnd> (preview) -// -c <hwnd> (configure) -// -VOID ParseCommandLine(LPWSTR szCmdLine, UCHAR *chOption, HWND *hwndParent) -{ - UCHAR ch = *szCmdLine++; - - if(ch == '-' || ch == '/') - ch = *szCmdLine++; - - if(ch >= 'A' && ch <= 'Z') - ch += 'a' - 'A'; //convert to lower case - - *chOption = ch; - ch = *szCmdLine++; - - if(ch == ':') - ch = *szCmdLine++; - - while(ch == ' ' || ch == '\t') - ch = *szCmdLine++; - - if(isdigit(ch)) - { - unsigned int i = _wtoi(szCmdLine - 1); - *hwndParent = (HWND)i; - } - else - *hwndParent = NULL; -} - -void Configure(void) -{ - TCHAR szTitle[256]; - TCHAR szText[256]; - - LoadString(hInstance, - IDS_TITLE, - szTitle, - 256); - - LoadString(hInstance, - IDS_TEXT, - szText, - 256); - - MessageBox(0, - szText, - szTitle, - MB_OK | MB_ICONWARNING); -} - -int CALLBACK wWinMain (HINSTANCE hInst, - HINSTANCE hPrev, - LPWSTR lpCmdLine, - int iCmdShow) -{ - HWND hwndParent; - UINT nPreviousState; - UCHAR chOption; - MSG Message; - - hInstance = hInst; - - ParseCommandLine(lpCmdLine, &chOption, &hwndParent); - - SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, TRUE, &nPreviousState, 0); - - switch (chOption) - { - case 's': - InitSaver(0); - break; - - case 'p': - InitSaver(hwndParent); - break; - - case 'c': - default: - Configure(); - return 0; - } - - while (GetMessage(&Message, 0, 0, 0)) - DispatchMessage(&Message); - - SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, FALSE, &nPreviousState, 0); - - return Message.wParam; -} + m_nCenterX = nWidth / 2; + m_nCenterY = nHeight / 2; +} + +LRESULT WINAPI ScreenSaverProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static HDC pDC; + + switch (msg) + { + case WM_CREATE: + { + SetTimer ( + hwnd, + APP_TIMER, + APP_TIMER_INTERVAL, + NULL); + } + break; + case WM_PAINT: + { + PAINTSTRUCT PtStr; + HDC pDC = BeginPaint (hwnd, &PtStr); + DrawStarField (pDC); + EndPaint (hwnd, &PtStr); + SetUpStars(250); + return (0); + } + break; + case WM_TIMER: + { + if (wParam == APP_TIMER) + { + MoveStarField (0, 0, -3); + pDC = GetDC(hwnd); + DrawStarField (pDC); + ReleaseDC(hwnd, pDC); + } + } + break; + case WM_SIZE: + { + // Change the center point of the starfield + SetDimensions ( + LOWORD(lParam), + HIWORD(lParam)); + } + break; + case WM_DESTROY: + { + KillTimer (hwnd, APP_TIMER); + free(stars); + ShowCursor(TRUE); + PostQuitMessage (0); + return 0; + } + break; + default: + return DefScreenSaverProc(hwnd, msg, wParam, lParam); + } + return 0; +} + +BOOL WINAPI ScreenSaverConfigureDialog(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam) +{ + return FALSE; +} + +BOOL WINAPI RegisterDialogClasses(HANDLE hmodule) +{ + TCHAR szTitle[256]; + TCHAR szText[256]; + + LoadString(hmodule, + IDS_TITLE, + szTitle, + 256); + + LoadString(hmodule, + IDS_TEXT, + szText, + 256); + + MessageBox(0, + szText, + szTitle, + MB_OK | MB_ICONWARNING); + return FALSE; +}
Modified: trunk/rosapps/applications/screensavers/starfield/starfield.rc URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/applications/screensavers/s... ============================================================================== --- trunk/rosapps/applications/screensavers/starfield/starfield.rc [iso-8859-1] (original) +++ trunk/rosapps/applications/screensavers/starfield/starfield.rc [iso-8859-1] Mon Apr 27 01:04:01 2015 @@ -1,4 +1,5 @@ #include <windows.h> +#include <scrnsave.h> #include "resource.h"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL @@ -10,18 +11,44 @@
#include <reactos/version.rc>
+#include <reactos/manifest_exe.rc> + /* UTF-8 */ #pragma code_page(65001)
-#include "lang/bg-BG.rc" -#include "lang/de-DE.rc" -#include "lang/en-US.rc" -#include "lang/es-ES.rc" -#include "lang/fr-FR.rc" -#include "lang/lt-LT.rc" -#include "lang/nl-NL.rc" -#include "lang/no-NO.rc" -#include "lang/pl-PL.rc" -#include "lang/ro-RO.rc" -#include "lang/sk-SK.rc" -#include "lang/uk-UA.rc" +#ifdef LANGUAGE_BG_BG + #include "lang/bg-BG.rc" +#endif +#ifdef LANGUAGE_DE_DE + #include "lang/de-DE.rc" +#endif +#ifdef LANGUAGE_EN_US + #include "lang/en-US.rc" +#endif +#ifdef LANGUAGE_ES_ES + #include "lang/es-ES.rc" +#endif +#ifdef LANGUAGE_ES_ES + #include "lang/fr-FR.rc" +#endif +#ifdef LANGUAGE_LT_LT + #include "lang/lt-LT.rc" +#endif +#ifdef LANGUAGE_NL_NL + #include "lang/nl-NL.rc" +#endif +#ifdef LANGUAGE_NO_NO + #include "lang/no-NO.rc" +#endif +#ifdef LANGUAGE_PL_PL + #include "lang/pl-PL.rc" +#endif +#ifdef LANGUAGE_RO_RO + #include "lang/ro-RO.rc" +#endif +#ifdef LANGUAGE_SK_SK + #include "lang/sk-SK.rc" +#endif +#ifdef LANGUAGE_UK_UA + #include "lang/uk-UA.rc" +#endif