Makes setFlip() raise a bounds change, and makes the navigator copy
the image flip in addition to the other properties, when receiving
the bounds signal.
Flipping an image changes the bounds of each tile. The existing
code assumes that cannot happen. getTile() calculates the tile
bounds the first time it is asked for a particular tile. It then
caches and returns the same time on every subsequent call.
getTile() has a check to test if a tile exists in the cache. If
it does not, the tile is created and inserted. In order to make
tiles be rebuilt after a flip, we only need to check if the tile's
flip matches the image's flip. If not, we can recreate the tile
as if it did not exist.
To make this a bit clearer, the tile's flipped flag is now set
in getTile() rather than positionTile().
This makes setFlip() work.
This completes the per-image flip implementation. Tile bounds are
re-positioned within the image. When rendering, the x ordinals are
remapped to the flipped ones.
To use, set "flipped" on the image instead of the viewer. The code
is compatible with rotations and wrapping.
Implements #1553
This will flip each individual tile on a per image bases. However
the tiles are now drawn in the wrong locations. Clipping etc works.
this is implemented for Canvas and HTML renderers.
This wraps the implementation in tileSource but provides support for
wrapping. It does not support getting the source bounds.
Using this function instead of the tileSource version allows the
viewport clipping optimization to work with wrapping.
More than changing the store object of flip state, the code was simplified and the onFlip function from openseadragon was changed to receive a viewer argument.
TiledImage had a flipped variable wrongly stored.
From now on, flipped state must be read from the viewport object.
There were created a new helper method "setDisplayTransform" to change navigator styling.
Also, a new general function "setElementTransform" was created to help on element styling.
For this commit, I also made some changes on viewer onCanvasKeyPress method:
- r is rotating the image clockwise;
- R is rotating the image counter clockwise;
- Freed "F" keycode to other purposes (like filters or others).
This commit adds full support for a new OpenSeaDragon(OSD) feature - Mirror/Flip.
In order to fully support this new feature, the following OSD objects had to be modified:
- drawer.js:
- navigator
- openseadragon
- strings
- tiledImage
- viewer
Additionally, a new flip button was created (similar to the existing ones).
Flip Logic
Whenever the state is flip button is pressed, flip state is toogled, inverting all the controls and displays (the rotation direction is inverted as well).
This means that all viewer coordinates (including user inputs) must me inverted too.
Summary of modifications
- drawer.js: modified _offsetForRotation to invert rotation angle on flipped state. Added a _flip method to scale/mirror canvas context.
- navigator.js: adds full flip support and inverts nagivator inputs.
- openseadragon.js: new buttons, flip state variable and showFlipControl variable.
- strings.js: flip tool help tips.
- tiledImage.js: flips the actual drawing canvas.
- viewer.js: Added keyboardshortcuts to rotate 90degrees (r/R) and flip image (f/F). flip button state is stored here and flip order is set.
The flipped state is stored on viewer object.