Improve image drawing fill strategy

This commit is contained in:
Germain Souquet 2021-06-25 09:36:12 +01:00
parent 652ad3617d
commit e628cac06b
2 changed files with 18 additions and 7 deletions

View file

@ -37,16 +37,28 @@ export default class BackdropPanel extends React.PureComponent<IProps> {
const imageHeight = (backgroundImage as ImageBitmap).height const imageHeight = (backgroundImage as ImageBitmap).height
|| (backgroundImage as HTMLImageElement).naturalHeight; || (backgroundImage as HTMLImageElement).naturalHeight;
const destinationX = width - imageWidth; const contentRatio = imageWidth / imageHeight;
const destinationY = height - imageHeight; const containerRatio = width / height;
let resultHeight;
let resultWidth;
if (contentRatio > containerRatio) {
resultHeight = height;
resultWidth = height * contentRatio;
} else {
resultWidth = width;
resultHeight = width / contentRatio;
}
const x = (width - resultWidth) / 2;
const y = (height - resultHeight) / 2;
this.ctx.filter = `blur(${this.props.blur})`; this.ctx.filter = `blur(${this.props.blur})`;
this.ctx.drawImage( this.ctx.drawImage(
backgroundImage, backgroundImage,
Math.min(destinationX, 0), x,
Math.min(destinationY, 0), y,
Math.max(width, imageWidth), resultWidth,
Math.max(height, imageHeight), resultHeight,
); );
} }

View file

@ -61,7 +61,6 @@ import { MatrixCall } from 'matrix-js-sdk/src/webrtc/call';
import AudioFeedArrayForCall from '../views/voip/AudioFeedArrayForCall'; import AudioFeedArrayForCall from '../views/voip/AudioFeedArrayForCall';
import { OwnProfileStore } from '../../stores/OwnProfileStore'; import { OwnProfileStore } from '../../stores/OwnProfileStore';
import { UPDATE_EVENT } from "../../stores/AsyncStore"; import { UPDATE_EVENT } from "../../stores/AsyncStore";
import { mediaFromMxc } from "../../customisations/Media";
// We need to fetch each pinned message individually (if we don't already have it) // We need to fetch each pinned message individually (if we don't already have it)