From 5d2c2b27a6323e2666378b986129b2a7c2c39e5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 6 Feb 2022 16:04:24 +0100 Subject: New upstream version 5.2.2GA --- app/wlib/mswlib/CMakeLists.txt | 1 + app/wlib/mswlib/backgnd.c | 367 +++++++++++---------- app/wlib/mswlib/dynarr.h | 4 - app/wlib/mswlib/gwin32.c | 2 +- app/wlib/mswlib/mswbitmap.c | 22 +- app/wlib/mswlib/mswbox.c | 14 +- app/wlib/mswlib/mswbutt.c | 155 ++++++--- app/wlib/mswlib/mswchoic.c | 87 ++--- app/wlib/mswlib/mswcolor.c | 13 +- app/wlib/mswlib/mswdraw.c | 409 +++++++++++------------ app/wlib/mswlib/mswedit.c | 115 +++---- app/wlib/mswlib/mswint.h | 179 ++++++----- app/wlib/mswlib/mswlines.c | 2 +- app/wlib/mswlib/mswlist.c | 238 +++++++------- app/wlib/mswlib/mswmenu.c | 38 +-- app/wlib/mswlib/mswmisc.c | 676 +++++++++++++++++++++------------------ app/wlib/mswlib/mswmsg.c | 75 +---- app/wlib/mswlib/mswpref.c | 47 ++- app/wlib/mswlib/mswprint.c | 23 +- app/wlib/mswlib/mswsplash.c | 9 +- app/wlib/mswlib/mswstatus.c | 14 +- app/wlib/mswlib/mswtext.c | 78 ++--- app/wlib/mswlib/simple-gettext.c | 8 +- app/wlib/mswlib/utf8conv.c | 4 +- 24 files changed, 1350 insertions(+), 1230 deletions(-) (limited to 'app/wlib/mswlib') diff --git a/app/wlib/mswlib/CMakeLists.txt b/app/wlib/mswlib/CMakeLists.txt index 07558f9..99ac1d4 100644 --- a/app/wlib/mswlib/CMakeLists.txt +++ b/app/wlib/mswlib/CMakeLists.txt @@ -29,6 +29,7 @@ SET(SOURCES include_directories(${FREEIMAGE_INCLUDE_PATH}) INCLUDE_DIRECTORIES(${XTrkCAD_BINARY_DIR}) +# INCLUDE_DIRECTORIES(${help_BINARY_DIR}) IF(XTRKCAD_USE_GETTEXT) IF(WIN32) diff --git a/app/wlib/mswlib/backgnd.c b/app/wlib/mswlib/backgnd.c index d35f19a..9599beb 100644 --- a/app/wlib/mswlib/backgnd.c +++ b/app/wlib/mswlib/backgnd.c @@ -29,192 +29,215 @@ static char *lastErrorMessage; /**< store last message from FreeImage */ #define ERRORPUNCTUATION " : " -/** - * FreeImage error handler - * \param fif Format / Plugin responsible for the error - * \param message Error message +/** + * FreeImage error handler + * \param fif Format / Plugin responsible for the error + * \param message Error message */ -static void -HandleFreeImageError(FREE_IMAGE_FORMAT fif, const char *message) -{ - unsigned totalLength = strlen(message) + 1; - - if (fif != FIF_UNKNOWN) { - totalLength += strlen(FreeImage_GetFormatFromFIF(fif)) + strlen(ERRORPUNCTUATION); - } - - lastErrorMessage = malloc(totalLength); - - if (fif != FIF_UNKNOWN) { - sprintf(lastErrorMessage, - "%s" ERRORPUNCTUATION "%s", - FreeImage_GetFormatFromFIF(fif), - message); - } else { - strcpy(lastErrorMessage, message); - } +static void +HandleFreeImageError( FREE_IMAGE_FORMAT fif, const char *message ) +{ + size_t totalLength = strlen( message ) + 1; + + if( fif != FIF_UNKNOWN ) { + totalLength += strlen( FreeImage_GetFormatFromFIF( fif ) ) + strlen( + ERRORPUNCTUATION ); + } + + lastErrorMessage = malloc( totalLength ); + + if( fif != FIF_UNKNOWN ) { + sprintf( lastErrorMessage, + "%s" ERRORPUNCTUATION "%s", + FreeImage_GetFormatFromFIF( fif ), + message ); + } else { + strcpy( lastErrorMessage, message ); + } } -/** -* Load the background image -* \param bd drawing context -* \param path filename for image file, if NULL the existing background will be removed -* \param error returned error message -* \return -1 unsupported or invalid file, 0 success, 1 background removed +/** +* Load the background image +* \param bd drawing context +* \param path filename for image file, if NULL the existing background will be removed +* \param error returned error message +* \return -1 unsupported or invalid file, 0 success, 1 background removed */ int -wDrawSetBackground(wDraw_p bd, char * path, char ** error) +wDrawSetBackground( wDraw_p bd, char * path, char ** error ) { - FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + + FreeImage_SetOutputMessage( HandleFreeImageError ); - FreeImage_SetOutputMessage(HandleFreeImageError); - - if (lastErrorMessage) { - free(lastErrorMessage); - lastErrorMessage = NULL; + if( lastErrorMessage ) { + free( lastErrorMessage ); + lastErrorMessage = NULL; } - if (path) { - // check the file signature and deduce its format - // (the second argument is currently not used by FreeImage) - fif = FreeImage_GetFileType(path, 0); - - if (fif == FIF_UNKNOWN) { - // no signature ? - // try to guess the file format from the file extension - fif = FreeImage_GetFIFFromFilename(path); - } - - // check that the plugin has reading capabilities ... - if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { - // ok, let's load the file - bd->background = FreeImage_Load(fif, path, 0); - - // unless a bad file format, we are done ! - if (!bd->background) { - *error = lastErrorMessage; - return (-1); - } else { - return (0); - } - } else { - *error = strdup(_("Image file is invalid or cannot be read.")); - return (-1); - } - } else { - if (bd->background) { - FreeImage_Unload(bd->background); - bd->background = 0; - } - - return (1); - } + if( path ) { + // check the file signature and deduce its format + // (the second argument is currently not used by FreeImage) + fif = FreeImage_GetFileType( path, 0 ); + + if( fif == FIF_UNKNOWN ) { + // no signature ? + // try to guess the file format from the file extension + fif = FreeImage_GetFIFFromFilename( path ); + } + + // check that the plugin has reading capabilities ... + if( ( fif != FIF_UNKNOWN ) && FreeImage_FIFSupportsReading( fif ) ) { + // ok, let's load the file + bd->background = FreeImage_Load( fif, path, 0 ); + + // unless a bad file format, we are done ! + if( !bd->background ) { + *error = lastErrorMessage; + return ( -1 ); + } else { + return ( 0 ); + } + } else { + *error = _strdup( _( "Image file is invalid or cannot be read." ) ); + return ( -1 ); + } + } else { + if( bd->background ) { + FreeImage_Unload( bd->background ); + bd->background = 0; + } + + return ( 1 ); + } } +/** + * Use a loaded background in another context. + * + * \param from context with background + * \param to context to get a reference to the existing background + */ -/** -* Draw background to screen. The background will be sized and rotated before being shown. The bitmap -* is scaled so that the width is equal to size. The height is changed proportionally. -* -* \param bd drawing context -* \param pos_x, pos_y bitmap position -* \param size desired width after scaling -* \param angle -* \param screen visibility of bitmap in percent +void +wDrawCloneBackground( wDraw_p from, wDraw_p to ) +{ + if( from->background ) { + to->background = from->background; + } else { + to->background = NULL; + } +} + +/** +* Draw background to screen. The background will be sized and rotated before being shown. The bitmap +* is scaled so that the width is equal to size. The height is changed proportionally. +* +* \param bd drawing context +* \param pos_x, pos_y bitmap position +* \param size desired width after scaling +* \param angle +* \param screen visibility of bitmap in percent */ void -wDrawShowBackground(wDraw_p bd, wPos_t pos_x, wPos_t pos_y, wPos_t size, - wAngle_t angle, int screen) +wDrawShowBackground( wDraw_p bd, wWinPix_t pos_x, wWinPix_t pos_y, + wWinPix_t size, + wAngle_t angle, int screen ) { - if (bd->background) { - double scale; - FIBITMAP *tmp; - FIBITMAP *rotated; - - if (size == 0) { - scale = 1.0; - } else { - scale = (double)size / FreeImage_GetWidth(bd->background); - } - - tmp = FreeImage_RescaleRect(bd->background, - (int)((double)FreeImage_GetWidth(bd->background) * scale), - (int)((double)FreeImage_GetHeight(bd->background) * scale), - 0, - 0, - FreeImage_GetWidth(bd->background), - FreeImage_GetHeight(bd->background), - FILTER_BILINEAR, - 0); - FreeImage_AdjustColors(tmp, screen, -screen, 1.0, FALSE); - FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(tmp); - - switch (image_type) { - case FIT_BITMAP: - switch (FreeImage_GetBPP(tmp)) { - case 8: { - BYTE color = 255; - rotated = FreeImage_Rotate(tmp, angle, &color); - } - break; - - case 24: // we could also use 'RGBTRIPLE color' here - case 32: { - RGBQUAD color = { 255, 255, 255, 0 }; - // for 24-bit images, the first 3 bytes will be read - // for 32-bit images, the first 4 bytes will be read - rotated = FreeImage_Rotate(tmp, angle, &color); - } - break; - } - - break; - - case FIT_UINT16: { - WORD color = 255; - rotated = FreeImage_Rotate(tmp, angle, &color); - } - break; - - case FIT_RGB16: // we could also use 'FIRGB16 color' here - case FIT_RGBA16: { - FIRGBA16 color = { 255, 255, 255, 0 }; - // for RGB16 images, the first 3 WORD will be read - // for RGBA16 images, the first 4 WORD will be read - rotated = FreeImage_Rotate(tmp, angle, &color); - } - break; - - case FIT_FLOAT: { - float color = 1.0F; - rotated = FreeImage_Rotate(tmp, angle, &color); - } - break; - - case FIT_RGBF: // we could also use 'FIRGBF color' here - case FIT_RGBAF: { - FIRGBAF color = { 1, 1, 1, 0 }; - // for RGBF images, the first 3 float will be read - // for RGBAF images, the first 4 float will be read - rotated = FreeImage_Rotate(tmp, angle, &color); - } - break; - } - - SetDIBitsToDevice(bd->hDc, - pos_x, - bd->h - pos_y - FreeImage_GetHeight(rotated), - FreeImage_GetWidth(rotated), - FreeImage_GetHeight(rotated), - 0, 0, - 0, - FreeImage_GetHeight(rotated), - FreeImage_GetBits(rotated), - FreeImage_GetInfo(rotated), - DIB_RGB_COLORS); - FreeImage_Unload(tmp); - FreeImage_Unload(rotated); - } -} \ No newline at end of file + if( bd->background ) { + double scale; + FIBITMAP *tmp; + FIBITMAP *rotated; + + if( size == 0 ) { + scale = 1.0; + } else { + scale = ( double )size / FreeImage_GetWidth( bd->background ); + } + + tmp = FreeImage_RescaleRect( bd->background, + ( int )( ( double )FreeImage_GetWidth( bd->background ) * scale ), + ( int )( ( double )FreeImage_GetHeight( bd->background ) * scale ), + 0, + 0, + FreeImage_GetWidth( bd->background ), + FreeImage_GetHeight( bd->background ), + FILTER_BILINEAR, + 0 ); + + if( tmp == NULL ) { + return; + } + + FreeImage_AdjustColors( tmp, screen, -screen, 1.0, FALSE ); + FREE_IMAGE_TYPE image_type = FreeImage_GetImageType( tmp ); + + switch( image_type ) { + case FIT_BITMAP: + switch( FreeImage_GetBPP( tmp ) ) { + case 8: { + BYTE color = 255; + rotated = FreeImage_Rotate( tmp, angle, &color ); + } + break; + + case 24: // we could also use 'RGBTRIPLE color' here + case 32: { + RGBQUAD color = { 255, 255, 255, 0 }; + // for 24-bit images, the first 3 bytes will be read + // for 32-bit images, the first 4 bytes will be read + rotated = FreeImage_Rotate( tmp, angle, &color ); + } + break; + } + + break; + + case FIT_UINT16: { + WORD color = 255; + rotated = FreeImage_Rotate( tmp, angle, &color ); + } + break; + + case FIT_RGB16: // we could also use 'FIRGB16 color' here + case FIT_RGBA16: { + FIRGBA16 color = { 255, 255, 255, 0 }; + // for RGB16 images, the first 3 WORD will be read + // for RGBA16 images, the first 4 WORD will be read + rotated = FreeImage_Rotate( tmp, angle, &color ); + } + break; + + case FIT_FLOAT: { + float color = 1.0F; + rotated = FreeImage_Rotate( tmp, angle, &color ); + } + break; + + case FIT_RGBF: // we could also use 'FIRGBF color' here + case FIT_RGBAF: { + FIRGBAF color = { 1, 1, 1, 0 }; + // for RGBF images, the first 3 float will be read + // for RGBAF images, the first 4 float will be read + rotated = FreeImage_Rotate( tmp, angle, &color ); + } + break; + } + + SetDIBitsToDevice( bd->hDc, + pos_x, + bd->h - pos_y - FreeImage_GetHeight( rotated ), + FreeImage_GetWidth( rotated ), + FreeImage_GetHeight( rotated ), + 0, 0, + 0, + FreeImage_GetHeight( rotated ), + FreeImage_GetBits( rotated ), + FreeImage_GetInfo( rotated ), + DIB_RGB_COLORS ); + FreeImage_Unload( tmp ); + FreeImage_Unload( rotated ); + } +} diff --git a/app/wlib/mswlib/dynarr.h b/app/wlib/mswlib/dynarr.h index 5bd7a8e..e8a178e 100644 --- a/app/wlib/mswlib/dynarr.h +++ b/app/wlib/mswlib/dynarr.h @@ -31,10 +31,6 @@ typedef struct { #ifdef WINDOWS -#ifndef WIN32 -#define FAR _far -#endif -#define M_PI 3.14159 #define strcasecmp _stricmp #else #endif diff --git a/app/wlib/mswlib/gwin32.c b/app/wlib/mswlib/gwin32.c index 6b0c7f3..877c329 100644 --- a/app/wlib/mswlib/gwin32.c +++ b/app/wlib/mswlib/gwin32.c @@ -40,7 +40,7 @@ #include #include #if defined(_MSC_VER) || defined(__DMC__) -# include +#include #endif /* _MSC_VER || __DMC__ */ #ifndef SUBLANG_SERBIAN_LATIN_BA diff --git a/app/wlib/mswlib/mswbitmap.c b/app/wlib/mswlib/mswbitmap.c index 95b8a69..d4ee83c 100644 --- a/app/wlib/mswlib/mswbitmap.c +++ b/app/wlib/mswlib/mswbitmap.c @@ -29,7 +29,6 @@ #include #include #include -#include "misc.h" #include "mswint.h" #include "i18n.h" @@ -49,8 +48,8 @@ HBITMAP mswCreateBitMap( COLORREF fgCol1, COLORREF fgCol2, COLORREF bgCol, - wPos_t w, - wPos_t h, + int w, + int h, const char * bits ) { HDC hDc; @@ -100,7 +99,7 @@ HBITMAP mswCreateBitMap( return hBitMap; } -dynArr_t bitmap_da; +static dynArr_t bitmap_da; #define controlMap(N) DYNARR_N(controlMap_t,controlMap_da,N) #define bitmap(N) DYNARR_N(HBITMAP,bitmap_da,N) @@ -252,7 +251,7 @@ void mswDrawIcon( * \return pointer to icon */ -wIcon_p wIconCreateBitMap( wPos_t w, wPos_t h, const char * bits, wDrawColor color ) +wIcon_p wIconCreateBitMap( wWinPix_t w, wWinPix_t h, const char * bits, wDrawColor color ) { int lineLength; int i, j; @@ -330,12 +329,13 @@ wIcon_p wIconCreateBitMap( wPos_t w, wPos_t h, const char * bits, wDrawColor col wIcon_p wIconCreatePixMap( char *pm[]) { wIcon_p ip; - int col, r, g, b, len; + int col, r, g, b; + size_t len; int width, height; char buff[3]; char * cp, * cq, * ptr; int i, j, k; - int lineLength; + size_t lineLength; unsigned *keys; unsigned numchars; unsigned pixel; @@ -473,7 +473,7 @@ void wIconSetColor( wIcon_p ip, wDrawColor color ) */ void -wIconDraw( wDraw_p d, wIcon_p bm, wPos_t x, wPos_t y ) +wIconDraw( wDraw_p d, wIcon_p bm, wWinPix_t x, wWinPix_t y ) { mswDrawIcon( d->hDc, (int)x, (int)y, bm, FALSE, 0, 0 ); } @@ -489,7 +489,7 @@ wIconDraw( wDraw_p d, wIcon_p bm, wPos_t x, wPos_t y ) */ wControl_p -wBitmapCreate( wWin_p parent, wPos_t x, wPos_t y, long option, wIcon_p iconP ) +wBitmapCreate( wWin_p parent, wWinPix_t x, wWinPix_t y, long option, const struct wIcon_t * iconP ) { wBitmap_p control; int index; @@ -502,7 +502,7 @@ wBitmapCreate( wWin_p parent, wPos_t x, wPos_t y, long option, wIcon_p iconP ) control->hWnd = CreateWindow( "STATIC", NULL, style, control->x, control->y, iconP->w, iconP->h, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); + ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL ); if (control->hWnd == NULL) { mswFail("CreateWindow(BITMAP)"); @@ -510,7 +510,7 @@ wBitmapCreate( wWin_p parent, wPos_t x, wPos_t y, long option, wIcon_p iconP ) } control->h = iconP->h; control->w = iconP->w; - control->data = iconP; + control->data = (void*)iconP; return (wControl_p)control; } diff --git a/app/wlib/mswlib/mswbox.c b/app/wlib/mswlib/mswbox.c index 04b3656..4f90cf4 100644 --- a/app/wlib/mswlib/mswbox.c +++ b/app/wlib/mswlib/mswbox.c @@ -30,8 +30,8 @@ struct wBox_t { void wBoxSetSize( wBox_p bb, - wPos_t w, - wPos_t h ) + wWinPix_t w, + wWinPix_t h ) { bb->w = w; bb->h = h; @@ -42,7 +42,7 @@ static void repaintBox( HWND hWnd, wControl_p b ) { HDC hDc; wBox_p bb = (wBox_p)(b); - wPos_t x0, y0, x1, y1; + wWinPix_t x0, y0, x1, y1; char lastColor; int lastRop; static char colors[8][4][2] = { @@ -95,12 +95,12 @@ static callBacks_t boxCallBacks = { wBox_p wBoxCreate( wWin_p parent, - wPos_t origX, - wPos_t origY, + wWinPix_t origX, + wWinPix_t origY, const char * labelStr, wBoxType_e typ, - wPos_t width, - wPos_t height ) + wWinPix_t width, + wWinPix_t height ) { wBox_p b; int index; diff --git a/app/wlib/mswlib/mswbutt.c b/app/wlib/mswlib/mswbutt.c index 16f31c1..ac5bc87 100644 --- a/app/wlib/mswlib/mswbutt.c +++ b/app/wlib/mswlib/mswbutt.c @@ -27,7 +27,15 @@ #include #include #include "mswint.h" -int kludge12 = 0; + +/** Macros for button repeat timers */ +#define REPEAT_STAGE0_DELAY 500 +#define REPEAT_STAGE1_DELAY 150 +#define REPEAT_STAGE2_DELAY 75 +#define STOP_TIMER (-1) +#define INITIAL_WAIT (0) +#define SLOW_REPEATS (1) +#define FAST_REPEATS (2) /* ***************************************************************************** @@ -45,6 +53,9 @@ struct wButton_t { wBool_t busy; wBool_t selected; wIcon_p icon; + UINT_PTR timer_id; + int timer_count; + int timer_state; }; @@ -75,7 +86,7 @@ static void drawButton( HPEN oldPen, newPen; RECT rect; COLORREF color1, color2; - POS_T offw=5, offh=5; + wWinPix_t offw=5, offh=5; TRIVERTEX vert[2] ; GRADIENT_RECT gRect; @@ -191,7 +202,7 @@ static void buttDrawIcon( HDC butt_hDc ) { wIcon_p bm = b->icon; - POS_T offw=5, offh=5; + wWinPix_t offw=5, offh=5; if (b->selected || b->busy) { offw++; offh++; @@ -204,14 +215,22 @@ static void buttDrawIcon( } void wButtonSetBusy( - wButton_p b, - int value ) + wButton_p b, + int value) { - b->busy = value; - if (!value) - b->selected = FALSE; - /*SendMessage( b->hWnd, BM_SETSTATE, (WPARAM)value, 0L );*/ - InvalidateRgn( b->hWnd, NULL, FALSE ); + b->busy = value; + if (!value) { + b->selected = FALSE; + } + + // in case a timer is associated with the button, kill it + if (b->timer_id) { + KillTimer(b->hWnd, b->timer_id); + b->timer_id = 0; + b->timer_state = STOP_TIMER; + } + + InvalidateRgn(b->hWnd, NULL, FALSE); } @@ -227,6 +246,60 @@ void wButtonSetLabel( } InvalidateRgn( b->hWnd, NULL, FALSE ); } + +/** + * Button timer: handle timer events for buttons. These are used for + * auto-repeating presses. Three phases used are + * - initial delay before repetitions begin + * - slow repeats for a few cycles + * - fast repeats therafter + * - stop timer + * + * \param hWnd Handle of the window, unused + * \param message The message, unused + * \param timer The timer id is the wlib widget . + * \param timepast The timepast, unused + */ + +void CALLBACK buttTimer(HWND hWnd, UINT message, UINT_PTR timer, + DWORD timepast) +{ + wButton_p b = (wButton_p)timer; + if (b->timer_id == 0) { + b->timer_state = STOP_TIMER; + return ; + } + + /* Autorepeat state machine */ + switch (b->timer_state) { + case INITIAL_WAIT: + b->timer_state = SLOW_REPEATS; + b->timer_count = 0; + KillTimer(hWnd, (UINT_PTR)b); + SetTimer(hWnd, (UINT_PTR)b, REPEAT_STAGE1_DELAY, buttTimer); + break; + case SLOW_REPEATS: /* Enable slow auto-repeat */ + if (b->timer_count++ > 10) { + /* Start fast auto-repeat */ + b->timer_state = FAST_REPEATS; + KillTimer(hWnd, (UINT_PTR)b); + SetTimer(hWnd, (UINT_PTR)b, REPEAT_STAGE2_DELAY, buttTimer); + } + break; + case FAST_REPEATS: + break; + case STOP_TIMER: + default: + KillTimer(hWnd, (UINT_PTR)b); + b->timer_id = 0; + return; + break; + } + if (b->action) { + b->action(b->data); + } + return; +} static LRESULT buttPush( wControl_p b, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) @@ -240,7 +313,7 @@ static LRESULT buttPush( wControl_p b, HWND hWnd, UINT message, WPARAM wParam, L case WM_COMMAND: if (bb->action /*&& !bb->busy*/) { bb->action( bb->data ); - return 0L; + return (LRESULT)0; } break; @@ -249,10 +322,10 @@ static LRESULT buttPush( wControl_p b, HWND hWnd, UINT message, WPARAM wParam, L if (bb->type != B_BUTTON || (bb->option & BO_ICON) == 0) break; mi->CtlType = ODT_BUTTON; - mi->CtlID = wParam; + mi->CtlID = (UINT)wParam; mi->itemWidth = (UINT)ceil(bb->w*scaleIcon); mi->itemHeight = (UINT)ceil(bb->h*scaleIcon); - } return 0L; + } return (LRESULT)0; case WM_DRAWITEM: if (bb->type == B_BUTTON && (bb->option & BO_ICON) != 0) { @@ -261,10 +334,9 @@ static LRESULT buttPush( wControl_p b, HWND hWnd, UINT message, WPARAM wParam, L bb->selected = selected; InvalidateRgn( bb->hWnd, NULL, FALSE ); } - return TRUE; + return (LRESULT)TRUE; } break; - } return DefWindowProc( hWnd, message, wParam, lParam ); } @@ -279,15 +351,12 @@ static void buttDone( LRESULT CALLBACK pushButt( HWND hWnd, UINT message, - UINT wParam, - LONG lParam ) + WPARAM wParam, + LPARAM lParam ) { /* Catch and cause focus to leave control */ -#ifdef WIN32 - long inx = GetWindowLong( hWnd, GWL_ID ); -#else - short inx = GetWindowWord( hWnd, GWW_ID ); -#endif + + wIndex_t inx = (wIndex_t)GetWindowLongPtr( hWnd, GWL_ID ); wButton_p b = (wButton_p)mswMapIndex( inx ); PAINTSTRUCT ps; @@ -297,7 +366,7 @@ LRESULT CALLBACK pushButt( BeginPaint( hWnd, &ps ); buttDrawIcon( (wButton_p)b, ps.hdc ); EndPaint( hWnd, &ps ); - return 1L; + return (LRESULT)1; } break; case WM_CHAR: @@ -311,18 +380,29 @@ LRESULT CALLBACK pushButt( wParam, lParam ); /*SendMessage( ((wControl_p)(b->parent))->hWnd, WM_COMMAND, inx, MAKELONG( hWnd, EN_KILLFOCUS ) );*/ - return 0L; + return (LONG_PTR)0; } } break; case WM_KILLFOCUS: if ( b ) InvalidateRect( b->hWnd, NULL, TRUE ); - return 0L; + return (LRESULT)0; + break; + case WM_LBUTTONDOWN: + if (b->option&BO_REPEAT) { + SetTimer(hWnd, (UINT_PTR)b,REPEAT_STAGE0_DELAY,buttTimer); + b->timer_state = INITIAL_WAIT; + b->timer_id = (UINT_PTR)b; + } break; - case WM_LBUTTONUP: - /* don't know why but this solves a problem with color selection */ - Sleep( 0 ); + case WM_LBUTTONUP: + /* don't know why but this solves a problem with color selection */ + Sleep( 0 ); + if (b->timer_id) + KillTimer(hWnd, (UINT_PTR)b); + b->timer_id = 0; + b->timer_state = STOP_TIMER; break; } return CallWindowProc( oldButtProc, hWnd, message, wParam, lParam ); @@ -335,12 +415,12 @@ static callBacks_t buttonCallBacks = { wButton_p wButtonCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - wPos_t width, + wWinPix_t width, wButtonCallBack_p action, void * data ) { @@ -366,11 +446,11 @@ wButton_p wButtonCreate( b->selected = 0; mswComputePos( (wControl_p)b, x, y ); if (b->option&BO_ICON) { - width = (wPos_t)ceil(bm->w*scaleIcon)+10; + width = (wWinPix_t)ceil(bm->w*scaleIcon)+10; h = (int)ceil(bm->h*scaleIcon)+10; b->icon = bm; } else { - width = (wPos_t)(width*mswScale); + width = (wWinPix_t)(width*mswScale); } style = ((b->option&BO_ICON)? BS_OWNERDRAW : BS_PUSHBUTTON) | WS_CHILD | WS_VISIBLE | @@ -379,7 +459,7 @@ wButton_p wButtonCreate( style |= BS_DEFPUSHBUTTON; b->hWnd = CreateWindow( "BUTTON", labelStr, style, b->x, b->y, /*CW_USEDEFAULT, CW_USEDEFAULT,*/ width, h, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); + ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL ); if (b->hWnd == NULL) { mswFail("CreateWindow(BUTTON)"); return b; @@ -393,7 +473,10 @@ wButton_p wButtonCreate( mswCallBacks[B_BUTTON] = &buttonCallBacks; mswChainFocus( (wControl_p)b ); - oldButtProc = (WNDPROC) SetWindowLongPtr(b->hWnd, GWL_WNDPROC, (LONG_PTR)&pushButt); + oldButtProc = (WNDPROC)SetWindowLongPtr(b->hWnd, GWLP_WNDPROC, (LONG_PTR)&pushButt); +#ifdef _OLDCODE + oldButtProc = (WNDPROC)SetWindowLongPtr(b->hWnd, GWL_WNDPROC, (LONG_PTR)&pushButt); +#endif if (mswPalette) { hDc = GetDC( b->hWnd ); SelectPalette( hDc, mswPalette, 0 ); @@ -401,7 +484,7 @@ wButton_p wButtonCreate( ReleaseDC( b->hWnd, hDc ); } if ( !mswThickFont ) - SendMessage( b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L ); + SendMessage( b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, (LPARAM)0 ); InvalidateRect(b->hWnd, &rect, TRUE); diff --git a/app/wlib/mswlib/mswchoic.c b/app/wlib/mswlib/mswchoic.c index 2ac391a..55ed177 100644 --- a/app/wlib/mswlib/mswchoic.c +++ b/app/wlib/mswlib/mswchoic.c @@ -15,8 +15,8 @@ ***************************************************************************** */ -int CHOICE_HEIGHT=(17); -int CHOICE_MIN_WIDTH=25; +#define CHOICE_HEIGHT (17) +#define CHOICE_MIN_WIDTH (25) static XWNDPROC oldChoiceItemProc = NULL; static XWNDPROC newChoiceItemProc; @@ -28,7 +28,7 @@ typedef struct { struct wChoice_t { WOBJ_COMMON - const char * * labels; + const char * const * labels; wChoiceItem_p *buttList; long *valueP; long oldVal; @@ -42,14 +42,14 @@ void wRadioSetValue( wChoice_p bc, long val ) { - const char ** labels; + const char * const * labels; long cnt; wChoiceItem_p * butts; butts = (wChoiceItem_p*)bc->buttList; for (labels = bc->labels, cnt=0; *labels; labels++, cnt++, butts++ ) SendMessage( (*butts)->hWnd, BM_SETCHECK, - (val==cnt)?1:0, 0L ); + (WPARAM)((val==cnt)?1:0), (LPARAM)0 ); bc->oldVal = val; if (bc->valueP) *bc->valueP = val; @@ -67,14 +67,14 @@ void wToggleSetValue( wChoice_p bc, long val ) { - const char ** labels; + const char * const * labels; long cnt; wChoiceItem_p * butts; butts = (wChoiceItem_p*)bc->buttList; for (labels = bc->labels, cnt=0; *labels; labels++, cnt++, butts++ ) SendMessage( (*butts)->hWnd, BM_SETCHECK, - (val & (1L<oldVal = val; if (bc->valueP) *bc->valueP = val; @@ -115,12 +115,12 @@ static void choiceShow( static void choiceSetPos( wControl_p b, - wPos_t x, - wPos_t y ) + wWinPix_t x, + wWinPix_t y ) { wChoice_p bc = (wChoice_p)b; wChoiceItem_p * butts; - wPos_t dx, dy; + wWinPix_t dx, dy; dx = x - bc->x; dy = y - bc->y; @@ -129,8 +129,10 @@ static void choiceSetPos( SWP_NOSIZE|SWP_NOZORDER ); for (butts = (wChoiceItem_p*)bc->buttList; *butts; butts++ ) { + (*butts)->x += dx; + (*butts)->y += dy; SetWindowPos( (*butts)->hWnd, HWND_TOP, - (*butts)->x+=dx, (*butts)->y+=dy, + (*butts)->x, (*butts)->y, CW_USEDEFAULT, CW_USEDEFAULT, SWP_NOSIZE|SWP_NOZORDER ); } @@ -138,19 +140,14 @@ static void choiceSetPos( bc->y = y; } -long FAR PASCAL _export pushChoiceItem( +LRESULT FAR PASCAL _export pushChoiceItem( HWND hWnd, UINT message, - UINT wParam, - LONG lParam ) + WPARAM wParam, + LPARAM lParam ) { /* Catch and cause focus to leave control */ -#ifdef WIN32 - long inx = GetWindowLong( hWnd, GWL_ID ); -#else - short inx = GetWindowWord( hWnd, GWW_ID ); -#endif - + wIndex_t inx = (wIndex_t)GetWindowLongPtr( hWnd, GWL_ID ); wControl_p b = mswMapIndex( inx ); switch (message) { @@ -165,7 +162,7 @@ long FAR PASCAL _export pushChoiceItem( wParam, lParam ); /*SendMessage( ((wControl_p)(b->parent))->hWnd, WM_COMMAND, inx, MAKELONG( hWnd, EN_KILLFOCUS ) );*/ - return 0L; + return (LRESULT)0; } } break; @@ -194,20 +191,20 @@ LRESULT choiceItemProc( for (rest = (wChoiceItem_p*)bc->buttList; *rest; rest++ ) { switch (bc->type) { case B_TOGGLE: - num = rest-(wChoiceItem_p*)bc->buttList; + num = (int)(rest-(wChoiceItem_p*)bc->buttList); if (*rest == me) { bc->oldVal ^= (1L<hWnd, BM_SETCHECK, - (bc->oldVal & (1L<oldVal & (1L<hWnd, BM_SETCHECK, 0, 0L ); + SendMessage( (*rest)->hWnd, BM_SETCHECK, (WPARAM)0, (LPARAM)0 ); } else { - bc->oldVal = rest-(wChoiceItem_p*)bc->buttList; - SendMessage( (*rest)->hWnd, BM_SETCHECK, 1, 0L ); + bc->oldVal = (long)(rest-(wChoiceItem_p*)bc->buttList); + SendMessage( (*rest)->hWnd, BM_SETCHECK, (WPARAM)1, (LPARAM)0 ); } break; } @@ -259,25 +256,25 @@ static callBacks_t choiceItemCallBacks = { static wChoice_p choiceCreate( wType_e type, wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - const char **labels, + const char * const * labels, long *valueP, wChoiceCallBack_p action, void *data ) { wChoice_p b; - const char ** lp; + const char * const * lp; int cnt; wChoiceItem_p * butts; - int ppx, ppy; + wWinPix_t ppx, ppy; int bs; HDC hDc; HWND hButt; - int lab_l; + size_t lab_l; DWORD dw; int w, maxW; int pw, ph; @@ -319,7 +316,7 @@ static wChoice_p choiceCreate( (*butts)->hWnd = hButt = CreateWindow( "BUTTON", (*butts)->labelStr, bs | WS_CHILD | WS_VISIBLE | mswGetBaseStyle(parent), b->x+pw, b->y+ph, 80, CHOICE_HEIGHT, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); + ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL ); if ( hButt == (HWND)0 ) { mswFail( "choiceCreate button" ); return b; @@ -334,7 +331,7 @@ static wChoice_p choiceCreate( lab_l = strlen((*butts)->labelStr); if (!mswThickFont) {hFont = SelectObject( hDc, mswLabelFont );} - dw = GetTextExtent( hDc, (char *)((*butts)->labelStr), lab_l ); + dw = GetTextExtent( hDc, (char *)((*butts)->labelStr), (UINT)lab_l ); if (!mswThickFont) {SelectObject( hDc, hFont );} w = LOWORD(dw) + CHOICE_MIN_WIDTH; @@ -354,10 +351,14 @@ static wChoice_p choiceCreate( } mswChainFocus( (wControl_p)*butts ); newChoiceItemProc = MakeProcInstance( (XWNDPROC)pushChoiceItem, mswHInst ); - oldChoiceItemProc = (XWNDPROC)GetWindowLong( (*butts)->hWnd, GWL_WNDPROC ); - SetWindowLong( (*butts)->hWnd, GWL_WNDPROC, (LONG)newChoiceItemProc ); + oldChoiceItemProc = (XWNDPROC)GetWindowLongPtr((*butts)->hWnd, GWLP_WNDPROC); + SetWindowLongPtr((*butts)->hWnd, GWLP_WNDPROC, (LPARAM)newChoiceItemProc); +#ifdef _OLDCODE + oldChoiceItemProc = (XWNDPROC)GetWindowLong((*butts)->hWnd, GWL_WNDPROC); + SetWindowLong((*butts)->hWnd, GWL_WNDPROC, (LONG)newChoiceItemProc); +#endif if ( !mswThickFont ) - SendMessage( (*butts)->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L ); + SendMessage( (*butts)->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, (LPARAM)0 ); } *butts = NULL; switch (b->type) { @@ -392,12 +393,12 @@ static wChoice_p choiceCreate( wChoice_p wRadioCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - const char **labels, + const char * const *labels, long *valueP, wChoiceCallBack_p action, void *data ) @@ -408,12 +409,12 @@ wChoice_p wRadioCreate( wChoice_p wToggleCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - const char **labels, + const char * const *labels, long *valueP, wChoiceCallBack_p action, void *data ) diff --git a/app/wlib/mswlib/mswcolor.c b/app/wlib/mswlib/mswcolor.c index 41bf6a9..fb9b0ba 100644 --- a/app/wlib/mswlib/mswcolor.c +++ b/app/wlib/mswlib/mswcolor.c @@ -25,8 +25,8 @@ #define NUM_GRAYS (16) #define NUM_COLORS (256) -wDrawColor wDrawColorWhite = 0; -wDrawColor wDrawColorBlack = 1; +static wDrawColor wDrawColorWhite = 0; +static wDrawColor wDrawColorBlack = 1; #define MAX_COLOR_DISTANCE (3) @@ -45,8 +45,6 @@ static struct { { 0, 0, 0 } /* Black */ } }; -COLORREF mappedColors[NUM_COLORS]; - static long flipRGB( long rgb ) { @@ -236,6 +234,7 @@ static void mswGetCustomColors( void ) strcpy( colorName, "custom-" ); for ( inx=0; inx<16; inx++ ) { sprintf( colorName+7, "%d", inx ); + /** @prefs [mswcolor] custom-0= to custom-15= Set custom colors */ wPrefGetInteger( "mswcolor", colorName, &rgb, 0 ); aclrCust[inx] = flipRGB(rgb); } @@ -316,12 +315,12 @@ static void doColorButton( wButton_p wColorSelectButtonCreate( wWin_p win, - wPos_t x, - wPos_t y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - wPos_t width, + wWinPix_t width, wDrawColor * color, wColorSelectButtonCallBack_p action, void * data ) diff --git a/app/wlib/mswlib/mswdraw.c b/app/wlib/mswlib/mswdraw.c index c2739e6..be5bcd6 100644 --- a/app/wlib/mswlib/mswdraw.c +++ b/app/wlib/mswlib/mswdraw.c @@ -29,13 +29,8 @@ #include #include -#ifdef WIN32 #define wFont_t tagLOGFONTA -#else -#define wFont_t tagLOGFONT -#endif -#include "misc.h" #include "mswint.h" #include @@ -48,9 +43,9 @@ wBool_t wDrawDoTempDraw = TRUE; ***************************************************************************** */ -static wBool_t initted = FALSE; +#define M_PI 3.14159265358979323846 -long wDebugFont; +static wBool_t initted = FALSE; static FARPROC oldDrawProc; @@ -59,69 +54,53 @@ static long tmpOp = 0x990066; static long setOp = 0x8800c6; static long clrOp = 0xbb0226; -#define CENTERMARK_LENGTH 6 +#define CENTERMARK_LENGTH 4 -bool bDrawMainBM = 0; +static bool bDrawMainBM = 0; + +typedef struct { + double x, y; +} coOrd; #ifdef SLOW -static wPos_t XPIX2INCH( wDraw_p d, int ix ) +static wDrawPix_t XWINPIX2DRAWPIX( wDraw_p d, wWinPix_t ix ) { - return (wPos_t)ix; + return (wDrawPix_t)ix; } -static wPos_t YPIX2INCH( wDraw_p d, int iy ) +static wDrawPix_t YWINPIX2DRAWPIX( wDraw_p d, wWinPix_t iy ) { - wPos_t y; - y = (wPos_t)(d->h-2-iy); + wWinPix_t y; + y = (wDrawPix_t)(d->h-2-iy); return y; } -static int XINCH2PIX( wDraw_p d, wPos_t xx ) +static wWinPix_t XDRAWPIX2WINPIX( wDraw_p d, wDrawPix_t xx ) { - int ix; - ix = (int)(xx); + wWinPix_t ix; + ix = (wWinPix_t)(xx); return ix; } -static int YINCH2PIX( wDraw_p d, wPos_t y ) +static wWinPix_t YDRAWPIX2WINPIX( wDraw_p d, wDrawPix_t y ) { - int iy; - iy = d->h-2 - (int)(y); + wWinPix_t iy; + iy = (d->h)-2 - (wWinPix_t)(y); return iy; } - -static wPos_t XPIXELSTOINCH( wDraw_p d, int ix ) -{ - return (wPos_t)ix; -} - - -static wPos_t YPIXELSTOINCH( wDraw_p d, int iy ) -{ - return (wPos_t)iy; -} #else -#define XPIX2INCH( d, ix ) \ - ((wPos_t)ix) - -#define YPIX2INCH( d, iy ) \ - ((wPos_t)(d->h-2-iy)) - -#define XINCH2PIX( d, xx ) \ - ((int)(xx)) - -#define YINCH2PIX( d, y ) \ - (d->h-2 - (int)(y)) +#define XWINPIX2DRAWPIX( d, ix ) \ + ((wDrawPix_t)ix) +#define YWINPIX2DRAWPIX( d, iy ) \ + ((wDrawPix_t)(d->h-2-iy)) -#define XPIXELSTOINCH( d, ix ) \ - ((wPos_t)ix) - - -#define YPIXELSTOINCH( d, iy ) \ - ((wPos_t)iy) +#define XDRAWPIX2WINPIX( d, xx ) \ + ((wWinPix_t)(xx)) +#define YDRAWPIX2WINPIX( d, y ) \ + (d->h - 2 - (wWinPix_t)(y)) #endif /* @@ -134,7 +113,9 @@ static wPos_t YPIXELSTOINCH( wDraw_p d, int iy ) +/** @prefs [msw tweak] NoNegDrawArgs=1 Suppress drawing if x < 0 or y < 0 (-1 value causes preference read) */ static long noNegDrawArgs = -1; +/** @prefs [msw tweak] NoFlatEndCaps=1 Suppress EndCap Flat pen style */ static long noFlatEndCaps = 0; void wDrawDelayUpdate( @@ -323,10 +304,10 @@ static int clip0( POINT * p0, POINT * p1, wDraw_p d ) void wDrawLine( wDraw_p d, - wPos_t p0x, - wPos_t p0y, - wPos_t p1x, - wPos_t p1y, + wDrawPix_t p0x, + wDrawPix_t p0y, + wDrawPix_t p1x, + wDrawPix_t p1y, wDrawWidth dw, wDrawLineType_e lt, wDrawColor dc, @@ -335,10 +316,10 @@ void wDrawLine( POINT p0, p1; RECT rect; setDrawMode( d, dw, lt, dc, dopt ); - p0.x = XINCH2PIX(d,p0x); - p0.y = YINCH2PIX(d,p0y); - p1.x = XINCH2PIX(d,p1x); - p1.y = YINCH2PIX(d,p1y); + p0.x = XDRAWPIX2WINPIX(d,p0x); + p0.y = YDRAWPIX2WINPIX(d,p0y); + p1.x = XDRAWPIX2WINPIX(d,p1x); + p1.y = YDRAWPIX2WINPIX(d,p1y); if ( noNegDrawArgs>0 && !clip0( &p0, &p1, d ) ) return; MoveTo( d->hDc, p0.x, p0.y ); @@ -365,6 +346,12 @@ void wDrawLine( } } +static double d2r(double angle) +{ + angle *= (M_PI / 180.0); + return angle; +} + static double mswsin( double angle ) { while (angle < 0.0) angle += 360.0; @@ -406,12 +393,12 @@ static double mswasin( double x, double h ) void wDrawArc( wDraw_p d, - wPos_t px, - wPos_t py, - wPos_t r, + wDrawPix_t px, + wDrawPix_t py, + wDrawPix_t r, double a0, double a1, - int drawCenter, + int sizeCenter, wDrawWidth dw, wDrawLineType_e lt, wDrawColor dc, @@ -419,19 +406,16 @@ void wDrawArc( { int i, cnt; POINT p0, p1, ps, pe, pp0, pp1, pp2, pc; - double psx, psy, pex, pey, len, aa; + wDrawPix_t psx, psy, pex, pey; + double len, aa, ai; RECT rect; int needMoveTo; wBool_t fakeArc = FALSE; - len = a1/360.0 * (2 * M_PI) * r; - if (len < 3) - return; - - p0.x = XINCH2PIX(d,px-r); - p0.y = YINCH2PIX(d,py+r)+1; - p1.x = XINCH2PIX(d,px+r); - p1.y = YINCH2PIX(d,py-r)+1; + p0.x = XDRAWPIX2WINPIX(d,px-r); + p0.y = YDRAWPIX2WINPIX(d,py+r); + p1.x = XDRAWPIX2WINPIX(d,px+r); + p1.y = YDRAWPIX2WINPIX(d,py-r); pex = px + r * mswsin(a0); pey = py + r * mswcos(a0); @@ -440,17 +424,18 @@ void wDrawArc( /*pointOnCircle( &pe, p, r, a0 ); pointOnCircle( &ps, p, r, a0+a1 );*/ - ps.x = XINCH2PIX(d,(wPos_t)psx); - ps.y = YINCH2PIX(d,(wPos_t)psy); - pe.x = XINCH2PIX(d,(wPos_t)pex); - pe.y = YINCH2PIX(d,(wPos_t)pey); + ps.x = XDRAWPIX2WINPIX(d,psx); + ps.y = YDRAWPIX2WINPIX(d,psy); + pe.x = XDRAWPIX2WINPIX(d,pex); + pe.y = YDRAWPIX2WINPIX(d,pey); setDrawMode( d, dw, lt, dc, dopt ); if (dw == 0) dw = 1; - if (r>4096) { + /* Windows drawing will overshoot the end of the arc for large radius */ + if (r > 500) { /* The book says 32K but experience says otherwise */ fakeArc = TRUE; } @@ -459,21 +444,23 @@ void wDrawArc( fakeArc = TRUE; } if ( fakeArc ) { - cnt = (int)a1; + cnt = (int)(a1 / 2); if ( cnt <= 0 ) cnt = 1; - if ( cnt > 360 ) cnt = 360; - aa = a1 / cnt; - psx = px + r * mswsin(a0); - psy = py + r * mswcos(a0); - pp0.x = XINCH2PIX( d, (wPos_t)psx ); - pp0.y = YINCH2PIX( d, (wPos_t)psy ); + if ( cnt > 180 ) cnt = 180; + // Convert a0 and a1 to radians here + ai = d2r(a1) / cnt; + aa = d2r(a0); + psx = px + r * sin(aa); + psy = py + r * cos(aa); + pp0.x = XDRAWPIX2WINPIX( d, psx ); + pp0.y = YDRAWPIX2WINPIX( d, psy ); needMoveTo = TRUE; for ( i=0; ihDc, pp0.x, pp0.y ); @@ -487,30 +474,30 @@ void wDrawArc( } } else { if ( a0 == 0.0 && a1 == 360.0 ) { - Arc( d->hDc, p0.x, p1.y, p1.x, p0.y, ps.x, p0.y-1, pe.x, p1.y-1 ); - Arc( d->hDc, p0.x, p1.y, p1.x, p0.y, ps.x, p1.y-1, pe.x, p0.y-1 ); + Arc( d->hDc, p0.x, p1.y, p1.x, p0.y, ps.x, p0.y, pe.x, p1.y ); + Arc( d->hDc, p0.x, p1.y, p1.x, p0.y, ps.x, p1.y, pe.x, p0.y ); } else { Arc( d->hDc, p0.x, p1.y, p1.x, p0.y, ps.x, ps.y, pe.x, pe.y ); } } // should the center of the arc be drawn? - if( drawCenter ) { + if( sizeCenter ) { // calculate the center coordinates - pc.x = XINCH2PIX( d, px ); - pc.y = YINCH2PIX( d, py ); + pc.x = XDRAWPIX2WINPIX( d, px ); + pc.y = YDRAWPIX2WINPIX( d, py ); // now draw the crosshair - MoveTo( d->hDc, pc.x - CENTERMARK_LENGTH/2, pc.y ); - LineTo( d->hDc, pc.x + CENTERMARK_LENGTH/2, pc.y ); - MoveTo( d->hDc, pc.x, pc.y - CENTERMARK_LENGTH/2 ); - LineTo( d->hDc, pc.x, pc.y + CENTERMARK_LENGTH/2 ); + MoveTo( d->hDc, pc.x - CENTERMARK_LENGTH*sizeCenter, pc.y ); + LineTo( d->hDc, pc.x + CENTERMARK_LENGTH*sizeCenter, pc.y ); + MoveTo( d->hDc, pc.x, pc.y - CENTERMARK_LENGTH*sizeCenter ); + LineTo( d->hDc, pc.x, pc.y + CENTERMARK_LENGTH*sizeCenter ); // invalidate the area of the crosshair - rect.top = pc.y - CENTERMARK_LENGTH / 2 - 1; - rect.bottom = pc.y + CENTERMARK_LENGTH / 2 + 1; - rect.left = pc.x - CENTERMARK_LENGTH / 2 - 1; - rect.right = pc.x + CENTERMARK_LENGTH / 2 + 1; + rect.top = pc.y - CENTERMARK_LENGTH*sizeCenter - 1; + rect.bottom = pc.y + CENTERMARK_LENGTH*sizeCenter + 1; + rect.left = pc.x - CENTERMARK_LENGTH*sizeCenter - 1; + rect.right = pc.x + CENTERMARK_LENGTH*sizeCenter + 1; myInvalidateRect( d, &rect ); } @@ -544,16 +531,16 @@ void wDrawArc( void wDrawPoint( wDraw_p d, - wPos_t px, - wPos_t py, + wDrawPix_t px, + wDrawPix_t py, wDrawColor dc, wDrawOpts dopt ) { POINT p0; RECT rect; - p0.x = XINCH2PIX(d,px); - p0.y = YINCH2PIX(d,py); + p0.x = XDRAWPIX2WINPIX(d,px); + p0.y = YDRAWPIX2WINPIX(d,py); if ( p0.x < 0 || p0.y < 0 ) return; @@ -707,7 +694,9 @@ void mswFontInit( void ) { const char * face; long size; + /** @prefs [msw window font] face=FontName */ face = wPrefGetString( "msw window font", "face" ); + /** @prefs [msw window font] size=-24 */ wPrefGetInteger( "msw window font", "size", &size, -24 ); if (face) { strncpy( logFont.lfFaceName, face, LF_FACESIZE ); @@ -750,16 +739,16 @@ static int computeFontSize( wDraw_p d, double siz ) } void wDrawGetTextSize( - wPos_t *w, - wPos_t *h, - wPos_t *d, - wPos_t *a, + wDrawPix_t *w, + wDrawPix_t *h, + wDrawPix_t *d, + wDrawPix_t *a, wDraw_p bd, const char * text, wFont_p fp, double siz ) { - int x, y; + wWinPix_t x, y; HFONT newFont, prevFont; DWORD extent; int oldLfHeight; @@ -773,16 +762,16 @@ void wDrawGetTextSize( fp->lfWidth = 0; newFont = CreateFontIndirect( fp ); prevFont = SelectObject( bd->hDc, newFont ); - extent = GetTextExtent( bd->hDc, CAST_AWAY_CONST text, strlen(text) ); + extent = GetTextExtent( bd->hDc, CAST_AWAY_CONST text, (int)(strlen(text)) ); GetTextMetrics(bd->hDc, &textMetric); x = LOWORD(extent); y = HIWORD(extent); - *w = XPIXELSTOINCH( bd, x ); - *h = YPIXELSTOINCH( bd, y ); - *d = YPIXELSTOINCH(bd, textMetric.tmDescent ); - *a = YPIXELSTOINCH(bd, textMetric.tmAscent ); + *w = (wDrawPix_t)x; + *h = (wDrawPix_t)y; + *d = (wDrawPix_t)textMetric.tmDescent; + *a = (wDrawPix_t)textMetric.tmAscent; SelectObject( bd->hDc, prevFont ); DeleteObject( newFont ); @@ -803,8 +792,8 @@ void wDrawGetTextSize( */ void wDrawString( wDraw_p d, - wPos_t px, - wPos_t py, + wDrawPix_t px, + wDrawPix_t py, double angle, const char * text, wFont_p fp, @@ -828,8 +817,8 @@ void wDrawString( fp->lfHeight = computeFontSize(d, siz); fp->lfWidth = 0; newFont = CreateFontIndirect(fp); - x = XINCH2PIX(d,px) + (int)(mswsin(angle)*fp->lfHeight-0.5); - y = YINCH2PIX(d,py) + (int)(mswcos(angle)*fp->lfHeight-0.5); + x = XDRAWPIX2WINPIX(d,px) + (int)(mswsin(angle)*fp->lfHeight-0.5); + y = YDRAWPIX2WINPIX(d,py) + (int)(mswcos(angle)*fp->lfHeight-0.5); if (noNegDrawArgs > 0 && (x < 0 || y < 0)) { DeleteObject(newFont); @@ -843,7 +832,7 @@ void wDrawString( if (dopts & wDrawOutlineFont) { HPEN oldPen; BeginPath(d->hDc); - TextOut(d->hDc, x, y, text, strlen(text)); + TextOut(d->hDc, x, y, text, (int)strlen(text)); EndPath(d->hDc); // Now draw outline text @@ -857,11 +846,11 @@ void wDrawString( old = SetTextColor(d->hDc, mswGetColor(d->hasPalette, dc)); - TextOut(d->hDc, x, y, text, strlen(text)); + TextOut(d->hDc, x, y, text, (int)(strlen(text))); SetTextColor(d->hDc, old); } - extent = GetTextExtent(d->hDc, CAST_AWAY_CONST text, strlen(text)); + extent = GetTextExtent(d->hDc, CAST_AWAY_CONST text, (int)(strlen(text))); SelectObject(d->hDc, prevFont); w = LOWORD(extent); h = HIWORD(extent); @@ -925,10 +914,10 @@ void wSetSelectedFontSize(wFontSize_t size) void wDrawFilledRectangle( wDraw_p d, - wPos_t px, - wPos_t py, - wPos_t sx, - wPos_t sy, + wDrawPix_t px, + wDrawPix_t py, + wDrawPix_t sx, + wDrawPix_t sy, wDrawColor color, wDrawOpts opts ) { @@ -944,10 +933,10 @@ void wDrawFilledRectangle( mode = R2_COPYPEN; } SetROP2(d->hDc, mode); - rect.left = XINCH2PIX(d,px); - rect.right = XINCH2PIX(d,px+sx); - rect.top = YINCH2PIX(d,py+sy); - rect.bottom = YINCH2PIX(d,py); + rect.left = XDRAWPIX2WINPIX(d,px); + rect.right = XDRAWPIX2WINPIX(d,px+sx); + rect.top = YDRAWPIX2WINPIX(d,py+sy); + rect.bottom = YDRAWPIX2WINPIX(d,py); if ( rect.right < 0 || rect.bottom < 0 ) return; @@ -1000,8 +989,8 @@ static void addPoint( BYTE type, RECT * pr) { POINT p; - p.x = XINCH2PIX(d, pp->x); - p.y = YINCH2PIX(d, pp->y); + p.x = XDRAWPIX2WINPIX(d, pp->x); + p.y = YDRAWPIX2WINPIX(d, pp->y); #ifdef DRAWFILLPOLYLOG fprintf(logF, " q[%d] = {%d,%d}\n", pk, p.x, p.y); @@ -1042,7 +1031,7 @@ static void addPoint( void wDrawPolygon( wDraw_p d, - wPos_t node[][2], + wDrawPix_t node[][2], wPolyLine_e type[], wIndex_t cnt, wDrawColor color, @@ -1088,8 +1077,8 @@ void wDrawPolygon( setDrawMode(d, dw, lt, color, opts); } - rect.left = rect.right = XINCH2PIX(d,node[cnt-1][0]-1); - rect.top = rect.bottom = YINCH2PIX(d,node[cnt-1][1]+1); + rect.left = rect.right = XDRAWPIX2WINPIX(d,node[cnt-1][0]-1); + rect.top = rect.bottom = YDRAWPIX2WINPIX(d,node[cnt-1][1]+1); #ifdef DRAWFILLPOLYLOG logF = fopen("log.txt", "a"); @@ -1110,10 +1099,10 @@ void wDrawPolygon( nextNode = (i == cnt - 1) ? 0 : i + 1; // calculate distance to neighboring nodes - int prevXDistance = node[i][0] - node[prevNode][0]; - int prevYDistance = node[i][1] - node[prevNode][1]; - int nextXDistance = node[nextNode][0]-node[i][0]; - int nextYDistance = node[nextNode][1]-node[i][1]; + int prevXDistance = (wWinPix_t)(node[i][0] - node[prevNode][0]); + int prevYDistance = (wWinPix_t)(node[i][1] - node[prevNode][1]); + int nextXDistance = (wWinPix_t)(node[nextNode][0]-node[i][0]); + int nextYDistance = (wWinPix_t)(node[nextNode][1]-node[i][1]); // distance from node to endpoints of curve is half the line length endPoint0.x = (prevXDistance/2)+node[prevNode][0]; @@ -1202,29 +1191,29 @@ void wDrawPolygon( #define MAX_FILLCIRCLE_POINTS (30) void wDrawFilledCircle( wDraw_p d, - wPos_t x, - wPos_t y, - wPos_t r, + wDrawPix_t x, + wDrawPix_t y, + wDrawPix_t r, wDrawColor color, wDrawOpts opts ) { POINT p0, p1; RECT rect; - static wPos_t circlePts[MAX_FILLCIRCLE_POINTS][2]; + static wDrawPix_t circlePts[MAX_FILLCIRCLE_POINTS][2]; int inx, cnt; double dang; - p0.x = XINCH2PIX(d,x-r); - p0.y = YINCH2PIX(d,y+r)+1; - p1.x = XINCH2PIX(d,x+r); - p1.y = YINCH2PIX(d,y-r)+1; + p0.x = XDRAWPIX2WINPIX(d,x-r); + p0.y = YDRAWPIX2WINPIX(d,y+r); + p1.x = XDRAWPIX2WINPIX(d,x+r); + p1.y = YDRAWPIX2WINPIX(d,y-r); setDrawBrush( d, color, opts ); if ( noNegDrawArgs > 0 && ( p0.x < 0 || p0.y < 0 ) ) { if ( r > MAX_FILLCIRCLE_POINTS ) cnt = MAX_FILLCIRCLE_POINTS; else if ( r > 8 ) - cnt = r; + cnt = XDRAWPIX2WINPIX(d,r); else cnt = 8; dang = 360.0/cnt; @@ -1308,8 +1297,8 @@ void wDrawClear( wDraw_p d ) void wDrawSetSize( wDraw_p d, - wPos_t width, - wPos_t height, void * redraw) + wWinPix_t width, + wWinPix_t height, void * redraw) { d->w = width; d->h = height; @@ -1323,8 +1312,8 @@ void wDrawSetSize( void wDrawGetSize( wDraw_p d, - wPos_t * width, - wPos_t * height ) + wWinPix_t * width, + wWinPix_t * height ) { *width = d->w-2; *height = d->h-2; @@ -1349,17 +1338,17 @@ double wDrawGetMaxRadius( wDraw_p d ) void wDrawClip( wDraw_p d, - wPos_t x, - wPos_t y, - wPos_t w, - wPos_t h ) + wDrawPix_t x, + wDrawPix_t y, + wDrawPix_t w, + wDrawPix_t h ) { - int ix0, iy0, ix1, iy1; + wWinPix_t ix0, iy0, ix1, iy1; HRGN hRgnClip; - ix0 = XINCH2PIX(d,x); - iy0 = YINCH2PIX(d,y); - ix1 = XINCH2PIX(d,x+w); - iy1 = YINCH2PIX(d,y+h); + ix0 = XDRAWPIX2WINPIX(d,x); + iy0 = YDRAWPIX2WINPIX(d,y); + ix1 = XDRAWPIX2WINPIX(d,x+w); + iy1 = YDRAWPIX2WINPIX(d,y+h); /* Note: Ydim is upside down so iy1hDc, hRgnClip ); @@ -1384,22 +1373,24 @@ void wRedraw( wDraw_p d ) struct wDrawBitMap_t { wDrawBitMap_p next; - wPos_t x; - wPos_t y; - wPos_t w; - wPos_t h; + wDrawPix_t x; + wDrawPix_t y; + wDrawPix_t w; + wDrawPix_t h; char * bmx; wDrawColor color; HBITMAP bm; }; -wDrawBitMap_p bmRoot = NULL; +static wDrawBitMap_p bmRoot = NULL; +extern wDrawColor drawColorWhite; +extern wDrawColor drawColorBlack; void wDrawBitMap( wDraw_p d, wDrawBitMap_p bm, - wPos_t px, - wPos_t py, + wDrawPix_t px, + wDrawPix_t py, wDrawColor dc, wDrawOpts dopt ) { @@ -1409,15 +1400,15 @@ void wDrawBitMap( int x0, y0; RECT rect; - x0 = XINCH2PIX(d,px-bm->x); - y0 = YINCH2PIX(d,py-bm->y+bm->h); + x0 = XDRAWPIX2WINPIX(d,px-bm->x); + y0 = YDRAWPIX2WINPIX(d,py-bm->y+bm->h); #ifdef LATER if ( noNegDrawArgs > 0 && ( x0 < 0 || y0 < 0 ) ) return; #endif - if (dc == wDrawColorWhite) { + if (dc == drawColorWhite) { mode = clrOp; - dc = wDrawColorBlack; + dc = drawColorBlack; } else { mode = setOp; } @@ -1426,21 +1417,21 @@ void wDrawBitMap( if ( bm->bm ) DeleteObject( bm->bm ); bm->bm = mswCreateBitMap( mswGetColor(d->hasPalette,dc) /*colorPalette.palPalEntry[dc]*/, RGB( 255, 255, 255 ), - RGB( 255, 255, 255 ), bm->w, bm->h, bm->bmx ); + RGB( 255, 255, 255 ), (wWinPix_t)bm->w, (wWinPix_t)bm->h, bm->bmx ); bm->color = dc; } bmDc = CreateCompatibleDC( d->hDc ); setDrawMode( d, 0, wDrawLineSolid, dc, dopt ); oldBm = SelectObject( bmDc, bm->bm ); - BitBlt( d->hDc, x0, y0, bm->w, bm->h, bmDc, 0, 0, mode ); + BitBlt( d->hDc, x0, y0, (wWinPix_t)bm->w, (wWinPix_t)bm->h, bmDc, 0, 0, mode ); SelectObject( bmDc, oldBm ); DeleteDC( bmDc ); if (d->hWnd) { rect.top = y0-1; - rect.bottom = rect.top+bm->h+1; + rect.bottom = rect.top+ (wWinPix_t)bm->h+1; rect.left = x0-1; - rect.right = rect.left+bm->w+1; + rect.right = rect.left+ (wWinPix_t)bm->w+1; myInvalidateRect( d, &rect ); } } @@ -1484,22 +1475,18 @@ wDrawBitMap_p wDrawBitMapCreate( ***************************************************************************** */ -int doSetFocus = 1; +static int doSetFocus = 1; -long FAR PASCAL XEXPORT mswDrawPush( +LRESULT FAR PASCAL XEXPORT mswDrawPush( HWND hWnd, UINT message, - UINT wParam, - LONG lParam ) + WPARAM wParam, + LPARAM lParam ) { -#ifdef WIN32 - long inx = GetWindowLong( hWnd, GWL_ID ); -#else - short inx = GetWindowWord( hWnd, GWW_ID ); -#endif + wIndex_t inx = (wIndex_t)GetWindowLongPtr( hWnd, GWL_ID ); wDraw_p b; - short int ix, iy; - wPos_t x, y; + wWinPix_t ix, iy; + wDrawPix_t x, y; HDC hDc; PAINTSTRUCT ps; wAction_t action; @@ -1529,7 +1516,10 @@ long FAR PASCAL XEXPORT mswDrawPush( } b->wFactor = (double)GetDeviceCaps( b->hDc, LOGPIXELSX ); b->hFactor = (double)GetDeviceCaps( b->hDc, LOGPIXELSY ); - b->DPI = 96.0; /*min( b->wFactor, b->hFactor );*/ + double dpi; + /** @prefs [Preference] ScreenDPI=96.0 Sets DPI of screen */ + wPrefGetFloat(PREFSECTION, DPISET, &dpi, 96.0); + b->DPI = dpi; b->hWnd = hWnd; SetROP2( b->hDc, R2_WHITE ); Rectangle( b->hDc, 0, 0, b->w, b->h ); @@ -1564,7 +1554,7 @@ long FAR PASCAL XEXPORT mswDrawPush( b->drawResize( b, b->size );*/ if (b->drawRepaint) b->drawRepaint( b, b->data, 0, 0 ); - return 0; + return (LRESULT)0; case WM_MOUSEMOVE: activeWnd = GetActiveWindow(); focusWnd = GetFocus(); @@ -1613,15 +1603,15 @@ long FAR PASCAL XEXPORT mswDrawPush( } ix = LOWORD( lParam ); iy = HIWORD( lParam ); - x = XPIX2INCH( b, ix ); - y = YPIX2INCH( b, iy ); + x = XWINPIX2DRAWPIX( b, ix ); + y = YWINPIX2DRAWPIX( b, iy ); b->lastX = x; b->lastY = y; if (b->action) b->action( b, b->data, action, x, y ); if (b->hWnd) UpdateWindow(b->hWnd); - return 0; + return (LRESULT)0; case WM_CHAR: b = (wDraw_p)mswMapIndex( inx ); extChar = wAccelKey_None; @@ -1655,9 +1645,9 @@ long FAR PASCAL XEXPORT mswDrawPush( if (extChar != wAccelKey_None) b->action( b, b->data, wActionExtKey + ( (int)extChar << 8 ), b->lastX, b->lastY ); else - b->action( b, b->data, wActionText + ( wParam << 8 ), b->lastX, b->lastY ); + b->action( b, b->data, wActionText + ( (int)wParam << 8 ), b->lastX, b->lastY ); } - return 0; + return (LRESULT)0; case WM_PAINT: b = (wDraw_p)mswMapIndex( inx ); @@ -1740,7 +1730,7 @@ static LRESULT drawMsgProc( wDraw_p b, HWND hWnd, UINT message, WPARAM wParam, L } if (b->action) b->action( b, b->data, action, b->lastX, b->lastY ); - return 0; + return (LRESULT)0; case WM_MOUSEHWHEEL: if ( GET_KEYSTATE_WPARAM(wParam) & (MK_SHIFT|MK_MBUTTON)) { if ( GET_WHEEL_DELTA_WPARAM(wParam) > 0 ) { @@ -1751,7 +1741,7 @@ static LRESULT drawMsgProc( wDraw_p b, HWND hWnd, UINT message, WPARAM wParam, L } if (b->action) b->action( b, b->data, action, b->lastX, b->lastY ); - return 0; + return (LRESULT)0; } return DefWindowProc( hWnd, message, wParam, lParam ); @@ -1799,7 +1789,7 @@ static callBacks_t drawCallBacks = { drawDoneProc, (messageCallback_p)drawMsgProc }; -wDraw_p drawList = NULL; +static wDraw_p drawList = NULL; void mswRedrawAll( void ) @@ -1841,12 +1831,12 @@ void mswRepaintAll( void ) wDraw_p wDrawCreate( wWin_p parent, - wPos_t x, - wPos_t y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, long option, - wPos_t w, - wPos_t h, + wWinPix_t w, + wWinPix_t h, void * data, wDrawRedrawCallBack_p redrawProc, wDrawActionCallBack_p action ) @@ -1872,7 +1862,7 @@ wDraw_p wDrawCreate( d->hWnd = CreateWindow( mswDrawWindowClassName, NULL, WS_CHILDWINDOW|WS_VISIBLE|WS_BORDER, d->x, d->y, w, h, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); + ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL ); if (d->hWnd == (HWND)0) { mswFail( "CreateWindow(DRAW)" ); @@ -1909,7 +1899,7 @@ wDraw_p wDrawCreate( ***************************************************************************** */ -wDraw_p wBitMapCreate( wPos_t w, wPos_t h, int planes ) +wDraw_p wBitMapCreate( wWinPix_t w, wWinPix_t h, int planes ) { wDraw_p d; HDC hDc; @@ -1934,11 +1924,13 @@ wDraw_p wBitMapCreate( wPos_t w, wPos_t h, int planes ) d->hBmMain = CreateCompatibleBitmap( hDc, d->w, d->h ); if ( d->hBmMain == (HBITMAP)0 ) { wNoticeEx( NT_ERROR, "CreateBitMap: CreateBM Main fails", "Ok", NULL ); + ReleaseDC(mswHWnd, hDc); return FALSE; } d->hBmTemp = CreateCompatibleBitmap( hDc, d->w, d->h ); if ( d->hBmTemp == (HBITMAP)0 ) { wNoticeEx( NT_ERROR, "CreateBitMap: CreateBM Temp fails", "Ok", NULL ); + ReleaseDC(mswHWnd, hDc); return FALSE; } d->hasPalette = (GetDeviceCaps(hDc,RASTERCAPS ) & RC_PALETTE) != 0; @@ -2043,8 +2035,19 @@ wBitMapWriteFile(wDraw_p d, const char * fileName) } if (bCanSave) { - bSuccess = FreeImage_Save(fif, dib2, fileName, PNG_DEFAULT); - return bSuccess; + int flags; + + switch (fif) { + case FIF_JPEG: + flags = JPEG_QUALITYNORMAL; + break; + case FIF_PNG: + flags = PNG_DEFAULT; + break; + default: + flags = 0; // whatver the default is for the file format + } + bSuccess = FreeImage_Save(fif, dib2, fileName, flags); } } FreeImage_Unload(dib2); diff --git a/app/wlib/mswlib/mswedit.c b/app/wlib/mswlib/mswedit.c index dc70ac3..b6da004 100644 --- a/app/wlib/mswlib/mswedit.c +++ b/app/wlib/mswlib/mswedit.c @@ -35,6 +35,7 @@ struct wString_t { char * valueP; wIndex_t valueL; wStringCallBack_p action; + wBool_t enter_pressed; /**< flag if enter was pressed */ }; #ifdef LATER @@ -58,26 +59,22 @@ struct wFloat_t { static XWNDPROC oldEditProc = NULL; static XWNDPROC newEditProc; -static void triggerString( wControl_p b ); +static void triggerString( wString_p b ); #ifdef LATER static void triggerInteger( wControl_p b ); static void triggerFloat( wControl_p b ); #endif -long FAR PASCAL _export pushEdit( +LRESULT FAR PASCAL _export pushEdit( HWND hWnd, UINT message, - UINT wParam, - LONG lParam ) + WPARAM wParam, + LPARAM lParam ) { -#ifdef WIN32 - long inx = GetWindowLong( hWnd, GWL_ID ); -#else - short inx = GetWindowWord( hWnd, GWW_ID ); -#endif - wControl_p b = mswMapIndex(inx); + wIndex_t inx = (wIndex_t)GetWindowLongPtr( hWnd, GWL_ID ); + wString_p b = (wString_p)mswMapIndex(inx); switch (message) { @@ -86,14 +83,14 @@ long FAR PASCAL _export pushEdit( switch (wParam) { case VK_RETURN: triggerString(b); - return (0L); + return (LRESULT)0; break; case 0x1B: case 0x09: SetFocus(((wControl_p)(b->parent))->hWnd); SendMessage(((wControl_p)(b->parent))->hWnd, WM_CHAR, wParam, lParam); - return 0L; + return (LRESULT)0; } } break; @@ -116,25 +113,21 @@ void wStringSetValue( const char * arg ) { WORD len = (WORD)strlen( arg ); - SendMessage( b->hWnd, WM_SETTEXT, 0, (DWORD)arg ); -#ifdef WIN32 - SendMessage( b->hWnd, EM_SETSEL, 0, -1 ); - SendMessage( b->hWnd, EM_SCROLLCARET, 0, 0L ); -#else - SendMessage( b->hWnd, EM_SETSEL, 0, MAKELPARAM(len,len) ); -#endif - SendMessage( b->hWnd, EM_SETMODIFY, FALSE, 0L ); + SendMessage( b->hWnd, WM_SETTEXT, (WPARAM)0, (LPARAM)arg ); + SendMessage( b->hWnd, EM_SETSEL, (WPARAM)0, (LPARAM)-1 ); + SendMessage( b->hWnd, EM_SCROLLCARET, (WPARAM)0, (LPARAM)0 ); + SendMessage( b->hWnd, EM_SETMODIFY, (WPARAM)FALSE, (LPARAM)0 ); } void wStringSetWidth( wString_p b, - wPos_t w ) + wWinPix_t w ) { int rc; b->w = w; rc = SetWindowPos( b->hWnd, HWND_TOP, 0, 0, - b->w, b->h, SWP_NOMOVE|SWP_NOZORDER ); + b->w, b->h, SWP_NOMOVE|SWP_NOZORDER ); } @@ -142,7 +135,7 @@ const char * wStringGetValue( wString_p b ) { static char buff[1024]; - SendMessage( b->hWnd, WM_GETTEXT, sizeof buff, (DWORD)buff ); + SendMessage( b->hWnd, WM_GETTEXT, (WPARAM)sizeof buff, (LPARAM)buff ); return buff; } @@ -157,13 +150,17 @@ const char * wStringGetValue( static char *getString(wString_p bs) { char *tmpBuffer = NULL; - UINT chars = SendMessage(bs->hWnd, EM_LINELENGTH, (WPARAM)0, 0L); + UINT chars = (UINT)SendMessage(bs->hWnd, EM_LINELENGTH, (WPARAM)0, (LPARAM)0); if (chars) { tmpBuffer = malloc(chars > sizeof(WORD)? chars + 1 : sizeof(WORD) + 1); *(WORD *)tmpBuffer = chars; - SendMessage(bs->hWnd, (UINT)EM_GETLINE, 0, (LPARAM)tmpBuffer); + SendMessage(bs->hWnd, (UINT)EM_GETLINE, (WPARAM)0, (LPARAM)tmpBuffer); tmpBuffer[chars] = '\0'; + } else { + tmpBuffer = malloc(2); + tmpBuffer[0] = '\n'; + tmpBuffer[1] = '\0'; } return (tmpBuffer); @@ -177,19 +174,21 @@ static char *getString(wString_p bs) */ static void triggerString( - wControl_p b) + wString_p b) { - wString_p bs = (wString_p)b; + const char *output = "\n"; - char *enteredString = getString(bs); + char *enteredString = getString(b); if (enteredString) { - if (bs->valueP) { - strcpy(bs->valueP, enteredString); + if (b->valueP) { + strcpy(b->valueP, enteredString); } - if (bs->action) { - bs->action(enteredString, bs->data); + if (b->action) { + b->enter_pressed = TRUE; + b->action(output, b->data); } + free(enteredString); } } @@ -210,7 +209,7 @@ LRESULT stringProc( case WM_COMMAND: switch (WCMD_PARAM_NOTF) { case EN_KILLFOCUS: - modified = (int)SendMessage(bs->hWnd, (UINT)EM_GETMODIFY, 0, 0L); + modified = (int)SendMessage(bs->hWnd, (UINT)EM_GETMODIFY, (WPARAM)0, (LPARAM)0); if (!modified) { break; } @@ -226,7 +225,7 @@ LRESULT stringProc( } free(enteredString); } - SendMessage(bs->hWnd, (UINT)EM_SETMODIFY, FALSE, 0L); + SendMessage(bs->hWnd, (UINT)EM_SETMODIFY, (WPARAM)FALSE, (LPARAM)0); } break; } @@ -243,12 +242,12 @@ static callBacks_t stringCallBacks = { wString_p wStringCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - POS_T width, + wWinPix_t width, char *valueP, wIndex_t valueL, wStringCallBack_p action, @@ -269,34 +268,30 @@ wString_p wStringCreate( if (option & BO_READONLY) style |= ES_READONLY; -#ifdef WIN32 b->hWnd = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | style, b->x, b->y, width, mswEditHeight, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); -#else - b->hWnd = CreateWindow( "EDIT", NULL, - ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | style, - b->x, b->y, - width, mswEditHeight, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); -#endif + ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL ); if (b->hWnd == NULL) { mswFail("CreateWindow(STRING)"); return b; } newEditProc = MakeProcInstance( (XWNDPROC)pushEdit, mswHInst ); - oldEditProc = (XWNDPROC)GetWindowLong(b->hWnd, GWL_WNDPROC ); + oldEditProc = (XWNDPROC)GetWindowLongPtr(b->hWnd, GWLP_WNDPROC); + SetWindowLongPtr(b->hWnd, GWLP_WNDPROC, (LONG_PTR)newEditProc); +#ifdef _OLDCODE + oldEditProc = (XWNDPROC)GetWindowLongPtr(b->hWnd, GWL_WNDPROC ); SetWindowLong( b->hWnd, GWL_WNDPROC, (LONG)newEditProc ); +#endif // WIN64 if (b->valueP) { - SendMessage( b->hWnd, WM_SETTEXT, 0, (DWORD)b->valueP ); + SendMessage( b->hWnd, WM_SETTEXT, (WPARAM)0, (LPARAM)b->valueP ); } - SendMessage( b->hWnd, EM_SETMODIFY, FALSE, 0L ); + SendMessage( b->hWnd, EM_SETMODIFY, (WPARAM)FALSE, (LPARAM)0 ); if ( !mswThickFont ) - SendMessage( b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L ); + SendMessage( b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, (LPARAM)0 ); GetWindowRect( b->hWnd, &rect ); b->w = rect.right - rect.left; b->h = rect.bottom - rect.top; @@ -466,12 +461,12 @@ static callBacks_t integerCallBacks = { wInteger_p wIntegerCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - POS_T width, + wWinPix_t width, long low, long high, long *valueP, @@ -504,10 +499,7 @@ wInteger_p wIntegerCreate( return b; } -#ifdef CONTROL3D - Ctl3dSubclassCtl( b->hWnd); -#endif - + newEditProc = MakeProcInstance( (XWNDPROC)pushEdit, mswHInst ); oldEditProc = (XWNDPROC)GetWindowLong(b->hWnd, GWL_WNDPROC ); SetWindowLong( b->hWnd, GWL_WNDPROC, (LONG)newEditProc ); @@ -690,12 +682,12 @@ static callBacks_t floatCallBacks = { wFloat_p wFloatCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - POS_T width, + wWinPix_t width, double low, double high, double *valueP, @@ -728,9 +720,6 @@ wFloat_p wFloatCreate( return b; } -#ifdef CONTROL3D - Ctl3dSubclassCtl( b->hWnd); -#endif newEditProc = MakeProcInstance( (XWNDPROC)pushEdit, mswHInst ); oldEditProc = (XWNDPROC)GetWindowLong(b->hWnd, GWL_WNDPROC ); diff --git a/app/wlib/mswlib/mswint.h b/app/wlib/mswlib/mswint.h index e560053..5fd5da9 100644 --- a/app/wlib/mswlib/mswint.h +++ b/app/wlib/mswlib/mswint.h @@ -1,15 +1,31 @@ +/** \file mswint.h + * Windows specific definitions and prototypes for wlib + */ + +/* XTrackCAD - Model Railroad CAD + * Copyright (C) 2005 Dave Bullis + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + #include "wlib.h" #include "mswlib.h" -//#include "dynarr.h" -#include "common.h" -#ifndef WIN32 -/*#define CONTROL3D*/ -#endif -#include "stdio.h" +#include "dynarr.h" -#ifdef CONTROL3D -#include "ctl3d.h" -#endif +#include +#include #ifdef WIN32 #ifdef FAR @@ -40,39 +56,39 @@ #endif #ifndef CAST_AWAY_CONST - #define CAST_AWAY_CONST (char *) +#define CAST_AWAY_CONST (char *) #endif #define BOOL_T wBool_t -#define POS_T wPos_t #define INDEX_T wIndex_t #define INTEGER_T wInteger_t typedef enum { - W_MAIN, W_POPUP, - B_BUTTON, B_STRING, B_INTEGER, B_FLOAT, - B_LIST, B_DROPLIST, B_COMBOLIST, - B_RADIO, B_TOGGLE, - B_DRAW, B_TEXT, B_MESSAGE, B_LINES, - B_MENUITEM, B_CHOICEITEM, B_BOX, - B_BITMAP } wType_e; - -typedef void (*repaintProcCallback_p)( HWND, wControl_p ); -typedef void (*doneProcCallback_p)( wControl_p b ); -typedef LRESULT (*messageCallback_p)( wControl_p, HWND, UINT, WPARAM, LPARAM ); -typedef void (*setTriggerCallback_p)( wControl_p b ); -typedef void (*setBusyCallback_p)( wControl_p, BOOL_T ); -typedef void (*showCallback_p)( wControl_p, BOOL_T ); -typedef void (*setPosCallback_p)( wControl_p, wPos_t, wPos_t ); + W_MAIN, W_POPUP, + B_BUTTON, B_STRING, B_INTEGER, B_FLOAT, + B_LIST, B_DROPLIST, B_COMBOLIST, + B_RADIO, B_TOGGLE, + B_DRAW, B_TEXT, B_MESSAGE, B_LINES, + B_MENUITEM, B_CHOICEITEM, B_BOX, + B_BITMAP +} wType_e; + +typedef void ( *repaintProcCallback_p )( HWND, wControl_p ); +typedef void ( *doneProcCallback_p )( wControl_p b ); +typedef LRESULT( *messageCallback_p )( wControl_p, HWND, UINT, WPARAM, LPARAM ); +typedef void ( *setTriggerCallback_p )( wControl_p b ); +typedef void ( *setBusyCallback_p )( wControl_p, BOOL_T ); +typedef void ( *showCallback_p )( wControl_p, BOOL_T ); +typedef void ( *setPosCallback_p )( wControl_p, wWinPix_t, wWinPix_t ); typedef struct { - repaintProcCallback_p repaintProc; - doneProcCallback_p doneProc; - messageCallback_p messageProc; - setBusyCallback_p setBusyProc; - showCallback_p showProc; - setPosCallback_p setPosProc; - } callBacks_t; + repaintProcCallback_p repaintProc; + doneProcCallback_p doneProc; + messageCallback_p messageProc; + setBusyCallback_p setBusyProc; + showCallback_p showProc; + setPosCallback_p setPosProc; +} callBacks_t; #define CALLBACK_CNT (B_BOX+1) extern callBacks_t *mswCallBacks[CALLBACK_CNT]; @@ -83,67 +99,68 @@ extern callBacks_t *mswCallBacks[CALLBACK_CNT]; wControl_p next; \ wControl_p synonym; \ wWin_p parent; \ - POS_T x, y; \ - POS_T w, h; \ + wWinPix_t x, y; \ + wWinPix_t w, h; \ long option; \ - POS_T labelX, labelY; \ + wWinPix_t labelX, labelY; \ const char * labelStr; \ const char * helpStr; \ const char * tipStr; \ + char * errStr; \ HWND hWnd; \ void * data;\ wControl_p focusChainNext; \ - wBool_t shown; + wBool_t shown; \ + wBool_t hilite; struct wControl_t { - WOBJ_COMMON - }; + WOBJ_COMMON +}; typedef struct { - unsigned key; - wDrawColor color; - } wIconColorMap_t; + unsigned key; + wDrawColor color; +} wIconColorMap_t; #define mswIcon_bitmap (1) #define mswIcon_pixmap (2) struct wIcon_t { - int type; - wPos_t w; /**< width */ - wPos_t h; /**< height */ - wDrawColor color; - int colorcnt; /**< number of colors */ - RGBQUAD *colormap; - char *pixels; /**< pointer to pixel information */ - int transparent; /**< index of transparent color */ - }; + int type; + wWinPix_t w; /**< width */ + wWinPix_t h; /**< height */ + wDrawColor color; + int colorcnt; /**< number of colors */ + RGBQUAD *colormap; + char *pixels; /**< pointer to pixel information */ + int transparent; /**< index of transparent color */ +}; struct wDraw_t { - WOBJ_COMMON - HDC hDc; - double wFactor; - double hFactor; - double DPI; - wDrawRedrawCallBack_p drawRepaint; - wDrawActionCallBack_p action; - HBITMAP hBmMain; - HBITMAP hBmTemp; - HBITMAP hBmOld; - HPEN hPen; - HBRUSH hBrush; - wDraw_p drawNext; - wBool_t hasPalette; - int paletteClock; - HBITMAP hBmBackup; - HDC hDcBackup; - HBITMAP hBmBackupOld; - void *background; - wBool_t bTempMode; - wBool_t bCopiedMain; - - wPos_t lastX; - wPos_t lastY; - - }; + WOBJ_COMMON + HDC hDc; + double wFactor; + double hFactor; + double DPI; + wDrawRedrawCallBack_p drawRepaint; + wDrawActionCallBack_p action; + HBITMAP hBmMain; + HBITMAP hBmTemp; + HBITMAP hBmOld; + HPEN hPen; + HBRUSH hBrush; + wDraw_p drawNext; + wBool_t hasPalette; + int paletteClock; + HBITMAP hBmBackup; + HDC hDcBackup; + HBITMAP hBmBackupOld; + FIBITMAP *background; + wBool_t bTempMode; + wBool_t bCopiedMain; + wDrawPix_t lastX; + wDrawPix_t lastY; + +}; extern HINSTANCE mswHInst; extern char mswTmpBuff[1024]; @@ -168,7 +185,7 @@ void mswResize( wWin_p ); wControl_p mswMapIndex( INDEX_T ); void mswButtPush( wControl_p ); void * mswAlloc( wWin_p, wType_e, const char *, int, void *, int * ); -void mswComputePos( wControl_p, wPos_t, wPos_t ); +void mswComputePos( wControl_p, wWinPix_t, wWinPix_t ); void mswAddButton( wControl_p, BOOL_T, const char * ); void mswRepaintLabel( HWND, wControl_p ); int mswRegister( wControl_p ); @@ -178,7 +195,7 @@ void mswSetFocus( wControl_p ); void mswSetTrigger( wControl_p, setTriggerCallback_p ); void mswMenuPush( wControl_p ); void mswCreateCheckBitmaps( void ); -long FAR PASCAL XEXPORT mswDrawPush( HWND, UINT, UINT, LONG ); +LRESULT FAR PASCAL XEXPORT mswDrawPush( HWND, UINT, WPARAM, LPARAM ); #ifdef WIN32 DWORD GetTextExtent( HDC, CHAR *, UINT ); #endif @@ -186,7 +203,7 @@ void mswRedrawAll( void ); void mswRepaintAll( void ); HDC mswGetPrinterDC( void ); int mswMenuAccelerator( wWin_p, long ); -void mswMenuMove( wMenu_p, wPos_t, wPos_t ); +void mswMenuMove( wMenu_p, wWinPix_t, wWinPix_t ); void mswRegisterBitMap( HBITMAP ); void mswFontInit( void ); void mswInitColorPalette( void ); @@ -202,5 +219,5 @@ void deleteBitmaps( void ); void mswDrawIcon( HDC, int, int, wIcon_p, int, COLORREF, COLORREF ); /* gwin32.c*/ -char *g_win32_getlocale (void); +char *g_win32_getlocale( void ); diff --git a/app/wlib/mswlib/mswlines.c b/app/wlib/mswlib/mswlines.c index be1330d..f6bb574 100644 --- a/app/wlib/mswlib/mswlines.c +++ b/app/wlib/mswlib/mswlines.c @@ -58,7 +58,7 @@ wLine_p wLineCreate( { wLine_p b; wLines_p lp; - POS_T minX, maxX, minY, maxY; + wWinPix_t minX, maxX, minY, maxY; int index; if (count <= 0) diff --git a/app/wlib/mswlib/mswlist.c b/app/wlib/mswlib/mswlist.c index 95ecec3..836f4f0 100644 --- a/app/wlib/mswlib/mswlist.c +++ b/app/wlib/mswlib/mswlist.c @@ -27,16 +27,16 @@ struct wList_t { wListCallBack_p action; wBool_t editable; int colCnt; - wPos_t * colWidths; + wWinPix_t * colWidths; wBool_t * colRightJust; const char * * colTitles; - wPos_t maxWidth; - wPos_t scrollPos; + wWinPix_t maxWidth; + wWinPix_t scrollPos; HWND hScrollWnd; - wPos_t scrollH; - wPos_t dragPos; + wWinPix_t scrollH; + wWinPix_t dragPos; int dragCol; - wPos_t dragColWidth; + wWinPix_t dragColWidth; }; @@ -58,18 +58,18 @@ void wListClear( msg = LB_RESETCONTENT; else msg = CB_RESETCONTENT; - SendMessage( b->hWnd, msg, 0, 0 ); + SendMessage( b->hWnd, msg, (WPARAM)0, (LPARAM)0 ); b->last = -1; b->count = 0; } -void wListSetSize( wList_p bl, wPos_t w, wPos_t h ) +void wListSetSize( wList_p bl, wWinPix_t w, wWinPix_t h ) { int rc; RECT rect; - wPos_t y; + wWinPix_t y; bl->w = w; bl->h = h; @@ -109,24 +109,24 @@ void wListSetIndex( return; if ( bl->type==B_LIST && (bl->option&BL_MANY) != 0 ) { if ( bl->last != -1 ) - SendMessage( bl->hWnd, LB_SETSEL, 0, MAKELPARAM(bl->last,0) ); + SendMessage( bl->hWnd, LB_SETSEL, (WPARAM)0, (LPARAM)bl->last ); if ( index >= 0 ) - SendMessage( bl->hWnd, LB_SETSEL, 1, MAKELPARAM(index, 0) ); + SendMessage( bl->hWnd, LB_SETSEL, (WPARAM)1, (LPARAM)index ); } else { SendMessage( bl->hWnd, - bl->type==B_LIST?LB_SETCURSEL:CB_SETCURSEL, index, 0 ); + bl->type==B_LIST?LB_SETCURSEL:CB_SETCURSEL, (WPARAM)index, (LPARAM)0 ); } if ( bl->last >= 0 ) { ldp = (listData*)SendMessage( bl->hWnd, (bl->type==B_LIST?LB_GETITEMDATA:CB_GETITEMDATA), - bl->last, 0L ); + (WPARAM)bl->last, (LPARAM)0 ); if ( ldp && ldp!=(void*)LB_ERR ) ldp->selected = FALSE; } if ( index >= 0 ) { ldp = (listData*)SendMessage( bl->hWnd, (bl->type==B_LIST?LB_GETITEMDATA:CB_GETITEMDATA), - index, 0L ); + (WPARAM)index, (LPARAM)0 ); if ( ldp && ldp!=(void*)LB_ERR ) ldp->selected = TRUE; } @@ -164,7 +164,7 @@ void wListSetValue( const char * val ) { if ( bl->type == B_DROPLIST ) { - SendMessage( bl->hWnd, WM_SETTEXT, 0, (DWORD)(LPSTR)val ); + SendMessage( bl->hWnd, WM_SETTEXT, (WPARAM)0, (LPARAM)val ); bl->last = -1; } } @@ -179,8 +179,8 @@ wIndex_t wListFindValue( wListGetCount(bl); for ( inx = 0; inx < bl->count ; inx++ ) { cnt = (int)SendMessage( bl->hWnd, - (bl->type==B_LIST?LB_GETTEXT:CB_GETLBTEXT), inx, - (DWORD)(LPSTR)mswTmpBuff ); + (bl->type==B_LIST?LB_GETTEXT:CB_GETLBTEXT), (WPARAM)inx, + (LPARAM)mswTmpBuff ); mswTmpBuff[cnt] = '\0'; if ( strcmp( val, mswTmpBuff ) == 0 ) return inx; @@ -212,7 +212,7 @@ wIndex_t wListGetValues( msg = CB_GETLBTEXT; } } - cnt = (int)SendMessage( bl->hWnd, msg, inx, (DWORD)(LPSTR)mswTmpBuff ); + cnt = (int)SendMessage( bl->hWnd, msg, (WPARAM)inx, (LPARAM)mswTmpBuff ); mswTmpBuff[cnt] = '\0'; if (s) { strncpy(s, mswTmpBuff, siz); @@ -221,7 +221,7 @@ wIndex_t wListGetValues( if (bl->last >= 0) { ldp = (listData*)SendMessage( bl->hWnd, (bl->type==B_LIST?LB_GETITEMDATA:CB_GETITEMDATA), - bl->last, 0L ); + (WPARAM)bl->last, (LPARAM)0 ); if ( ldp==(listData*)LB_ERR ) ldp = NULL; } else { @@ -252,24 +252,24 @@ wBool_t wListSetValues( curSel = (WORD)SendMessage( b->hWnd, (UINT)b->type==B_LIST?LB_GETCURSEL:CB_GETCURSEL, (WPARAM)0, - (DWORD)0L ); + (LPARAM)0 ); SendMessage( b->hWnd, (UINT)b->type==B_LIST?LB_DELETESTRING:CB_DELETESTRING, (WPARAM)inx, - (DWORD)0L ); + (LPARAM)0 ); inx = (wIndex_t)SendMessage( b->hWnd, (UINT)b->type==B_LIST?LB_INSERTSTRING:CB_INSERTSTRING, (WPARAM)inx, - (DWORD)(LPSTR)labelStr ); + (LPARAM)labelStr ); SendMessage( b->hWnd, (UINT)b->type==B_LIST?LB_SETITEMDATA:CB_SETITEMDATA, (WPARAM)inx, - (DWORD)ldp ); + (LPARAM)ldp ); if ( (b->option&BL_MANY) == 0 && curSel == (WORD)inx) SendMessage( b->hWnd, (UINT)b->type==B_LIST?LB_SETCURSEL:CB_SETCURSEL, (WPARAM)inx, - (DWORD)0L ); + (LPARAM)0 ); /*if (b->option&BL_ICON)*/ InvalidateRect( b->hWnd, NULL, FALSE ); return TRUE; @@ -283,7 +283,7 @@ void wListDelete( SendMessage( b->hWnd, (UINT)b->type==B_LIST?LB_DELETESTRING:CB_DELETESTRING, (WPARAM)inx, - (DWORD)0L ); + (LPARAM)0 ); } @@ -303,19 +303,19 @@ void wListSelectAll( wList_p bl ) SendMessage( bl->hWnd, LB_SETSEL, (WPARAM)TRUE, - (DWORD)-1L ); + (LPARAM)-1 ); // and synchronize the internal data structures wListGetCount(bl); for ( inx=0; inxcount; inx++ ) { ldp = (listData*)SendMessage( bl->hWnd, (bl->type==B_LIST?LB_GETITEMDATA:CB_GETITEMDATA), - inx, 0L ); + (WPARAM)inx, (LPARAM)0 ); ldp->selected = TRUE; SendMessage( bl->hWnd, (UINT)bl->type==B_LIST?LB_SETITEMDATA:CB_SETITEMDATA, (WPARAM)inx, - (DWORD)ldp ); + (LPARAM)ldp ); } } @@ -323,7 +323,7 @@ void wListSelectAll( wList_p bl ) wIndex_t wListGetCount( wList_p bl ) { - bl->count = (int)SendMessage( bl->hWnd, (UINT)bl->type==B_LIST?LB_GETCOUNT:CB_GETCOUNT, 0, 0L ); + bl->count = (int)SendMessage( bl->hWnd, (UINT)bl->type==B_LIST?LB_GETCOUNT:CB_GETCOUNT, (WPARAM)0, (LPARAM)0 ); return bl->count; } @@ -337,7 +337,7 @@ void * wListGetItemContext( if ( inx < 0 || inx >= bl->count ) return NULL; ldp = (listData*)SendMessage( bl->hWnd, (bl->type==B_LIST?LB_GETITEMDATA:CB_GETITEMDATA), - inx, 0L ); + (WPARAM)inx, (LPARAM)0 ); return ((ldp&&ldp!=(void*)LB_ERR)?ldp->itemContext:NULL); } @@ -351,7 +351,7 @@ wBool_t wListGetItemSelected( if ( inx < 0 || inx >= bl->count ) return FALSE; ldp = (listData*)SendMessage( bl->hWnd, (bl->type==B_LIST?LB_GETITEMDATA:CB_GETITEMDATA), - inx, 0L ); + (WPARAM)inx, (LPARAM)0 ); return ((ldp&&ldp!=(void*)LB_ERR)?ldp->selected:FALSE); } @@ -389,18 +389,18 @@ wIndex_t wListAddValue( b->hWnd, (UINT)b->type==B_LIST?LB_ADDSTRING:CB_ADDSTRING, (WPARAM)0, - (DWORD)value ); + (LPARAM)value ); if (nindex == 0) { SendMessage( b->hWnd, (UINT)b->type==B_LIST?LB_SETCURSEL:CB_SETCURSEL, (WPARAM)nindex, - (DWORD)0 ); + (LPARAM)0 ); b->last = 0; } SendMessage( b->hWnd, (UINT)b->type==B_LIST?LB_SETITEMDATA:CB_SETITEMDATA, (WPARAM)nindex, - (DWORD)ldp ); + (LPARAM)ldp ); return nindex; } @@ -408,7 +408,7 @@ wIndex_t wListAddValue( int wListGetColumnWidths( wList_p bl, int colCnt, - wPos_t * colWidths ) + wWinPix_t * colWidths ) { wIndex_t inx; @@ -454,11 +454,11 @@ static void listShow( static void listSetPos( wControl_p b, - wPos_t x, - wPos_t y ) + wWinPix_t x, + wWinPix_t y ) { wList_p bl = (wList_p)b; - wPos_t x1, y1; + wWinPix_t x1, y1; RECT rect; bl->x = x1 = x; @@ -492,7 +492,7 @@ static void listRepaintLabel( const char * * title; int inx; int start; - wPos_t colWidth; + wWinPix_t colWidth; mswRepaintLabel( hWnd, b ); if ( bl->colTitles == NULL ) @@ -538,7 +538,7 @@ static void listRepaintLabel( rc.right = bl->x+bl->w-1; ExtTextOut( hDc, start+1, rc.top+0, ETO_CLIPPED|ETO_OPAQUE, &rc, - *title, strlen(*title), NULL ); + *title, (int)(strlen(*title)), NULL ); if ( start-bl->x >= 3 ) { SelectObject( hDc, hPen1 ); MoveTo( hDc, start-1, rc.top-1 ); @@ -589,7 +589,7 @@ LRESULT listProc( { wList_p bl = (wList_p)b; int cnt, inx, selected; - long len; + size_t len; listData * ldp; HDC hDc; LPMEASUREITEMSTRUCT lpmis; @@ -597,7 +597,8 @@ LRESULT listProc( LPDRAWITEMSTRUCT lpdis; RECT rc, rc1; char * cp0, * cp1; - wPos_t colWidth, x; + wWinPix_t x; + int colWidth; int nPos; HFONT hFont; HPEN hPen; @@ -621,14 +622,14 @@ LRESULT listProc( if ( (bl->option&BL_MANY) ) { wListGetCount(bl); for ( inx=0; inxcount; inx++ ) { - ldp = (listData*)SendMessage( bl->hWnd, LB_GETITEMDATA, inx, 0L ); + ldp = (listData*)SendMessage( bl->hWnd, LB_GETITEMDATA, (WPARAM)inx, (LPARAM)0 ); if ( ldp != NULL && ldp != (void*)LB_ERR ) { - selected = ((long)SendMessage( bl->hWnd, LB_GETSEL, inx, 0L ) != 0L ); + selected = ((long)SendMessage( bl->hWnd, LB_GETSEL, (WPARAM)inx, (LPARAM)0 ) != 0L ); if ( selected != ldp->selected ) { ldp->selected = selected; if ( selected ) { bl->last = inx; - cnt = (int)SendMessage( bl->hWnd, LB_GETTEXT, bl->last, (DWORD)(LPSTR)mswTmpBuff ); + cnt = (int)SendMessage( bl->hWnd, LB_GETTEXT, (WPARAM)bl->last, (LPARAM)mswTmpBuff ); mswTmpBuff[cnt] = '\0'; } else { mswTmpBuff[0] = '\0'; @@ -641,13 +642,13 @@ LRESULT listProc( } } } else { - bl->last = (int)SendMessage( bl->hWnd, LB_GETCURSEL, 0, 0L ); - cnt = (int)SendMessage( bl->hWnd, LB_GETTEXT, bl->last, - (DWORD)(LPSTR)mswTmpBuff ); + bl->last = (int)SendMessage( bl->hWnd, LB_GETCURSEL, (WPARAM)0, (LPARAM)0 ); + cnt = (int)SendMessage( bl->hWnd, LB_GETTEXT, (WPARAM)bl->last, + (LPARAM)mswTmpBuff ); mswTmpBuff[cnt] = '\0'; if (bl->action) { ldp = (listData*)SendMessage( bl->hWnd, LB_GETITEMDATA, - bl->last, 0L ); + (WPARAM)bl->last, (LPARAM)0 ); bl->action( bl->last, mswTmpBuff, 1, bl->data, ((bl->last>=0&&ldp&&ldp!=(void*)LB_ERR)?ldp->itemContext:NULL) ); } @@ -659,8 +660,8 @@ LRESULT listProc( case LBN_KILLFOCUS: if ( ( bl->option&BL_MANY ) == 0 && - bl->last != (int)SendMessage( bl->hWnd, LB_GETCURSEL, 0, 0L ) ) - (void)SendMessage( bl->hWnd, LB_SETCURSEL, bl->last, 0L ); + bl->last != (int)SendMessage( bl->hWnd, LB_GETCURSEL, (WPARAM)0, (LPARAM)0 ) ) + (void)SendMessage( bl->hWnd, LB_SETCURSEL, (WPARAM)bl->last, (LPARAM)0 ); break; } break; @@ -677,14 +678,14 @@ LRESULT listProc( break; case CBN_CLOSEUP: - bl->last = (int)SendMessage( bl->hWnd, CB_GETCURSEL, 0, 0L ); + bl->last = (int)SendMessage( bl->hWnd, CB_GETCURSEL, (WPARAM)0, (LPARAM)0 ); if (bl->last < 0) break; if (bl->action) { - cnt = (int)SendMessage( bl->hWnd, CB_GETLBTEXT, bl->last, - (DWORD)(LPSTR)mswTmpBuff ); + cnt = (int)SendMessage( bl->hWnd, CB_GETLBTEXT, + (WPARAM)bl->last, (LPARAM)mswTmpBuff ); ldp = (listData*)SendMessage( bl->hWnd, CB_GETITEMDATA, - bl->last, 0L ); + (WPARAM)bl->last, (LPARAM)0 ); mswTmpBuff[cnt] = '\0'; bl->action( bl->last, mswTmpBuff, 1, bl->data, ((bl->last>=0&&ldp&&ldp!=(void*)LB_ERR)?ldp->itemContext:NULL) ); @@ -697,9 +698,9 @@ LRESULT listProc( break; case CBN_KILLFOCUS: - inx = (int)SendMessage( bl->hWnd, CB_GETCURSEL, 0, 0L ); + inx = (int)SendMessage( bl->hWnd, CB_GETCURSEL, (WPARAM)0, (LPARAM)0 ); if ( bl->last != inx ) - (void)SendMessage( bl->hWnd, CB_SETCURSEL, bl->last, 0L ); + (void)SendMessage( bl->hWnd, CB_SETCURSEL, (WPARAM)bl->last, (LPARAM)0 ); break; case CBN_DROPDOWN: @@ -709,8 +710,8 @@ LRESULT listProc( case CBN_EDITCHANGE: bl->last = -1; if (bl->action) { - cnt = (int)SendMessage( bl->hWnd, WM_GETTEXT, sizeof mswTmpBuff, - (DWORD)(LPSTR)mswTmpBuff ); + cnt = (int)SendMessage( bl->hWnd, WM_GETTEXT, (WPARAM)sizeof mswTmpBuff, + (LPARAM)mswTmpBuff ); mswTmpBuff[cnt] = '\0'; bl->action( -1, mswTmpBuff, 1, bl->data, NULL ); } @@ -740,14 +741,14 @@ LRESULT listProc( } ldp = (listData*)SendMessage( bl->hWnd, (bl->type==B_LIST?LB_GETITEMDATA:CB_GETITEMDATA), - lpdis->itemID, 0L ); + (WPARAM)lpdis->itemID, (LPARAM)0); rc = lpdis->rcItem; if (lpdis->itemAction & (ODA_DRAWENTIRE|ODA_SELECT|ODA_FOCUS)) { if( bl->type == B_LIST ) hFont = SelectObject( lpdis->hDC, mswLabelFont ); cnt = (int)SendMessage( lpdis->hwndItem, (bl->type==B_LIST?LB_GETTEXT:CB_GETLBTEXT), - lpdis->itemID, (LONG)(LPSTR)mswTmpBuff ); + (WPARAM)lpdis->itemID, (LPARAM)mswTmpBuff ); mswTmpBuff[cnt] = '\0'; if ( lpdis->itemState & ODS_SELECTED ) { SetTextColor( lpdis->hDC, GetSysColor( COLOR_HIGHLIGHTTEXT ) ); @@ -809,7 +810,7 @@ LRESULT listProc( } if ( bl->type == B_LIST) SelectObject( lpdis->hDC, hFont ); - return TRUE; + return (LRESULT)TRUE; } break; @@ -817,17 +818,17 @@ LRESULT listProc( case WM_HSCROLL: len = ((long)bl->maxWidth)-((long)bl->w); if ( len <= 0 ) - return 0; + return (LRESULT)0; switch ( WSCROLL_PARAM_CODE ) { case SB_LEFT: if ( bl->scrollPos == 0 ) - return 0; + return (LRESULT)0; bl->scrollPos = 0; break; case SB_LINELEFT: case SB_PAGELEFT: if ( bl->scrollPos == 0 ) - return 0; + return (LRESULT)0; for ( inx=colWidth=0; inxcolCnt; inx++ ) { if ( colWidth+bl->colWidths[inx] >= bl->scrollPos ) { bl->scrollPos = colWidth; @@ -839,7 +840,7 @@ LRESULT listProc( case SB_LINERIGHT: case SB_PAGERIGHT: if ( bl->scrollPos >= len ) - return 0; + return (LRESULT)0; for ( inx=colWidth=0; inxcolCnt; inx++ ) { if ( colWidth >= bl->scrollPos ) { bl->scrollPos = colWidth+bl->colWidths[inx]; @@ -850,17 +851,17 @@ LRESULT listProc( break; case SB_RIGHT: if ( bl->scrollPos >= len ) - return 0; + return (LRESULT)0; bl->scrollPos = (int)len; break; case SB_THUMBTRACK: - return 0; + return (LRESULT)0; case SB_THUMBPOSITION: nPos = (int)WSCROLL_PARAM_NPOS; bl->scrollPos = (int)(len*nPos/100); break; case SB_ENDSCROLL: - return 0; + return (LRESULT)0; } if ( bl->scrollPos > len ) bl->scrollPos = (int)len; if ( bl->scrollPos < 0 ) bl->scrollPos = 0; @@ -868,7 +869,7 @@ LRESULT listProc( SetScrollPos( bl->hScrollWnd, SB_CTL, nPos, TRUE ); InvalidateRect( bl->hWnd, NULL, FALSE ); listRepaintLabel( ((wControl_p)(bl->parent))->hWnd, (wControl_p)bl ); - return 0; + return (LRESULT)0; case WM_LBUTTONDOWN: if ( bl->type != B_LIST ) @@ -886,7 +887,7 @@ LRESULT listProc( } if ( bl->dragCol >= 0 ) bl->dragColWidth = bl->colWidths[inx]; - return 0L; + return (LRESULT)0; #ifdef LATER case WM_MOUSEMOVE: @@ -902,7 +903,7 @@ LRESULT listProc( if ( x <= 0 ) break; } - return 0L; + return (LRESULT)0; #endif case WM_MOUSEMOVE: @@ -933,26 +934,26 @@ LRESULT listProc( } InvalidateRect( bl->hWnd, NULL, FALSE ); listRepaintLabel( ((wControl_p)(bl->parent))->hWnd, (wControl_p)bl ); - return 0L; + return (LRESULT)0; } return DefWindowProc( hWnd, message, wParam, lParam ); } -long FAR PASCAL _export pushList( +LRESULT FAR PASCAL _export pushList( HWND hWnd, UINT message, - UINT wParam, - LONG lParam ) + WPARAM wParam, + LPARAM lParam ) { /* Catch and cause focus to leave control */ -#ifdef WIN32 + wIndex_t inx = (wIndex_t)GetWindowLongPtr(hWnd, GWL_ID); + wControl_p b = mswMapIndex(inx); +#ifdef OLDCODE long inx = GetWindowLong( hWnd, GWL_ID ); -#else - short inx = GetWindowWord( hWnd, GWW_ID ); -#endif wControl_p b = mswMapIndex( inx ); +#endif switch (message) { case WM_CHAR: @@ -966,7 +967,7 @@ long FAR PASCAL _export pushList( wParam, lParam ); /*SendMessage( ((wControl_p)(b->parent))->hWnd, WM_COMMAND, inx, MAKELONG( hWnd, EN_KILLFOCUS ) );*/ - return 0L; + return (LRESULT)0; } } break; @@ -974,18 +975,14 @@ long FAR PASCAL _export pushList( return CallWindowProc( oldListProc, hWnd, message, wParam, lParam ); } -long FAR PASCAL _export pushCombo( +LRESULT FAR PASCAL _export pushCombo( HWND hWnd, UINT message, - UINT wParam, - LONG lParam ) + WPARAM wParam, + LPARAM lParam ) { /* Catch and cause focus to leave control */ -#ifdef WIN32 - long inx = GetWindowLong( hWnd, GWL_ID ); -#else - short inx = GetWindowWord( hWnd, GWW_ID ); -#endif + wIndex_t inx = (wIndex_t)GetWindowLongPtr( hWnd, GWL_ID ); wControl_p b = mswMapIndex( inx ); switch (message) { @@ -1000,7 +997,7 @@ long FAR PASCAL _export pushCombo( wParam, lParam ); /*SendMessage( ((wControl_p)(b->parent))->hWnd, WM_COMMAND, inx, MAKELONG( hWnd, EN_KILLFOCUS ) );*/ - return 0L; + return (LRESULT)0; } } break; @@ -1022,13 +1019,13 @@ static wList_p listCreate( const char *className, long style, wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, long number, - POS_T width, + wWinPix_t width, long *valueP, wListCallBack_p action, void *data, @@ -1056,16 +1053,12 @@ static wList_p listCreate( b->hWnd = CreateWindow( className, NULL, style | WS_CHILD | WS_VISIBLE | mswGetBaseStyle(parent), b->x, b->y, width, LIST_HEIGHT*(int)number, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); + ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL ); if (b->hWnd == NULL) { mswFail("CreateWindow(LIST)"); return b; } -#ifdef CONTROL3D - Ctl3dSubclassCtl( b->hWnd ); -#endif - GetWindowRect( b->hWnd, &rect ); b->w = rect.right - rect.left; b->h = rect.bottom - rect.top; @@ -1078,34 +1071,43 @@ static wList_p listCreate( if (addFocus) { mswChainFocus( (wControl_p)b ); if (b->type == B_LIST) { - newListProc = MakeProcInstance( (XWNDPROC)pushList, mswHInst ); - oldListProc = (XWNDPROC)GetWindowLong( b->hWnd, GWL_WNDPROC ); - SetWindowLong( b->hWnd, GWL_WNDPROC, (LONG)newListProc ); - } else { - newComboProc = MakeProcInstance( (XWNDPROC)pushCombo, mswHInst ); - oldComboProc = (XWNDPROC)GetWindowLong( b->hWnd, GWL_WNDPROC ); - SetWindowLong( b->hWnd, GWL_WNDPROC, (LONG)newComboProc ); + newListProc = MakeProcInstance((XWNDPROC)pushList, mswHInst); + oldListProc = (XWNDPROC)GetWindowLongPtr(b->hWnd, GWLP_WNDPROC); + SetWindowLongPtr(b->hWnd, GWLP_WNDPROC, (LONG_PTR)newListProc); +#ifdef _OLDCODE + oldListProc = (XWNDPROC)GetWindowLong(b->hWnd, GWL_WNDPROC); + SetWindowLong(b->hWnd, GWL_WNDPROC, (LONG)newListProc); +#endif + } + else { + newComboProc = MakeProcInstance((XWNDPROC)pushCombo, mswHInst); + oldComboProc = (XWNDPROC)GetWindowLongPtr(b->hWnd, GWLP_WNDPROC); + SetWindowLongPtr(b->hWnd, GWLP_WNDPROC, (LONG_PTR)newComboProc); +#ifdef _OLDCODE + oldComboProc = (XWNDPROC)GetWindowLong(b->hWnd, GWL_WNDPROC); + SetWindowLong(b->hWnd, GWL_WNDPROC, (LONG)newComboProc); +#endif } } if ( indexR ) *indexR = index; if ( !mswThickFont ) - SendMessage( b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L ); + SendMessage( b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, (LPARAM)0 ); return b; } wList_p wListCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, long number, - POS_T width, + wWinPix_t width, int colCnt, - wPos_t * colWidths, + wWinPix_t * colWidths, wBool_t * colRightJust, const char * * colTitles, long *valueP, @@ -1138,7 +1140,7 @@ wList_p wListCreate( } if ( colCnt > 1 ) { bl->colCnt = colCnt; - bl->colWidths = (int*)malloc( colCnt * sizeof *bl->colWidths ); + bl->colWidths = (wWinPix_t*)malloc( colCnt * sizeof *bl->colWidths ); bl->colRightJust = (wBool_t*)malloc( colCnt * sizeof *bl->colRightJust ); bl->colTitles = colTitles; bl->maxWidth = 0; @@ -1150,7 +1152,7 @@ wList_p wListCreate( bl->hScrollWnd = CreateWindow( "ScrollBar", NULL, SBS_HORZ | SBS_BOTTOMALIGN | WS_CHILD | WS_VISIBLE | mswGetBaseStyle(parent), bl->x, bl->y, width, CW_USEDEFAULT, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); + ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL ); if (bl->hScrollWnd == NULL) mswFail("CreateWindow(LISTSCROLL)"); SetScrollRange( bl->hScrollWnd, SB_CTL, 0, 100, TRUE ); @@ -1163,13 +1165,13 @@ wList_p wListCreate( wList_p wDropListCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, long number, - POS_T width, + wWinPix_t width, long *valueP, wListCallBack_p action, void *data ) @@ -1189,13 +1191,13 @@ wList_p wDropListCreate( wList_p wComboListCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, long number, - POS_T width, + wWinPix_t width, long *valueP, wListCallBack_p action, void *data ) diff --git a/app/wlib/mswlib/mswmenu.c b/app/wlib/mswlib/mswmenu.c index d56e24d..9e36c8b 100644 --- a/app/wlib/mswlib/mswmenu.c +++ b/app/wlib/mswlib/mswmenu.c @@ -31,7 +31,6 @@ #include #include #include -#include "misc.h" #include "mswint.h" #include "i18n.h" @@ -94,7 +93,7 @@ struct wMenuRadio_t { struct wMenuToggle_t { MOBJ_COMMON wMenu_p mparent; - wMenuToggleCallBack_p action; + wMenuCallBack_p action; long acclKey; wBool_t enabled; }; @@ -174,7 +173,7 @@ static LRESULT menuPush( set = !set; wMenuToggleSet((wMenuToggle_p)m,set); if (((wMenuToggle_p)m)->action) - ((wMenuToggle_p)m)->action(set, ((wMenuPush_p)m)->data); + ((wMenuToggle_p)m)->action(((wMenuPush_p)m)->data); break; case M_LISTITEM: if (((wMenuListItem_p)m)->action) @@ -185,7 +184,7 @@ static LRESULT menuPush( ((wMenuRadio_p)m)->action(((wMenuRadio_p)m)->data); break; } - return 0L; + return (LRESULT)0; } if ( (m->parentMenu)->traceFunc ) { (m->parentMenu)->traceFunc( m->parentMenu, m->labelStr, ((wMenu_p)m->parentMenu)->traceData ); @@ -261,7 +260,7 @@ typedef struct { wAccelKey_e key; void * data; } acclTable_t, *acclTable_p; -dynArr_t acclTable_da; +static dynArr_t acclTable_da; #define acclTable(N) DYNARR_N( acclTable_t, acclTable_da, N ) @@ -364,7 +363,8 @@ HBITMAP GetMyCheckBitmaps(UINT fuCheck) HBITMAP hbmpCheck; /* handle to check-mark bitmap */ RECT rc; /* rectangle for check-box bitmap */ WORD wBitmapX; /* width of check-mark bitmap */ - WORD wBitmapY; /* height of check-mark bitmap */ + WORD wBitmapY; /* height of check-mark bitmap */ + WORD wMenuH; /* height of menu line */ /* Get the menu background color and create a solid brush with that color. */ @@ -383,6 +383,7 @@ HBITMAP GetMyCheckBitmaps(UINT fuCheck) wBitmapX = GetSystemMetrics(SM_CXMENUCHECK); wBitmapY = GetSystemMetrics(SM_CYMENUCHECK); + wMenuH = GetSystemMetrics(SM_CYMENU); hbmpCheck = CreateCompatibleBitmap(hdcSource, wBitmapX, wBitmapY); @@ -428,11 +429,11 @@ HBITMAP GetMyCheckBitmaps(UINT fuCheck) case RADIOCHECK: rc.left = (bmCheckbox.bmWidth / 4); rc.right = (bmCheckbox.bmWidth / 4) * 2; - rc.top = (bmCheckbox.bmHeight / 3) + 1; + rc.top = (bmCheckbox.bmHeight / 3); rc.bottom = (bmCheckbox.bmHeight / 3) * 2; break; case RADIOUNCHECK: - rc.top = (bmCheckbox.bmHeight / 3) + 1; + rc.top = (bmCheckbox.bmHeight / 3); rc.bottom = (bmCheckbox.bmHeight / 3) * 2; rc.left = 0; rc.right = (bmCheckbox.bmWidth / 4); @@ -444,7 +445,6 @@ HBITMAP GetMyCheckBitmaps(UINT fuCheck) check-box bitmap is larger than the default check-mark bitmap, use StretchBlt to make it fit; otherwise, just copy it. */ - if (((rc.right - rc.left) > (int) wBitmapX) || ((rc.bottom - rc.top) > (int) wBitmapY)) { @@ -455,7 +455,9 @@ HBITMAP GetMyCheckBitmaps(UINT fuCheck) else { - BitBlt(hdcTarget, 0, 0, rc.right - rc.left, + // Center it vertically + WORD dy = (wMenuH > wBitmapY) ? (wMenuH - wBitmapY) / 2 : 0; + BitBlt(hdcTarget, 0, dy, rc.right - rc.left, rc.bottom - rc.top, hdcSource, rc.left, rc.top, SRCCOPY); } @@ -655,7 +657,7 @@ wMenu_p wMenuMenuCreate( /*mm->parent = (wControl_p)m;*/ mm->first = mm->last = NULL; - rc = AppendMenu( m->menu, MF_STRING|MF_ENABLED|MF_POPUP, (UINT)mm->menu, mm->labelStr ); + rc = AppendMenu( m->menu, MF_STRING|MF_ENABLED|MF_POPUP, (UINT_PTR)(mm->menu), mm->labelStr ); return mm; } @@ -857,7 +859,7 @@ wMenuToggle_p wMenuToggleCreate( const char * labelStr, long acclKey, wBool_t set, - wMenuToggleCallBack_p action, + wMenuCallBack_p action, void * data ) { wMenuToggle_p mt; @@ -958,8 +960,8 @@ void wMenuToggleEnable( void mswMenuMove( wMenu_p m, - wPos_t x, - wPos_t y ) + wWinPix_t x, + wWinPix_t y ) { wControl_p b; b = (wControl_p)m->parent; @@ -985,8 +987,8 @@ static void pushMenuButt( wMenu_p wMenuCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option ) @@ -1041,7 +1043,7 @@ wMenu_p wMenuBarAdd( m->mmtype = MM_BAR; m->first = m->last = NULL; - rc = AppendMenu( menu, MF_STRING|MF_POPUP|MF_ENABLED, (UINT)m->menu, labelStr ); + rc = AppendMenu( menu, MF_STRING|MF_POPUP|MF_ENABLED, (UINT_PTR)(m->menu), labelStr ); DrawMenuBar( ((wControl_p)w)->hWnd ); return m; @@ -1118,7 +1120,7 @@ wBool_t wMenuAction( } else { set = wMenuToggleGet( mt ); wMenuToggleSet( mt, !set ); - mt->action( set, mt->data ); + mt->action( mt->data ); } break; case M_MENU: diff --git a/app/wlib/mswlib/mswmisc.c b/app/wlib/mswlib/mswmisc.c index 6b5f1c9..5b45e2b 100644 --- a/app/wlib/mswlib/mswmisc.c +++ b/app/wlib/mswlib/mswmisc.c @@ -31,7 +31,6 @@ #include #include #include -#include "misc.h" #include "mswint.h" #include "i18n.h" #include "FreeImage.h" @@ -45,6 +44,7 @@ #define OFN_LONGFILENAMES 0x00200000L char * mswStrdup(const char *); +const char * GetCurCommandName(void); #define PAUSE_TIMER (901) #define ALARM_TIMER (902) @@ -69,7 +69,6 @@ char * mswStrdup(const char *); * EXPORTED VARIABLES */ -long debugWindow = 0; HINSTANCE mswHInst; HWND mswHWnd = (HWND)0; @@ -77,18 +76,26 @@ const char *mswDrawWindowClassName = "DRAWWINDOW"; char mswTmpBuff[1024]; int mswEditHeight; int mswAllowBalloonHelp = TRUE; -int mswGroupStyle; HFONT mswOldTextFont; HFONT mswLabelFont; +/** @prefs [msw tweak] ThickFont=1 */ long mswThickFont = 1; double mswScale = 1.0; -double scaleIcon = 1.0; /**< Scaling factor for toolbar icons */ +/** @prefs [Preference] LargeIcons=1.5 Set toolbar icon scaling. Limited 1.0 to 2.0 */ +double scaleIcon = 1.0; /** Scaling factor for toolbar icons */ callBacks_t *mswCallBacks[CALLBACK_CNT]; -void closeBalloonHelp(void); +void closeBalloonHelp(int inx); static wControl_p getControlFromCursor(HWND, wWin_p *); + +#ifdef BALLOON_TRACE +// To use: +// change logFile defn in lprintf.c from static to EXPORT +// Run with some debug flag set to ensure logFile is set +extern FILE * logFile; +#endif /* * LOCAL VARIABLES */ @@ -100,14 +107,14 @@ struct wWin_t { int max_width; int min_height; int max_height; - wPos_t lastX, lastY; - wPos_t padX, padY; + wWinPix_t lastX, lastY; + wWinPix_t padX, padY; wControl_p first, last; wWinCallBack_p winProc; BOOL_T busy; #ifdef OWNERICON HBITMAP wicon_bm; - wPos_t wicon_w, wicon_h; + wWinPix_t wicon_w, wicon_h; #endif DWORD baseStyle; wControl_p focusChainFirst; @@ -131,15 +138,15 @@ static int mResizeBorderH; static int mMenuH; static int screenWidth = 0, screenHeight = 0; -wWin_p mswWin = NULL; -wWin_p winFirst, winLast; +static wWin_p mswWin = NULL; +static wWin_p winFirst, winLast; static long count51 = 0; -static UINT alarmTimer; -static UINT pauseTimer; -static UINT balloonHelpTimer = (UINT)0; -static UINT triggerTimer; +static UINT_PTR alarmTimer; +static UINT_PTR pauseTimer; +static UINT_PTR balloonHelpTimer = (UINT_PTR)0; +static UINT_PTR triggerTimer; static UINT balloonHelpTimeOut = 500; static wControl_p balloonHelpButton = NULL; @@ -160,7 +167,7 @@ static DWORD dwCookie; typedef struct { wControl_p b; } controlMap_t; -dynArr_t controlMap_da; +static dynArr_t controlMap_da; #define controlMap(N) DYNARR_N(controlMap_t,controlMap_da,N) @@ -177,8 +184,6 @@ static FILE * helpStrF; #endif static int inMainWndProc = FALSE; -int newHelp = 1; - static wBool_t mswWinBlockEnabled = TRUE; static FILE * dumpControlsF; @@ -187,7 +192,7 @@ static int dumpControls; extern char *userLocale; // list of supported fileformats for image files -char * filterImageFiles[] = { N_("All image files"), +static char * filterImageFiles[] = { N_("All image files"), "*.gif;*.jpg;*.jpeg;*.png;*.tif;*.tiff", N_("GIF files (*.gif)"), "*.gif", @@ -251,8 +256,8 @@ static void doDumpControls(void) b = controlMap(inx).b; if (b) { - fprintf(dumpControlsF, "[%0.3d] [%x] %s %s %s\n", inx, - (unsigned int)b->hWnd, + fprintf(dumpControlsF, "[%0.3d] [%p] %s %s %s\n", inx, + b->hWnd, (b->type>=0&&b->type<=B_BOX?controlNames[b->type]:"NOTYPE"), (b->labelStr?b->labelStr:""), (b->helpStr?b->helpStr:"")); @@ -303,7 +308,7 @@ void mswRepaintLabel(HWND hWnd, wControl_p b) LABELFONTSELECT newBrush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); oldBrush = SelectObject(hDc, newBrush); - dw = GetTextExtent(hDc, CAST_AWAY_CONST b->labelStr, strlen(b->labelStr)); + dw = GetTextExtent(hDc, CAST_AWAY_CONST b->labelStr, (int)(strlen(b->labelStr))); rect.left = b->labelX; rect.top = b->labelY; rect.right = b->labelX + LOWORD(dw); @@ -313,7 +318,7 @@ void mswRepaintLabel(HWND hWnd, wControl_p b) /*SetBkMode( hDc, OPAQUE );*/ SetBkColor(hDc, GetSysColor(COLOR_BTNFACE)); - if (!TextOut(hDc, b->labelX, b->labelY, b->labelStr, strlen(b->labelStr))) { + if (!TextOut(hDc, b->labelX, b->labelY, b->labelStr, (int)(strlen(b->labelStr)))) { mswFail("Repainting text label"); } @@ -376,14 +381,16 @@ void * mswAlloc( w->data = data; w->focusChainNext = NULL; w->shown = TRUE; + w->hilite = FALSE; + w->errStr = NULL; return w; } void mswComputePos( wControl_p b, - wPos_t origX, - wPos_t origY) + wWinPix_t origX, + wWinPix_t origY) { wWin_p w = b->parent; @@ -403,14 +410,14 @@ void mswComputePos( b->labelY = b->y+2; if (b->labelStr) { - int lab_l; + size_t lab_l; HDC hDc; DWORD dw; LABELFONTDECL hDc = GetDC(w->hWnd); LABELFONTSELECT lab_l = strlen(b->labelStr); - dw = GetTextExtent(hDc, CAST_AWAY_CONST b->labelStr, lab_l); + dw = GetTextExtent(hDc, CAST_AWAY_CONST b->labelStr, (UINT)lab_l); b->labelX -= LOWORD(dw) + 5; LABELFONTRESET ReleaseDC(w->hWnd, hDc); @@ -557,7 +564,7 @@ void mswSetFocus( b->parent->focusChainNext = b; } } - + /* ****************************************************************************** * @@ -569,10 +576,10 @@ void mswSetFocus( static void getSavedSizeAndPos( long option, const char * nameStr, - wPos_t *rw, - wPos_t *rh, - wPos_t *rx, - wPos_t *ry, + wWinPix_t *rw, + wWinPix_t *rh, + wWinPix_t *rx, + wWinPix_t *ry, int *showCmd) { char *cq; @@ -580,14 +587,31 @@ static void getSavedSizeAndPos( if ((option&F_RECALLPOS) && nameStr) { int x, y, w, h; + int xadj, yadj; const char *cp; int state; + w = h = 0; + xadj = 1; + yadj = mTitleH + 1; + if (option & F_RESIZE) { + xadj += mResizeBorderW * 2; + yadj += mResizeBorderH * 2; + } + else + { + xadj += mFixBorderW * 2; + yadj += mFixBorderH * 2; + } + //if (option & F_MENUBAR) { + // yadj += mMenuH; + //} + if ((option & F_RESIZE) && (cp = wPrefGetStringBasic("msw window size", nameStr)) && (state = (int)strtol(cp, &cq, 10), cp != cq) && // state is not used - (cp = cq, w = (wPos_t)strtod(cp, &cq), cp != cq) && - (cp = cq, h = (int)strtod(cp, &cq), cp != cq) + (cp = cq, w = (wWinPix_t)(strtod(cp, &cq)), cp != cq) && + (cp = cq, h = (wWinPix_t)(strtod(cp, &cq)), cp != cq) ) { if (w < 10) { w = 10; @@ -597,12 +621,12 @@ static void getSavedSizeAndPos( h = 10; } - if (w > screenWidth) { - w = screenWidth; + if (w > screenWidth - xadj) { + w = screenWidth - xadj; } - if (h > screenHeight) { - h = screenHeight; + if (h > screenHeight - yadj) { + h = screenHeight - yadj; } *rw = w; @@ -610,8 +634,8 @@ static void getSavedSizeAndPos( } if ((cp = wPrefGetStringBasic("msw window pos", nameStr)) && - (x = (wPos_t)strtod(cp, &cq), cp != cq) && - (cp = cq, y = (wPos_t)strtod(cp, &cq), cp != cq) + (x = (wWinPix_t)(strtod(cp, &cq)), cp != cq) && + (cp = cq, y = (wWinPix_t)(strtod(cp, &cq)), cp != cq) ) { if (y < 0) { y = 0; @@ -621,12 +645,12 @@ static void getSavedSizeAndPos( x = 0; } - if (y > screenHeight-40) { - y = screenHeight-40; + if (y + h > screenHeight - yadj) { + y = screenHeight - yadj - h; } - if (x > screenWidth-40) { - x = screenWidth-40; + if (x + w > screenWidth - xadj) { + x = screenWidth - xadj - w; } *rx = x; @@ -647,12 +671,12 @@ static void getSavedSizeAndPos( * \param aspect_ration IN unused on Windows */ void wSetGeometry(wWin_p win, - int min_width, - int max_width, - int min_height, - int max_height, - int base_width, - int base_height, + wWinPix_t min_width, + wWinPix_t max_width, + wWinPix_t min_height, + wWinPix_t max_height, + wWinPix_t base_width, + wWinPix_t base_height, double aspect_ratio) { win->validGeometry = TRUE; //remember that geometry was set @@ -690,15 +714,15 @@ static wWin_p winCommonCreate( long style, const char * labelStr, wWinCallBack_p winProc, - wPos_t w, - wPos_t h, + wWinPix_t w, + wWinPix_t h, void * data, const char * nameStr, int * pShowCmd) { wWin_p win; int index; - wPos_t ww, hh, xx, yy; + wWinPix_t ww, hh, xx, yy; RECT rect; win = (wWin_p)mswAlloc(NULL, typ, mswStrdup(labelStr), sizeof *win, data, &index); @@ -715,6 +739,8 @@ static wWin_p winCommonCreate( if (typ == W_MAIN) { *pShowCmd = ((option & F_MAXIMIZE) ? SW_SHOWMAXIMIZED : SW_SHOWNORMAL); + } else { + *pShowCmd = SW_HIDE; //Make sure to hide first } if (xx != CW_USEDEFAULT) { @@ -806,8 +832,8 @@ void wInitAppName(char *_appName) wWin_p wWinMainCreate( const char * name, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, const char * nameStr, @@ -816,7 +842,6 @@ wWin_p wWinMainCreate( void * data) { wWin_p w; - RECT rect; const char * appDir; const char * libDir; int showCmd; @@ -877,26 +902,29 @@ wWin_p wWinMainCreate( nameStr, &showCmd); mswHWnd = w->hWnd; + //HICON hIcon = LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(0), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE); + //HICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(0)); + //SendMessage(mswHWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); + //SendMessage(mswHWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon); + if (!mswThickFont) { - SendMessage(w->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L); - hDc = GetDC(w->hWnd); + SendMessage(mswHWnd, WM_SETFONT, (WPARAM)mswLabelFont, (LPARAM)0); + hDc = GetDC(mswHWnd); GetTextMetrics(hDc, &tm); mswEditHeight = tm.tmHeight+2; - ReleaseDC(w->hWnd, hDc); + ReleaseDC(mswHWnd, hDc); } - ShowWindow(w->hWnd, showCmd); - UpdateWindow(w->hWnd); - GetWindowRect(w->hWnd, &rect); - GetClientRect(w->hWnd, &rect); + ShowWindow(mswHWnd, showCmd); + UpdateWindow(mswHWnd); w->busy = FALSE; return w; } wWin_p wWinPopupCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, const char * nameStr, @@ -1077,7 +1105,7 @@ static wAccelKey_e translateExtKey(UINT wParam) } -long notModKey; +static long notModKey; int mswTranslateAccelerator( HWND hWnd, LPMSG pMsg) @@ -1091,7 +1119,7 @@ int mswTranslateAccelerator( return FALSE; } - acclKey = pMsg->wParam; + acclKey = (long)pMsg->wParam; b = getControlFromCursor(pMsg->hwnd, &win); if (win == NULL) { @@ -1112,7 +1140,7 @@ int mswTranslateAccelerator( } if (acclKey == (long)VK_F1) { - closeBalloonHelp(); + closeBalloonHelp(1); if (!b && win) { wHelp(win->helpStr); @@ -1162,14 +1190,14 @@ int mswTranslateAccelerator( -void wGetDisplaySize(POS_T * width, POS_T * height) +void wGetDisplaySize(wWinPix_t * width, wWinPix_t * height) { *width = screenWidth; *height = screenHeight; } -void wWinGetSize(wWin_p w, POS_T * width, POS_T * height) +void wWinGetSize(wWin_p w, wWinPix_t * width, wWinPix_t * height) { RECT rect; GetWindowRect(w->hWnd, &rect); @@ -1181,7 +1209,7 @@ void wWinGetSize(wWin_p w, POS_T * width, POS_T * height) } -void wWinSetSize(wWin_p w, POS_T width, POS_T height) +void wWinSetSize(wWin_p w, wWinPix_t width, wWinPix_t height) { RECT rect; w->w = width; @@ -1224,33 +1252,24 @@ static void blockingLoop(void) static void savePos(wWin_p win) { - WINDOWPLACEMENT windowPlace; - wPos_t w, h; + wWinPix_t w, h; RECT rect; if (win->nameStr && IsWindowVisible(win->hWnd) /*&& !IsIconic( win->hWnd )*/) { - windowPlace.length = sizeof windowPlace; - GetWindowPlacement(win->hWnd, &windowPlace); + GetWindowRect(win->hWnd, &rect); - if (win->option&F_RECALLPOS) { + if (win->option&F_RECALLPOS) { char posStr[20]; - wsprintf(posStr, "%d %d", - windowPlace.rcNormalPosition.left, - windowPlace.rcNormalPosition.top); - wPrefSetString("msw window pos", win->nameStr, posStr); + wsprintf(posStr, "%d %d", + rect.left, + rect.top); + wPrefSetString("msw window pos", win->nameStr, posStr); if (win->option&F_RESIZE) { - GetClientRect(win->hWnd, &rect); - w = windowPlace.rcNormalPosition.right - windowPlace.rcNormalPosition.left; - h = windowPlace.rcNormalPosition.bottom - windowPlace.rcNormalPosition.top; - w -= mResizeBorderW*2; - h -= mResizeBorderH*2 + mTitleH; - - if (win->option&F_MENUBAR) { - h -= mMenuH; - } - + GetClientRect(win->hWnd, &rect); + w = rect.right - rect.left; + h = rect.bottom - rect.top; wsprintf(posStr, "%d %d %d", 0, // unused w, h); @@ -1265,7 +1284,7 @@ void wWinShow( wWin_p win, BOOL_T show) { - wPos_t x, y; + wWinPix_t x, y; wWin_p win1; win->busy = TRUE; @@ -1292,6 +1311,10 @@ void wWinShow( win->centerWin = FALSE; win->shown = TRUE; + // Clear hilites + for (wControl_p controlP = win->first; controlP; controlP = controlP->next) + controlP->hilite = FALSE; + if (mswHWnd == (HWND)0 || !IsIconic(mswHWnd)) { ShowWindow(win->hWnd, SW_SHOW); @@ -1429,13 +1452,15 @@ const char * wWinGetTitle( void wWinClear( wWin_p win, - wPos_t x, - wPos_t y, - wPos_t width, - wPos_t height) + wWinPix_t x, + wWinPix_t y, + wWinPix_t width, + wWinPix_t height) { } +extern long dontHideCursor; + void wSetCursor(wDraw_p win, wCursor_t cursor) { @@ -1492,6 +1517,11 @@ void wSetCursor(wDraw_p win, case wCursorAppStart: SetCursor(LoadCursor(NULL, IDC_APPSTARTING)); break; + + case wCursorNone: + if (!dontHideCursor) + SetCursor(NULL); + break; } curCursor = cursor; @@ -1667,44 +1697,44 @@ const char * wControlGetHelp(wControl_p b) } -wPos_t wLabelWidth(const char * labelStr) +wWinPix_t wLabelWidth(const char * labelStr) { - int lab_l; + size_t lab_l; HDC hDc; DWORD dw; LABELFONTDECL hDc = GetDC(mswHWnd); lab_l = strlen(labelStr); LABELFONTSELECT - dw = GetTextExtent(hDc, CAST_AWAY_CONST labelStr, lab_l); + dw = GetTextExtent(hDc, CAST_AWAY_CONST labelStr, (UINT)lab_l); LABELFONTRESET ReleaseDC(mswHWnd, hDc); return LOWORD(dw) + 5; } -wPos_t wControlGetWidth( +wWinPix_t wControlGetWidth( wControl_p b) /* Control */ { return b->w; } -wPos_t wControlGetHeight( +wWinPix_t wControlGetHeight( wControl_p b) /* Control */ { return b->h; } -wPos_t wControlGetPosX( +wWinPix_t wControlGetPosX( wControl_p b) /* Control */ { return b->x; } -wPos_t wControlGetPosY( +wWinPix_t wControlGetPosY( wControl_p b) /* Control */ { return b->y; @@ -1713,21 +1743,21 @@ wPos_t wControlGetPosY( void wControlSetPos( wControl_p b, - wPos_t x, - wPos_t y) + wWinPix_t x, + wWinPix_t y) { b->labelX = x; b->labelY = y+2; if (b->labelStr) { - int lab_l; + size_t lab_l; HDC hDc; DWORD dw; LABELFONTDECL hDc = GetDC(b->parent->hWnd); LABELFONTSELECT lab_l = strlen(b->labelStr); - dw = GetTextExtent(hDc, CAST_AWAY_CONST b->labelStr, lab_l); + dw = GetTextExtent(hDc, CAST_AWAY_CONST b->labelStr, (UINT)lab_l); b->labelX -= LOWORD(dw) + 5; LABELFONTRESET ReleaseDC(b->parent->hWnd, hDc); @@ -1757,14 +1787,14 @@ void wControlSetLabel( if (b->type == B_RADIO ) { ; } else { - int lab_l; + size_t lab_l; HDC hDc; DWORD dw; LABELFONTDECL hDc = GetDC(b->parent->hWnd); lab_l = strlen(labelStr); LABELFONTSELECT - dw = GetTextExtent(hDc, CAST_AWAY_CONST labelStr, lab_l); + dw = GetTextExtent(hDc, CAST_AWAY_CONST labelStr, (UINT)lab_l); LABELFONTRESET b->labelX = b->x - LOWORD(dw) - 5; ReleaseDC(b->parent->hWnd, hDc); @@ -1797,13 +1827,14 @@ void wControlHilite( return; } - if (!IsWindowVisible(b->parent->hWnd)) { + if ((b->parent==NULL) || (!IsWindowVisible(b->parent->hWnd)) || (!IsWindowVisible(b->hWnd))) { + b->hilite = FALSE; return; } - if (!IsWindowVisible(b->hWnd)) { - return; - } + if (b->hilite == hilite) + return; + b->hilite = hilite; hDc = GetDC(b->parent->hWnd); newPen = ExtCreatePen(PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_ROUND | PS_JOIN_BEVEL, @@ -1840,7 +1871,7 @@ void wMessage( { HDC hDc; int oldRop; - POS_T h; + wWinPix_t h; RECT rect; LABELFONTDECL @@ -1855,7 +1886,7 @@ void wMessage( Rectangle(hDc, 0, h, w->w, h); SetROP2(hDc, oldRop); LABELFONTSELECT - TextOut(hDc, 0, h, msg, strlen(msg)); + TextOut(hDc, 0, h, msg, (int)(strlen(msg))); LABELFONTRESET ReleaseDC(w->hWnd, hDc); } @@ -1873,7 +1904,7 @@ unsigned wOpenFileExternal(char *file) res = ShellExecute(mswHWnd, "open", file, NULL, NULL, SW_SHOW); - if ((int)res <= 32) { + if ((UINT_PTR)res <= 32) { wNoticeEx(NT_ERROR, "Error when opening file!", "Cancel", NULL); return(FALSE); } @@ -1886,7 +1917,6 @@ void wExit(int rc) INDEX_T inx; wControl_p b; mswPutCustomColors(); - wPrefFlush(); for (inx=controlMap_da.cnt-1; inx>=0; inx--) { b = controlMap(inx).b; @@ -1903,7 +1933,9 @@ void wExit(int rc) } } - for (inx=controlMap_da.cnt-1; inx>=0; inx--) { + wPrefFlush(""); + + for (inx=controlMap_da.cnt-1; inx>=0; inx--) { b = controlMap(inx).b; if (b != NULL) { @@ -1916,14 +1948,14 @@ void wExit(int rc) controlMap(inx).b = NULL; } - deleteBitmaps(); + deleteBitmaps(); if (mswOldTextFont != (HFONT)0) { DeleteObject(mswOldTextFont); } if (helpInitted) { - WinHelp(mswHWnd, helpFile, HELP_QUIT, 0L); + WinHelp(mswHWnd, helpFile, HELP_QUIT, (DWORD)0); helpInitted = FALSE; } @@ -2165,14 +2197,14 @@ void wHelp( { char *pszHelpTopic; HWND hwndHelp; - char *theTopic = "index"; + const char *theTopic = "index"; if (topic) { theTopic = topic; } if (!helpInitted) { - HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD)&dwCookie) ; + HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD_PTR)&dwCookie) ; helpInitted = TRUE; } @@ -2199,11 +2231,12 @@ void doHelpMenu(void * context) HH_FTS_QUERY ftsQuery; if (!helpInitted) { - HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD)&dwCookie) ; + HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD_PTR)&dwCookie) ; helpInitted = TRUE; } - switch ((int)(long)context) { + const char * topic; + switch ((int)(INT_PTR)context) { case 1: /* Contents */ HtmlHelp(mswHWnd, helpFile, HH_DISPLAY_TOC, (DWORD_PTR)NULL); break; @@ -2215,12 +2248,11 @@ void doHelpMenu(void * context) ftsQuery.fTitleOnly = FALSE; ftsQuery.pszSearchQuery = NULL; ftsQuery.pszWindow = NULL; - HtmlHelp(mswHWnd, helpFile, HH_DISPLAY_SEARCH,(DWORD)&ftsQuery); + HtmlHelp(mswHWnd, helpFile, HH_DISPLAY_SEARCH,(DWORD_PTR)&ftsQuery); break; case 3: /*Context*/ - const char * topic; topic = GetCurCommandName(); wHelp(topic); break; @@ -2267,149 +2299,132 @@ void wControlSetBalloonText(wControl_p b, const char * text) b->tipStr = mswStrdup(text); } - -void startBalloonHelp(void) +void openBalloonHelp(wControl_p b, int dx, int dy) { - HDC hDc; - DWORD extent; - RECT rect; - POINT pt; - wBalloonHelp_t * bh; - const char * hs; - HFONT hFont; - - if (!balloonHelpStrings) { - return; - } - - if (!balloonHelpEnable) { - return; - } - - if (balloonHelpHWnd) { - if (balloonHelpButton->tipStr) { - hs = balloonHelpButton->tipStr; - } else { - hs = balloonHelpButton->helpStr; - - if (!hs) { - return; - } - - for (bh = balloonHelpStrings; bh->name && strcmp(bh->name,hs) != 0; bh++); - - if (!bh->name || !bh->value) { - return; - } + HDC hDc; + DWORD extent; + RECT rect; + POINT pt; + HFONT hFont; + const char * msg; + if (b->errStr) { + msg = b->errStr; + } + else { + msg = b->tipStr; + if (!balloonHelpEnable) { +#ifdef BALLOON_TRACE + fprintf(logFile, "openBalloon !Enable state %d\n", balloonHelpState); fflush(logFile); +#endif + return; + } + } +#ifdef BALLOON_TRACE + fprintf(logFile, "openBalloon %s state %d\n", msg, balloonHelpState); fflush(logFile); +#endif + if (!balloonHelpHWnd) + return; + int w, h; + hDc = GetDC(balloonHelpHWnd); + hFont = SelectObject(hDc, mswLabelFont); + extent = GetTextExtent(hDc, CAST_AWAY_CONST msg, (int)(strlen(msg))); + w = LOWORD(extent); + h = HIWORD(extent); + + if (b->type == B_RADIO || + b->type == B_TOGGLE) { + pt.y = b->h; + } + else { + GetClientRect(b->hWnd, &rect); + pt.y = rect.bottom; + } - balloonHelpButton->tipStr = hs = bh->value; - } + pt.x = dx; + pt.y -= dy; + ClientToScreen(b->hWnd, &pt); - if (newHelp) { - wControlSetBalloon(balloonHelpButton, 0, 0, hs); - } else { - int w, h; - hDc = GetDC(balloonHelpHWnd); - hFont = SelectObject(hDc, mswLabelFont); - extent = GetTextExtent(hDc, CAST_AWAY_CONST hs, strlen(hs)); - w = LOWORD(extent); - h = HIWORD(extent); - pt.x = 0; - - if (balloonHelpButton->type == B_RADIO || - balloonHelpButton->type == B_TOGGLE) { - pt.y = balloonHelpButton->h; - } else { - GetClientRect(balloonHelpButton->hWnd, &rect); - pt.y = rect.bottom; - } + if (pt.x + w + 2 > screenWidth) { + pt.x = screenWidth - (w + 2); + } - ClientToScreen(balloonHelpButton->hWnd, &pt); + if (pt.x < 0) { + pt.x = 0; + } - if (pt.x + w+2 > screenWidth) { - pt.x = screenWidth-(w+2); - } + SetWindowPos(balloonHelpHWnd, HWND_TOPMOST, pt.x, pt.y, w + 6, h + 4, + SWP_SHOWWINDOW | SWP_NOACTIVATE); + if (!b->errStr) { + SetBkColor(hDc, GetSysColor(COLOR_INFOBK)); + SetTextColor(hDc, GetSysColor(COLOR_INFOTEXT)); + } else { + SetBkColor(hDc, GetSysColor(COLOR_HIGHLIGHT)); + SetTextColor(hDc, GetSysColor(COLOR_HIGHLIGHTTEXT)); + } + TextOut(hDc, 2, 1, msg, (int)(strlen(msg))); + SelectObject(hDc, hFont); + ReleaseDC(balloonHelpHWnd, hDc); + balloonHelpState = balloonHelpShow; + balloonControlButton = b; +} - if (pt.x < 0) { - pt.x = 0; - } - SetWindowPos(balloonHelpHWnd, HWND_TOPMOST, pt.x, pt.y, w+6, h+4, - SWP_SHOWWINDOW|SWP_NOACTIVATE); - SetBkColor(hDc, GetSysColor(COLOR_INFOBK)); - TextOut(hDc, 2, 1, hs, strlen(hs)); - SelectObject(hDc, hFont); - ReleaseDC(balloonHelpHWnd, hDc); - } - } -} -void closeBalloonHelp(void) +void startBalloonHelp(void) { - if (balloonHelpTimer) { - KillTimer(mswHWnd, balloonHelpTimer); - balloonHelpTimer = 0; - } - - if (balloonHelpState == balloonHelpShow) - if (balloonHelpHWnd) { - ShowWindow(balloonHelpHWnd, SW_HIDE); - } + wBalloonHelp_t * bh; + + if (!balloonHelpButton->tipStr) { + if (!balloonHelpStrings) + return; + for (bh = balloonHelpStrings; bh->name && strcmp(bh->name, balloonHelpButton->helpStr) != 0; bh++); + if (!bh->name || !bh->value) + balloonHelpButton->tipStr = _(balloonHelpButton->helpStr); + else + balloonHelpButton->tipStr = _(bh->value); + } - balloonHelpState = balloonHelpIdle; + openBalloonHelp(balloonHelpButton, 0, 0); } -void wControlSetBalloon(wControl_p b, wPos_t dx, wPos_t dy, const char * msg) +void closeBalloonHelp(int inx) { - HDC hDc; - DWORD extent; - RECT rect; - POINT pt; - HFONT hFont; - - if (msg) { - int w, h; - hDc = GetDC(balloonHelpHWnd); - hFont = SelectObject(hDc, mswLabelFont); - extent = GetTextExtent(hDc, CAST_AWAY_CONST msg, strlen(msg)); - w = LOWORD(extent); - h = HIWORD(extent); - - if (b->type == B_RADIO || - b->type == B_TOGGLE) { - pt.y = b->h; - } else { - GetClientRect(b->hWnd, &rect); - pt.y = rect.bottom; - } +#ifdef BALLOON_TRACE + fprintf(logFile, "closeBallonHelp %d state=%d\n", inx, balloonHelpState); fflush(logFile); +#endif + if (balloonHelpTimer) { + KillTimer(mswHWnd, balloonHelpTimer); + balloonHelpTimer = (UINT_PTR)0; + } - pt.x = dx; - pt.y -= dy; - ClientToScreen(b->hWnd, &pt); + if (balloonHelpState == balloonHelpShow) + if (balloonHelpHWnd) { + ShowWindow(balloonHelpHWnd, SW_HIDE); + } - if (pt.x + w+2 > screenWidth) { - pt.x = screenWidth-(w+2); - } + balloonHelpState = balloonHelpIdle; +} - if (pt.x < 0) { - pt.x = 0; - } - SetWindowPos(balloonHelpHWnd, HWND_TOPMOST, pt.x, pt.y, w+6, h+4, - SWP_SHOWWINDOW|SWP_NOACTIVATE); - SetBkColor(hDc, GetSysColor(COLOR_INFOBK)); - TextOut(hDc, 2, 1, msg, strlen(msg)); - SelectObject(hDc, hFont); - ReleaseDC(balloonHelpHWnd, hDc); - balloonHelpState = balloonHelpShow; - balloonControlButton = b; - } else { - closeBalloonHelp(); - } +void wControlSetBalloon(wControl_p b, wWinPix_t dx, wWinPix_t dy, const char * msg) +{ + if (msg) { + if (b->errStr) + free(b->errStr); + b->errStr = mswStrdup(msg); + openBalloonHelp(b, dx, dy); + } + else { + if (b->errStr) + free(b->errStr); + b->errStr = NULL; + closeBalloonHelp(2); + } } + int wGetKeyState(void) { int rc, keyState; @@ -2613,7 +2628,7 @@ struct wFilSel_t * wFilSelCreate( { char * cp; struct wFilSel_t * ret; - int len; + size_t len; ret = (struct wFilSel_t*)malloc(sizeof *ret); ret->parent = parent; ret->mode = mode; @@ -2671,7 +2686,7 @@ const char * wMemStats(void) ", Unknown Heap Status"); return msg; } - + /* ***************************************************************************** * @@ -2750,8 +2765,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) int inx; wWin_p w; wControl_p b, oldW; - int child = ((GetWindowLong(hWnd, GWL_STYLE) & WS_CHILD) != 0); - POS_T newW, newH; + wWinPix_t newW, newH; RECT rect; PAINTSTRUCT ps; HWND hWnd2; @@ -2759,9 +2773,10 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) HDC hDc; wAccelKey_e extChar; + LPMINMAXINFO pMMI; switch (message) { case WM_GETMINMAXINFO: - LPMINMAXINFO pMMI = (LPMINMAXINFO)lParam; + pMMI = (LPMINMAXINFO)lParam; inx = GetWindowWord(hWnd, 0); if (inx >= CONTROL_BASE && inx <= controlMap_da.cnt) { @@ -2775,7 +2790,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } } } - return(0); + return (LRESULT)0; case WM_MOUSEWHEEL: inx = GetWindowWord(hWnd, 0); @@ -2787,12 +2802,12 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) return mswCallBacks[b->type]->messageProc((wControl_p)b, hWnd, message, wParam, lParam); - return (0); + return (LRESULT)0; - case WM_DRAWITEM: - case WM_COMMAND: + case WM_COMMAND: + closeBalloonHelp(3); + case WM_DRAWITEM: case WM_MEASUREITEM: - closeBalloonHelp(); if (WCMD_PARAM_ID < CONTROL_BASE || WCMD_PARAM_ID > (WPARAM)controlMap_da.cnt) { break; @@ -2808,10 +2823,10 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) // draw the bitmap mswDrawIcon(((LPDRAWITEMSTRUCT)lParam)->hDC, 0, 0, (wIcon_p)(b->data), FALSE, (COLORREF)0, (COLORREF)0); - return (TRUE); + return (LRESULT)TRUE; } else { mswSetFocus(b); - ret = 0L; + ret = 0; if (!inMainWndProc) { inMainWndProc = TRUE; @@ -2824,7 +2839,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) inMainWndProc = FALSE; } - return ret; + return (LRESULT)ret; } case WM_PAINT: @@ -2846,7 +2861,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } EndPaint(hWnd, &ps); - return 1L; + return (LRESULT)1; } break; @@ -2942,9 +2957,19 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } b = getControlFromCursor(hWnd, NULL); - closeBalloonHelp(); + closeBalloonHelp(4); if (b && b->type == B_DRAW) { + // Change Num keypad to a special code to emulate cursor keys + if (wParam == VK_UP || + wParam == VK_DOWN || + wParam == VK_RIGHT || + wParam == VK_LEFT || + wParam == VK_INSERT || + wParam == VK_DELETE) + { + if ((lParam & 0x1000000) == 0) lParam |= 0x1000000; + } return SendMessage(b->hWnd, WM_CHAR, wParam, lParam); } @@ -2967,7 +2992,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } } - return 0L; + return (LRESULT)0; case 0x1B: @@ -2988,7 +3013,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } mswSetTrigger((wControl_p)TRIGGER_TIMER, NULL); - return 0L; + return (LRESULT)0; case 0x20: @@ -3010,7 +3035,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } } - return 0L; + return (LRESULT)0; case 0x09: @@ -3041,16 +3066,16 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } } - return 0L; + return (LRESULT)0; } /* Not a Draw control */ MessageBeep(MB_ICONHAND); - return 0L; + return (LRESULT)0; break; case WM_ENABLE: - if (wParam == 1) { /* WIN32??? */ + if (wParam == (WPARAM)1) { hWnd2 = SetFocus(hWnd); } @@ -3068,53 +3093,70 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) break; } - closeBalloonHelp(); + closeBalloonHelp(5); wHelp(b->helpStr); - return 0L; + return (LRESULT)0; case WM_SETCURSOR: - /*if (any buttons down) - break;*/ - wSetCursor(NULL, curCursor); + if (hWnd == mswHWnd) + wSetCursor(NULL, curCursor); - if (!mswAllowBalloonHelp) { - return TRUE; - } - - if (IsIconic(mswHWnd)) { - return TRUE; - } + if (!mswAllowBalloonHelp) { + break; + } - b = getControlFromCursor(hWnd, NULL); + if (IsIconic(mswHWnd)) { + break; + } - if (b == balloonControlButton) { - return TRUE; - } + b = getControlFromCursor(hWnd, NULL); + +#ifdef BALLOON_TRACE + fprintf(logFile, "SETCURSOR %s\n", b ? b->helpStr : "NULL"); fflush(logFile); +#endif + if (b == balloonControlButton) { + //closeBalloonHelp(61); + break; + } - if (/*(!IsWindowEnabled(hWnd))*/ GetActiveWindow() != hWnd || - (!b) || b->type == B_DRAW || b->helpStr == NULL) { - closeBalloonHelp(); - return TRUE; - } + if (GetActiveWindow() != hWnd) { + closeBalloonHelp(62); + break; + } + if (!b) { + closeBalloonHelp(63); + break; + } + if (b->type == B_DRAW) { + closeBalloonHelp(64); + break; + } + if (b->helpStr == NULL) { + closeBalloonHelp(65); + break; + } - if (b != balloonHelpButton) { - closeBalloonHelp(); - } + if (b != balloonHelpButton) { + closeBalloonHelp(7); + } +#ifdef BALLOON_TRACE + fprintf(logFile, "SETCURSOR state %d\n", balloonHelpState); fflush(logFile); +#endif + if (balloonHelpState != balloonHelpIdle) { + break; + } - if (balloonHelpState != balloonHelpIdle) { - return TRUE; - } + balloonHelpTimer = SetTimer(mswHWnd, BALLOONHELP_TIMER, + balloonHelpTimeOut, NULL); - balloonHelpTimer = SetTimer(mswHWnd, BALLOONHELP_TIMER, - balloonHelpTimeOut, NULL); + if (balloonHelpTimer == (UINT_PTR)0) { + break; + } - if (balloonHelpTimer == (UINT)0) { - return TRUE; - } + balloonHelpState = balloonHelpWait; + balloonHelpButton = b; + break; - balloonHelpState = balloonHelpWait; - balloonHelpButton = b; - return TRUE; case WM_SYSCOMMAND: inx = GetWindowWord(hWnd, 0); @@ -3146,7 +3188,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } wWinShow(w, FALSE); - return 0L; + return (LRESULT)0; case WM_CLOSE: inx = GetWindowWord(hWnd, 0); @@ -3168,13 +3210,13 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) (w->winProc(w, wClose_e, NULL, NULL)); } - return 0L; + return (LRESULT)0; } case WM_DESTROY: if (hWnd == mswHWnd) { PostQuitMessage(0L); - return 0L; + return (LRESULT)0; } break; @@ -3192,15 +3234,15 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } } else if (wParam == BALLOONHELP_TIMER) { KillTimer(hWnd, balloonHelpTimer); - balloonHelpTimer = (UINT)0; + balloonHelpTimer = (UINT_PTR)0; startBalloonHelp(); } - return 0L; + return (LRESULT)0; case WM_MENUSELECT: mswAllowBalloonHelp = TRUE; - closeBalloonHelp(); + closeBalloonHelp(8); break; case WM_WINDOWPOSCHANGED: @@ -3226,7 +3268,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_PALETTECHANGED: if (wParam == (WPARAM)hWnd) { - return 0L; + return (LRESULT)0; } case WM_QUERYNEWPALETTE: @@ -3240,12 +3282,12 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) InvalidateRect(hWnd, NULL, TRUE); } - return inx; + return (LRESULT)inx; } case WM_ACTIVATE: if (LOWORD(wParam) == WA_INACTIVE) { - closeBalloonHelp(); + closeBalloonHelp(9); } break; @@ -3272,7 +3314,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) inMainWndProc = FALSE; } - return ret; + return (LRESULT)ret; case WM_LBUTTONDOWN: case WM_MOUSEMOVE: @@ -3297,7 +3339,7 @@ MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) inMainWndProc = FALSE; } - return ret; + return (LRESULT)ret; default: ; @@ -3414,9 +3456,9 @@ int PASCAL WinMain(HINSTANCE hinstCurrent, HINSTANCE hinstPrevious, mResizeBorderW = GetSystemMetrics(SM_CXFRAME); mResizeBorderH = GetSystemMetrics(SM_CYFRAME); mMenuH = GetSystemMetrics(SM_CYMENU) + 1; - screenWidth = GetSystemMetrics(SM_CXSCREEN); - screenHeight = GetSystemMetrics(SM_CYSCREEN); - mswLabelFont = GetStockObject(DEFAULT_GUI_FONT); + screenWidth = GetSystemMetrics(SM_CXFULLSCREEN); + screenHeight = GetSystemMetrics(SM_CYFULLSCREEN); + mswLabelFont = GetStockObject(DEFAULT_GUI_FONT); hDc = GetDC(0); mswScale = GetDeviceCaps(hDc, LOGPIXELSX) / 96.0; @@ -3467,5 +3509,5 @@ int PASCAL WinMain(HINSTANCE hinstCurrent, HINSTANCE hinstPrevious, HtmlHelp(NULL, NULL, HH_UNINITIALIZE, (DWORD)dwCookie); } - return msg.wParam; + return (int)msg.wParam; } diff --git a/app/wlib/mswlib/mswmsg.c b/app/wlib/mswlib/mswmsg.c index 6445299..8487e31 100644 --- a/app/wlib/mswlib/mswmsg.c +++ b/app/wlib/mswlib/mswmsg.c @@ -21,17 +21,12 @@ #define SCALE_LARGE 1.6 #define SCALE_SMALL 0.8 -#ifdef CONTROL3D -static int messageHeight = 18; -#endif - struct wMessage_t { WOBJ_COMMON long flags; const char * message; }; -#ifndef CONTROL3D static void repaintMessage( HWND hWnd, wControl_p b ) @@ -83,7 +78,7 @@ static void repaintMessage( rect.left = bm->x; SetBkColor( hDc, GetSysColor( COLOR_BTNFACE ) ); - ExtTextOut( hDc, bm->x, bm->y + ((bm->h + 2 - textMetrics.tmHeight) / 2), ETO_CLIPPED|ETO_OPAQUE, &rect, bm->message, strlen( bm->message ), NULL ); + ExtTextOut( hDc, bm->x, bm->y + ((bm->h + 2 - textMetrics.tmHeight) / 2), ETO_CLIPPED|ETO_OPAQUE, &rect, bm->message, (int)(strlen( bm->message )), NULL ); if( scale != 1.0 ) /* in case we did create a new font earlier, delete it now */ @@ -94,7 +89,6 @@ static void repaintMessage( ReleaseDC( hWnd, hDc ); } -#endif void wMessageSetValue( wMessage_p b, @@ -106,34 +100,26 @@ void wMessageSetValue( b->message = mswStrdup( arg ); else b->message = NULL; -#ifdef CONTROL3D - SetWindowText( b->hWnd, arg ); -#else + repaintMessage( ((wControl_p)(b->parent))->hWnd, (wControl_p)b ); -#endif + } void wMessageSetWidth( wMessage_p b, - wPos_t width ) + wWinPix_t width ) { b->w = width; -#ifdef CONTROL3D - SetWindowPos( b->hWnd, HWND_TOP, CW_USEDEFAULT, CW_USEDEFAULT, - width, messageHeight, SWP_NOMOVE ); -#endif + } -wPos_t wMessageGetWidth(const char *string) +wWinPix_t wMessageGetWidth(const char *string) { return(wLabelWidth(string)); } -wPos_t wMessageGetHeight( long flags ) +wWinPix_t wMessageGetHeight( long flags ) { -#ifdef CONTROL3D - return messageHeight; -#else double scale = 1.0; if( flags & BM_LARGE ) @@ -141,8 +127,8 @@ wPos_t wMessageGetHeight( long flags ) if( flags & BM_SMALL ) scale = SCALE_SMALL; - return((wPos_t)((mswEditHeight) * scale )); -#endif + return((wWinPix_t)((mswEditHeight) * scale )); + } static void mswMessageSetBusy( @@ -152,68 +138,39 @@ static void mswMessageSetBusy( } -#ifndef CONTROL3D + static callBacks_t messageCallBacks = { repaintMessage, NULL, NULL, mswMessageSetBusy }; -#endif - wMessage_p wMessageCreateEx( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, - POS_T width, + wWinPix_t width, const char *message, long flags ) { wMessage_p b; int index; -#ifdef CONTROL3D - RECT rect; -#endif - + b = (wMessage_p)mswAlloc( parent, B_MESSAGE, NULL, sizeof *b, NULL, &index ); mswComputePos( (wControl_p)b, x, y ); b->option |= BO_READONLY; b->message = mswStrdup( message ); b->flags = flags; -#ifdef CONTROL3D - if ( width <= 0 && strlen(b->message) > 0 ) { - width = wLabelWidth( b->message ); - } - - b->hWnd = CreateWindow( "STATIC", NULL, - SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE, - b->x, b->y, - width, messageHeight, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL ); - if (b->hWnd == NULL) { - mswFail("CreateWindow(MESSAGE)"); - return b; - } - - if ( !mswThickFont ) - SendMessage( b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L ); - SetWindowText( b->hWnd, message ); - - GetWindowRect( b->hWnd, &rect ); - b->w = rect.right - rect.left; - b->h = rect.bottom - rect.top; -#else b->w = width; b->h = wMessageGetHeight( flags ) + 1; repaintMessage( ((wControl_p)parent)->hWnd, (wControl_p)b ); -#endif + mswAddButton( (wControl_p)b, FALSE, helpStr ); -#ifndef CONTROL3D mswCallBacks[B_MESSAGE] = &messageCallBacks; -#endif + return b; } diff --git a/app/wlib/mswlib/mswpref.c b/app/wlib/mswlib/mswpref.c index 201171a..55fedb4 100644 --- a/app/wlib/mswlib/mswpref.c +++ b/app/wlib/mswlib/mswpref.c @@ -5,7 +5,6 @@ #include #include #include -#include "misc.h" #include "mswint.h" #include #include @@ -40,13 +39,15 @@ const char * wGetAppLibDir( void ) *cp = '\0'; #ifdef XTRKCAD_CMAKE_BUILD - strcpy(appLibDirName, module_name); - strcat(appLibDirName, "\\..\\share\\xtrkcad"); + strncpy(appLibDirName, module_name, sizeof(appLibDirName)); + size_t len = sizeof(appLibDirName)-strlen(appLibDirName)-1; + strncat(appLibDirName, "\\..\\share\\xtrkcad", len); _fullpath( appLibDirName, appLibDirName, MAX_PATH ); return appLibDirName; #endif - strcpy(appLibDirName, module_name); + strncpy(appLibDirName, module_name, sizeof(appLibDirName)); + appLibDirName[sizeof(appLibDirName)-1] = '\0'; return appLibDirName; } @@ -73,11 +74,12 @@ const char * wGetAppWorkDir( void ) return appWorkDirName; } wGetAppLibDir(); - sprintf( mswTmpBuff, "%s\\xtrkcad0.ini", appLibDirName ); + snprintf( mswTmpBuff, sizeof(mswTmpBuff), "%s\\xtrkcad0.ini", appLibDirName ); rc = GetPrivateProfileString( "workdir", "path", "", appWorkDirName, sizeof appWorkDirName, mswTmpBuff ); if ( rc!=0 ) { if ( stricmp( appWorkDirName, "installdir" ) == 0 ) { - strcpy( appWorkDirName, appLibDirName ); + strncpy( appWorkDirName, appLibDirName, sizeof(appWorkDirName) ); + appWorkDirName[sizeof(appWorkDirName)-1] = '\0'; } else { cp = &appWorkDirName[strlen(appWorkDirName)-1]; while (cp>appWorkDirName && *cp == '\\') *cp-- = 0; @@ -89,7 +91,7 @@ const char * wGetAppWorkDir( void ) wNoticeEx( NT_ERROR, "Cannot get user's profile directory", "Exit", NULL ); wExit(0); } else { - sprintf( appWorkDirName, "%s\\%s", mswTmpBuff, "XTrackCad" ); + snprintf( appWorkDirName, sizeof(appWorkDirName), "%s\\%s", mswTmpBuff, "XTrackCad" ); if( !PathIsDirectory( appWorkDirName )) { if( !CreateDirectory( appWorkDirName, NULL )) { wNoticeEx( NT_ERROR, "Cannot create user's profile directory", "Exit", NULL ); @@ -125,7 +127,8 @@ typedef struct { BOOL_T dirty; char * val; } prefs_t; -dynArr_t prefs_da; + +static dynArr_t prefs_da; #define prefs(N) DYNARR_N(prefs_t,prefs_da,N) void wPrefSetString( const char * section, const char * name, const char * sval ) @@ -149,6 +152,17 @@ void wPrefSetString( const char * section, const char * name, const char * sval p->val = mswStrdup(sval); } +void wPrefsLoad(char * name) { + prefs_t *p; + for (int i= 0; isection, p->name, "", mswTmpBuff, sizeof mswTmpBuff, name ); + if (rc==0) + continue; + p->val = mswStrdup(mswTmpBuff); + } +} char * wPrefGetStringBasic( const char * section, const char * name ) { @@ -160,6 +174,7 @@ char * wPrefGetStringBasic( const char * section, const char * name ) return p->val; } } + rc = GetPrivateProfileString( section, name, "", mswTmpBuff, sizeof mswTmpBuff, mswProfileFile ); if (rc==0) return NULL; @@ -177,7 +192,7 @@ void wPrefSetInteger( const char * section, const char * name, long lval ) { char tmp[20]; - sprintf( tmp, "%ld", lval ); + snprintf( tmp, sizeof(tmp), "%ld", lval ); wPrefSetString( section, name, tmp ); } @@ -214,7 +229,7 @@ void wPrefSetFloat( { char tmp[20]; - sprintf(tmp, "%0.6f", lval ); + snprintf(tmp, sizeof(tmp), "%0.6f", lval ); wPrefSetString( section, name, tmp ); } @@ -244,15 +259,20 @@ wBool_t wPrefGetFloatBasic( } -void wPrefFlush( void ) +void wPrefFlush( char * name ) { prefs_t * p; for (p=&prefs(0); p<&prefs(prefs_da.cnt); p++) { - if ( p->dirty ) + if (name && name[0]) + WritePrivateProfileString( p->section, p->name, p->val, name ); + else if (p->dirty) WritePrivateProfileString( p->section, p->name, p->val, mswProfileFile ); } - WritePrivateProfileString( NULL, NULL, NULL, mswProfileFile ); + if (name && name[0]) + WritePrivateProfileString( NULL, NULL, NULL, name ); + else + WritePrivateProfileString( NULL, NULL, NULL, mswProfileFile ); } @@ -273,3 +293,4 @@ void wPrefReset( } prefs_da.cnt = 0; } + diff --git a/app/wlib/mswlib/mswprint.c b/app/wlib/mswlib/mswprint.c index 13756c7..e38ca05 100644 --- a/app/wlib/mswlib/mswprint.c +++ b/app/wlib/mswlib/mswprint.c @@ -4,9 +4,6 @@ #include #include #include -#ifndef WIN32 -#include -#endif #include "mswint.h" /* @@ -18,13 +15,9 @@ */ -struct wDraw_t print_d; +static struct wDraw_t print_d; -#ifdef WIN32 -struct tagPDA printDlg; -#else -struct tagPD printDlg; -#endif +static struct tagPDA printDlg; static int printStatus = FALSE; static DOCINFO docInfo; static double tBorder = 0.0, rBorder = 0.0, bBorder = 0.0, lBorder = 0.0; @@ -35,7 +28,7 @@ static HPALETTE newPrintPalette; static HPALETTE oldPrintPalette; -void wPrintClip( wPos_t x, wPos_t y, wPos_t w, wPos_t h ) +void wPrintClip( wDrawPix_t x, wDrawPix_t y, wDrawPix_t w, wDrawPix_t h ) { wDrawClip( &print_d, x, y, w, h ); } @@ -196,9 +189,9 @@ void wPrintSetup( wPrintSetupCallBack_p callback ) if (PrintDlg(&printDlg) != 0 && printDlg.hDC) { getPageDim( printDlg.hDC ); } - if ( callback ) { - callback( TRUE ); - } + //if ( callback ) { + // callback( TRUE ); + //} } const char* wPrintGetName() @@ -255,8 +248,8 @@ HDC mswGetPrinterDC( void ) static wBool_t printAbort = FALSE; -HWND hAbortDlgWnd; -FARPROC lpAbortDlg, lpAbortProc; +static HWND hAbortDlgWnd; +static FARPROC lpAbortDlg, lpAbortProc; static int pageNumber; int FAR PASCAL mswAbortDlg( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) diff --git a/app/wlib/mswlib/mswsplash.c b/app/wlib/mswlib/mswsplash.c index 172b563..bd7644f 100644 --- a/app/wlib/mswlib/mswsplash.c +++ b/app/wlib/mswlib/mswsplash.c @@ -41,9 +41,9 @@ static HWND hSplash; static LPWORD lpwAlign( LPWORD lpIn ) { - ULONG ul; + ULONGLONG ul; - ul = (ULONG) lpIn; + ul = (ULONGLONG) lpIn; ul +=3; ul >>=2; ul <<=2; @@ -148,7 +148,7 @@ wCreateSplash( char *appname, char *appver ) cyDlgUnit = HIWORD(GetDialogBaseUnits()); /* load the logo bitmap */ - sprintf( logoPath, "%s\\logo.bmp", wGetAppLibDir()); + snprintf( logoPath, sizeof(logoPath), "%s\\logo.bmp", wGetAppLibDir()); hBmp = LoadImage( mswHInst, logoPath, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE ); if( !hBmp ) return( 0 ); @@ -266,4 +266,5 @@ wDestroySplash(void) { DestroyWindow( hSplash ); return; -} \ No newline at end of file +} + diff --git a/app/wlib/mswlib/mswstatus.c b/app/wlib/mswlib/mswstatus.c index f9d72f4..1502a4e 100644 --- a/app/wlib/mswlib/mswstatus.c +++ b/app/wlib/mswlib/mswstatus.c @@ -59,10 +59,10 @@ void wStatusSetValue( wStatus_p wStatusCreate( wWin_p parent, - wPos_t x, - wPos_t y, + wWinPix_t x, + wWinPix_t y, const char * labelStr, - wPos_t width, + wWinPix_t width, const char *message) { return (wStatus_p)wMessageCreateEx(parent, x, y, labelStr, width, message, 0); @@ -75,7 +75,7 @@ wStatus_p wStatusCreate( * \return expected width of message box */ -wPos_t +wWinPix_t wStatusGetWidth(const char *testString) { return (wMessageGetWidth(testString)); @@ -88,7 +88,7 @@ wStatusGetWidth(const char *testString) * \return text height */ -wPos_t wStatusGetHeight( +wWinPix_t wStatusGetHeight( long flags) { return (wMessageGetHeight(flags)); @@ -104,7 +104,7 @@ wPos_t wStatusGetHeight( void wStatusSetWidth( wStatus_p b, - wPos_t width) + wWinPix_t width) { wMessageSetWidth((wMessage_p)b, width); -} \ No newline at end of file +} diff --git a/app/wlib/mswlib/mswtext.c b/app/wlib/mswlib/mswtext.c index 0a0ce88..b43a5d4 100644 --- a/app/wlib/mswlib/mswtext.c +++ b/app/wlib/mswlib/mswtext.c @@ -58,23 +58,17 @@ struct wText_t { HANDLE hText; }; -BOOL_T textPrintAbort = FALSE; - void wTextClear( wText_p b) { - long rc; - rc = SendMessage(b->hWnd, EM_SETREADONLY, 0, 0L); -#ifdef WIN32 - rc = SendMessage(b->hWnd, EM_SETSEL, 0, -1); -#else - rc = SendMessage(b->hWnd, EM_SETSEL, 1, MAKELONG(0, -1)); -#endif - rc = SendMessage(b->hWnd, WM_CLEAR, 0, 0L); + LRESULT rc; + rc = SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)0, (LPARAM)0); + rc = SendMessage(b->hWnd, EM_SETSEL, (WPARAM)0, (LPARAM)-1); + rc = SendMessage(b->hWnd, WM_CLEAR, (WPARAM)0, (LPARAM)0); if (b->option&BO_READONLY) { - rc = SendMessage(b->hWnd, EM_SETREADONLY, 1, 0L); + rc = SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)1, (LPARAM)0); } } @@ -97,7 +91,7 @@ void wTextAppend( char *buffer; char *extText; int textSize; - int len = strlen(text); + size_t len = strlen(text); if (!len) { return; @@ -135,11 +129,11 @@ void wTextAppend( } if (b->option&BO_READONLY) { - SendMessage(b->hWnd, EM_SETREADONLY, 1, 0L); + SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)1, (LPARAM)0); } // scroll to bottom of text box - SendMessage(b->hWnd, EM_LINESCROLL, 0, 10000L); + SendMessage(b->hWnd, EM_LINESCROLL, (WPARAM)0, (LPARAM)10000); } @@ -157,11 +151,11 @@ BOOL_T wTextSave( return FALSE; } - lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, 0, 0L); + lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, (WPARAM)0, (LPARAM)0); for (l=0; lhWnd, EM_GETLINE, l, (DWORD)(LPSTR)line); + len = (int)SendMessage(b->hWnd, EM_GETLINE, (WPARAM)l, (LPARAM)line); line[len] = '\0'; fprintf(f, "%s\n", line); } @@ -213,17 +207,17 @@ BOOL_T wTextPrint( lineSpace = textMetric.tmHeight + textMetric.tmExternalLeading; linesPerPage = GetDeviceCaps(hDc, VERTRES) / lineSpace; currentLine = 1; - lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, 0, 0L); + lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, (WPARAM)0, (LPARAM)0); IOStatus = 0; for (l=0; lhWnd, EM_GETLINE, l, (DWORD)(LPSTR)line); + len = (int)SendMessage(b->hWnd, EM_GETLINE, (WPARAM)l, (LPARAM)line); TextOut(hDc, 0, currentLine*lineSpace, line, len); if (++currentLine > linesPerPage) { IOStatus = EndPage(hDc); - if (IOStatus < 0 || textPrintAbort) { + if (IOStatus < 0 ) { break; } StartPage(hDc); @@ -231,7 +225,7 @@ BOOL_T wTextPrint( } } - if (IOStatus >= 0 && !textPrintAbort) { + if (IOStatus >= 0 ) { EndPage(hDc); EndDoc(hDc); } @@ -246,7 +240,7 @@ wBool_t wTextGetModified( wText_p b) { int rc; - rc = (int)SendMessage(b->hWnd, EM_GETMODIFY, 0, 0L); + rc = (int)SendMessage(b->hWnd, EM_GETMODIFY, (WPARAM)0, (LPARAM)0); return (wBool_t)rc; } @@ -311,14 +305,14 @@ void wTextSetReadonly( b->option &= ~BO_READONLY; } - SendMessage(b->hWnd, EM_SETREADONLY, ro, 0L); + SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)ro, (LPARAM)0); } void wTextSetSize( wText_p bt, - wPos_t width, - wPos_t height) + wWinPix_t width, + wWinPix_t height) { bt->w = width; bt->h = height; @@ -332,13 +326,13 @@ void wTextSetSize( void wTextComputeSize( wText_p bt, - int rows, - int lines, - wPos_t * w, - wPos_t * h) + wWinPix_t rows, + wWinPix_t lines, + wWinPix_t * w, + wWinPix_t * h) { - static wPos_t scrollV_w = -1; - static wPos_t scrollH_h = -1; + static wWinPix_t scrollV_w = -1; + static wWinPix_t scrollH_h = -1; HDC hDc; TEXTMETRIC metrics; @@ -366,8 +360,8 @@ void wTextSetPosition( wText_p bt, int pos) { - long rc; - rc = SendMessage(bt->hWnd, EM_LINESCROLL, 0, MAKELONG(-65535, 0)); + LRESULT rc; + rc = SendMessage(bt->hWnd, EM_LINESCROLL, (WPARAM)0, (LPARAM)MAKELONG(-65535, 0)); } static void textDoneProc(wControl_p b) @@ -387,13 +381,13 @@ static callBacks_t textCallBacks = { wText_p wTextCreate( wWin_p parent, - POS_T x, - POS_T y, + wWinPix_t x, + wWinPix_t y, const char * helpStr, const char * labelStr, long option, - POS_T width, - POS_T height) + wWinPix_t width, + wWinPix_t height) { wText_p b; DWORD style; @@ -416,17 +410,13 @@ wText_p wTextCreate( b->hWnd = CreateWindow("EDIT", NULL, style, b->x, b->y, width, height, - ((wControl_p)parent)->hWnd, (HMENU)index, mswHInst, NULL); + ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL); if (b->hWnd == NULL) { mswFail("CreateWindow(TEXT)"); return b; } -#ifdef CONTROL3D - Ctl3dSubclassCtl(b->hWnd); -#endif - if (option & BT_FIXEDFONT) { if (fixedTextFont == (HFONT)0) { fixedTextFont = CreateFontIndirect(&fixedFont); @@ -434,13 +424,13 @@ wText_p wTextCreate( SendMessage(b->hWnd, WM_SETFONT, (WPARAM)fixedTextFont, (LPARAM)MAKELONG(1, 0)); } else if (!mswThickFont) { - SendMessage(b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, 0L); + SendMessage(b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, (LPARAM)0); } - b->hText = (HANDLE)SendMessage(b->hWnd, EM_GETHANDLE, 0, 0L); + b->hText = (HANDLE)SendMessage(b->hWnd, EM_GETHANDLE, (WPARAM)0, (LPARAM)0); if (option & BT_CHARUNITS) { - wPos_t w, h; + wWinPix_t w, h; wTextComputeSize(b, width, height, &w, &h); if (!SetWindowPos(b->hWnd, HWND_TOP, 0, 0, diff --git a/app/wlib/mswlib/simple-gettext.c b/app/wlib/mswlib/simple-gettext.c index 412eece..951ce4c 100644 --- a/app/wlib/mswlib/simple-gettext.c +++ b/app/wlib/mswlib/simple-gettext.c @@ -224,7 +224,7 @@ load_domain( const char *filename ) to_read = size; read_ptr = (char *) data; do { - unsigned long int nb = fread( read_ptr, 1, to_read, fp ); + unsigned long int nb = (unsigned int)fread( read_ptr, 1, to_read, fp ); if( nb < to_read ) { fclose (fp); free(data); @@ -341,7 +341,7 @@ get_string( struct loaded_domain *domain, u32 idx ) domain->mapped[idx] = 1; plen = strlen (p); - buf = utf8_to_native (p, plen, -1); + buf = utf8_to_native (p, (unsigned int)plen, -1); buflen = strlen (buf); if (buflen <= plen){ strcpy (p, buf); @@ -392,7 +392,7 @@ gettext( const char *msgid ) /* Locate the MSGID and its translation. */ if( domain->hash_size > 2 && domain->hash_tab ) { /* Use the hashing table. */ - u32 len = strlen (msgid); + u32 len = (u32)strlen (msgid); u32 hash_val = hash_string (msgid); u32 idx = hash_val % domain->hash_size; u32 incr = 1 + (hash_val % (domain->hash_size - 2)); @@ -444,7 +444,7 @@ gettext( const char *msgid ) else if (cmp_val > 0) bottom = act + 1; else - return (char *)get_string( domain, act ); + return (char *)get_string( domain, (int)(act) ); } not_found: diff --git a/app/wlib/mswlib/utf8conv.c b/app/wlib/mswlib/utf8conv.c index 62ada76..5a39b34 100644 --- a/app/wlib/mswlib/utf8conv.c +++ b/app/wlib/mswlib/utf8conv.c @@ -43,7 +43,7 @@ bool wSystemToUTF8(const char *inString, char *outString, unsigned outStringLength) { - unsigned int cnt = 2 * (strlen(inString) + 1); + unsigned int cnt = 2 * (unsigned int)(strlen(inString) + 1); char *tempBuffer = malloc(cnt); // convert to wide character (UTF16) @@ -81,7 +81,7 @@ wSystemToUTF8(const char *inString, char *outString, unsigned outStringLength) bool wUTF8ToSystem(const char *inString, char *outString, unsigned outStringLength) { - unsigned int cnt = 2 * (strlen(inString) + 1); + unsigned int cnt = 2 * (int)(strlen(inString) + 1); char *tempBuffer = malloc(cnt); // convert to wide character (UTF16) -- cgit v1.2.3