Cleanup win32 code.

This commit is contained in:
dgis 2021-10-12 20:49:50 +02:00
parent 2d5262c511
commit 009ecbccf5
5 changed files with 131 additions and 77 deletions

View file

@ -80,17 +80,16 @@ android {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
ndkVersion '22.1.7171670'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'androidx.preference:preference:1.1.1'
implementation 'com.google.android.material:material:1.2.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.documentfile:documentfile:1.0.1'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test:runner:1.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
androidTestImplementation 'androidx.test:runner:1.4.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

View file

@ -668,10 +668,6 @@ JNIEXPORT jint JNICALL Java_org_emulator_calculator_NativeLib_onFileNew(JNIEnv *
chooseCurrentKmlMode = ChooseKmlMode_UNKNOWN;
if(result) {
if(hLcdDC && hLcdDC->selectedBitmap) {
hLcdDC->selectedBitmap->bitmapInfoHeader->biHeight = -abs(hLcdDC->selectedBitmap->bitmapInfoHeader->biHeight);
}
mainViewResizeCallback(nBackgroundW, nBackgroundH);
draw();
@ -718,11 +714,6 @@ JNIEXPORT jint JNICALL Java_org_emulator_calculator_NativeLib_onFileOpen(JNIEnv
}
BOOL result = OpenDocument(szBufferFilename);
if(pbyRomBackup) pbyRomBackup = NULL;
if (result) {
if(hLcdDC && hLcdDC->selectedBitmap) {
hLcdDC->selectedBitmap->bitmapInfoHeader->biHeight = -abs(hLcdDC->selectedBitmap->bitmapInfoHeader->biHeight);
}
}
chooseCurrentKmlMode = ChooseKmlMode_UNKNOWN;
mainViewResizeCallback(nBackgroundW, nBackgroundH);
if(result) {
@ -1069,10 +1060,6 @@ JNIEXPORT jint JNICALL Java_org_emulator_calculator_NativeLib_onViewScript(JNIEn
chooseCurrentKmlMode = ChooseKmlMode_UNKNOWN;
if(bSucc) {
if(hLcdDC && hLcdDC->selectedBitmap) {
hLcdDC->selectedBitmap->bitmapInfoHeader->biHeight = -abs(hLcdDC->selectedBitmap->bitmapInfoHeader->biHeight);
}
mainViewResizeCallback(nBackgroundW, nBackgroundH);
draw();
if (Chipset.wRomCrc != wRomCrc) // ROM changed
@ -1102,9 +1089,6 @@ JNIEXPORT void JNICALL Java_org_emulator_calculator_NativeLib_onBackupSave(JNIEn
JNIEXPORT void JNICALL Java_org_emulator_calculator_NativeLib_onBackupRestore(JNIEnv *env, jobject thisz) {
SwitchToState(SM_INVALID);
RestoreBackup();
if(hLcdDC && hLcdDC->selectedBitmap) {
hLcdDC->selectedBitmap->bitmapInfoHeader->biHeight = -abs(hLcdDC->selectedBitmap->bitmapInfoHeader->biHeight);
}
if (pbyRom) SwitchToState(SM_RUN);
}

View file

@ -30,6 +30,7 @@
extern JavaVM *java_machine;
extern jobject bitmapMainScreen;
extern AndroidBitmapInfo androidBitmapInfo;
//extern RECT mainViewRectangleToUpdate;
extern HANDLE hWnd;
extern LPTSTR szTitle;
@ -1737,7 +1738,7 @@ BOOL DeleteMenu(HMENU hMenu, UINT uPosition, UINT uFlags) { return FALSE; }
BOOL InsertMenu(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, LPCTSTR lpNewItem) { return FALSE; }
BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) { return 0; }
BOOL IsRectEmpty(CONST RECT *lprc) { return 0; }
BOOL WINAPI SetWindowOrgEx(HDC hdc, int x, int y, LPPOINT lppt) {
if(lppt) {
lppt->x = hdc->windowOriginX;
@ -1757,21 +1758,21 @@ HGDIOBJ SelectObject(HDC hdc, HGDIOBJ h) {
case HGDIOBJ_TYPE_BRUSH: {
HBRUSH oldSelectedBrushColor = hdc->selectedBrushColor;
hdc->selectedBrushColor = h;
return oldSelectedBrushColor; //h;
return oldSelectedBrushColor;
}
case HGDIOBJ_TYPE_FONT:
break;
case HGDIOBJ_TYPE_BITMAP: {
//HBITMAP oldSelectedBitmap = hdc->selectedBitmap;
HBITMAP oldSelectedBitmap = hdc->selectedBitmap;
hdc->selectedBitmap = h;
return h; //oldSelectedBitmap;
return oldSelectedBitmap;
}
case HGDIOBJ_TYPE_REGION:
break;
case HGDIOBJ_TYPE_PALETTE: {
//HPALETTE oldSelectedPalette = hdc->selectedPalette;
HPALETTE oldSelectedPalette = hdc->selectedPalette;
hdc->selectedPalette = h;
return h; //oldSelectedPalette;
return oldSelectedPalette;
}
default:
break;
@ -1842,6 +1843,13 @@ BOOL DeleteObject(HGDIOBJ ho) {
free(ho);
return TRUE;
}
case HGDIOBJ_TYPE_BRUSH: {
PAINT_LOGD("PAINT DeleteObject() HGDIOBJ_TYPE_BRUSH");
ho->handleType = HGDIOBJ_TYPE_INVALID;
ho->brushColor = 0;
free(ho);
return TRUE;
}
default:
break;
}
@ -1962,6 +1970,13 @@ BOOL PatBlt(HDC hdcDest, int x, int y, int w, int h, DWORD rop) {
destinationStride = androidBitmapInfo.stride;
// RECT newRectangleToUpdate;
// newRectangleToUpdate.left = x;
// newRectangleToUpdate.top = y;
// newRectangleToUpdate.right = x + w;
// newRectangleToUpdate.bottom = y + h;
// UnionRect(&mainViewRectangleToUpdate, &mainViewRectangleToUpdate, &newRectangleToUpdate);
if ((ret = AndroidBitmap_lockPixels(jniEnv, bitmapMainScreen, &pixelsDestination)) < 0) {
LOGD("AndroidBitmap_lockPixels() failed ! error=%d", ret);
return FALSE;
@ -1972,6 +1987,7 @@ BOOL PatBlt(HDC hdcDest, int x, int y, int w, int h, DWORD rop) {
destinationWidth = hBitmapDestination->bitmapInfoHeader->biWidth;
destinationHeight = abs(hBitmapDestination->bitmapInfoHeader->biHeight);
//TODO destinationTopDown = hBitmapDestination->bitmapInfoHeader->biHeight < 0;
destinationStride = (float)(4 * ((destinationWidth * hBitmapDestination->bitmapInfoHeader->biBitCount + 31) / 32));
}
@ -2060,7 +2076,8 @@ BOOL StretchBlt(HDC hdcDest, int xDest, int yDest, int wDest, int hDest, HDC hdc
void * pixelsDestination = NULL;
int destinationBitCount = 8;
BOOL reverseHeight = hBitmapSource->bitmapInfoHeader->biHeight < 0;
BOOL sourceTopDown = hBitmapSource->bitmapInfoHeader->biHeight < 0;
BOOL destinationTopDown = FALSE;
int sourceWidth = hBitmapSource->bitmapInfoHeader->biWidth;
int sourceHeight = abs(hBitmapSource->bitmapInfoHeader->biHeight); // Can be < 0
@ -2092,7 +2109,16 @@ BOOL StretchBlt(HDC hdcDest, int xDest, int yDest, int wDest, int hDest, HDC hdc
destinationBitCount = 32;
destinationStride = androidBitmapInfo.stride;
if ((ret = AndroidBitmap_lockPixels(jniEnv, bitmapMainScreen, &pixelsDestination)) < 0) {
destinationTopDown = TRUE;
// RECT newRectangleToUpdate;
// newRectangleToUpdate.left = xDest;
// newRectangleToUpdate.top = yDest;
// newRectangleToUpdate.right = xDest + wDest;
// newRectangleToUpdate.bottom = yDest + hDest;
// UnionRect(&mainViewRectangleToUpdate, &mainViewRectangleToUpdate, &newRectangleToUpdate);
if ((ret = AndroidBitmap_lockPixels(jniEnv, bitmapMainScreen, &pixelsDestination)) < 0) {
LOGD("AndroidBitmap_lockPixels() failed ! error=%d", ret);
return FALSE;
}
@ -2102,6 +2128,7 @@ BOOL StretchBlt(HDC hdcDest, int xDest, int yDest, int wDest, int hDest, HDC hdc
destinationWidth = hBitmapDestination->bitmapInfoHeader->biWidth;
destinationHeight = abs(hBitmapDestination->bitmapInfoHeader->biHeight);
destinationTopDown = hBitmapDestination->bitmapInfoHeader->biHeight < 0;
destinationBitCount = hBitmapDestination->bitmapInfoHeader->biBitCount;
destinationStride = 4 * ((destinationWidth * hBitmapDestination->bitmapInfoHeader->biBitCount + 31) / 32);
}
@ -2133,11 +2160,11 @@ BOOL StretchBlt(HDC hdcDest, int xDest, int yDest, int wDest, int hDest, HDC hdc
backgroundColor = hdcDest->backgroundColor;
}
StretchBltInternal(xDest, yDest, wDest, hDest, pixelsDestination, destinationBitCount,
destinationStride, destinationWidth, destinationHeight,
xSrc, ySrc, wSrc, hSrc, pixelsSource, sourceBitCount,
sourceStride, sourceWidth, sourceHeight,
rop, reverseHeight, palPalEntry, brushColor, backgroundColor);
StretchBltInternal(xDest, yDest, wDest, hDest,
pixelsDestination, destinationBitCount, destinationStride, destinationWidth, destinationHeight,
xSrc, ySrc, wSrc, hSrc,
pixelsSource, sourceBitCount, sourceStride, sourceWidth, sourceHeight,
rop, sourceTopDown, destinationTopDown, palPalEntry, brushColor, backgroundColor);
if(jniEnv && hdcDest->hdcCompatible == NULL && (ret = AndroidBitmap_unlockPixels(jniEnv, bitmapMainScreen)) < 0) {
LOGD("AndroidBitmap_unlockPixels() failed ! error=%d", ret);
@ -2153,7 +2180,7 @@ void StretchBltInternal(int xDest, int yDest, int wDest, int hDest,
const void *pixelsDestination, int destinationBitCount, int destinationStride, int destinationWidth, int destinationHeight,
int xSrc, int ySrc, int wSrc, int hSrc,
const void *pixelsSource, UINT sourceBitCount, int sourceStride, int sourceWidth, int sourceHeight,
DWORD rop, BOOL reverseHeight, const PALETTEENTRY *palPalEntry, COLORREF brushColor, COLORREF backgroundColor) {
DWORD rop, BOOL sourceTopDown, BOOL destinationTopDown, const PALETTEENTRY *palPalEntry, COLORREF brushColor, COLORREF backgroundColor) {
int dst_maxx = xDest + wDest;
int dst_maxy = yDest + hDest;
@ -2170,12 +2197,19 @@ void StretchBltInternal(int xDest, int yDest, int wDest, int hDest,
if(dst_maxy > destinationHeight)
dst_maxy = destinationHeight;
int src_cury, dst_cury;
for (int y = yDest; y < dst_maxy; y++) {
int src_cury = ySrc + (y - yDest) * hSrc / hDest;
if(!reverseHeight)
src_cury = sourceHeight - 1 - src_cury;
if(sourceTopDown)
src_cury = ySrc + (y - yDest) * hSrc / hDest; // Source top-down
else
src_cury = sourceHeight - 1 - (ySrc + (y - yDest) * hSrc / hDest); // Source bottom-up
if (src_cury < 0 || src_cury >= sourceHeight)
continue;
if(destinationTopDown)
dst_cury = y; // Destination top-down
else
dst_cury = destinationHeight - 1 - y; // Destination bottom-up
BYTE parity = (BYTE) xSrc;
for (int x = xDest; x < dst_maxx; x++, parity++) {
int src_curx = xSrc + (x - xDest) * wSrc / wDest;
@ -2183,7 +2217,7 @@ void StretchBltInternal(int xDest, int yDest, int wDest, int hDest,
continue;
BYTE * sourcePixelBase = pixelsSource + sourceStride * src_cury;
BYTE * destinationPixelBase = pixelsDestination + destinationStride * y;
BYTE * destinationPixelBase = pixelsDestination + destinationStride * dst_cury;
COLORREF sourceColor = 0xFF000000;
BYTE * sourceColorPointer = (BYTE *) &sourceColor;
@ -2343,7 +2377,7 @@ HBITMAP CreateBitmap( int nWidth, int nHeight, UINT nPlanes, UINT nBitCount, CON
newBitmapInfo->bmiHeader.biBitCount = (WORD) nBitCount;
newBitmapInfo->bmiHeader.biClrUsed = 0;
newBitmapInfo->bmiHeader.biWidth = nWidth;
newBitmapInfo->bmiHeader.biHeight = -nHeight;
newBitmapInfo->bmiHeader.biHeight = nHeight;
newBitmapInfo->bmiHeader.biPlanes = (WORD) nPlanes;
newHBITMAP->bitmapInfo = newBitmapInfo;
newHBITMAP->bitmapInfoHeader = (BITMAPINFOHEADER *)newBitmapInfo;
@ -2519,8 +2553,12 @@ COLORREF GetPixel(HDC hdc, int x ,int y) {
return resultColor;
}
BOOL SetRect(LPRECT lprc, int xLeft, int yTop, int xRight, int yBottom) {
//TODO
return 0;
if (!lprc) return FALSE;
lprc->left = xLeft;
lprc->right = xRight;
lprc->top = yTop;
lprc->bottom = yBottom;
return TRUE;
}
BOOL SetRectEmpty(LPRECT lprc) {
if(lprc) {
@ -2532,6 +2570,38 @@ BOOL SetRectEmpty(LPRECT lprc) {
}
return FALSE;
}
BOOL IsRectEmpty(CONST RECT *lprc) {
if (!lprc)
return TRUE;
return lprc->left >= lprc->right || lprc->top >= lprc->bottom;
}
// This comes from Wine source code
BOOL UnionRect(LPRECT dest, CONST RECT *src1, CONST RECT *src2) {
if (!dest) return FALSE;
if (IsRectEmpty(src1))
{
if (IsRectEmpty(src2))
{
SetRectEmpty( dest );
return FALSE;
}
else *dest = *src2;
}
else
{
if (IsRectEmpty(src2)) *dest = *src1;
else
{
dest->left = min( src1->left, src2->left );
dest->right = max( src1->right, src2->right );
dest->top = min( src1->top, src2->top );
dest->bottom = max( src1->bottom, src2->bottom );
}
}
return TRUE;
}
int SetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw) {
//TODO
return 0;

View file

@ -554,46 +554,46 @@ struct _HANDLE {
enum HANDLE_TYPE handleType;
union {
struct {
// HANDLE_TYPE_FILE*
int fileDescriptor;
BOOL fileOpenFileFromContentResolver;
// HANDLE_TYPE_FILE*
int fileDescriptor;
BOOL fileOpenFileFromContentResolver;
AAsset* fileAsset;
AAsset* fileAsset;
// HANDLE_TYPE_FILE_MAPPING*
off_t fileMappingOffset;
size_t fileMappingSize;
void* fileMappingAddress;
DWORD fileMappingProtect;
// HANDLE_TYPE_FILE_MAPPING*
off_t fileMappingOffset;
size_t fileMappingSize;
void* fileMappingAddress;
DWORD fileMappingProtect;
};
struct {
// HANDLE_TYPE_THREAD
pthread_t threadId;
DWORD (*threadStartAddress)(LPVOID);
LPVOID threadParameter;
struct _HANDLE * threadEventMessage;
struct tagMSG threadMessage;
int threadIndex;
// HANDLE_TYPE_THREAD
pthread_t threadId;
DWORD (*threadStartAddress)(LPVOID);
LPVOID threadParameter;
struct _HANDLE * threadEventMessage;
struct tagMSG threadMessage;
int threadIndex;
};
struct {
// HANDLE_TYPE_EVENT
pthread_cond_t eventCVariable;
pthread_mutex_t eventMutex;
BOOL eventAutoReset;
BOOL eventState;
// HANDLE_TYPE_EVENT
pthread_cond_t eventCVariable;
pthread_mutex_t eventMutex;
BOOL eventAutoReset;
BOOL eventState;
};
struct {
// HANDLE_TYPE_WINDOW
HDC windowDC;
// HANDLE_TYPE_WINDOW
HDC windowDC;
};
struct {
// HANDLE_TYPE_ICON
HBITMAP icon;
};
// HANDLE_TYPE_ICON
HBITMAP icon;
};
struct {
// HANDLE_TYPE_COM
@ -783,12 +783,12 @@ extern BOOL BitBlt(HDC hdc, int x, int y, int cx, int cy, HDC hdcSrc, int x1, in
extern int SetStretchBltMode(HDC hdc, int mode);
extern BOOL StretchBlt(HDC hdcDest, int xDest, int yDest, int wDest, int hDest, HDC hdcSrc, int xSrc, int ySrc, int wSrc, int hSrc, DWORD rop);
extern void StretchBltInternal(int xDest, int yDest, int wDest, int hDest, const void *pixelsDestination,
int destinationBitCount, int destinationStride, int destinationWidth,
int destinationHeight, int xSrc, int ySrc, int hSrc, int wSrc,
const void *pixelsSource, UINT sourceBitCount, int sourceStride,
int sourceWidth, int sourceHeight, DWORD rop, BOOL reverseHeight,
const PALETTEENTRY *palPalEntry, COLORREF brushColor,
COLORREF backgroundColor);
int destinationBitCount, int destinationStride, int destinationWidth,
int destinationHeight, int xSrc, int ySrc, int hSrc, int wSrc,
const void *pixelsSource, UINT sourceBitCount, int sourceStride,
int sourceWidth, int sourceHeight, DWORD rop, BOOL sourceTopDown, BOOL destinationTopDown,
const PALETTEENTRY *palPalEntry, COLORREF brushColor,
COLORREF backgroundColor);
extern UINT SetDIBColorTable(HDC hdc, UINT iStart, UINT cEntries, CONST RGBQUAD *prgbq);
/* constants for CreateDIBitmap */
#define CBM_INIT 0x04L /* initialize bitmap */
@ -819,6 +819,8 @@ extern COLORREF SetBkColor(HDC hdc, COLORREF color);
#define RDH_RECTANGLES 1
extern BOOL SetRect(LPRECT lprc, int xLeft, int yTop, int xRight, int yBottom);
extern BOOL SetRectEmpty(LPRECT lprc);
extern BOOL IsRectEmpty(CONST RECT *lprc);
extern BOOL UnionRect(LPRECT dest, CONST RECT *src1, CONST RECT *src2);
struct HRGN__ { int unused; };
typedef struct HRGN__ *HRGN;
@ -1003,7 +1005,6 @@ extern BOOL InsertMenu(HMENU hMenu, UINT uPosition, UINT uFlags, UINT_PTR uIDNew
#define SWP_NOMOVE 0x0002
#define SWP_NOZORDER 0x0004
extern BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags);
extern BOOL IsRectEmpty(CONST RECT *lprc);
extern BOOL WINAPI SetWindowOrgEx(HDC hdc, int x, int y, LPPOINT lppt);
#define _MAX_PATH 260 // max. length of full pathname

View file

@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.0'
classpath 'com.android.tools.build:gradle:7.0.2'
// NOTE: Do not place your application dependencies here; they belong