
Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch> * [server/*] [scheduler/client.c] (new files) [scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c] Beginnings of client/server communication for inter-process synchronisation. Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de> * [include/bitmap.h] [objects/bitmap.c] [objects/dib.c] [objects/oembitmap.c] Speed up DIB section handling by using pre-allocated colormap and XImage. Moved DIB section data out of general BITMAPOBJ structure. Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data. * [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c] More verbose error message if ThunkConnect fails. Implemented KERNEL_475. * [files/profile.c] [ole/ole2nls.c] Minor bugfixes. * [if1632/builtin.c] [if1632/kernel.spec] [include/task.h] [loader/ne/module.c] [loader/task.c] Implemented KERNEL.THHOOK. * [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c] Implemented Win32s VxD services (W32S.386). Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk> * [graphics/x11drv/xfont.c] [graphics/x11drv/text.c] [include/x11font.h] Improve handling of rotated X11 fonts. Metrics/extents should now be correct. ExtTextOut should behave better (still doesn't handle lpDx). * [graphics/painting.c] DrawFocusRect32: Don't do anything if width or height are zero. Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net> * [files/profile.c] [include/windows.h] The length arguments of *Profile*() need to be treated as UINTxx instead of INTxx. * [graphics/env.c] [graphics/win16drv/init.c] [include/print.h] [misc/printdrv.c] Many printer driver fixes/changes (many thanks go to Huw !). Most printers should work again ;) * [memory/atom.c] Fixed ATOM_AddAtom to store atoms exactly like Windows. * [*/*] Fixed misc compiler warnings. Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de> * [files/drive.c] Fixed GetDriveType16 to return DRIVE_REMOTE again. * [loader/pe_image.c][loader/module.c] Look for modules that have the same modulename or the same filename (they sometimes differ). Fixed up fixup_imports, removed one of the loops. * [windows/winpos.c] Added some NULL ptr checks. Needs more. * [graphics/ddraw.c] Some stubs added. * [if1632/snoop.c] Updated, made WINELIB compatible. Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com> * [objects/enhmetafile.c] [relay32/gdi32.spec] Small tweaks for documentation system. Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de> * [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec] Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap. Added stub for ShowHideMenuCtl. Added some documentation. * [documentation/common_controls] Added and updated some information. * [controls/toolbar.c][include/toolbar.h] Added string support. * [misc/shell.c][misc/shellord.c][relay32/shell.spec] Changed names of undocumented functions to their real names and fixed the export table. * [controls/imagelist.c][relay32/comctl32.spec] Added stub for ImageList_SetFilter. Fixed some minor bugs and typos. * [objects/font.c][include/windows.h][relay32/gdi32.spec] Added stubs for GetCharacterPlacement32[A/W]. * [objects/region.c][relay32/gdi32.spec] Added stub for UNDOCUMENTED GetRandomRgn. * [controls/commctrl.c][controls/*.c][include/*.h] Added dummy listview, pager, rebar, tooltips, trackbar and treeview control. This keeps some programs from complaining. Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net> * [graphics/painting.c] [graphics/*/init.c] [graphics/x11drv/graphics.c] [relay32/gdi32.spec] [if1632/gdi.spec] [include/gdi.h] [include/x11drv.h] Implemented drawing bezier curves: PolyBezier16/32 and PolyBezierTo16/32. * [graphics/x11drv/graphics.c] Improved accuracy of several graphic routines, especially the drawing of pie's. * [include/windows.h] [misc/spy.c] Added 25 window messages related to programs based on MFC and/or OLE. Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu> * [documentation/wine.man] Updated manpage. * [wine.ini] Added section for Win95Look=true (commented out by default). Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net> * [misc/registry.c] Fixed a crash in RegEnumValue32A when the dwType parameter is NULL. * [programs/regtest/regtest.c] Improved the printing of errors. * [misc/ntdll.c] Added stub for RtlFormatCurrentUserKeyPath. * [win32/console.c] Added stub for ScrollConsoleScreenBuffer. Mon Jul 6 16:41:47 1998 Per Lindström <pelinstr@algonet.se> * [include/windows.h] [relay32/kernel.spec] [win32/newfns.c] Added stubs for SleepEx and TerminateProcess. * [rc/README] Corrected a grammatical error. Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de> * [misc/shellord.c] Put some TRACE in. * [memory/string.c] Deleted unused variable in lstrcmpi32A. * [include/windows.h][memory/string.c] Added functions WideCharToLocal32 LocalToWideChar32 for OLE-strings * [include/shlobj.h][include/winerror.h][misc/shell.c] [ole/folders.c] Added definition of internal class pidlmgr. Changed definitions of EnumIDList, IShellFolder. Added some OLE error constants. Implemented EnumIDList, IShellFolder, IClassFactory, PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder, SHGetSpecialFolderLocation (half), SHGetPathFromIDList (!!This stuff is not finished yet!!) * [include/windows.h][misc/network][reley32/mpr.spec] Added stubs for WNetConnectionDialog32[A|W|API]. Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants. Added some SetLastError(WN_NO_NETWORK) to the stubs. Fixed bufferhandling in WNetCancelConnection Added stub for MultinetGetErrorText[A|W] * [ole/ole2nls.c] Rewrote GetTimeFormat32A. Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu> * [graphics/ddraw.c] [tsx11/X11_calls] Implement IDirectDrawPalette_GetEntries. Use CopyColormapAndFree to avoid erasing previously-set palette entries. * [graphics/ddraw.c] [include/ddraw.h] [tools/make_X11wrappers] [tsx11/X11_calls] Provide a preliminary, not-yet-working framework for doing DirectDraw via Xlib or XShm as well as DGA. Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch> * [ole/nls/*.nls] Added remaining 22 locales (including arabic locales).
257 lines
6.3 KiB
C
257 lines
6.3 KiB
C
/*
|
|
* Clock (winclock.c)
|
|
*
|
|
* Copyright 1998 by Marcel Baur <mbaur@g26.ethz.ch>
|
|
*
|
|
* This file is based on rolex.c by Jim Peterson.
|
|
*
|
|
* I just managed to move the relevant parts into the Clock application
|
|
* and made it look like the original Windows one. You can find the original
|
|
* rolex.c in the wine /libtest directory.
|
|
*
|
|
* Original file header:
|
|
* >
|
|
* > rolex.c: Windows clock application for WINE (by Jim Peterson)
|
|
* >
|
|
* > This is a translation of a Turbo Pascal OWL application I made
|
|
* > once, so it's a little flaky (tons of globals, functions that
|
|
* > could have been in-lined, etc.). The source code should easily
|
|
* > compile with a standard Win32 C compiler.
|
|
* >
|
|
* > To try it out, type 'make rolex'.
|
|
* >
|
|
*
|
|
*/
|
|
|
|
#include <math.h>
|
|
#include <string.h>
|
|
#include "winclock.h"
|
|
#include "windows.h"
|
|
#include "main.h"
|
|
#include "winnls.h"
|
|
|
|
COLORREF FaceColor = RGB(192,192,192);
|
|
COLORREF HandColor = RGB(0,0,0);
|
|
COLORREF EtchColor = RGB(0,0,0);
|
|
|
|
float Pi=3.1415926;
|
|
|
|
int nLastSecond = 60;
|
|
|
|
HandData OldSecond,OldHour,OldMinute;
|
|
|
|
int MiddleX(void) {
|
|
int X, diff;
|
|
|
|
X = (Globals.MaxX/2);
|
|
diff = (Globals.MaxX-Globals.MaxY);
|
|
if (diff>0) { X = (X-(diff/2)); }
|
|
return X;
|
|
}
|
|
|
|
int MiddleY(void) {
|
|
int Y, diff;
|
|
|
|
Y = (Globals.MaxY/2);
|
|
diff = (Globals.MaxX-Globals.MaxY);
|
|
if (diff<0) { Y = Y+(diff/2); }
|
|
return Y;
|
|
}
|
|
|
|
void DrawFace(HDC dc)
|
|
{
|
|
int MidX, MidY, t, DiffX, DiffY;
|
|
|
|
MidX = MiddleX();
|
|
MidY = MiddleY();
|
|
DiffX = (Globals.MaxX-MidX*2)/2;
|
|
DiffY = (Globals.MaxY-MidY*2)/2;
|
|
|
|
SelectObject(dc,CreateSolidBrush(FaceColor));
|
|
SelectObject(dc,CreatePen(PS_SOLID,1,EtchColor));
|
|
Ellipse(dc,DiffX,DiffY,2*MidX+DiffX,2*MidY+DiffY);
|
|
|
|
for(t=0; t<12; t++)
|
|
{
|
|
MoveToEx(dc,(MidX+DiffX)+sin(t*Pi/6)*0.9*MidX,(MidY+DiffY)-cos(t*Pi/6)*0.9*MidY,NULL);
|
|
LineTo(dc,(MidY+DiffX)+sin(t*Pi/6)*0.8*MidX,(MidY+DiffY)-cos(t*Pi/6)*0.8*MidY);
|
|
}
|
|
if(Globals.MaxX>64 && Globals.MaxY>64)
|
|
for(t=0; t<60; t++)
|
|
SetPixel(dc,(MidX+DiffX)+sin(t*Pi/30)*0.9*MidX,(MidY+DiffY)-cos(t*Pi/30)*0.9*MidY
|
|
,EtchColor);
|
|
DeleteObject(SelectObject(dc,GetStockObject(NULL_BRUSH)));
|
|
DeleteObject(SelectObject(dc,GetStockObject(NULL_PEN)));
|
|
memset(&OldSecond,0,sizeof(OldSecond));
|
|
memset(&OldMinute,0,sizeof(OldMinute));
|
|
memset(&OldHour,0,sizeof(OldHour));
|
|
}
|
|
|
|
void DrawHourHand(HDC dc)
|
|
{
|
|
if (OldHour.DontRedraw) return;
|
|
MoveToEx(dc, OldHour.StartX, OldHour.StartY, NULL);
|
|
LineTo(dc, OldHour.EndX, OldHour.EndY);
|
|
}
|
|
|
|
void DrawMinuteHand(HDC dc)
|
|
{
|
|
if (OldMinute.DontRedraw) return;
|
|
MoveToEx(dc, OldMinute.StartX, OldMinute.StartY, NULL);
|
|
LineTo(dc, OldMinute.EndX, OldMinute.EndY);
|
|
}
|
|
|
|
void DrawSecondHand(HDC dc)
|
|
{
|
|
if (OldSecond.DontRedraw) return;
|
|
MoveToEx(dc, OldSecond.StartX, OldSecond.StartY, NULL);
|
|
LineTo(dc, OldSecond.EndX, OldSecond.EndY);
|
|
}
|
|
|
|
BOOL UpdateHourHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos)
|
|
{
|
|
int Sx, Sy, Ex, Ey;
|
|
BOOL rv;
|
|
|
|
rv = FALSE;
|
|
Sx = MidX; Sy = MidY;
|
|
Ex = MidX+sin(Pos*Pi/6000)*XExt;
|
|
Ey = MidY-cos(Pos*Pi/6000)*YExt;
|
|
rv = ( Sx!=OldHour.StartX || Ex!=OldHour.EndX ||
|
|
Sy!=OldHour.StartY || Ey!=OldHour.EndY );
|
|
if (Globals.bAnalog && rv)DrawHourHand(dc);
|
|
OldHour.StartX = Sx; OldHour.EndX = Ex;
|
|
OldHour.StartY = Sy; OldHour.EndY = Ey;
|
|
OldHour.DontRedraw=FALSE;
|
|
return rv;
|
|
}
|
|
|
|
BOOL UpdateMinuteHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos)
|
|
{
|
|
int Sx, Sy, Ex, Ey;
|
|
BOOL rv;
|
|
|
|
rv = FALSE;
|
|
Sx = MidX; Sy = MidY;
|
|
Ex = MidX+sin(Pos*Pi/30000)*XExt;
|
|
Ey = MidY-cos(Pos*Pi/30000)*YExt;
|
|
rv = ( Sx!=OldMinute.StartX || Ex!=OldMinute.EndX ||
|
|
Sy!=OldMinute.StartY || Ey!=OldMinute.EndY );
|
|
if (Globals.bAnalog && rv)DrawMinuteHand(dc);
|
|
OldMinute.StartX = Sx; OldMinute.EndX = Ex;
|
|
OldMinute.StartY = Sy; OldMinute.EndY = Ey;
|
|
OldMinute.DontRedraw=FALSE;
|
|
return rv;
|
|
}
|
|
|
|
BOOL UpdateSecondHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos)
|
|
{
|
|
int Sx, Sy, Ex, Ey;
|
|
BOOL rv;
|
|
|
|
rv = FALSE;
|
|
|
|
if (Globals.bSeconds) {
|
|
Sx = MidX; Sy = MidY;
|
|
Ex = MidX+sin(Pos*Pi/3000)*XExt;
|
|
Ey = MidY-cos(Pos*Pi/3000)*YExt;
|
|
rv = ( Sx!=OldSecond.StartX || Ex!=OldSecond.EndX ||
|
|
Sy!=OldSecond.StartY || Ey!=OldSecond.EndY );
|
|
if (Globals.bAnalog && rv) DrawSecondHand(dc);
|
|
OldSecond.StartX = Sx; OldSecond.EndX = Ex;
|
|
OldSecond.StartY = Sy; OldSecond.EndY = Ey;
|
|
OldSecond.DontRedraw=FALSE;
|
|
}
|
|
|
|
return rv;
|
|
}
|
|
|
|
void DigitalClock(HDC dc) {
|
|
|
|
CHAR szTime[MAX_STRING_LEN];
|
|
LPSTR time = szTime;
|
|
static short xChar, yChar;
|
|
TEXTMETRIC tm;
|
|
|
|
SYSTEMTIME st;
|
|
LPSYSTEMTIME lpst = &st;
|
|
|
|
GetLocalTime(&st);
|
|
GetTimeFormat(LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, lpst, NULL, time,
|
|
MAX_STRING_LEN);
|
|
|
|
SelectObject(dc,CreatePen(PS_SOLID,1,FaceColor));
|
|
xChar = tm.tmAveCharWidth;
|
|
yChar = tm.tmHeight;
|
|
|
|
xChar = 100;
|
|
yChar = 100;
|
|
TextOut (dc, xChar, yChar, szTime, strlen (szTime));
|
|
DeleteObject(SelectObject(dc,GetStockObject(NULL_PEN)));
|
|
|
|
}
|
|
|
|
|
|
|
|
void AnalogClock(HDC dc) {
|
|
|
|
SYSTEMTIME st;
|
|
WORD H, M, S, F;
|
|
int MidX, MidY, DiffX, DiffY;
|
|
BOOL Redraw;
|
|
|
|
GetLocalTime(&st);
|
|
|
|
S = st.wSecond;
|
|
if (nLastSecond==S) { exit; }
|
|
nLastSecond = S;
|
|
H = st.wHour;
|
|
M = st.wMinute;
|
|
F = st.wMilliseconds / 10;
|
|
F = F + S*100;
|
|
M = M*1000+F/6;
|
|
H = H*1000+M/60;
|
|
MidX = MiddleX();
|
|
MidY = MiddleY();
|
|
DiffX = (Globals.MaxX-MidX*2)/2;
|
|
DiffY = (Globals.MaxY-MidY*2)/2;
|
|
|
|
SelectObject(dc,CreatePen(PS_SOLID,1,FaceColor));
|
|
Redraw = FALSE;
|
|
if(UpdateHourHand(dc,MidX+DiffX,MidY+DiffY,MidX*0.5,MidY*0.5,H)) Redraw = TRUE;
|
|
if(UpdateMinuteHand(dc,MidX+DiffX,MidY+DiffY,MidX*0.65,MidY*0.65,M)) Redraw = TRUE;
|
|
if(UpdateSecondHand(dc,MidX+DiffX,MidY+DiffY,MidX*0.79,MidY*0.79,F)) Redraw = TRUE;
|
|
|
|
DeleteObject(SelectObject(dc,CreatePen(PS_SOLID,1,HandColor)));
|
|
if(Redraw)
|
|
{
|
|
DrawSecondHand(dc);
|
|
DrawMinuteHand(dc);
|
|
DrawHourHand(dc);
|
|
}
|
|
DeleteObject(SelectObject(dc,GetStockObject(NULL_PEN)));
|
|
|
|
}
|
|
|
|
void Idle(HDC idc)
|
|
{
|
|
HDC context;
|
|
|
|
if(idc)
|
|
context=idc;
|
|
else
|
|
context=GetDC(Globals.hMainWnd);
|
|
|
|
if (!context) return;
|
|
|
|
if (Globals.bAnalog)
|
|
{
|
|
AnalogClock(context);
|
|
}
|
|
else
|
|
{
|
|
DigitalClock(context);
|
|
}
|
|
if(!idc) ReleaseDC(Globals.hMainWnd, context);
|
|
}
|