# Canvas Expander , resize canvas based on all paintlayers and active view

**URL:** <https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109>\
**Category:** Plugins Development\
**Created:** [October 15, 2023, 10:33pm UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109 "2023-10-15T22:33:01Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![TLTAA](https://krita-artists.org/user_avatar/krita-artists.org/tltaa/32/92349_2.png) [@TLTAA](https://krita-artists.org/u/TLTAA)\
**Post date:** [October 15, 2023, 10:33pm UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/1 "2023-10-15T22:33:02Z")

</div>

# Canvas Expander

A krita extension that supplies helpful canvas related operations to help speed up workflow.

## Features

- Resize the document to fit all paint layers and viewport bounds, With options for just the layers or just the selected layer.

- Scale the document to zoom, dynamically re-scale the document based on current zoom making it now 100% zoom. Its ‘Scale Image To New size…’ without the menus!

## Useage & Shortcuts

Tools \> Scripts \> Canvas Expander **ctrl+alt+shift+e**  
Tools \> Scripts \> Canvas Expander (Current Layer Only) **ctrl+alt+shift+r**  
Tools \> Scripts \> Canvas Expander (layers Only) **ctrl+alt+shift+t**  
Tools \> Scripts \> Canvas Expander (Scale to zoom) **ctrl+alt+shift+s**

## Installation

### Krita’s own guide

> **[Managing Python plugins](https://docs.krita.org/en/user_manual/python_scripting/install_custom_python_plugin.html)**
>
> How to install a custom Python plugin.

### Current Release

> **[Release v0.1.2-alpha · bmcgruddy/canvas-expander](https://github.com/bmcgruddy/canvas-expander/releases/tag/v0.1.2)**
>
> Contribute to bmcgruddy/canvas-expander development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![freyalupen](https://krita-artists.org/user_avatar/krita-artists.org/freyalupen/32/47913_2.png) [@freyalupen](https://krita-artists.org/u/freyalupen)\
**Post date:** [October 16, 2023, 1:11am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/2 "2023-10-16T01:11:49Z")

</div>

1. You probably want Document.resizeImage(x,y, w,h). It’s the same thing but all at once.
2. Node.bounds() should match the contents of the layer, as far as I know.
3. You can convert the widget size to zoomed image size like this:

```auto
zoom = view.canvas().zoomLevel()
scale = window.qwindow().devicePixelRatioF()
dpi = documement.resolution()

realZoom = zoom*scale / (dpi/72)

# width/height of the window, in zoomed image pixels
new_width = int(w_width * scale / realZoom)
new_height = int(w_height * scale / realZoom)

```

- Also, if you want to use the viewport’s size instead of the window’s:  
`viewport = window.qwindow().centralWidget()`
- One more thing, you can combine QRects like this: `combined_bounds = combined_bounds.united(node.bounds())`

---

<div class="post-metadata">

**Author:** ![TLTAA](https://krita-artists.org/user_avatar/krita-artists.org/tltaa/32/92349_2.png) [@TLTAA](https://krita-artists.org/u/TLTAA)\
**Post date:** [October 16, 2023, 3:22am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/3 "2023-10-16T03:22:40Z")

</div>

thank you , now have working code just need to spend a little time rewriting into a functioning extension. 😀

---

<div class="post-metadata">

**Author:** ![AhabGreybeard](https://krita-artists.org/user_avatar/krita-artists.org/ahabgreybeard/32/2969_2.png) [@AhabGreybeard](https://krita-artists.org/u/AhabGreybeard)\
**Post date:** [October 16, 2023, 6:31am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/4 "2023-10-16T06:31:26Z")

</div>

Hello @TLTAA and welcome to the forum 🙂

> [@TLTAA](#):
>
> grow & shrink the canvas to fit all paint layers.

Would it be possible to also have a “Resize canvas to currently selected layer content” function?  
I’d find that very useful if you could.

---

<div class="post-metadata">

**Author:** ![TLTAA](https://krita-artists.org/user_avatar/krita-artists.org/tltaa/32/92349_2.png) [@TLTAA](https://krita-artists.org/u/TLTAA)\
**Post date:** [October 16, 2023, 6:57am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/5 "2023-10-16T06:57:43Z")

</div>

@AhabGreybeard I’ll add it to my notes 😉 just checking does this request differ from “image \> trim to current layer”? It only just occurred to me that said operation “trims” the hidden parts of the other layers (which I’m guessing you’d like to avoid).

---

<div class="post-metadata">

**Author:** ![AhabGreybeard](https://krita-artists.org/user_avatar/krita-artists.org/ahabgreybeard/32/2969_2.png) [@AhabGreybeard](https://krita-artists.org/u/AhabGreybeard)\
**Post date:** [October 16, 2023, 7:01am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/6 "2023-10-16T07:01:41Z")

</div>

Trim resizes the canvas and also removes off-canvas content from around the specified region.  
It’s a useful function but not what I need in some situations.  
Hence my desire for ‘Resize to Current Layer’ but with no removal of any content from anywhere.

---

<div class="post-metadata">

**Author:** ![TLTAA](https://krita-artists.org/user_avatar/krita-artists.org/tltaa/32/92349_2.png) [@TLTAA](https://krita-artists.org/u/TLTAA)\
**Post date:** [October 16, 2023, 7:07am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/7 "2023-10-16T07:07:25Z")

</div>

@AhabGreybeard ah thought that may be the case happy to oblige.

---

<div class="post-metadata">

**Author:** ![AhabGreybeard](https://krita-artists.org/user_avatar/krita-artists.org/ahabgreybeard/32/2969_2.png) [@AhabGreybeard](https://krita-artists.org/u/AhabGreybeard)\
**Post date:** [October 16, 2023, 7:08am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/8 "2023-10-16T07:08:14Z")

</div>

I’ve been asking for this for a long time. THANK YOU! 👍🙂

---

<div class="post-metadata">

**Author:** ![TLTAA](https://krita-artists.org/user_avatar/krita-artists.org/tltaa/32/92349_2.png) [@TLTAA](https://krita-artists.org/u/TLTAA)\
**Post date:** [October 16, 2023, 9:53am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/9 "2023-10-16T09:53:34Z")

</div>

@AhabGreybeard version 0.1.2 made with you’re request. 😇

---

<div class="post-metadata">

**Author:** ![AhabGreybeard](https://krita-artists.org/user_avatar/krita-artists.org/ahabgreybeard/32/2969_2.png) [@AhabGreybeard](https://krita-artists.org/u/AhabGreybeard)\
**Post date:** [October 16, 2023, 10:07am UTC](https://krita-artists.org/t/canvas-expander-resize-canvas-based-on-all-paintlayers-and-active-view/76109/10 "2023-10-16T10:07:03Z")

</div>

Thank you @TLTAA 👍  
I’ll try this later in the day when I have time to concentrate on it and I’ll let you know if I have any difficulties with it.
