summaryrefslogtreecommitdiff
path: root/app/wlib/mswlib
diff options
context:
space:
mode:
Diffstat (limited to 'app/wlib/mswlib')
-rw-r--r--app/wlib/mswlib/CMakeLists.txt1
-rw-r--r--app/wlib/mswlib/backgnd.c367
-rw-r--r--app/wlib/mswlib/dynarr.h4
-rw-r--r--app/wlib/mswlib/gwin32.c2
-rw-r--r--app/wlib/mswlib/mswbitmap.c22
-rw-r--r--app/wlib/mswlib/mswbox.c14
-rw-r--r--app/wlib/mswlib/mswbutt.c155
-rw-r--r--app/wlib/mswlib/mswchoic.c87
-rw-r--r--app/wlib/mswlib/mswcolor.c13
-rw-r--r--app/wlib/mswlib/mswdraw.c409
-rw-r--r--app/wlib/mswlib/mswedit.c115
-rw-r--r--app/wlib/mswlib/mswint.h179
-rw-r--r--app/wlib/mswlib/mswlines.c2
-rw-r--r--app/wlib/mswlib/mswlist.c238
-rw-r--r--app/wlib/mswlib/mswmenu.c38
-rw-r--r--app/wlib/mswlib/mswmisc.c676
-rw-r--r--app/wlib/mswlib/mswmsg.c75
-rw-r--r--app/wlib/mswlib/mswpref.c47
-rw-r--r--app/wlib/mswlib/mswprint.c23
-rw-r--r--app/wlib/mswlib/mswsplash.c9
-rw-r--r--app/wlib/mswlib/mswstatus.c14
-rw-r--r--app/wlib/mswlib/mswtext.c78
-rw-r--r--app/wlib/mswlib/simple-gettext.c8
-rw-r--r--app/wlib/mswlib/utf8conv.c4
24 files changed, 1350 insertions, 1230 deletions
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 <errno.h>
#include <ctype.h>
#if defined(_MSC_VER) || defined(__DMC__)
-# include <io.h>
+#include <io.h>
#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 <commdlg.h>
#include <stdio.h>
#include <assert.h>
-#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 <commdlg.h>
#include <math.h>
#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 <Return> 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<<cnt)) != 0, 0L );
+ (WPARAM)((val & (1L<<cnt)) != 0), (LPARAM)0 );
bc->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 <Return> 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<<num);
}
SendMessage( (*rest)->hWnd, BM_SETCHECK,
- (bc->oldVal & (1L<<num)) != 0, 0L );
+ (WPARAM)((bc->oldVal & (1L<<num)) != 0), (LPARAM)0 );
break;
case B_RADIO:
if (*rest != me) {
- SendMessage( (*rest)->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=<rgb> to custom-15=<rgb> 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 <math.h>
#include <winuser.h>
-#ifdef WIN32
#define wFont_t tagLOGFONTA
-#else
-#define wFont_t tagLOGFONT
-#endif
-#include "misc.h"
#include "mswint.h"
#include <FreeImage.h>
@@ -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; i<cnt; i++ ) {
- a0 += aa;
- psx = px + r * mswsin(a0);
- psy = py + r * mswcos(a0);
- pp2.x = pp1.x = XINCH2PIX( d, (wPos_t)psx );
- pp2.y = pp1.y = YINCH2PIX( d, (wPos_t)psy );
+ aa += ai;
+ psx = px + r * sin(aa);
+ psy = py + r * cos(aa);
+ pp2.x = pp1.x = XDRAWPIX2WINPIX( d, psx );
+ pp2.y = pp1.y = YDRAWPIX2WINPIX( d, psy );
if ( clip0( &pp0, &pp1, d ) ) {
if (needMoveTo) {
MoveTo( d->hDc, 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 iy1<iy0 */
hRgnClip = CreateRectRgn( ix0, iy1, ix1, iy0 );
SelectClipRgn( d->hDc, 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 <FreeImage.h>
+#include <stdio.h>
#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; inx<bl->count; 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; inx<bl->count; 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; inx<bl->colCnt; 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; inx<bl->colCnt; 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 <Return> 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 <Return> 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 <math.h>
#include <ctype.h>
#include <assert.h>
-#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 <stdio.h>
#include <assert.h>
#include <htmlhelp.h>
-#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:"<NULL>"),
(b->helpStr?b->helpStr:"<NULL>"));
@@ -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 <commdlg.h>
#include <math.h>
#include <stdio.h>
-#include "misc.h"
#include "mswint.h"
#include <shlobj.h>
#include <Shlwapi.h>
@@ -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; i<prefs_da.cnt; i++) {
+ p = &prefs(i);
+ if (!name || !name[0]) name = mswProfileFile;
+ int rc = GetPrivateProfileString( p->section, 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 <stdlib.h>
#include <commdlg.h>
#include <math.h>
-#ifndef WIN32
-#include <print.h>
-#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; l<lc; l++) {
*(WORD*)line = sizeof(line)-1;
- len = (int)SendMessage(b->hWnd, 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; l<lc; l++) {
*(WORD*)line = sizeof(line)-1;
- len = (int)SendMessage(b->hWnd, 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)