summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2016-01-01 17:04:42 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2016-01-01 17:04:42 (GMT)
commitfeb61b487f93a0e4dc76a71f13944a165b0b5eca (patch)
tree2c7b0a1ec00da59f122e5ed0bc23c409e8e58d8c
parent57c7ae904d88bbae9b2e6e48f1e8c791b8162d08 (diff)
parent2dc0cc36f2f7a598c431be691a23a4d2898fa15e (diff)
downloadtk-feb61b487f93a0e4dc76a71f13944a165b0b5eca.zip
tk-feb61b487f93a0e4dc76a71f13944a165b0b5eca.tar.gz
tk-feb61b487f93a0e4dc76a71f13944a165b0b5eca.tar.bz2
Merge trunk. Upstream androwish changes
-rw-r--r--generic/tkInt.h4
-rw-r--r--generic/tkTextDisp.c9
-rw-r--r--generic/tkWindow.c2
-rw-r--r--library/demos/entry3.tcl3
-rw-r--r--sdl/SdlTkInt.c1241
-rw-r--r--sdl/SdlTkX.c17
-rw-r--r--sdl/agg-2.4/include/agg_pixfmt_rgb_packed.h2
-rw-r--r--tests/textDisp.test26
8 files changed, 691 insertions, 613 deletions
diff --git a/generic/tkInt.h b/generic/tkInt.h
index bd28132..8198fbe 100644
--- a/generic/tkInt.h
+++ b/generic/tkInt.h
@@ -1226,6 +1226,10 @@ MODULE_SCOPE int TkInitTkCmd(Tcl_Interp *interp,
MODULE_SCOPE int TkInitFontchooser(Tcl_Interp *interp,
ClientData clientData);
MODULE_SCOPE void TkpWarpPointer(TkDisplay *dispPtr);
+#ifdef PLATFORM_SDL
+MODULE_SCOPE int TkInitSdltkCmd(Tcl_Interp *interp,
+ ClientData clientData);
+#endif
#ifdef _WIN32
#define TkParseColor XParseColor
diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c
index 007a562..79b2eec 100644
--- a/generic/tkTextDisp.c
+++ b/generic/tkTextDisp.c
@@ -4805,9 +4805,16 @@ TextRedrawTag(
/*
* Round up the starting position if it's before the first line visible on
- * the screen (we only care about what's on the screen).
+ * the screen (we only care about what's on the screen). Beware that the
+ * display info structure might need update, for instance if we arrived
+ * here from an 'after idle' script removing tags in a range whose
+ * display lines (and dInfo) were partially invalidated by a previous
+ * delete operation in the text widget.
*/
+ if (dInfoPtr->flags & DINFO_OUT_OF_DATE) {
+ UpdateDisplayInfo(textPtr);
+ }
dlPtr = dInfoPtr->dLinePtr;
if (dlPtr == NULL) {
return;
diff --git a/generic/tkWindow.c b/generic/tkWindow.c
index dcd3f34..eb88664 100644
--- a/generic/tkWindow.c
+++ b/generic/tkWindow.c
@@ -137,7 +137,7 @@ static const TkCmd commands[] = {
{"place", Tk_PlaceObjCmd, PASSMAINWINDOW|ISSAFE},
{"raise", Tk_RaiseObjCmd, PASSMAINWINDOW|ISSAFE},
#ifdef PLATFORM_SDL
- {"sdltk", Tk_SdlTkObjCmd, PASSMAINWINDOW|ISSAFE},
+ {"sdltk", (Tcl_ObjCmdProc *) TkInitSdltkCmd, USEINITPROC|PASSMAINWINDOW|ISSAFE},
#endif
{"selection", Tk_SelectionObjCmd, PASSMAINWINDOW},
{"tk", (Tcl_ObjCmdProc *) TkInitTkCmd, USEINITPROC|PASSMAINWINDOW|ISSAFE},
diff --git a/library/demos/entry3.tcl b/library/demos/entry3.tcl
index d4435c6..7fbc7f0 100644
--- a/library/demos/entry3.tcl
+++ b/library/demos/entry3.tcl
@@ -48,6 +48,9 @@ pack $btns -side bottom -fill x
# count - Counter to control the number of times flashed
proc focusAndFlash {W fg bg {count 9}} {
+ if {![winfo exists $W]} {
+ return
+ }
focus -force $W
if {$count<1} {
$W configure -foreground $fg -background $bg
diff --git a/sdl/SdlTkInt.c b/sdl/SdlTkInt.c
index a47f675..39d2b93 100644
--- a/sdl/SdlTkInt.c
+++ b/sdl/SdlTkInt.c
@@ -39,7 +39,7 @@ SendAppEvent(XEvent *event, int *sentp, _Window *_w)
_Window *result = NULL;
while (_w != NULL) {
- if (_w->tkwin != NULL && (_w->tkwin->flags & TK_APP_TOP_LEVEL)) {
+ if ((_w->tkwin != NULL) && (_w->tkwin->flags & TK_APP_TOP_LEVEL)) {
*sentp += 1;
if (*sentp == 1) {
result = _w;
@@ -53,7 +53,7 @@ SendAppEvent(XEvent *event, int *sentp, _Window *_w)
if (_w->child != NULL) {
_Window *tmp = SendAppEvent(event, sentp, _w->child);
- if (result == NULL && tmp != NULL) {
+ if ((result == NULL) && (tmp != NULL)) {
result = tmp;
}
}
@@ -251,8 +251,8 @@ SdlTkScreenRefresh(void)
EVLOG("SdlTkScreenRefresh: GL context is NULL");
return;
}
- /* Detect that GL context has changed. */
- if (SdlTkX.gl_context != NULL && currgl != SdlTkX.gl_context) {
+ /* Detect change of GL context. */
+ if ((SdlTkX.gl_context != NULL) && (currgl != SdlTkX.gl_context)) {
SDL_Texture *newtex;
EVLOG("SdlTkScreenRefresh: GL context switching %p -> %p",
@@ -311,7 +311,7 @@ SdlTkScreenRefresh(void)
focus_window = (_Window *) SdlTkX.focus_window_not_override;
if (focus_window != NULL) {
child = focus_window->parent;
- while (child != NULL && child->dec == NULL) {
+ while ((child != NULL) && (child->dec == NULL)) {
child = child->parent;
}
if (child != NULL) {
@@ -330,11 +330,11 @@ SdlTkScreenRefresh(void)
/* Keep track of which decframe was the "active" one. Redraw frames
* when changes occur. */
if (child->dec != NULL) {
- if (child->child == (_Window *) focus_window &&
+ if ((child->child == (_Window *) focus_window) &&
!SdlTkDecSetActive(child, -1) && SdlTkX.sdlfocus) {
SdlTkDecSetDraw(child, 1);
SdlTkDecSetActive(child, 1);
- } else if (child->child != (_Window *) focus_window &&
+ } else if ((child->child != (_Window *) focus_window) &&
SdlTkDecSetActive(child, -1)) {
SdlTkDecSetDraw(child, 1);
SdlTkDecSetActive(child, 0);
@@ -654,14 +654,14 @@ TranslateTimer2(ClientData clientData)
info->mmb_event.motion.x, info->mmb_event.motion.y,
info->mmb_event.motion.which, info->mmb_event.motion.state,
info->mmb_event.motion.xrel, info->mmb_event.motion.yrel);
- if (info->mmb_event.motion.xrel || info->mmb_event.motion.yrel) {
+ if ((info->mmb_event.motion.xrel) || (info->mmb_event.motion.yrel)) {
SDL_PeepEvents(&info->mmb_event, 1, SDL_ADDEVENT, 0, 0);
} else {
info->count = 0;
info->state = 0;
}
}
- if (info->state) {
+ if (info->state) {
info->function = TranslateTimer2;
info->when = info->now + 100;
EVLOG(" TIMER ON ST=%d", info->state);
@@ -683,9 +683,9 @@ TranslateTimer2(ClientData clientData)
static int
FixKeyCode(int ch)
{
- if (ch >= 'a' && ch <= 'z') {
+ if ((ch >= 'a') && (ch <= 'z')) {
return SDL_SCANCODE_A + ch - 'a';
- } else if (ch >= 'A' && ch <= 'Z') {
+ } else if ((ch >= 'A') && (ch <= 'Z')) {
return SDL_SCANCODE_A + ch - 'A';
}
switch (ch) {
@@ -724,7 +724,7 @@ MkTransChars(XKeyEvent *ev)
{
int ch = 0;
- if (ev->keycode >= SDL_SCANCODE_A && ev->keycode <= SDL_SCANCODE_Z) {
+ if ((ev->keycode >= SDL_SCANCODE_A) && (ev->keycode <= SDL_SCANCODE_Z)) {
ev->trans_chars[0] = ev->keycode - SDL_SCANCODE_A + 'a';
ev->nbytes = 1;
return 1;
@@ -943,16 +943,16 @@ SdlTkTranslateEvent(SDL_Event *sdl_event, XEvent *event, unsigned long now_ms)
* Pinch-to-zoom two finger detection.
*/
- if (sdl_event->type == SDL_FINGERDOWN &&
- sdl_event->tfinger.fingerId >= 0 &&
- sdl_event->tfinger.fingerId < 10) {
+ if ((sdl_event->type == SDL_FINGERDOWN) &&
+ (sdl_event->tfinger.fingerId >= 0) &&
+ (sdl_event->tfinger.fingerId < 10)) {
info->nFingers++;
info->fingerBits |= 1 << sdl_event->tfinger.fingerId;
info->finger[sdl_event->tfinger.fingerId] = sdl_event->tfinger;
doFinger = ((info->fingerBits & 3) == 3) ? 2 : 0;
- } else if (sdl_event->type == SDL_FINGERUP &&
- sdl_event->tfinger.fingerId >= 0 &&
- sdl_event->tfinger.fingerId < 10) {
+ } else if ((sdl_event->type == SDL_FINGERUP) &&
+ (sdl_event->tfinger.fingerId >= 0) &&
+ (sdl_event->tfinger.fingerId < 10)) {
int oldBits = info->fingerBits;
info->nFingers--;
@@ -967,16 +967,16 @@ SdlTkTranslateEvent(SDL_Event *sdl_event, XEvent *event, unsigned long now_ms)
}
info->finger[sdl_event->tfinger.fingerId] = sdl_event->tfinger;
doFinger = sdl_event->tfinger.fingerId + 3;
- if ((oldBits & 3) != 3 || doFinger > 4) {
+ if ((oldBits & 3) != 3 || (doFinger > 4)) {
doFinger = 0;
}
- } else if (sdl_event->type == SDL_FINGERMOTION &&
- sdl_event->tfinger.fingerId >= 0 &&
- sdl_event->tfinger.fingerId < 10) {
+ } else if ((sdl_event->type == SDL_FINGERMOTION) &&
+ (sdl_event->tfinger.fingerId >= 0) &&
+ (sdl_event->tfinger.fingerId < 10)) {
info->finger[sdl_event->tfinger.fingerId] = sdl_event->tfinger;
doFinger = ((info->fingerBits & 3) == 3 &&
- sdl_event->tfinger.fingerId >= 0 &&
- sdl_event->tfinger.fingerId < 2) ? 1 : 0;
+ (sdl_event->tfinger.fingerId >= 0) &&
+ (sdl_event->tfinger.fingerId < 2)) ? 1 : 0;
}
if (doFinger) {
float dx, dy, cx, cy;
@@ -1014,21 +1014,21 @@ SdlTkTranslateEvent(SDL_Event *sdl_event, XEvent *event, unsigned long now_ms)
info->pinchY = y;
if ((info->enabled & TRANSLATE_ZOOM) && info->pinchDelta &&
- info->nFingers >= needFingers) {
+ (info->nFingers >= needFingers)) {
float dir = 0;
- if (info->nFingers == needFingers &&
- ddist <= -SdlTkX.nearby_pixels / 4) {
+ if ((info->nFingers == needFingers) &&
+ (ddist <= -SdlTkX.nearby_pixels / 4)) {
dir = 0.99;
- } else if (info->nFingers == needFingers &&
- ddist >= SdlTkX.nearby_pixels / 4) {
+ } else if ((info->nFingers == needFingers) &&
+ (ddist >= SdlTkX.nearby_pixels / 4)) {
dir = 1 / 0.99;
}
if (dir) {
SdlTkZoomInt(x, y, dir);
- } else if (info->nFingers > needFingers &&
- (pdx <= -2 || pdx >= 2 ||
- pdy <= -2 || pdy >= 2)) {
+ } else if ((info->nFingers > needFingers) &&
+ ((pdx <= -2) || (pdx >= 2) ||
+ (pdy <= -2) || (pdy >= 2))) {
SdlTkPanInt(-pdx, pdy);
}
goto skipTranslation;
@@ -1046,14 +1046,14 @@ SdlTkTranslateEvent(SDL_Event *sdl_event, XEvent *event, unsigned long now_ms)
tkwin = (Tk_Window) SdlTkX.mouse_window->tkwin;
}
if (SdlTkX.capture_window != NULL) {
- if (tkwin != NULL &&
- Tk_Display(tkwin) != SdlTkX.capture_window->display) {
+ if ((tkwin != NULL) &&
+ (Tk_Display(tkwin) != SdlTkX.capture_window->display)) {
tkwin = (Tk_Window) SdlTkX.capture_window;
}
}
if (SdlTkX.keyboard_window != NULL) {
- if (tkwin != NULL &&
- Tk_Display(tkwin) != SdlTkX.keyboard_window->display) {
+ if ((tkwin != NULL) &&
+ (Tk_Display(tkwin) != SdlTkX.keyboard_window->display)) {
tkwin = (Tk_Window) SdlTkX.keyboard_window->tkwin;
}
}
@@ -1092,12 +1092,12 @@ skipPZ:
}
if ((info->state & 8) &&
- !((sdl_event->type == SDL_MOUSEMOTION &&
- sdl_event->button.which == SDL_TOUCH_MOUSEID &&
- sdl_event->button.button == SDL_BUTTON_MIDDLE) ||
+ !(((sdl_event->type == SDL_MOUSEMOTION) &&
+ (sdl_event->button.which == SDL_TOUCH_MOUSEID) &&
+ (sdl_event->button.button == SDL_BUTTON_MIDDLE)) ||
(sdl_event->type == SDL_FINGERUP) ||
- (sdl_event->type >= SDL_JOYAXISMOTION &&
- sdl_event->type <= SDL_JOYDEVICEREMOVED) ||
+ ((sdl_event->type >= SDL_JOYAXISMOTION) &&
+ (sdl_event->type <= SDL_JOYDEVICEREMOVED)) ||
(sdl_event->type < SDL_KEYDOWN) ||
(sdl_event->type > SDL_FINGERMOTION))) {
info->function = NULL;
@@ -1108,9 +1108,9 @@ skipPZ:
if (sdl_event->type == SDL_MOUSEBUTTONDOWN) {
if (!(info->state & 1)) {
info->function = NULL;
- if (info->state == 0 &&
- sdl_event->button.which == SDL_TOUCH_MOUSEID &&
- sdl_event->button.button == SDL_BUTTON_LEFT) {
+ if ((info->state == 0) &&
+ (sdl_event->button.which == SDL_TOUCH_MOUSEID) &&
+ (sdl_event->button.button == SDL_BUTTON_LEFT)) {
info->state = 1;
info->sdl_event = *sdl_event;
info->function = TranslateTimer1;
@@ -1118,13 +1118,13 @@ skipPZ:
EVLOG(" TIMER ON ST=%d", info->state);
return 0;
}
- } else if (info->state == 0 &&
- sdl_event->button.which == SDL_TOUCH_MOUSEID &&
- sdl_event->button.button == SDL_BUTTON_LEFT) {
+ } else if ((info->state == 0) &&
+ (sdl_event->button.which == SDL_TOUCH_MOUSEID) &&
+ (sdl_event->button.button == SDL_BUTTON_LEFT)) {
return 0;
}
- } else if (sdl_event->type == SDL_MOUSEMOTION &&
- sdl_event->motion.which == SDL_TOUCH_MOUSEID) {
+ } else if ((sdl_event->type == SDL_MOUSEMOTION) &&
+ (sdl_event->motion.which == SDL_TOUCH_MOUSEID)) {
int nearby = 21 * SdlTkX.nearby_pixels / 30;
if (nearby < 5) {
@@ -1133,10 +1133,10 @@ skipPZ:
info->sdl_event.button.x = sdl_event->motion.x;
info->sdl_event.button.y = sdl_event->motion.y;
if ((info->state == 1) &&
- (sdl_event->motion.xrel > nearby ||
- sdl_event->motion.xrel < -nearby ||
- sdl_event->motion.yrel > nearby ||
- sdl_event->motion.yrel < -nearby)) {
+ ((sdl_event->motion.xrel > nearby) ||
+ (sdl_event->motion.xrel < -nearby) ||
+ (sdl_event->motion.yrel > nearby) ||
+ (sdl_event->motion.yrel < -nearby))) {
SDL_PeepEvents(sdl_event, 1, SDL_ADDEVENT, 0, 0);
tmp_event = info->sdl_event;
sdl_event = &tmp_event;
@@ -1157,8 +1157,8 @@ skipPZ:
info->sdl_event.button.x = sdl_event->button.x;
info->sdl_event.button.y = sdl_event->button.y;
if ((info->state & 2) &&
- sdl_event->button.which == SDL_TOUCH_MOUSEID &&
- sdl_event->button.button == SDL_BUTTON_LEFT) {
+ (sdl_event->button.which == SDL_TOUCH_MOUSEID) &&
+ (sdl_event->button.button == SDL_BUTTON_LEFT)) {
info->state = 8;
info->count = 7;
info->function = TranslateTimer2;
@@ -1166,8 +1166,8 @@ skipPZ:
EVLOG(" TIMER ON ST=%d", info->state);
return 0;
} else if ((info->state & 1) &&
- sdl_event->button.which == SDL_TOUCH_MOUSEID &&
- sdl_event->button.button == SDL_BUTTON_LEFT) {
+ (sdl_event->button.which == SDL_TOUCH_MOUSEID) &&
+ (sdl_event->button.button == SDL_BUTTON_LEFT)) {
if (info->state == 1) {
SDL_PeepEvents(sdl_event, 1, SDL_ADDEVENT, 0, 0);
sdl_event = &info->sdl_event;
@@ -1252,8 +1252,8 @@ skipTranslation:
event->xkey.keycode = -1;
- if (sdl_event->type != SDL_TEXTINPUT &&
- sdl_event->type != SDL_TEXTEDITING) {
+ if ((sdl_event->type != SDL_TEXTINPUT) &&
+ (sdl_event->type != SDL_TEXTEDITING)) {
int scancode = sdl_event->key.keysym.scancode;
if (sdl_event->key.keysym.mod & KMOD_LALT) {
@@ -1426,14 +1426,14 @@ doNormalKeyEvent:
y = sdl_event->motion.y;
dx = sdl_event->motion.xrel;
dy = sdl_event->motion.yrel;
- if (x <= 0 && dx < 0) {
+ if ((x <= 0) && (dx < 0)) {
dx = 0;
- } else if (x >= SdlTkX.sdlsurf->w - 1 && dx > 0) {
+ } else if ((x >= SdlTkX.sdlsurf->w - 1) && (dx > 0)) {
dx = 0;
}
- if (y <= 0 && dy < 0) {
+ if ((y <= 0) && (dy < 0)) {
dy = 0;
- } else if (y >= SdlTkX.sdlsurf->h - 1 && dy > 0) {
+ } else if ((y >= SdlTkX.sdlsurf->h - 1) && (dy > 0)) {
dy = 0;
}
sdl_event->motion.xrel = (int) (dx / SdlTkX.scale);
@@ -1485,8 +1485,8 @@ doNormalKeyEvent:
*/
if (!IS_ROOT(_w) && SdlTkGrabCheck(_w, &othergrab) &&
(sdl_event->type == SDL_MOUSEBUTTONDOWN) &&
- (sdl_event->button.which == SDL_TOUCH_MOUSEID ||
- sdl_event->button.button == SDL_BUTTON_LEFT)) {
+ ((sdl_event->button.which == SDL_TOUCH_MOUSEID) ||
+ (sdl_event->button.button == SDL_BUTTON_LEFT))) {
SdlTkBringToFrontIfNeeded(_w);
if (SdlTkX.keyboard_window == NULL) {
SdlTkSetInputFocus(SdlTkX.display,
@@ -1516,7 +1516,7 @@ doNormalKeyEvent:
/* NULL for root and decorative frames */
tkwin = (Tk_Window) _w->tkwin;
SdlTkX.cursor_change = 1;
- if (tkwin == NULL && _w->dec != NULL) {
+ if ((tkwin == NULL) && (_w->dec != NULL)) {
SdlTkX.cursor_change = 0;
_w = _w->child;
tkwin = (Tk_Window) _w->tkwin;
@@ -1622,14 +1622,14 @@ doNormalKeyEvent:
tkwin = (Tk_Window) SdlTkX.mouse_window->tkwin;
}
if (SdlTkX.capture_window != NULL) {
- if (tkwin == NULL ||
- Tk_Display(tkwin) != SdlTkX.capture_window->display) {
+ if ((tkwin == NULL) ||
+ (Tk_Display(tkwin) != SdlTkX.capture_window->display)) {
tkwin = (Tk_Window) SdlTkX.capture_window;
}
}
if (SdlTkX.keyboard_window != NULL) {
- if (tkwin == NULL ||
- Tk_Display(tkwin) != SdlTkX.keyboard_window->display) {
+ if ((tkwin == NULL) ||
+ (Tk_Display(tkwin) != SdlTkX.keyboard_window->display)) {
tkwin = (Tk_Window) SdlTkX.keyboard_window->tkwin;
}
}
@@ -1751,15 +1751,15 @@ doNormalKeyEvent:
}
}
if (SdlTkX.capture_window != NULL) {
- if (_w == NULL ||
- _w->display != SdlTkX.capture_window->display) {
+ if ((_w == NULL) ||
+ (_w->display != SdlTkX.capture_window->display)) {
tkwin = (Tk_Window) SdlTkX.capture_window;
_w = (_Window *) Tk_WindowId(tkwin);
}
}
if (SdlTkX.keyboard_window != NULL) {
- if (_w == NULL ||
- _w->display != SdlTkX.keyboard_window->display) {
+ if ((_w == NULL) ||
+ (_w->display != SdlTkX.keyboard_window->display)) {
tkwin = (Tk_Window) SdlTkX.keyboard_window->tkwin;
_w = SdlTkX.keyboard_window;
}
@@ -2094,11 +2094,11 @@ doNormalKeyEvent:
SDL_TEXTUREACCESS_STREAMING,
width, height);
#ifdef ANDROID
- if (newsurf != NULL && newtex != NULL) {
+ if ((newsurf != NULL) && (newtex != NULL)) {
SDL_GL_SwapWindow(SdlTkX.sdlscreen);
}
#endif
- if (newsurf != NULL && newtex != NULL) {
+ if ((newsurf != NULL) && (newtex != NULL)) {
#ifdef ANDROID
int xdpi, ydpi;
#endif
@@ -2116,7 +2116,9 @@ doNormalKeyEvent:
SdlTkX.screen->height = height;
#ifdef ANDROID
xdpi = ydpi = 0;
+#ifdef SDL_HAS_GETWINDOWDPI
SDL_GetWindowDPI(SdlTkX.sdlscreen, &xdpi, &ydpi);
+#endif
if (xdpi && ydpi) {
SdlTkX.screen->mwidth = (254 * width) / xdpi;
SdlTkX.screen->mwidth /= 10;
@@ -2174,7 +2176,7 @@ doNormalKeyEvent:
SDL_FillRect(SdlTkX.sdlsurf, &sr, pixel);
}
- if (width > oldw || height > oldh) {
+ if ((width > oldw) || (height > oldh)) {
SdlTkVisRgnChanged(_w, VRC_CHANGED, 0, 0);
}
@@ -2234,7 +2236,7 @@ doNormalKeyEvent:
ow = (int) SDL_ceil(vw * SdlTkX.scale);
oh = (int) SDL_ceil(vh * SdlTkX.scale);
- if (ow < width || oh < height) {
+ if ((ow < width) || (oh < height)) {
SdlTkX.outrect = &SdlTkX.outrect0;
SdlTkX.outrect->x = (width - ow) / 2;
SdlTkX.outrect->y = (height - oh) / 2;
@@ -2332,7 +2334,6 @@ doNormalKeyEvent:
refresh:
SdlTkScreenChanged();
return 0;
-
}
return 0;
@@ -2891,7 +2892,7 @@ SdlTkToplevelForWindow(_Window *_w, int *x, int *y)
xOff = _w->atts.x;
yOff = _w->atts.y;
- while (_w->parent && !PARENT_IS_ROOT(_w->parent)) {
+ while ((_w->parent != NULL) && !PARENT_IS_ROOT(_w->parent)) {
_w = _w->parent;
xOff += _w->atts.x;
yOff += _w->atts.y;
@@ -2961,7 +2962,7 @@ SdlTkTopVisibleWrapper(void)
_Window *child = ((_Window *) SdlTkX.screen->root)->child;
while (child != NULL) {
- if (child->atts.map_state != IsUnmapped &&
+ if ((child->atts.map_state != IsUnmapped) &&
!child->atts.override_redirect) {
if (child->dec != NULL) {
child = child->child; /* the wrapper */
@@ -3051,10 +3052,10 @@ SdlTkPointToWindow(_Window *_w, int x, int y, Bool mapped, Bool depth)
_Window *child;
for (child = _w->child; child != NULL; child = child->next) {
- if (x >= child->atts.x &&
- x < child->atts.x + child->parentWidth &&
- y >= child->atts.y &&
- y < child->atts.y + child->parentHeight) {
+ if ((x >= child->atts.x) &&
+ (x < child->atts.x + child->parentWidth) &&
+ (y >= child->atts.y) &&
+ (y < child->atts.y + child->parentHeight)) {
if (!mapped || (child->atts.map_state != IsUnmapped)) {
x -= child->atts.x;
y -= child->atts.y;
@@ -3195,7 +3196,7 @@ SdlTkRestackWindow(_Window *_w, _Window *sibling, int stack_mode)
int oldPos = 0, newPos = 0;
_Window *child, *oldNext = _w->next;;
- if (parent->child == _w && _w->next == NULL) {
+ if ((parent->child == _w) && (_w->next == NULL)) {
return;
}
@@ -3318,7 +3319,7 @@ SdlTkBringToFrontIfNeeded(_Window *_w)
}
sibling = _w->parent->child;
- while (sibling != _w && SdlTkIsTransientOf(sibling, _w))
+ while ((sibling != _w) && SdlTkIsTransientOf(sibling, _w))
sibling = sibling->next;
if (sibling != _w) {
@@ -3496,622 +3497,642 @@ SdlTkDirtyRegion(Window w, Region rgn)
SdlTkRgnPoolFree(r);
}
-int
-Tk_SdlTkObjCmd(ClientData clientData, Tcl_Interp *interp, int objc,
- Tcl_Obj *const objv[])
+static int
+AccelbufferObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
{
- Tk_Window tkwin = (Tk_Window) clientData;
- static const char *optionStrings[] = {
- "accelbuffer", "accelerometer", "addfont", "android",
- "expose", "joystick", "maxroot", "paintvisrgn", "powerinfo",
- "root", "screensaver", "textinput",
- "touchtranslate", "viewport", "vsync",
- NULL
- };
- enum options {
- CMD_ACCELBUFFER, CMD_ACCELEROMETER, CMD_ADDFONT, CMD_ANDROID,
- CMD_EXPOSE, CMD_JOYSTICK, CMD_MAXROOT, CMD_PAINT_VISRGN, CMD_POWERINFO,
- CMD_ROOT, CMD_SCREENSAVER, CMD_TEXTINPUT,
- CMD_TOUCHTRANSLATE, CMD_VIEWPORT, CMD_VSYNC
- };
- static const char *joptStrings[] = {
- "ids", "guid", "name", "numaxes,", "numballs",
- "numbuttons", "numhats",
- NULL
- };
- enum jopts {
- JOY_IDS, JOY_GUID, JOY_NAME, JOY_NAXES, JOY_NBALLS,
- JOY_NBUTTONS, JOY_NHATS
- };
- int index;
+ int axis;
+ Tcl_Obj *list;
- if (objc < 2) {
- Tcl_WrongNumArgs(interp, 1, objv, "option ?arg?");
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "axis");
return TCL_ERROR;
}
- if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0,
- &index) != TCL_OK) {
+ if (Tcl_GetIntFromObj(interp, objv[1], &axis) != TCL_OK) {
return TCL_ERROR;
}
- switch (index) {
-
- /* sdltk expose ?win? */
- case CMD_EXPOSE: {
- int x, y;
- _Window *_w;
- Region rgn;
- XRectangle rect;
- int ret = TCL_OK;
-
- if (objc > 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "?window?");
- return TCL_ERROR;
- }
- SdlTkLock(NULL);
- if (objc == 3) {
- Tk_Window tkwin2;
-
- if (TkGetWindowFromObj(interp, tkwin, objv[2], &tkwin2)
- != TCL_OK) {
- ret = TCL_ERROR;
- goto ce_done;
- }
- _w = (_Window *) ((TkWindow *) tkwin2)->window;
- } else {
- (void) SDL_GetMouseState(&x, &y);
- TranslatePointer(0, &x, &y);
- _w = SdlTkPointToWindow((_Window *) SdlTkX.screen->root,
- x, y, True, True);
- }
- rgn = SdlTkRgnPoolGet();
- rect.x = rect.y = 0;
- rect.width = _w->parentWidth;
- rect.height = _w->parentHeight;
- XUnionRectWithRegion(&rect, rgn, rgn);
- XIntersectRegion(_w->visRgn, rgn, rgn);
- if (IS_ROOT(_w)) {
- XUnionRegion(rgn, SdlTkX.screen_dirty_region,
- SdlTkX.screen_dirty_region);
- SdlTkScreenChanged();
- } else if (_w->tkwin != NULL) {
- SdlTkGfxExposeRegion((Window) _w, rgn);
- }
- SdlTkRgnPoolFree(rgn);
-ce_done:
- SdlTkUnlock(NULL);
- return ret;
+ --axis;
+ if ((axis < 0) || (axis > 2)) {
+ Tcl_SetResult(interp, "illegal axis", TCL_STATIC);
+ return TCL_ERROR;
}
+ list = Tcl_NewListObj(0, NULL);
+#ifdef ANDROID
+ SdlTkLock(NULL);
+ if (SdlTkX.accel_id != -1) {
+ AccelRing *rp = &SdlTkX.accel_ring[axis];
+ int i, k, imax;
- /* sdltk paintvisrgn ?win? */
- case CMD_PAINT_VISRGN: {
- int x, y;
- _Window *_w;
- Region r;
- int ret = TCL_OK;
-
- if (objc > 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "?window?");
- return TCL_ERROR;
- }
- SdlTkLock(NULL);
- if (objc == 3) {
- Tk_Window tkwin2;
-
- if (TkGetWindowFromObj(interp, tkwin, objv[2], &tkwin2)
- != TCL_OK) {
- ret = TCL_ERROR;
- goto cpv_done;
+ imax = sizeof (rp->values) / sizeof (rp->values[0]);
+ k = rp->index;
+ for (i = 0; i < imax; i++) {
+ if (++k >= imax) {
+ k = 0;
}
- _w = (_Window *) ((TkWindow *) tkwin2)->window;
- } else {
- (void) SDL_GetMouseState(&x, &y);
- TranslatePointer(0, &x, &y);
- _w = SdlTkPointToWindow((_Window *) SdlTkX.screen->root,
- x, y, True, True);
+ Tcl_ListObjAppendElement(NULL, list,
+ Tcl_NewIntObj(rp->values[k]));
}
-
- r = SdlTkGetVisibleRegion(_w);
- SdlTkGfxFillRegion((Drawable) _w, r, 0x0000FF88);
- SDL_UpdateWindowSurface(SdlTkX.sdlscreen);
-cpv_done:
- SdlTkUnlock(NULL);
- return ret;
}
+ SdlTkUnlock(NULL);
+#endif
+ Tcl_SetObjResult(interp, list);
+ return TCL_OK;
+}
- /* sdltk textinput ?onoff ?x y ?hints??? */
- case CMD_TEXTINPUT: {
- static int last_hints = 0;
- int flag = 0, hints = 0, hints_changed = 0, ret = TCL_OK;
+static int
+AccelerometerObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ int flag = 0;
- if (objc > 6) {
-tiWrongArgs:
- Tcl_WrongNumArgs(interp, 2, objv, "?onoff ?x y ?hints???");
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "?onoff?");
+ return TCL_ERROR;
+ }
+ if (objc == 2) {
+ if (Tcl_GetBooleanFromObj(interp, objv[1], &flag) != TCL_OK) {
return TCL_ERROR;
}
- if (objc == 3 || objc == 5 || objc == 6) {
- if (Tcl_GetBooleanFromObj(interp, objv[2], &flag) != TCL_OK) {
- return TCL_ERROR;
- }
- SdlTkLock(NULL);
- if (!SDL_HasScreenKeyboardSupport()) {
- goto ti_done;
- }
- if (flag) {
- if (objc == 5 || objc == 6) {
- int x, y;
- SDL_Rect r;
-
- if (Tcl_GetIntFromObj(interp, objv[3], &x) != TCL_OK ||
- Tcl_GetIntFromObj(interp, objv[4], &y) != TCL_OK) {
- ret = TCL_ERROR;
- goto ti_done;
- }
- TranslatePointer(1, &x, &y);
- x -= 64;
- if (x < 0) {
- x = 0;
- }
- y -= 64;
- if (y < 0) {
- y = 0;
- }
- r.x = x;
- r.y = y;
- r.w = 256;
- r.h = 128;
- if (objc > 5) {
- if (Tcl_GetIntFromObj(interp, objv[5], &hints)
- != TCL_OK) {
- ret = TCL_ERROR;
- goto ti_done;
- }
- }
- if (hints != last_hints) {
- hints_changed = 1;
- last_hints = hints;
- }
- SDL_SetTextInputRect(&r, hints);
- }
- if (hints_changed &&
- SDL_IsScreenKeyboardShown(SdlTkX.sdlscreen)) {
- SDL_StopTextInput();
- }
- SDL_StartTextInput();
- } else {
- SDL_StopTextInput();
- }
-ti_done:
- SdlTkUnlock(NULL);
- return ret;
- } else if (objc == 4) {
- goto tiWrongArgs;
- }
+#ifdef ANDROID
SdlTkLock(NULL);
- if (SDL_HasScreenKeyboardSupport()) {
- flag = SDL_IsScreenKeyboardShown(SdlTkX.sdlscreen);
+ if (SdlTkX.accel_id != -1) {
+ SdlTkX.accel_enabled = flag;
}
SdlTkUnlock(NULL);
- Tcl_SetBooleanObj(Tcl_GetObjResult(interp), flag);
- break;
- }
-
- /* sdltk accelerometer ?onoff? */
- case CMD_ACCELEROMETER: {
- int flag = 0;
-
- if (objc > 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "?onoff?");
- return TCL_ERROR;
- }
- if (objc == 3) {
- if (Tcl_GetBooleanFromObj(interp, objv[2], &flag) != TCL_OK) {
- return TCL_ERROR;
- }
-#ifdef ANDROID
- SdlTkLock(NULL);
- if (SdlTkX.accel_id != -1) {
- SdlTkX.accel_enabled = flag;
- }
- SdlTkUnlock(NULL);
#endif
- break;
- }
+ } else {
#ifdef ANDROID
SdlTkLock(NULL);
flag = SdlTkX.accel_enabled;
SdlTkUnlock(NULL);
#endif
Tcl_SetBooleanObj(Tcl_GetObjResult(interp), flag);
- break;
}
+ return TCL_OK;
+}
- /* sdltk accelbuffer axis */
- case CMD_ACCELBUFFER: {
- int axis;
- Tcl_Obj *list;
+static int
+AddfontObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "filename");
+ return TCL_ERROR;
+ }
+ return SdlTkFontAdd(interp, Tcl_GetString(objv[1]));
+}
- if (objc != 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "axis");
- return TCL_ERROR;
- }
- if (Tcl_GetIntFromObj(interp, objv[2], &axis) != TCL_OK) {
- return TCL_ERROR;
- }
- --axis;
- if ((axis < 0) || (axis > 2)) {
- Tcl_SetResult(interp, "illegal axis", TCL_STATIC);
- return TCL_ERROR;
- }
- list = Tcl_NewListObj(0, NULL);
+static int
+AndroidObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ if (objc != 1) {
+ Tcl_WrongNumArgs(interp, 1, objv, "");
+ return TCL_ERROR;
+ }
#ifdef ANDROID
- SdlTkLock(NULL);
- if (SdlTkX.accel_id != -1) {
- AccelRing *rp = &SdlTkX.accel_ring[axis];
- int i, k, imax;
-
- imax = sizeof (rp->values) / sizeof (rp->values[0]);
- k = rp->index;
- for (i = 0; i < imax; i++) {
- if (++k >= imax) {
- k = 0;
- }
- Tcl_ListObjAppendElement(NULL, list,
- Tcl_NewIntObj(rp->values[k]));
- }
- }
- SdlTkUnlock(NULL);
+ Tcl_SetBooleanObj(Tcl_GetObjResult(interp), 1);
+#else
+ Tcl_SetBooleanObj(Tcl_GetObjResult(interp), 0);
#endif
- Tcl_SetObjResult(interp, list);
- break;
+ return TCL_OK;
+}
+
+static int
+ExposeObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ Tk_Window tkwin = (Tk_Window) clientData;
+ int x, y;
+ _Window *_w;
+ Region rgn;
+ XRectangle rect;
+ int ret = TCL_OK;
+
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "?window?");
+ return TCL_ERROR;
}
+ SdlTkLock(NULL);
+ if (objc == 2) {
+ Tk_Window tkwin2;
- /* sdltk powerinfo */
- case CMD_POWERINFO: {
- SDL_PowerState pst;
- int secs, pct;
- char buf[32];
+ if (TkGetWindowFromObj(interp, tkwin, objv[1], &tkwin2) != TCL_OK) {
+ ret = TCL_ERROR;
+ goto done;
+ }
+ _w = (_Window *) ((TkWindow *) tkwin2)->window;
+ } else {
+ (void) SDL_GetMouseState(&x, &y);
+ TranslatePointer(0, &x, &y);
+ _w = SdlTkPointToWindow((_Window *) SdlTkX.screen->root,
+ x, y, True, True);
+ }
+ rgn = SdlTkRgnPoolGet();
+ rect.x = rect.y = 0;
+ rect.width = _w->parentWidth;
+ rect.height = _w->parentHeight;
+ XUnionRectWithRegion(&rect, rgn, rgn);
+ XIntersectRegion(_w->visRgn, rgn, rgn);
+ if (IS_ROOT(_w)) {
+ XUnionRegion(rgn, SdlTkX.screen_dirty_region,
+ SdlTkX.screen_dirty_region);
+ SdlTkScreenChanged();
+ } else if (_w->tkwin != NULL) {
+ SdlTkGfxExposeRegion((Window) _w, rgn);
+ }
+ SdlTkRgnPoolFree(rgn);
+done:
+ SdlTkUnlock(NULL);
+ return ret;
+}
+
+static int
+JoystickObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ static const char *joptStrings[] = {
+ "ids", "guid", "name", "numaxes,", "numballs",
+ "numbuttons", "numhats",
+ NULL
+ };
+ enum jopts {
+ JOY_IDS, JOY_GUID, JOY_NAME, JOY_NAXES, JOY_NBALLS,
+ JOY_NBUTTONS, JOY_NHATS
+ };
+ int index, joy_id;
+ long joy_idl;
+ Tcl_HashEntry *hPtr;
+ SDL_Joystick *stick;
+
+ if (objc < 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "suboption ?joyid?");
+ return TCL_ERROR;
+ }
+ if (Tcl_GetIndexFromObj(interp, objv[1], joptStrings,
+ "suboption", 0, &index) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ if (index == JOY_IDS) {
+ Tcl_Obj *result;
+ Tcl_HashSearch search;
if (objc != 2) {
Tcl_WrongNumArgs(interp, 2, objv, "");
return TCL_ERROR;
}
+ result = Tcl_NewListObj(0, NULL);
SdlTkLock(NULL);
- pst = SDL_GetPowerInfo(&secs, &pct);
+ hPtr = Tcl_FirstHashEntry(&SdlTkX.joystick_table, &search);
+ while (hPtr != NULL) {
+ joy_idl = (long) Tcl_GetHashKey(&SdlTkX.joystick_table, hPtr);
+ Tcl_ListObjAppendElement(interp, result,
+ Tcl_NewIntObj((int) joy_idl));
+ hPtr = Tcl_NextHashEntry(&search);
+ }
SdlTkUnlock(NULL);
- Tcl_AppendElement(interp, "state");
- switch (pst) {
- case SDL_POWERSTATE_ON_BATTERY:
- Tcl_AppendElement(interp, "onbattery");
- break;
- case SDL_POWERSTATE_NO_BATTERY:
- Tcl_AppendElement(interp, "nobattery");
- break;
- case SDL_POWERSTATE_CHARGING:
- Tcl_AppendElement(interp, "charging");
- break;
- case SDL_POWERSTATE_CHARGED:
- Tcl_AppendElement(interp, "charged");
- break;
- default:
- Tcl_AppendElement(interp, "unknown");
- break;
- }
- Tcl_AppendElement(interp, "seconds");
- sprintf(buf, "%d", secs);
- Tcl_AppendElement(interp, buf);
- Tcl_AppendElement(interp, "percent");
- sprintf(buf, "%d", pct);
- Tcl_AppendElement(interp, buf);
- break;
+ Tcl_SetObjResult(interp, result);
+ return TCL_OK;
+ }
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, "joyid");
+ return TCL_ERROR;
+ }
+ if (Tcl_GetIntFromObj(interp, objv[2], &joy_id) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ SdlTkLock(NULL);
+ joy_idl = joy_id;
+ hPtr = Tcl_FindHashEntry(&SdlTkX.joystick_table, (ClientData) joy_idl);
+ if (hPtr == NULL) {
+ SdlTkUnlock(NULL);
+ Tcl_SetResult(interp, "unknown joystick identifier", TCL_STATIC);
+ return TCL_ERROR;
}
+ stick = (SDL_Joystick *) Tcl_GetHashValue(hPtr);
+ switch (index) {
+ case JOY_NAME:
+ Tcl_SetResult(interp, (char *) SDL_JoystickName(stick), TCL_VOLATILE);
+ break;
+ case JOY_GUID: {
+ SDL_JoystickGUID guid;
+ char buffer[128];
- /* sdltk android */
- case CMD_ANDROID: {
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 2, objv, "");
- return TCL_ERROR;
- }
-#ifdef ANDROID
- Tcl_SetBooleanObj(Tcl_GetObjResult(interp), 1);
-#else
- Tcl_SetBooleanObj(Tcl_GetObjResult(interp), 0);
-#endif
+ guid = SDL_JoystickGetGUID(stick);
+ sprintf(buffer, "%02x%02x%02x%02x-%02x%02x-%02x%02x"
+ "-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ guid.data[0], guid.data[1], guid.data[2],
+ guid.data[3], guid.data[4], guid.data[5],
+ guid.data[6], guid.data[7], guid.data[8],
+ guid.data[9], guid.data[10], guid.data[11],
+ guid.data[12], guid.data[13], guid.data[14],
+ guid.data[15]);
+ Tcl_SetResult(interp, buffer, TCL_VOLATILE);
break;
}
-
- /* sdltk touchtranslate ?mask? */
- case CMD_TOUCHTRANSLATE: {
-#ifdef ANDROID
- int flag = TranslateInfo.enabled;
-#else
- int flag = 0;
-#endif
-
- if (objc > 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "?mask?");
- return TCL_ERROR;
- }
- if (objc > 2) {
- if (Tcl_GetIntFromObj(interp, objv[2], &flag) != TCL_OK) {
- return TCL_ERROR;
- }
-#ifdef ANDROID
- flag &= TRANSLATE_RMB | TRANSLATE_PTZ |
- TRANSLATE_ZOOM | TRANSLATE_FINGER | TRANSLATE_FBTNS;
- SdlTkLock(NULL);
- if (flag != TranslateInfo.enabled) {
- TranslateInfo.enabled = flag;
- if (!(flag & TRANSLATE_RMB)) {
- TranslateInfo.function = NULL;
- }
- TranslateInfo.state = 0;
- TranslateInfo.count = 0;
- }
- SdlTkUnlock(NULL);
-#else
- flag = 0;
-#endif
- }
- Tcl_SetIntObj(Tcl_GetObjResult(interp), flag);
+ case JOY_NAXES:
+ Tcl_SetIntObj(Tcl_GetObjResult(interp), SDL_JoystickNumAxes(stick));
+ break;
+ case JOY_NBALLS:
+ Tcl_SetIntObj(Tcl_GetObjResult(interp), SDL_JoystickNumBalls(stick));
+ break;
+ case JOY_NHATS:
+ Tcl_SetIntObj(Tcl_GetObjResult(interp), SDL_JoystickNumHats(stick));
+ break;
+ case JOY_NBUTTONS:
+ Tcl_SetIntObj(Tcl_GetObjResult(interp), SDL_JoystickNumButtons(stick));
break;
}
+ SdlTkUnlock(NULL);
+ return TCL_OK;
+}
- /* sdltk screensaver ?flag? */
- case CMD_SCREENSAVER: {
- int flag;
+static int
+MaxrootObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ SDL_RendererInfo ri;
+ char buffer[128];
- if (objc > 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "?flag?");
- return TCL_ERROR;
- }
- if (objc > 2) {
- if (Tcl_GetBooleanFromObj(interp, objv[2], &flag) != TCL_OK) {
- return TCL_ERROR;
- }
- SdlTkLock(NULL);
- if (flag) {
- SDL_EnableScreenSaver();
- } else {
- SDL_DisableScreenSaver();
- }
- SdlTkUnlock(NULL);
- }
- SdlTkLock(NULL);
- flag = SDL_IsScreenSaverEnabled();
- SdlTkUnlock(NULL);
- Tcl_SetBooleanObj(Tcl_GetObjResult(interp), flag);
- break;
+ if (objc != 1) {
+ Tcl_WrongNumArgs(interp, 1, objv, "");
+ return TCL_ERROR;
}
+ SdlTkLock(NULL);
+ SDL_GetRendererInfo(SdlTkX.sdlrend, &ri);
+ SdlTkUnlock(NULL);
+ sprintf(buffer, "%d %d", ri.max_texture_width, ri.max_texture_height);
+ Tcl_SetResult(interp, buffer, TCL_VOLATILE);
+ return TCL_OK;
+}
- /* sdltk viewport ?x y ?w h?? */
- case CMD_VIEWPORT: {
- int x, y, w, h;
- char buffer[128];
+static int
+PaintvisrgnObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ Tk_Window tkwin = (Tk_Window) clientData;
+ int x, y;
+ _Window *_w;
+ Region r;
+ int ret = TCL_OK;
- if (objc != 2 && objc != 4 && objc != 6) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?xoffset yoffset? width height??");
- return TCL_ERROR;
- }
- if (objc > 2) {
- if (Tcl_GetIntFromObj(interp, objv[2], &x) != TCL_OK ||
- Tcl_GetIntFromObj(interp, objv[3], &y) != TCL_OK) {
- return TCL_ERROR;
- }
- }
- if (objc > 4) {
- int sw, sh;
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "?window?");
+ return TCL_ERROR;
+ }
+ SdlTkLock(NULL);
+ if (objc == 2) {
+ Tk_Window tkwin2;
- if (Tcl_GetIntFromObj(interp, objv[4], &w) != TCL_OK ||
- Tcl_GetIntFromObj(interp, objv[5], &h) != TCL_OK) {
- return TCL_ERROR;
- }
- SdlTkLock(NULL);
- SDL_GetWindowSize(SdlTkX.sdlscreen, &sw, &sh);
- SdlTkUnlock(NULL);
- if (w < 0 || h < 0 || w > sw || h > sh) {
- Tcl_SetResult(interp, "illegal width or height", TCL_STATIC);
- return TCL_ERROR;
- }
- }
- if (objc > 2) {
- SdlTkPanZoom(0, x, y, w, h);
- } else {
- SdlTkLock(NULL);
- sprintf(buffer, "%d %d %d %d",
- SdlTkX.viewport.x, SdlTkX.viewport.y,
- SdlTkX.viewport.w, SdlTkX.viewport.h);
- SdlTkUnlock(NULL);
- }
- if (objc <= 2) {
- Tcl_SetResult(interp, buffer, TCL_VOLATILE);
+ if (TkGetWindowFromObj(interp, tkwin, objv[1], &tkwin2) != TCL_OK) {
+ ret = TCL_ERROR;
+ goto done;
}
+ _w = (_Window *) ((TkWindow *) tkwin2)->window;
+ } else {
+ (void) SDL_GetMouseState(&x, &y);
+ TranslatePointer(0, &x, &y);
+ _w = SdlTkPointToWindow((_Window *) SdlTkX.screen->root,
+ x, y, True, True);
+ }
+ r = SdlTkGetVisibleRegion(_w);
+ SdlTkGfxFillRegion((Drawable) _w, r, 0x0000FF88);
+ SDL_UpdateWindowSurface(SdlTkX.sdlscreen);
+done:
+ SdlTkUnlock(NULL);
+ return ret;
+}
+
+static int
+PowerinfoObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ SDL_PowerState pst;
+ int secs, pct;
+ char buf[32];
+
+ if (objc != 1) {
+ Tcl_WrongNumArgs(interp, 1, objv, "");
+ return TCL_ERROR;
+ }
+ SdlTkLock(NULL);
+ pst = SDL_GetPowerInfo(&secs, &pct);
+ SdlTkUnlock(NULL);
+ Tcl_AppendElement(interp, "state");
+ switch (pst) {
+ case SDL_POWERSTATE_ON_BATTERY:
+ Tcl_AppendElement(interp, "onbattery");
+ break;
+ case SDL_POWERSTATE_NO_BATTERY:
+ Tcl_AppendElement(interp, "nobattery");
+ break;
+ case SDL_POWERSTATE_CHARGING:
+ Tcl_AppendElement(interp, "charging");
+ break;
+ case SDL_POWERSTATE_CHARGED:
+ Tcl_AppendElement(interp, "charged");
+ break;
+ default:
+ Tcl_AppendElement(interp, "unknown");
break;
}
+ Tcl_AppendElement(interp, "seconds");
+ sprintf(buf, "%d", secs);
+ Tcl_AppendElement(interp, buf);
+ Tcl_AppendElement(interp, "percent");
+ sprintf(buf, "%d", pct);
+ Tcl_AppendElement(interp, buf);
+ return TCL_OK;
+}
- /* sdltk vsync */
- case CMD_VSYNC: {
- int frame_count;
+static int
+RootObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ int w, h;
+ char buffer[128];
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 2, objv, "");
+ if ((objc != 1) && (objc != 3)) {
+ Tcl_WrongNumArgs(interp, 1, objv, "?width height?");
+ return TCL_ERROR;
+ }
+ if (objc > 1) {
+ SDL_RendererInfo ri;
+
+ if ((Tcl_GetIntFromObj(interp, objv[1], &w) != TCL_OK) ||
+ (Tcl_GetIntFromObj(interp, objv[2], &h) != TCL_OK)) {
return TCL_ERROR;
}
SdlTkLock(NULL);
- frame_count = SdlTkX.frame_count;
- SdlTkWaitVSync();
- if (SdlTkX.frame_count == frame_count) {
- SdlTkWaitVSync();
+ SDL_GetRendererInfo(SdlTkX.sdlrend, &ri);
+ SdlTkUnlock(NULL);
+ if ((w == 0) && (h == 0)) {
+ /* accepted, native size */
+ } else if ((w < 200) || (h < 200) ||
+ (w > ri.max_texture_width) || (h > ri.max_texture_height)) {
+ Tcl_SetResult(interp, "unsupported width or height", TCL_STATIC);
+ return TCL_ERROR;
}
- frame_count -= SdlTkX.frame_count;
+ }
+ if (objc > 1) {
+ SdlTkSetRootSize(w, h);
+ } else {
+ SdlTkLock(NULL);
+ sprintf(buffer, "%d %d", SdlTkX.root_w, SdlTkX.root_h);
SdlTkUnlock(NULL);
- Tcl_SetObjResult(interp, Tcl_NewIntObj(frame_count));
- break;
}
+ if (objc <= 1) {
+ Tcl_SetResult(interp, buffer, TCL_VOLATILE);
+ }
+ return TCL_OK;
+}
- /* sdltk maxroot */
- case CMD_MAXROOT: {
- SDL_RendererInfo ri;
- char buffer[128];
+static int
+ScreensaverObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ int flag;
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 2, objv, "");
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "?flag?");
+ return TCL_ERROR;
+ }
+ if (objc > 1) {
+ if (Tcl_GetBooleanFromObj(interp, objv[1], &flag) != TCL_OK) {
return TCL_ERROR;
}
SdlTkLock(NULL);
- SDL_GetRendererInfo(SdlTkX.sdlrend, &ri);
+ if (flag) {
+ SDL_EnableScreenSaver();
+ } else {
+ SDL_DisableScreenSaver();
+ }
SdlTkUnlock(NULL);
- sprintf(buffer, "%d %d",
- ri.max_texture_width, ri.max_texture_height);
- Tcl_SetResult(interp, buffer, TCL_VOLATILE);
- break;
}
+ SdlTkLock(NULL);
+ flag = SDL_IsScreenSaverEnabled();
+ SdlTkUnlock(NULL);
+ Tcl_SetBooleanObj(Tcl_GetObjResult(interp), flag);
+ return TCL_OK;
+}
- /* sdltk root ?w h? */
- case CMD_ROOT: {
- int w, h;
- char buffer[128];
+static int
+TextinputObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ static int last_hints = 0;
+ int flag = 0, hints = 0, hints_changed = 0, ret = TCL_OK;
- if (objc != 2 && objc != 4) {
- Tcl_WrongNumArgs(interp, 2, objv, "?width height?");
+ if (objc > 5) {
+tiWrongArgs:
+ Tcl_WrongNumArgs(interp, 1, objv, "?onoff ?x y ?hints???");
+ return TCL_ERROR;
+ }
+ if ((objc == 2) || (objc == 4) || (objc == 5)) {
+ if (Tcl_GetBooleanFromObj(interp, objv[1], &flag) != TCL_OK) {
return TCL_ERROR;
}
- if (objc > 2) {
- SDL_RendererInfo ri;
-
- if (Tcl_GetIntFromObj(interp, objv[2], &w) != TCL_OK ||
- Tcl_GetIntFromObj(interp, objv[3], &h) != TCL_OK) {
- return TCL_ERROR;
+ SdlTkLock(NULL);
+ if (!SDL_HasScreenKeyboardSupport()) {
+ goto tiDone;
+ }
+ if (flag) {
+ if ((objc == 4) || (objc == 5)) {
+ int x, y;
+ SDL_Rect r;
+
+ if ((Tcl_GetIntFromObj(interp, objv[2], &x) != TCL_OK) ||
+ (Tcl_GetIntFromObj(interp, objv[3], &y) != TCL_OK)) {
+ ret = TCL_ERROR;
+ goto tiDone;
+ }
+ TranslatePointer(1, &x, &y);
+ x -= 64;
+ if (x < 0) {
+ x = 0;
+ }
+ y -= 64;
+ if (y < 0) {
+ y = 0;
+ }
+ r.x = x;
+ r.y = y;
+ r.w = 256;
+ r.h = 128;
+ if (objc > 4) {
+ if (Tcl_GetIntFromObj(interp, objv[4], &hints) != TCL_OK) {
+ ret = TCL_ERROR;
+ goto tiDone;
+ }
+ }
+ if (hints != last_hints) {
+ hints_changed = 1;
+ last_hints = hints;
+ }
+#ifdef SDL_TEXTINPUT_WITH_HINTS
+ SDL_SetTextInputRect(&r, hints);
+#else
+ SDL_SetTextInputRect(&r);
+#endif
}
- SdlTkLock(NULL);
- SDL_GetRendererInfo(SdlTkX.sdlrend, &ri);
- SdlTkUnlock(NULL);
- if (w == 0 && h == 0) {
- /* accepted, native size */
- } else if (w < 200 || h < 200 ||
- w > ri.max_texture_width || h > ri.max_texture_height) {
- Tcl_SetResult(interp, "unsupported width or height",
- TCL_STATIC);
- return TCL_ERROR;
+ if (hints_changed &&
+ SDL_IsScreenKeyboardShown(SdlTkX.sdlscreen)) {
+ SDL_StopTextInput();
}
- }
- if (objc > 2) {
- SdlTkSetRootSize(w, h);
+ SDL_StartTextInput();
} else {
- SdlTkLock(NULL);
- sprintf(buffer, "%d %d", SdlTkX.root_w, SdlTkX.root_h);
- SdlTkUnlock(NULL);
- }
- if (objc <= 2) {
- Tcl_SetResult(interp, buffer, TCL_VOLATILE);
+ SDL_StopTextInput();
}
- break;
+tiDone:
+ SdlTkUnlock(NULL);
+ return ret;
+ } else if (objc == 3) {
+ goto tiWrongArgs;
+ }
+ SdlTkLock(NULL);
+ if (SDL_HasScreenKeyboardSupport()) {
+ flag = SDL_IsScreenKeyboardShown(SdlTkX.sdlscreen);
}
+ SdlTkUnlock(NULL);
+ Tcl_SetBooleanObj(Tcl_GetObjResult(interp), flag);
+ return ret;
+}
- /* sdltk joystick opt ?joyid? */
- case CMD_JOYSTICK: {
- int joy_id;
- long joy_idl;
- Tcl_HashEntry *hPtr;
- SDL_Joystick *stick;
+static int
+TouchtranslateObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+#ifdef ANDROID
+ int flag = TranslateInfo.enabled;
+#else
+ int flag = 0;
+#endif
- if (objc < 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "suboption ?joyid?");
- return TCL_ERROR;
- }
- if (Tcl_GetIndexFromObj(interp, objv[2], joptStrings,
- "suboption", 0, &index) != TCL_OK) {
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "?mask?");
+ return TCL_ERROR;
+ }
+ if (objc > 1) {
+ if (Tcl_GetIntFromObj(interp, objv[1], &flag) != TCL_OK) {
return TCL_ERROR;
}
- if (index == JOY_IDS) {
- Tcl_Obj *result;
- Tcl_HashSearch search;
-
- if (objc != 3) {
- Tcl_WrongNumArgs(interp, 3, objv, "");
- return TCL_ERROR;
- }
- result = Tcl_NewListObj(0, NULL);
- SdlTkLock(NULL);
- hPtr = Tcl_FirstHashEntry(&SdlTkX.joystick_table, &search);
- while (hPtr != NULL) {
- joy_idl = (long) Tcl_GetHashKey(&SdlTkX.joystick_table, hPtr);
- Tcl_ListObjAppendElement(interp, result,
- Tcl_NewIntObj((int) joy_idl));
- hPtr = Tcl_NextHashEntry(&search);
+#ifdef ANDROID
+ flag &= TRANSLATE_RMB | TRANSLATE_PTZ |
+ TRANSLATE_ZOOM | TRANSLATE_FINGER | TRANSLATE_FBTNS;
+ SdlTkLock(NULL);
+ if (flag != TranslateInfo.enabled) {
+ TranslateInfo.enabled = flag;
+ if (!(flag & TRANSLATE_RMB)) {
+ TranslateInfo.function = NULL;
}
- SdlTkUnlock(NULL);
- Tcl_SetObjResult(interp, result);
- return TCL_OK;
+ TranslateInfo.state = 0;
+ TranslateInfo.count = 0;
}
- if (objc != 4) {
- Tcl_WrongNumArgs(interp, 3, objv, "joyid");
+ SdlTkUnlock(NULL);
+#else
+ flag = 0;
+#endif
+ }
+ Tcl_SetIntObj(Tcl_GetObjResult(interp), flag);
+ return TCL_OK;
+}
+
+static int
+ViewportObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ int x, y, w, h;
+ char buffer[128];
+
+ if ((objc != 1) && (objc != 3) && (objc != 5)) {
+ Tcl_WrongNumArgs(interp, 1, objv, "?xoffset yoffset? width height??");
+ return TCL_ERROR;
+ }
+ if (objc > 1) {
+ if ((Tcl_GetIntFromObj(interp, objv[1], &x) != TCL_OK) ||
+ (Tcl_GetIntFromObj(interp, objv[2], &y) != TCL_OK)) {
return TCL_ERROR;
}
- if (Tcl_GetIntFromObj(interp, objv[3], &joy_id) != TCL_OK) {
+ }
+ if (objc > 3) {
+ int sw, sh;
+
+ if ((Tcl_GetIntFromObj(interp, objv[3], &w) != TCL_OK) ||
+ (Tcl_GetIntFromObj(interp, objv[4], &h) != TCL_OK)) {
return TCL_ERROR;
}
SdlTkLock(NULL);
- joy_idl = joy_id;
- hPtr = Tcl_FindHashEntry(&SdlTkX.joystick_table, (ClientData) joy_idl);
- if (hPtr == NULL) {
- SdlTkUnlock(NULL);
- Tcl_SetResult(interp, "unknown joystick identifier", TCL_STATIC);
+ SDL_GetWindowSize(SdlTkX.sdlscreen, &sw, &sh);
+ SdlTkUnlock(NULL);
+ if ((w < 0) || (h < 0) || (w > sw) || (h > sh)) {
+ Tcl_SetResult(interp, "illegal width or height", TCL_STATIC);
return TCL_ERROR;
}
- stick = (SDL_Joystick *) Tcl_GetHashValue(hPtr);
- switch (index) {
- case JOY_NAME:
- Tcl_SetResult(interp, (char *) SDL_JoystickName(stick),
- TCL_VOLATILE);
- break;
- case JOY_GUID: {
- SDL_JoystickGUID guid;
- char buffer[128];
-
- guid = SDL_JoystickGetGUID(stick);
- sprintf(buffer, "%02x%02x%02x%02x-%02x%02x-%02x%02x"
- "-%02x%02x-%02x%02x%02x%02x%02x%02x",
- guid.data[0], guid.data[1], guid.data[2],
- guid.data[3], guid.data[4], guid.data[5],
- guid.data[6], guid.data[7], guid.data[8],
- guid.data[9], guid.data[10], guid.data[11],
- guid.data[12], guid.data[13], guid.data[14],
- guid.data[15]);
- Tcl_SetResult(interp, buffer, TCL_VOLATILE);
- break;
- }
- case JOY_NAXES:
- Tcl_SetIntObj(Tcl_GetObjResult(interp),
- SDL_JoystickNumAxes(stick));
- break;
- case JOY_NBALLS:
- Tcl_SetIntObj(Tcl_GetObjResult(interp),
- SDL_JoystickNumBalls(stick));
- break;
- case JOY_NHATS:
- Tcl_SetIntObj(Tcl_GetObjResult(interp),
- SDL_JoystickNumHats(stick));
- break;
- case JOY_NBUTTONS:
- Tcl_SetIntObj(Tcl_GetObjResult(interp),
- SDL_JoystickNumButtons(stick));
- break;
- }
+ }
+ if (objc > 1) {
+ SdlTkPanZoom(0, x, y, w, h);
+ } else {
+ SdlTkLock(NULL);
+ sprintf(buffer, "%d %d %d %d",
+ SdlTkX.viewport.x, SdlTkX.viewport.y,
+ SdlTkX.viewport.w, SdlTkX.viewport.h);
SdlTkUnlock(NULL);
- break;
}
-
- /* sdltk addfont filename */
- case CMD_ADDFONT: {
- if (objc != 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "filename");
- return TCL_ERROR;
- }
- return SdlTkFontAdd(interp, Tcl_GetString(objv[2]));
+ if (objc <= 1) {
+ Tcl_SetResult(interp, buffer, TCL_VOLATILE);
}
+ return TCL_OK;
+}
+static int
+VsyncObjCmd(ClientData clientData, Tcl_Interp *interp,
+ int objc, Tcl_Obj *const objv[])
+{
+ int frame_count;
+
+ if (objc != 1) {
+ Tcl_WrongNumArgs(interp, 1, objv, "");
+ return TCL_ERROR;
+ }
+ SdlTkLock(NULL);
+ frame_count = SdlTkX.frame_count;
+ SdlTkWaitVSync();
+ if (SdlTkX.frame_count == frame_count) {
+ SdlTkWaitVSync();
}
+ frame_count -= SdlTkX.frame_count;
+ SdlTkUnlock(NULL);
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(frame_count));
+ return TCL_OK;
+}
+
+/*
+ * Table of sdltk subcommand names and implementations.
+ */
+
+static const TkEnsemble sdltkCmdMap[] = {
+ { "accelbuffer", AccelbufferObjCmd, NULL },
+ { "accelerometer", AccelerometerObjCmd, NULL },
+ { "addfont", AddfontObjCmd, NULL },
+ { "android", AndroidObjCmd, NULL },
+ { "expose", ExposeObjCmd, NULL },
+ { "joystick", JoystickObjCmd, NULL },
+ { "maxroot", MaxrootObjCmd, NULL },
+ { "paintvisrgn", PaintvisrgnObjCmd, NULL },
+ { "powerinfo", PowerinfoObjCmd, NULL },
+ { "root", RootObjCmd, NULL },
+ { "screensaver", ScreensaverObjCmd, NULL },
+ { "textinput", TextinputObjCmd, NULL },
+ { "touchtranslate", TouchtranslateObjCmd, NULL },
+ { "viewport", ViewportObjCmd, NULL },
+ { "vsync", VsyncObjCmd, NULL },
+ { NULL, NULL, NULL }
+};
+
+int
+TkInitSdltkCmd(Tcl_Interp *interp, ClientData clientData)
+{
+ TkMakeEnsemble(interp, "::", "sdltk", clientData, sdltkCmdMap);
return TCL_OK;
}
@@ -4162,7 +4183,7 @@ TkpGetPixel(XColor *color)
* This function captures the mouse so that all future events
* will be reported to this window, even if the mouse is outside
* the window. If the specified window is NULL, then the mouse
- * is released.
+ * is released.
*
* Results:
* None.
@@ -4187,7 +4208,7 @@ TkpSetCaptureEx(Display *display, TkWindow *winPtr)
if (SdlTkX.capture_window != NULL) {
w0 = (_Window *) SdlTkX.capture_window->window;
}
- if (w0 != NULL && w1 != NULL) {
+ if ((w0 != NULL) && (w1 != NULL)) {
if (w0->display == w1->display) {
SdlTkX.capture_window = winPtr;
} else {
@@ -4269,7 +4290,7 @@ TkpSetCursor(TkpCursor cursor)
void
SdlTkClearPointer(_Window *_w)
{
- if (_w != NULL && _w->tkwin != NULL) {
+ if ((_w != NULL) && (_w->tkwin != NULL)) {
if (SdlTkX.capture_window == _w->tkwin) {
SdlTkX.capture_window = NULL;
}
diff --git a/sdl/SdlTkX.c b/sdl/SdlTkX.c
index e675130..cbb12e2 100644
--- a/sdl/SdlTkX.c
+++ b/sdl/SdlTkX.c
@@ -4376,7 +4376,9 @@ HandleRootSize(struct RootSizeRequest *r)
SdlTkX.screen->height = height;
#ifdef ANDROID
xdpi = ydpi = 0;
+#ifdef SDL_HAS_GETWINDOWDPI
SDL_GetWindowDPI(SdlTkX.sdlscreen, &xdpi, &ydpi);
+#endif
if (xdpi && ydpi) {
SdlTkX.screen->mwidth = (254 * width) / xdpi;
SdlTkX.screen->mwidth /= 10;
@@ -4979,7 +4981,9 @@ fatal:
screen->height = height;
#ifdef ANDROID
xdpi = ydpi = 0;
+#ifdef SDL_HAS_GETWINDOWDPI
SDL_GetWindowDPI(SdlTkX.sdlscreen, &xdpi, &ydpi);
+#endif
if (xdpi && ydpi) {
int dpi = (ydpi < xdpi) ? ydpi : xdpi;
extern int ttkMinThumbSize;
@@ -6527,6 +6531,7 @@ SDL_GLContext
SdlTkGLXCreateContext(Display *display, Window w, Tk_Window tkwin)
{
_Window *_w = (_Window *) w;
+#ifdef SDL_RENDERER_HAS_TARGET_3D
#ifdef ANDROID
int depth;
#endif
@@ -6592,6 +6597,10 @@ done:
#else
return _w->gl_ctx;
#endif
+#else
+ _w->gl_ctx = NULL;
+ return NULL;
+#endif
}
/*
@@ -6612,6 +6621,7 @@ done:
void
SdlTkGLXDestroyContext(Display *display, Window w, SDL_GLContext ctx)
{
+#ifdef SDL_RENDERER_HAS_TARGET_3D
_Window *_w = (_Window *) w;
SdlTkLock(display);
@@ -6631,6 +6641,7 @@ SdlTkGLXDestroyContext(Display *display, Window w, SDL_GLContext ctx)
#endif
done:
SdlTkUnlock(display);
+#endif
}
/*
@@ -6651,6 +6662,7 @@ done:
void
SdlTkGLXMakeCurrent(Display *display, Window w, SDL_GLContext ctx)
{
+#ifdef SDL_RENDERER_HAS_TARGET_3D
_Window *_w = (_Window *) w;
SdlTkLock(display);
@@ -6676,6 +6688,7 @@ SdlTkGLXMakeCurrent(Display *display, Window w, SDL_GLContext ctx)
#endif
done:
SdlTkUnlock(display);
+#endif
}
/*
@@ -6696,6 +6709,7 @@ done:
void
SdlTkGLXReleaseCurrent(Display *display, Window w, SDL_GLContext ctx)
{
+#ifdef SDL_RENDERER_HAS_TARGET_3D
#ifdef ANDROID
_Window *_w = (_Window *) w;
@@ -6714,6 +6728,7 @@ SdlTkGLXReleaseCurrent(Display *display, Window w, SDL_GLContext ctx)
done:
SdlTkUnlock(display);
#endif
+#endif
}
/*
@@ -6734,6 +6749,7 @@ done:
void
SdlTkGLXSwapBuffers(Display *display, Window w)
{
+#ifdef SDL_RENDERER_HAS_TARGET_3D
_Window *_w = (_Window *) w;
SdlTkLock(display);
@@ -6823,6 +6839,7 @@ SdlTkGLXSwapBuffers(Display *display, Window w)
}
done:
SdlTkUnlock(display);
+#endif
}
/*
diff --git a/sdl/agg-2.4/include/agg_pixfmt_rgb_packed.h b/sdl/agg-2.4/include/agg_pixfmt_rgb_packed.h
index 2fe6398..79709bf 100644
--- a/sdl/agg-2.4/include/agg_pixfmt_rgb_packed.h
+++ b/sdl/agg-2.4/include/agg_pixfmt_rgb_packed.h
@@ -1267,7 +1267,9 @@ namespace agg
int8u cover)
{
typedef typename SrcPixelFormatRenderer::value_type src_value_type;
+#ifdef TYPE_NOT_USED
typedef typename SrcPixelFormatRenderer::color_type src_color_type;
+#endif
const src_value_type* psrc = (src_value_type*)from.row_ptr(ysrc);
if(psrc)
{
diff --git a/tests/textDisp.test b/tests/textDisp.test
index 038eccd..ac3aee0 100644
--- a/tests/textDisp.test
+++ b/tests/textDisp.test
@@ -1333,6 +1333,30 @@ test textDisp-9.13 {TkTextRedrawTag} {
update
list $tk_textRelayout $tk_textRedraw
} {{2.0 6.0 7.0} {2.0 6.0 7.0}}
+test textDisp-9.14 {TkTextRedrawTag} {
+ pack [text .tnocrash]
+ for {set i 1} {$i < 6} {incr i} {
+ .tnocrash insert end \nfoo$i
+ }
+ .tnocrash tag configure mytag1 -relief raised
+ .tnocrash tag configure mytag2 -relief solid
+ update
+ proc doit {} {
+ .tnocrash tag add mytag1 4.0 5.0
+ .tnocrash tag add mytag2 4.0 5.0
+ after idle {
+ .tnocrash tag remove mytag1 1.0 end
+ .tnocrash tag remove mytag2 1.0 end
+ }
+ .tnocrash delete 1.0 2.0
+ }
+ doit ; # must not crash
+ after 500 {
+ destroy .tnocrash
+ set done 1
+ }
+ vwait done
+} {}
test textDisp-10.1 {TkTextRelayoutWindow} {
.t configure -wrap char
@@ -2021,9 +2045,9 @@ test textDisp-16.18 {TkTextYviewCmd procedure, "moveto" roundoff} {textfonts} {
wm geometry .top1 +0+0
text .top1.t -height 3 -width 4 -wrap none -setgrid 1 -padx 6 \
-spacing3 6
- .top1.t insert end "1\n2\n3\n4\n5\n6"
pack .top1.t
update
+ .top1.t insert end "1\n2\n3\n4\n5\n6"
.top1.t yview moveto 0.3333
set result [.top1.t yview]
destroy .top1