summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
Diffstat (limited to 'win')
-rw-r--r--win/tkWinDraw.c61
-rw-r--r--win/tkWinGDI.c6
-rw-r--r--win/tkWinInt.h34
-rw-r--r--win/tkWinX.c2
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;