@dark-engine/platform-desktop
Version:
Dark renderer to desktop platforms like Windows, Linux, macOS via Nodegui and Qt
68 lines (67 loc) • 2.07 kB
JavaScript
;
var __importDefault =
(this && this.__importDefault) ||
function (mod) {
return mod && mod.__esModule ? mod : { default: mod };
};
Object.defineProperty(exports, '__esModule', { value: true });
exports.QDarkImage = exports.Image = void 0;
const nodegui_1 = require('@nodegui/nodegui');
const core_1 = require('@dark-engine/core');
const node_fetch_1 = __importDefault(require('node-fetch'));
const factory_1 = require('../factory');
const utils_1 = require('../utils');
const Image = (0, core_1.component)(props => (0, factory_1.qImage)(props), { displayName: 'Image' });
exports.Image = Image;
class QDarkImage extends nodegui_1.QLabel {
aspectRatioMode = nodegui_1.AspectRatioMode.KeepAspectRatio;
transformationMode = nodegui_1.TransformationMode.FastTransformation;
constructor() {
super();
this.setProperty('scaledContents', true);
}
async setSrc(value) {
if (!value) return;
try {
this.setPixmap(this.scale(await createPixmapFromPath(value)));
} catch (error) {
console.warn(error);
}
}
setBuffer(buffer) {
this.setPixmap(createPixmapFromBuffer(buffer));
}
setAspectRatioMode(mode) {
this.aspectRatioMode = mode;
this.fit();
}
setTransformationMode(mode) {
this.transformationMode = mode;
this.fit();
}
fit() {
if (!this.pixmap()) return;
this.setPixmap(this.scale(this.pixmap()));
}
scale(pixmap) {
return pixmap.scaled(this.width(), this.height(), this.aspectRatioMode, this.transformationMode);
}
}
exports.QDarkImage = QDarkImage;
async function createPixmapFromPath(src) {
const pixmap = new nodegui_1.QPixmap();
if ((0, utils_1.detectisValidURL)(src)) {
const response = await (0, node_fetch_1.default)(src);
const buffer = Buffer.from(await response.arrayBuffer());
pixmap.loadFromData(buffer);
} else {
pixmap.load(src);
}
return pixmap;
}
function createPixmapFromBuffer(buffer) {
const pixmap = new nodegui_1.QPixmap();
pixmap.loadFromData(buffer);
return pixmap;
}
//# sourceMappingURL=image.js.map