Release 0.3.0
Fri Sep 3 11:52:18 1993 Bob Amstadt
* [windows/timer.c]
Changed to use CallWindowProc() rather directly calling callback.
* [windows/event.c]
Implemented SetCapture() and ReleaseCapture()
* [windows/keyboard.c]
Created stub for GetKeyState()
* [objects/linedda.c]
Created stub for LineDDA()
* [if1632/callback.c]
Created callback handler for LineDDA callback procedure.
* [if1632/callback.c]
Created FreeProcInstance()
Fri Sep 3 08:36:52 1993 David Metcalfe
* [loader/signal.c]
Patch to and code for INT 1A
Thu Sep 2 00:31:54 1993 Alexandre Julliard
* [objects/font.c] [objects/text.c]
More text support: implemented justification and underlining.
* [windows/clipping.c] [objects/clipping.c]
Moved low-level clipping functions to objects/clipping.c.
* [windows/clipping.c] [windows/event.c] [windows/message.c]
Implemented window update regions.
* [windows/dc.c] [objects/dcvalues.c]
Moved some device-independent DC functions to objects/dcvalues.c.
* [windows/graphics.c]
Implemented InvertRect() and GetPixel().
Sat Aug 28 08:40:23 1993 Eric Youngdale
* [include/neexe.h] [loader/wine.c]
Added code to handle relocation type 4.
* [loader/signal.h] [loader/wine.c] [loader/selector.c]
Added support for dos interrupts.
Thu 26 Aug 19:15:00 1993 Eric Youngdale
* [loader/selector.c]
Fixed bug dealing with loading DLLs.
Thu Aug 26 19:22:40 1993 Alexandre Julliard
* [include/gdi.h] [objects/font.c] [windows/dc.c]
Beginning of real font support.
* [windows/graphics.c]
Implemented PatBlt().
* [memory/global.c]
Corrected a bug with linked list handling in GlobalAlloc().
* [objects/bitmap.c]
Corrected a bug in BITMAP_SelectObject().
Tue Aug 24 19:22:40 1993 David Metcalfe
* [controls/Command*] [controls/Label*] [controls[MenuButto*]
[controls/SmeMenuButt*]
Change code to support & as a special character in menu item text.
Tue Aug 24 19:22:40 1993 Alexandre Julliard
* [include/gdi.h] [windows/dc.c]
Heavily modified the DC structure for better device-independence.
* [objects/bitmap.c]
Implemented bitmap dimensions.
* [windows/dc.c] [windows/dce.c]
Implemented DC state saving and restoring.
* [windows/dc.c]
Implemented ROP mode.
* [windows/graphics.c]
Implemented FillRect().
Mon Aug 23 22:08:34 1993 Bob Amstadt (bob at pooh)
* [misc/xt.c]
Fixed bug in InvalidateRect(). Solitaire attempted to
clear window before it was realized.
* [loader/resource.c]
Began rewrite of LoadBitmap().
* [loader/wine.c]
Fixed code which set Argv and Argc global variables.
* [loader/selector.c]
Added code to set up command line arguments.
* [include/neexe.h]
Fixed error in PSP structure.
Tue Aug 17 20:41:12 1993 Alexandre Julliard
* [include/gdi.h] [windows/dc.c]
Implemented device capabilities.
* [objects/region.c]
Implemented EqualRgn() and CombineRgn().
* [windows/clipping.c]
Implemented Save/RestoreVisRgn().
* [windows/graphics.c]
Implemented PaintRgn() and FillRgn().
* [windows/mapping.c]
Implemented mapping modes.
Tue Aug 10 14:07:38 1993 Alexandre Julliard
* [if1632/user.spec] [misc/rect.c]
Implemented rectangle API functions.
* [if1632/gdi.spec] [include/gdi.h] [objects/region.c]
Implemented regions.
* [windows/class.c]
Corrected a typo in UnregisterClass().
* [windows/clipping.c] [windows/dc.c]
Implemented DC clipping and visible region.
Tue Aug 10 20:57:56 1993 Bob Amstadt (bob at pooh)
* [controls/menu.c] [windows/win.c]
SetMenu(), GetMenu(), CheckMenuItem() implemented
Thu Aug 5 22:33:22 1993 Bob Amstadt (bob at pooh)
* [controls/menu.c] [windows/win.c]
Many improvements menus. LoadMenu() should work.
Wed Aug 4 14:55:36 1993 Alexandre Julliard
* [objects/dib.c]
Started the implementation of device-independent bitmaps.
* [objects/bitmap.c]
Added support for multiple bitmap depths.
* [objects/brush.c]
Implemented pattern brushes.
* [windows/dc.c] [windows/graphics.c]
Implemented some GDI graphics primitives.
Tue Aug 3 21:16:47 1993 Bob Amstadt (bob at pooh)
* [controls/menu.c] [windows/win.c] [include/menu.h]
Code to load class menus from executable file.
* [if1632/user.spec]
Fixed specification of SendMessage() and PostMessage.
Mon Jul 26 21:53:24 1993 Alexandre Julliard
* [if1632/call.S]
Corrected a bug in KERNEL_InitTask().
* [include/windows.h]
Added a lot of constants.
* [loader/selector.c]
Corrected a bug in segment allocation in CreateSelectors().
* [objects/bitmap.c]
Implemented SelectObject() for bitmaps.
* [objects/brush.c]
Implemented hatched brushes and SelectObject().
* [objects/gdiobj.c]
Removed linked list (not needed).
* [objects/palette.c]
Implemented system palette creation and misc. palette API functions.
* [windows/timer.c]
Implemented timers.
* [windows/dc.c]
Implemented memory device contexts.
Tue Jul 20 10:38:59 1993 Bob Amstadt (bob at pooh)
* [dos.c]
Split DOS3Call() out of kernel.c. Added support for get date
and time functions.
* [call.S]
Added function ReturnFromRegisterFunc() to allow DOS calls
to return values in registers.
* [regfunc.h]
Macros to access registers saved on stack.
Tue Jul 20 10:38:59 1993 Alexandre Julliard
* [win.c]
Corrected allocation of the WM_CREATE data structure.
* [dce.c] [dce.h]
Implemented DCE handling.
* [bitmap.c] [brush.c] [dc.c] [font.c] [gdi.h] [gdi.spec]
[gdiobj.c] [palette.c] [pen.c]
Implemented the GDI objects data structures and allocation.
* [windows.h]
Added several structures and constants for GDI objects.
Mon Jul 19 12:51:10 1993 Bob Amstadt (bob at pooh)
* [ldtlib.c]
Modified system calls to match Linus' new interface for
the LDT modification.
* [win.c]
Fixed bug with WM_CREATE message.
* [heap.c] [kernel.spec]
Completed local heap allocation functions.
* [global.c]
Created function GlobalQuickAlloc() for easy allocation from DLLs
diff --git a/misc/rect.c b/misc/rect.c
new file mode 100644
index 0000000..fb96fd6
--- /dev/null
+++ b/misc/rect.c
@@ -0,0 +1,167 @@
+/*
+ * Rectangle-related functions
+ *
+ * Copyright 1993 Alexandre Julliard
+ */
+
+static char Copyright[] = "Copyright Alexandre Julliard, 1993";
+
+#include "windows.h"
+
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+
+
+/***********************************************************************
+ * SetRect (USER.72)
+ */
+void SetRect( LPRECT rect, short left, short top, short right, short bottom )
+{
+ rect->left = left;
+ rect->right = right;
+ rect->top = top;
+ rect->bottom = bottom;
+}
+
+
+/***********************************************************************
+ * SetRectEmpty (USER.73)
+ */
+void SetRectEmpty( LPRECT rect )
+{
+ rect->left = rect->right = rect->top = rect->bottom = 0;
+}
+
+
+/***********************************************************************
+ * CopyRect (USER.74)
+ */
+void CopyRect( LPRECT dest, LPRECT src )
+{
+ *dest = *src;
+}
+
+
+/***********************************************************************
+ * IsRectEmpty (USER.75)
+ */
+BOOL IsRectEmpty( LPRECT rect )
+{
+ return ((rect->left == rect->right) || (rect->top == rect->bottom));
+}
+
+
+/***********************************************************************
+ * PtInRect (USER.76)
+ */
+BOOL PtInRect( LPRECT rect, POINT pt )
+{
+ return ((pt.x >= rect->left) && (pt.x < rect->right) &&
+ (pt.y >= rect->top) && (pt.y < rect->bottom));
+}
+
+
+/***********************************************************************
+ * OffsetRect (USER.77)
+ */
+void OffsetRect( LPRECT rect, short x, short y )
+{
+ rect->left += x;
+ rect->right += x;
+ rect->top += y;
+ rect->bottom += y;
+}
+
+
+/***********************************************************************
+ * InflateRect (USER.78)
+ */
+void InflateRect( LPRECT rect, short x, short y )
+{
+ rect->right += x;
+ rect->bottom += y;
+}
+
+
+/***********************************************************************
+ * IntersectRect (USER.79)
+ */
+BOOL IntersectRect( LPRECT dest, LPRECT src1, LPRECT src2 )
+{
+ if ((src1->left >= src2->right) || (src2->left >= src1->right) ||
+ (src1->top >= src2->bottom) || (src2->top >= src1->bottom))
+ {
+ SetRectEmpty( dest );
+ return FALSE;
+ }
+ dest->left = MAX( src1->left, src2->left );
+ dest->right = MIN( src1->right, src2->right );
+ dest->top = MAX( src1->top, src2->top );
+ dest->bottom = MIN( src1->bottom, src2->bottom );
+ return TRUE;
+}
+
+
+/***********************************************************************
+ * UnionRect (USER.80)
+ */
+BOOL UnionRect( LPRECT dest, LPRECT src1, LPRECT src2 )
+{
+ if (IsRectEmpty(src1))
+ {
+ if (IsRectEmpty(src2))
+ {
+ SetRectEmpty( dest );
+ return FALSE;
+ }
+ else *dest = *src2;
+ }
+ else
+ {
+ if (IsRectEmpty(src2)) *dest = *src1;
+ else
+ {
+ dest->left = MIN( src1->left, src2->left );
+ dest->right = MAX( src1->right, src2->right );
+ dest->top = MIN( src1->top, src2->top );
+ dest->bottom = MAX( src1->bottom, src2->bottom );
+ }
+ }
+ return TRUE;
+}
+
+
+/***********************************************************************
+ * EqualRect (USER.244)
+ */
+BOOL EqualRect( LPRECT rect1, LPRECT rect2 )
+{
+ return ((rect1->left == rect2->left) && (rect1->right == rect2->right) &&
+ (rect1->top == rect2->top) && (rect1->bottom == rect2->bottom));
+}
+
+
+/***********************************************************************
+ * SubtractRect (USER.373)
+ */
+BOOL SubtractRect( LPRECT dest, LPRECT src1, LPRECT src2 )
+{
+ RECT tmp;
+ *dest = *src1;
+ if (IntersectRect( &tmp, src1, src2 ))
+ {
+ if (EqualRect( &tmp, dest )) SetRectEmpty( src1 );
+ else if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom))
+ {
+ if (tmp.left == dest->left) dest->right = tmp.right;
+ else if (tmp.right == dest->right) dest->left = tmp.left;
+ }
+ else if ((tmp.left == dest->left) && (tmp.right == dest->right))
+ {
+ if (tmp.top == dest->top) dest->bottom = tmp.bottom;
+ else if (tmp.bottom == dest->bottom) dest->top = tmp.top;
+ }
+ }
+ return TRUE;
+}
+