Tue Jan 4 13:01:33 1994 David Metcalfe <david@prism.demon.co.uk> * [window/caret.c] Modified code to use system timer. Jan 9, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte) * [windows/win.c] Windows create if required new XLIB MenuBar & CaptionBar. * [windows/defwnd.c] WM_CALCSIZE Move & Resize caption, menubar & scrollbars. (I'm not sure it's the good place for it, but it work...) * [loader/resource.c] optimize in FindResourceByNumber, make lseek() if next type ... * [controls/scroll.c] scrollbar buttons are now using system resources bitmaps. * [controls/caption.c] - new file ... captionbar showing title, close button with SysMenu, and other buttons using system resources bitmaps. * [controls/menu.c] New functions: SetMenuItemBitmaps() with 'glues', Make new version of LoadMenu() & ParseMenu(), ( put #define USE_POPUPMENU ). Implementation of MenuBar functions. * [sysres.dll] New bitmaps for system such OBM_CLOSE, OBM_MINIMIZE, OBM_UPARROWI. New SYSMENU menu, it don't work yet ! :-(( Tue Jan 11 05:27:45 1994 julliard@di.epfl.ch (Alexandre Julliard * [memory/atom.c] Fixed a bug that could cause atoms to be case-sensitive. * [misc/rect.c] Bug fix in SubtractRect(). * [objects/clipping.c] Bug fix when setting the clip mask to an empty region. * [windows/dce.c] Bug fix in ReleaseDC(). * [windows/dialog.c] Call AdjustWindowRectEx() before creating the dialog window. Added support for DS_MODALFRAME style. * [windows/event.c] Cleaned up event handling and removed old Xt stuff. Moved double-click handling to windows/message.c * [windows/focus.c] Bug fix: only set the X focus when the window is viewable. * [windows/graphics.c] Rewritten DrawReliefRect() to use brush instead of pen, and to use the system colors. * [windows/message.c] Implemented WM_NCHITTEST message sending, and non-client mouse messages. Cleaned up double-click handling, and removed the Xt code. * [windows/nonclient.c] (New file) Implemented AdjustWindowRect(). Implemented WM_NCCALCSIZE, WM_NCHITTEST and WM_NCPAINT handling. * [windows/painting.c] Added sending of the WM_NCPAINT message in BeginPaint(). * [windows/sysmetrics.c] [include/sysmetrics.h] (New files) Implemented system metrics. * [windows/win.c] Bug fix in setting the parent and owner in CreateWindow(). Removed the Xt code. * [windows/winpos.c] Added sending of the WM_NCPAINT message in SetWindowPos(). Removed the Xt code.
90 lines
2.6 KiB
C
90 lines
2.6 KiB
C
/*
|
|
* GDI pen objects
|
|
*
|
|
* Copyright 1993 Alexandre Julliard
|
|
*/
|
|
|
|
static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|
|
|
#include "gdi.h"
|
|
|
|
|
|
/***********************************************************************
|
|
* CreatePen (GDI.61)
|
|
*/
|
|
HPEN CreatePen( short style, short width, COLORREF color )
|
|
{
|
|
LOGPEN logpen = { style, { width, 0 }, color };
|
|
#ifdef DEBUG_GDI
|
|
printf( "CreatePen: %d %d %06x\n", style, width, color );
|
|
#endif
|
|
return CreatePenIndirect( &logpen );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* CreatePenIndirect (GDI.62)
|
|
*/
|
|
HPEN CreatePenIndirect( LOGPEN * pen )
|
|
{
|
|
PENOBJ * penPtr;
|
|
HPEN hpen;
|
|
|
|
if (pen->lopnStyle > PS_INSIDEFRAME) return 0;
|
|
hpen = GDI_AllocObject( sizeof(PENOBJ), PEN_MAGIC );
|
|
if (!hpen) return 0;
|
|
penPtr = (PENOBJ *) GDI_HEAP_ADDR( hpen );
|
|
memcpy( &penPtr->logpen, pen, sizeof(LOGPEN) );
|
|
return hpen;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* PEN_GetObject
|
|
*/
|
|
int PEN_GetObject( PENOBJ * pen, int count, LPSTR buffer )
|
|
{
|
|
if (count > sizeof(LOGPEN)) count = sizeof(LOGPEN);
|
|
memcpy( buffer, &pen->logpen, count );
|
|
return count;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* PEN_SelectObject
|
|
*/
|
|
HPEN PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen )
|
|
{
|
|
static char dash_dash[] = { 5, 3 }; /* ----- ----- ----- */
|
|
static char dash_dot[] = { 2, 2 }; /* -- -- -- -- -- -- */
|
|
static char dash_dashdot[] = { 4,3,2,3 }; /* ---- -- ---- -- */
|
|
static char dash_dashdotdot[] = { 4,2,2,2,2,2 }; /* ---- -- -- ---- */
|
|
|
|
HPEN prevHandle = dc->w.hPen;
|
|
dc->w.hPen = hpen;
|
|
|
|
dc->u.x.pen.style = pen->logpen.lopnStyle;
|
|
dc->u.x.pen.width = pen->logpen.lopnWidth.x * dc->w.VportExtX
|
|
/ dc->w.WndExtX;
|
|
if (dc->u.x.pen.width < 0) dc->u.x.pen.width = -dc->u.x.pen.width;
|
|
if (dc->u.x.pen.width == 1) dc->u.x.pen.width = 0; /* Faster */
|
|
dc->u.x.pen.pixel = GetNearestPaletteIndex( dc->w.hPalette,
|
|
pen->logpen.lopnColor );
|
|
switch(pen->logpen.lopnStyle)
|
|
{
|
|
case PS_DASH:
|
|
XSetDashes( XT_display, dc->u.x.gc, 0, dash_dash, 2 );
|
|
break;
|
|
case PS_DOT:
|
|
XSetDashes( XT_display, dc->u.x.gc, 0, dash_dot, 2 );
|
|
break;
|
|
case PS_DASHDOT:
|
|
XSetDashes( XT_display, dc->u.x.gc, 0, dash_dashdot, 4 );
|
|
break;
|
|
case PS_DASHDOTDOT:
|
|
XSetDashes( XT_display, dc->u.x.gc, 0, dash_dashdotdot, 6 );
|
|
break;
|
|
}
|
|
|
|
return prevHandle;
|
|
}
|