Skip to content
This repository has been archived by the owner on Oct 27, 2021. It is now read-only.

Commit

Permalink
Don't use int to handle type
Browse files Browse the repository at this point in the history
Couldn't accept handle values greater than 0x7FFFFFFF, which wasn't enough even on 32bit system, and completely wrong for 64bit.
  • Loading branch information
nu774 authored and wiredfool committed Oct 1, 2015
1 parent 4efe262 commit 2be12de
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 26 deletions.
47 changes: 27 additions & 20 deletions display.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@

#include "ImDib.h"

#if SIZEOF_VOID_P == 8
#define F_HANDLE "K"
#else
#define F_HANDLE "k"
#endif

typedef struct {
PyObject_HEAD
ImagingDIB dib;
Expand Down Expand Up @@ -74,8 +80,8 @@ _delete(ImagingDisplayObject* display)
static PyObject*
_expose(ImagingDisplayObject* display, PyObject* args)
{
int hdc;
if (!PyArg_ParseTuple(args, "i", &hdc))
HDC hdc;
if (!PyArg_ParseTuple(args, F_HANDLE, &hdc))
return NULL;

ImagingExposeDIB(display->dib, hdc);
Expand All @@ -87,10 +93,10 @@ _expose(ImagingDisplayObject* display, PyObject* args)
static PyObject*
_draw(ImagingDisplayObject* display, PyObject* args)
{
int hdc;
HDC hdc;
int dst[4];
int src[4];
if (!PyArg_ParseTuple(args, "i(iiii)(iiii)", &hdc,
if (!PyArg_ParseTuple(args, F_HANDLE "(iiii)(iiii)", &hdc,
dst+0, dst+1, dst+2, dst+3,
src+0, src+1, src+2, src+3))
return NULL;
Expand Down Expand Up @@ -131,10 +137,10 @@ _paste(ImagingDisplayObject* display, PyObject* args)
static PyObject*
_query_palette(ImagingDisplayObject* display, PyObject* args)
{
int hdc;
HDC hdc;
int status;

if (!PyArg_ParseTuple(args, "i", &hdc))
if (!PyArg_ParseTuple(args, F_HANDLE, &hdc))
return NULL;

status = ImagingQueryPaletteDIB(display->dib, hdc);
Expand All @@ -145,30 +151,31 @@ _query_palette(ImagingDisplayObject* display, PyObject* args)
static PyObject*
_getdc(ImagingDisplayObject* display, PyObject* args)
{
int window;
HWND window;
HDC dc;

if (!PyArg_ParseTuple(args, "i", &window))
if (!PyArg_ParseTuple(args, F_HANDLE, &window))
return NULL;

dc = GetDC((HWND) window);
dc = GetDC(window);
if (!dc) {
PyErr_SetString(PyExc_IOError, "cannot create dc");
return NULL;
}

return Py_BuildValue("i", (int) dc);
return Py_BuildValue(F_HANDLE, dc);
}

static PyObject*
_releasedc(ImagingDisplayObject* display, PyObject* args)
{
int window, dc;
HWND window;
HDC dc;

if (!PyArg_ParseTuple(args, "ii", &window, &dc))
if (!PyArg_ParseTuple(args, F_HANDLE F_HANDLE, &window, &dc))
return NULL;

ReleaseDC((HWND) window, (HDC) dc);
ReleaseDC(window, dc);

Py_INCREF(Py_None);
return Py_None;
Expand Down Expand Up @@ -386,7 +393,7 @@ static BOOL CALLBACK list_windows_callback(HWND hwnd, LPARAM lParam)
if (title_size > 0) {
title = PyUnicode_FromStringAndSize(NULL, title_size);
if (title)
GetWindowText(hwnd, PyUnicode_AS_UNICODE(title), title_size+1);
GetWindowTextW(hwnd, PyUnicode_AS_UNICODE(title), title_size+1);
} else
title = PyUnicode_FromString("");
if (!title)
Expand All @@ -397,7 +404,7 @@ static BOOL CALLBACK list_windows_callback(HWND hwnd, LPARAM lParam)
GetWindowRect(hwnd, &outer);

item = Py_BuildValue(
"nN(iiii)(iiii)", (Py_ssize_t) hwnd, title,
F_HANDLE "N(iiii)(iiii)", hwnd, title,
inner.left, inner.top, inner.right, inner.bottom,
outer.left, outer.top, outer.right, outer.bottom
);
Expand Down Expand Up @@ -600,10 +607,10 @@ windowCallback(HWND wnd, UINT message, WPARAM wParam, LPARAM lParam)
/* fall through... */
case WM_PAINT:
case WM_SIZE:
callback = (PyObject*) GetWindowLong(wnd, 0);
callback = (PyObject*) GetWindowLongPtr(wnd, 0);
if (callback) {
threadstate = (PyThreadState*)
GetWindowLong(wnd, sizeof(PyObject*));
GetWindowLongPtr(wnd, sizeof(PyObject*));
current_threadstate = PyThreadState_Swap(NULL);
PyEval_RestoreThread(threadstate);
} else
Expand Down Expand Up @@ -631,7 +638,7 @@ windowCallback(HWND wnd, UINT message, WPARAM wParam, LPARAM lParam)
callback_error("window damage callback");

result = PyObject_CallFunction(
callback, "siiiii", "clear", (int) dc,
callback, "s" F_HANDLE "iiii", "clear", dc,
0, 0, rect.right-rect.left, rect.bottom-rect.top
);
if (result)
Expand All @@ -640,7 +647,7 @@ windowCallback(HWND wnd, UINT message, WPARAM wParam, LPARAM lParam)
callback_error("window clear callback");

result = PyObject_CallFunction(
callback, "siiiii", "repair", (int) dc,
callback, "s" F_HANDLE "iiii", "repair", dc,
0, 0, rect.right-rect.left, rect.bottom-rect.top
);
if (result)
Expand Down Expand Up @@ -741,7 +748,7 @@ PyImaging_CreateWindowWin32(PyObject* self, PyObject* args)
SetForegroundWindow(wnd); /* to make sure it's visible */
Py_END_ALLOW_THREADS

return Py_BuildValue("n", (Py_ssize_t) wnd);
return Py_BuildValue(F_HANDLE, wnd);
}

PyObject*
Expand Down
6 changes: 3 additions & 3 deletions libImaging/Dib.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ ImagingPasteDIB(ImagingDIB dib, Imaging im, int xy[4])
}

void
ImagingExposeDIB(ImagingDIB dib, int dc)
ImagingExposeDIB(ImagingDIB dib, void *dc)
{
/* Copy bitmap to display */

Expand All @@ -238,7 +238,7 @@ ImagingExposeDIB(ImagingDIB dib, int dc)
}

void
ImagingDrawDIB(ImagingDIB dib, int dc, int dst[4], int src[4])
ImagingDrawDIB(ImagingDIB dib, void *dc, int dst[4], int src[4])
{
/* Copy bitmap to printer/display */

Expand All @@ -258,7 +258,7 @@ ImagingDrawDIB(ImagingDIB dib, int dc, int dst[4], int src[4])
}

int
ImagingQueryPaletteDIB(ImagingDIB dib, int dc)
ImagingQueryPaletteDIB(ImagingDIB dib, void *dc)
{
/* Install bitmap palette */

Expand Down
6 changes: 3 additions & 3 deletions libImaging/ImDib.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ extern ImagingDIB ImagingNewDIB(const char *mode, int xsize, int ysize);

extern void ImagingDeleteDIB(ImagingDIB im);

extern void ImagingDrawDIB(ImagingDIB dib, int dc, int dst[4], int src[4]);
extern void ImagingExposeDIB(ImagingDIB dib, int dc);
extern void ImagingDrawDIB(ImagingDIB dib, void *dc, int dst[4], int src[4]);
extern void ImagingExposeDIB(ImagingDIB dib, void *dc);

extern int ImagingQueryPaletteDIB(ImagingDIB dib, int dc);
extern int ImagingQueryPaletteDIB(ImagingDIB dib, void *dc);

extern void ImagingPasteDIB(ImagingDIB dib, Imaging im, int xy[4]);

Expand Down

0 comments on commit 2be12de

Please sign in to comment.