Skip to content

Commit

Permalink
fix: createThumbnailFromPath takes size not maxSize
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Mar 1, 2023
1 parent 872d1fe commit 27098e1
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 4 deletions.
6 changes: 4 additions & 2 deletions docs/api/native-image.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,15 @@ Returns `NativeImage`

Creates an empty `NativeImage` instance.

### `nativeImage.createThumbnailFromPath(path, maxSize)` _macOS_ _Windows_
### `nativeImage.createThumbnailFromPath(path, size)` _macOS_ _Windows_

* `path` string - path to a file that we intend to construct a thumbnail out of.
* `maxSize` [Size](structures/size.md) - the maximum width and height (positive numbers) the thumbnail returned can be. The Windows implementation will ignore `maxSize.height` and scale the height according to `maxSize.width`.
* `size` [Size](structures/size.md) - the desired width and height (positive numbers) of the thumbnail.

Returns `Promise<NativeImage>` - fulfilled with the file's thumbnail preview image, which is a [NativeImage](native-image.md).

Note: The Windows implementation will ignore `size.height` and scale the height according to `size.width`.

### `nativeImage.createFromPath(path)`

* `path` string
Expand Down
27 changes: 27 additions & 0 deletions docs/breaking-changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,33 @@ This document uses the following convention to categorize breaking changes:

## Planned Breaking API Changes (24.0)

### API Changed: `nativeImage.createThumbnailFromPath(path, size)`

The `maxSize` parameter has been changed to `size` to reflect that the size passed in will be the size the thumbnail created. Previously, Windows would not scale the image up if it were smaller than `maxSize`, and
macOS would always set the size to `maxSize`. Behavior is now the same across platforms.

Updated Behavior:

```js
// a 128x128 image
const imagePath = path.join('path', 'to', 'capybara.png')
const size = { width: 256, height: 256 }
nativeImage.createThumbnailFromPath(imagePath, size).then(result => {
console.log(result.getSize()) // { width: 256, height: 256 }
})
```

Previous Behavior (on Windows):

```js
// a 128x128 image
const imagePath = path.join('path', 'to', 'capybara.png')
const size = { width: 256, height: 256 }
nativeImage.createThumbnailFromPath(imagePath, size).then(result => {
console.log(result.getSize()) // { width: 128, height: 128 }
})
```

### Deprecated: `BrowserWindow.setTrafficLightPosition(position)`

`BrowserWindow.setTrafficLightPosition(position)` has been deprecated, the
Expand Down
4 changes: 2 additions & 2 deletions shell/common/api/electron_api_native_image_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ v8::Local<v8::Promise> NativeImage::CreateThumbnailFromPath(
WTS_CACHEFLAGS flags;
WTS_THUMBNAILID thumbId;
hr = pThumbnailCache->GetThumbnail(pItem.Get(), size.width(),
WTS_FLAGS::WTS_NONE, &pThumbnail, &flags,
&thumbId);
WTS_FLAGS::WTS_SCALETOREQUESTEDSIZE,
&pThumbnail, &flags, &thumbId);

if (FAILED(hr)) {
promise.RejectWithErrorMessage(
Expand Down
16 changes: 16 additions & 0 deletions spec/api-native-image-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,22 @@ describe('nativeImage module', () => {
const result = await nativeImage.createThumbnailFromPath(goodPath, goodSize);
expect(result.isEmpty()).to.equal(false);
});

it('returns the correct size if larger than the initial image', async () => {
// capybara.png is a 128x128 image.
const goodPath = path.join(fixturesPath, 'assets', 'capybara.png');
const size = { width: 256, height: 256 };
const result = await nativeImage.createThumbnailFromPath(goodPath, size);
expect(result.getSize()).to.deep.equal(size);
});

it('returns the correct size if smaller than the initial image', async () => {
// capybara.png is a 128x128 image.
const goodPath = path.join(fixturesPath, 'assets', 'capybara.png');
const maxSize = { width: 100, height: 100 };
const result = await nativeImage.createThumbnailFromPath(goodPath, maxSize);
expect(result.getSize()).to.deep.equal(maxSize);
});
});

describe('addRepresentation()', () => {
Expand Down
Binary file added spec/fixtures/assets/capybara.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 27098e1

Please sign in to comment.