diff options
author | dgp <dgp@users.sourceforge.net> | 2024-07-31 17:58:28 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2024-07-31 17:58:28 (GMT) |
commit | 849e8743a0a26f736f3179888535404b44c47181 (patch) | |
tree | 78f35d81fad7deefcd7684bad459d198778c0d66 /win | |
parent | 45d3973d64de534a885940f93f052d967a0d0b67 (diff) | |
parent | e626189b9df61e69de84156fc55368c0e0f35e8a (diff) | |
download | tk-core-9-0-b3.zip tk-core-9-0-b3.tar.gz tk-core-9-0-b3.tar.bz2 |
merge trunkcore-9-0-b3
Diffstat (limited to 'win')
-rw-r--r-- | win/tkWinDraw.c | 61 | ||||
-rw-r--r-- | win/tkWinGDI.c | 6 | ||||
-rw-r--r-- | win/tkWinInt.h | 34 | ||||
-rw-r--r-- | win/tkWinX.c | 2 |
4 files changed, 83 insertions, 20 deletions
diff --git a/win/tkWinDraw.c b/win/tkWinDraw.c index 1022be4..7f96164 100644 --- a/win/tkWinDraw.c +++ b/win/tkWinDraw.c @@ -1488,6 +1488,67 @@ Tk_DrawHighlightBorder( /* *---------------------------------------------------------------------- * + * TkWinDrawDottedRect -- + * + * This function draws a dotted rectangle, used as focus ring of Ttk + * widgets and for rendering the active element of a listbox. + * + * Results: + * None. + * + * Side effects: + * A dotted rectangle is drawn in the specified Drawable. + * + *---------------------------------------------------------------------- + */ + +void +TkWinDrawDottedRect( + Display *disp, /* Display containing the dotted rectangle. */ + Drawable d, /* Where to draw the rectangle (typically a + * pixmap for double buffering). */ + unsigned long pixel, /* color to use for drawing the rectangle. */ + int x, int y, /* Coordinates of the top-left corner. */ + int width, int height) /* Width & height, _including the border_. */ +{ + TkWinDCState state; + HDC dc; + LOGBRUSH lb; + HPEN pen; + int widthMod2 = width % 2, heightMod2 = height % 2; + int x2 = x + width - 1, y2 = y + height - 1; + + dc = TkWinGetDrawableDC(disp, d, &state); + + lb.lbStyle = BS_SOLID; + lb.lbColor = (COLORREF)pixel; + lb.lbHatch = 0; + + pen = ExtCreatePen(PS_COSMETIC | PS_ALTERNATE, 1, &lb, 0, NULL); + SelectObject(dc, pen); + SelectObject(dc, GetStockObject(NULL_BRUSH)); + + if (widthMod2 == 0 && heightMod2 == 0) { + MoveToEx(dc, x+1, y, NULL); LineTo(dc, x2, y); /* N */ + MoveToEx(dc, x+2, y2, NULL); LineTo(dc, x2, y2+1); /* S */ + MoveToEx(dc, x, y+2, NULL); LineTo(dc, x, y2+1); /* W */ + MoveToEx(dc, x2, y+1, NULL); LineTo(dc, x2, y2); /* E */ + } else { + int dx = widthMod2, dy = heightMod2; + + MoveToEx(dc, x+1, y, NULL); LineTo(dc, x2+dx, y); /* N */ + MoveToEx(dc, x+1, y2, NULL); LineTo(dc, x2+dx, y2); /* S */ + MoveToEx(dc, x, y+1, NULL); LineTo(dc, x, y2+dy); /* W */ + MoveToEx(dc, x2, y+1, NULL); LineTo(dc, x2, y2+dy); /* E */ + } + + DeleteObject(pen); + TkWinReleaseDrawableDC(d, dc, &state); +} + +/* + *---------------------------------------------------------------------- + * * TkpDrawFrameEx -- * * This function draws the rectangular frame area. diff --git a/win/tkWinGDI.c b/win/tkWinGDI.c index 2cded45..4d0c129 100644 --- a/win/tkWinGDI.c +++ b/win/tkWinGDI.c @@ -955,9 +955,9 @@ static int GdiOval( hDC = printDC; if ((Tcl_GetIntFromObj(interp, objv[2], &x1) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[2], &y1) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[3], &x2) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[4], &y2) != TCL_OK)) { + || (Tcl_GetIntFromObj(interp, objv[3], &y1) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[4], &x2) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[5], &y2) != TCL_OK)) { return TCL_ERROR; } if (x1 > x2) { diff --git a/win/tkWinInt.h b/win/tkWinInt.h index 03cd825..3f363cd 100644 --- a/win/tkWinInt.h +++ b/win/tkWinInt.h @@ -194,48 +194,50 @@ MODULE_SCOPE void TkWinSetupSystemFonts(TkMainInfo *mainPtr); * The following is implemented in tkWinWm and used by tkWinEmbed.c */ -MODULE_SCOPE void TkpWinToplevelWithDraw(TkWindow *winPtr); -MODULE_SCOPE void TkpWinToplevelIconify(TkWindow *winPtr); -MODULE_SCOPE void TkpWinToplevelDeiconify(TkWindow *winPtr); -MODULE_SCOPE long TkpWinToplevelIsControlledByWm(TkWindow *winPtr); -MODULE_SCOPE long TkpWinToplevelMove(TkWindow *winPtr, int x, int y); -MODULE_SCOPE long TkpWinToplevelOverrideRedirect(TkWindow *winPtr, +MODULE_SCOPE void TkpWinToplevelWithDraw(TkWindow *winPtr); +MODULE_SCOPE void TkpWinToplevelIconify(TkWindow *winPtr); +MODULE_SCOPE void TkpWinToplevelDeiconify(TkWindow *winPtr); +MODULE_SCOPE long TkpWinToplevelIsControlledByWm(TkWindow *winPtr); +MODULE_SCOPE long TkpWinToplevelMove(TkWindow *winPtr, int x, int y); +MODULE_SCOPE long TkpWinToplevelOverrideRedirect(TkWindow *winPtr, int reqValue); -MODULE_SCOPE void TkpWinToplevelDetachWindow(TkWindow *winPtr); -MODULE_SCOPE int TkpWmGetState(TkWindow *winPtr); +MODULE_SCOPE void TkpWinToplevelDetachWindow(TkWindow *winPtr); +MODULE_SCOPE int TkpWmGetState(TkWindow *winPtr); -MODULE_SCOPE int TkTranslateWinEvent(HWND hwnd, UINT message, +MODULE_SCOPE int TkTranslateWinEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, LRESULT *result); -MODULE_SCOPE void TkWinPointerEvent(HWND hwnd, int x, int y); +MODULE_SCOPE void TkWinPointerEvent(HWND hwnd, int x, int y); /* * The following is implemented in tkWinPointer.c and also used in tkWinWindow.c */ -MODULE_SCOPE void TkSetCursorPos(int x, int y); +MODULE_SCOPE void TkSetCursorPos(int x, int y); /* * The following is implemented in tkWinSysTray.c */ -MODULE_SCOPE int WinIcoInit (Tcl_Interp* interp); +MODULE_SCOPE int WinIcoInit (Tcl_Interp* interp); /* * The following is implemented in tkWinGDI.c */ -MODULE_SCOPE int Winprint_Init(Tcl_Interp* interp); +MODULE_SCOPE int Winprint_Init(Tcl_Interp* interp); /* - * The following is implemented in tkWinSysTray.c + * The following is implemented in tkWinDraw.c and used in tkUtil.c */ -MODULE_SCOPE int WinIcoInit (Tcl_Interp* interp); +MODULE_SCOPE void TkWinDrawDottedRect (Display *disp, Drawable d, + unsigned long pixel, int x, int y, + int width, int height); /* * Common routines used in Windows implementation */ -MODULE_SCOPE Tcl_Obj * TkWin32ErrorObj(HRESULT hrError); +MODULE_SCOPE Tcl_Obj * TkWin32ErrorObj(HRESULT hrError); /* diff --git a/win/tkWinX.c b/win/tkWinX.c index 656e142..c61601b 100644 --- a/win/tkWinX.c +++ b/win/tkWinX.c @@ -1165,7 +1165,7 @@ GenerateXEvent( event.key.nbytes = 0; event.x.xkey.state = state; event.x.xany.serial = scrollCounter++; - event.x.xkey.keycode = (unsigned int) delta; + event.x.xkey.keycode = (unsigned int) (delta & 0xffff); } else { event.x.type = MouseWheelEvent; event.x.xany.send_event = -1; |