---
name: "blt::winop"
section: "3tcl"
platform: "linux"
package: "blt-dev"
version: "2.5.3+dfsg-8"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/blt::winop"
---

# blt::winop(3tcl)

Perform assorted window and image operations

```

```

## NAME

winop - Perform assorted window and image operations

## SYNOPSIS

**winop changes** *window*

**winop gradients** *leftcolor* *rightcolor* *gradients*

**winop image** *subcommand* ...

**winop image alpha** *srcImage* *destImage* *color*

**winop image colors** ?-alpha? *srcImage*

**winop image convolve** *srcImage* *destImage* *filter*

**winop image gradient** *image* *leftcolor* *rightcolor* ...

**winop image merge** *srcImage1* *srcImage2* *destImage* ?*alpha*? ?...?

**winop image mirror** *srcImage1* *destImage* ?*x\|y\|xy\|tile\|outer\|inner*?

**winop image quantize** *srcImage* *destImage* ?*nColors*?

**winop image readjpeg** *filename* *photoname*

**winop image resample** *srcImage* *destImage* ?*horizFilter*? ?*vertFilter*?

**winop image rotate** *srcImage* *destImage* *angle*

**winop image subsample** *srcImage* *destImage* *x* *y* *width* *height* ?*horizFilter*? ?*vertFilter*?

**winop lower** ?*window*?...

**winop map** ?*window*?...

**winop move** *window x y*

**winop query**

**winop raise** ?*window*?...

**winop snap** *window photoName* ?*width height* ?

**winop unmap** ?*window*?...

**winop warpto** ?*window*?

```

```

## DESCRIPTION

The **winop** command performs various window and image operations on Tk windows using low-level Xlib function calls to work around window manager pecularities.

## INTRODUCTION

Tk has several commands for manipulating its windows: **raise**, **lower**, **wm**, etc.  These commands ask the window manager to perform operations on Tk windows.  In some cases, a particular window manager won't perform the operation as expected.

For example, if you positioned a toplevel window using **wm geometry**, the window may not actually be at those particular coordinates.  The position of the window may be offset by dimensions of the title bar added by the window manager.

In situations like these, the **winop** command can be used to workaround these difficulties.  Instead, it makes low-level Xlib (such **XRaiseWindow** and **XMapWindow**) calls to perform these operations.

```

toplevel .top
wm withdraw .top
# Set the geometry to make the window manager
# place the window.
wm geometry .top +100+100
# Move the window to the desired location
# and "update" to force the window manager
# to recognize it.
winop move .top 100 100
update
wm deiconify .top
winop move .top 100 100
```

## OPERATIONS

The following operations are available for the **winop** command:

- **winop changes** *window*

  Realize window.

- **winop image** *subcommand* ...

  Image sub-commands.

  - **winop image alpha** ?**-shift**? *srcImage* *destImage* *color* ?*alpha*? ?*withalpha*?

    Set image pixels of the given color to transparent. If an alpha value is not given, it defaults to **0** (meaning transparent).  An alpha of 255 is used for solid. The *srcImage* and *destImage* may be the same. If the *color* is **\*** any color is matched. If *color* is prefixed with **!** match is inverted.

  - **winop gradients** *leftcolor* *rightcolor* *width*

    Return a list of *width* colors that graduate from *leftcolor* to the color just before *rightcolor*. Note that the last color in the returned list is not *rightcolor*. A typical use for this is calculating shadow colors.

  - **winop image blur** *srcImage dstImage* ?*radius*?

    Blur an image using gaussian blur.

  - **winop image colors** ?**-alpha**? ?**-count**? *srcImage*

    Return list of distinct colors.  If -alpha is given, the alpha is appended to each color after a colon, eg *#FF0000:00*.  If **-count** is given, returns color/count pairs.

  - **winop image convolve** *srcImage* *destImage* *filter*

    Convolve an image: filter is a list of numbers. The *srcImage* and *destImage* may be the same.

  - **winop image gradient** *image* *leftcolor* *rightcolor* ...

    Generate a gradient from left to right into *image*. The following options are available:

    - **-type halfsine\|sine\|linear\|rectangular\|radial\|split\|blank**

      Set the type of gradient.  The default is **sine**.

    - **-skew N**

      The *skew* determines the initial fraction of the image that the gradient occupies, after which only rightcolor is used. The skew must be \> 0 and \<= 1.0. The default value is *1.0*, meaning not skewed.

    - **-slant N**

      Make the gradient slant where a value of 1.0 slants at 45 degrees. The value must be between -100.0 and 100.0.

    - **-mathval N**

      Curve the gradient by passing the *Y* position to the function *-mathfunc*. The value must be between -100.0 and 100.0 (typically 1.0). The default is **0.0**, which means disabled.

    - **-mathfunc X**

      Function to use with *-mathval*. The default value is **sin**. The value must be one of: **sin cos tan sinh cosh tanh asin acos atan log log10 exp sqrt rand circle**.

    - **-rand N**

      Add small random purturbations to gradient to avoid striation lines. The value must be between 0.0 and 0.1.

    - **-height N**

      Change the image height.

    - **-width N**

      Change the image width.

  - **winop image merge** *srcImage1* *srcImage2* *destImage* ?*opacity*? ?*opacity2*?

    Merge two images with alpha blending.  The default ?*opacity*? is 0.5, and the default for ?*opacity2*?  is 1.0 - ?*opacity*?.

  - **winop image mirror** *srcImage1* *destImage* ?*x\|y\|xy\|tile\|outer\|inner*? ?halo?

    Flips an image on axis x, y or xy.  The *tile* option results in a double size image with mirror copies appended to generate a tile-able image. The *outer* option is used to resize an image while preserving the outside border by *halo* pixels (default is 16). The *inner* option copies from the center of source keeping it centered. These last 2 are used implicitly by **blt::tile::button -bdtile**, etc. The *srcImage1* and *destImage*  must not be the same if using *tile*, *inner* or *outer*. The default is **xy**.

  - **winop image quantize** *srcImage* *destImage* ?*nColors*?

    Limit number of colors in image.  Default 1. The *srcImage* and *destImage* may be the same.

  - **winop image readjpeg** *filename* *photoname*

    Read a jpeg image using libjpeg.  IMG makes this obsolete (and thus probably not builtin).

  - **winop image recolor** *srcImage* *destImage* *oldColor* *newColor* ?*alpha*?

    Change pixels from *oldColor* to *newColor*. If ?*alpha*? is not given it defaults to 255 (opaque). The *srcImage* and *destImage* may be the same.

  - **winop image resample** *srcImage* *destImage* ?*horizFilter*? ?*vertFilter*?

    Resample an image.  If *srcImage* and *destImage* are the same size, just makes a copy.  Otherwise the image is resized to the size of *destImage*, possibly wih filtering. Filters are one of: **bell bessel box bspline catrom default dummy gauss8** **gaussian gi lanczos3 mitchell none sinc triangle**. The *destImage* must be greater than 1x1.

  - **winop image rotate** *srcImage* *destImage* *angle*

    Rotate an image.  The *srcImage* and *destImage*  may be the same.

  - **winop image subsample** *srcImage* *destImage* *x* *y* *width* *height* ?*horizFilter*? ?*vertFilter*?

    Resample area of an image.  See resample.

  - **winop image trans** *image x y* ?*alpha*?

    Get or set the integer alpha value within an image.

- **winop lower** ?*window*?...

  Lowers *window* to the bottom of the X window stack.  *Window* is the path name of a Tk window.

- **winop map** ?*window*?...

  Maps *window* on the screen.  *Window* is the path name of a Tk window. If *window* is already mapped, this command has no effect.

- **winop move** *window x y*

  Move *window* to the screen location specified by *x* and *y*. *Window* is the path name of a Tk window, while *x* and *y* are screen coordinates.  This command returns  the empty string.

- **winop query**

  Query pointer position.  Returns @X,Y.

- **winop raise** ?*window*?...

  Raises *window* to the top of the X window stack. *Window* must be a valid path name of a Tk window.  This command returns the empty string.

- **winop snap** *window photoName* ?*width height*?

  Takes a snapshot of the *window* and stores the contents in the photo image *photoName*. *Window* is the valid path name of a Tk window which must be totally visible (unobscured).  *PhotoName* is the name of a Tk photo image which must already exist.  This command can fail if the window is obscured in any fashion, such as covered by  another window or partially offscreen.  In that case, an error message is returned.  If *width* or *height* is given, the image is resampled to the given size.

- **winop unmap** ?*window*?...

  Unmaps *window* from the screen. *Window* is the path name of a Tk window.

- **winop warpto** ?*window*?

  Warps the pointer to *window*. *Window* is the path name of a Tk window which must be mapped. If *window* is in the form *@x,y*, where *x* and *y* are root screen coordinates, the pointer is warped to that location on the screen.

  \[*I've never heard a good case for warping the pointer in an* *application.  It can be useful for testing, but in applications, it's* *always a bad idea.  Simply stated, the user owns the pointer, not the* *application.  If you have an application that needs it, I'd like to* *hear about it.*\]

  If no *window* argument is present the current location of the pointer is returned. The location is returned as a list in the form "*x y*", where *x* and *y* are the current coordinates of the pointer.

## KEYWORDS

window, map, raise, lower, pointer, warp
