electron-screenshots 0.4.5 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -78,6 +78,27 @@ module.exports = {
78
78
  }
79
79
  ```
80
80
 
81
+ - esc 取消截图,可用以下代码实现按 esc 取消截图
82
+
83
+ ```js
84
+ globalShortcut.register('esc', () => {
85
+ if (screenshots.$win?.isFocused()) {
86
+ screenshots.endCapture()
87
+ }
88
+ })
89
+ ```
90
+
91
+ - 加速截图界面展示,不销毁`BrowserWindow`,减少创建窗口的开销,可用以下代码实现。**需注意,启用该功能,会导致`window-all-closed`事件不触发,因此需要手动关闭截图窗口**
92
+
93
+ ```js
94
+ // 是否复用截图窗口,加快截图窗口显示,默认值为 false
95
+ // 如果设置为 true 则会在第一次调用截图窗口时创建,后续调用时直接使用
96
+ // 且由于窗口不会 close,所以不会触发 app 的 `window-all-closed` 事件
97
+ const screenshots = new Screenshots({
98
+ singleWindow: true
99
+ })
100
+ ```
101
+
81
102
  ## Methods
82
103
 
83
104
  - `Debugger`类型产考`debug`中的`Debugger`类型
@@ -106,15 +127,19 @@ export interface ScreenshotsOpts {
106
127
  // 调用日志,默认值为 debug('electron-screenshots')
107
128
  // debug https://www.npmjs.com/package/debug
108
129
  logger?: Logger
130
+ // 是否复用截图窗口,加快截图窗口显示,默认值为 false
131
+ // 如果设置为 true 则会在第一次调用截图窗口时创建,后续调用时直接使用
132
+ // 且由于窗口不会 close,所以不会触发 app 的 `window-all-closed` 事件
133
+ singleWindow?: boolean
109
134
  }
110
135
  ```
111
136
 
112
- | 名称 | 说明 | 返回值 |
113
- | ------------------------------------ | ---------------- | ------ |
137
+ | 名称 | 说明 | 返回值 |
138
+ | ------------------------------------------------- | ---------------- | ------ |
114
139
  | `constructor(opts: ScreenshotsOpts): Screenshots` | 调用截图方法截图 | - |
115
- | `startCapture(): Promise<void>` | 调用截图方法截图 | - |
116
- | `endCapture(): Promise<void>` | 手动结束截图 | - |
117
- | `setLang(lang: Lang): void` | 修改语言 | - |
140
+ | `startCapture(): Promise<void>` | 调用截图方法截图 | - |
141
+ | `endCapture(): Promise<void>` | 手动结束截图 | - |
142
+ | `setLang(lang: Lang): Promise<void>` | 修改语言 | - |
118
143
 
119
144
  ## Events
120
145
 
package/lib/index.js CHANGED
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  var electron_1 = require("electron");
7
- var electron_debug_1 = __importDefault(require("electron-debug"));
8
7
  var screenshots_1 = __importDefault(require("./screenshots"));
9
8
  electron_1.app.whenReady().then(function () {
10
9
  var screenshots = new screenshots_1.default({
@@ -17,11 +16,16 @@ electron_1.app.whenReady().then(function () {
17
16
  args[_i] = arguments[_i];
18
17
  }
19
18
  return console.log(args);
20
- }
19
+ },
20
+ singleWindow: true
21
21
  });
22
+ screenshots.$view.webContents.openDevTools();
22
23
  electron_1.globalShortcut.register('ctrl+shift+a', function () {
23
24
  screenshots.startCapture();
24
- screenshots.$view.webContents.openDevTools();
25
+ });
26
+ // 防止不能关闭截图界面
27
+ electron_1.globalShortcut.register('ctrl+shift+q', function () {
28
+ electron_1.app.quit();
25
29
  });
26
30
  // 点击确定按钮回调事件
27
31
  screenshots.on('ok', function (e, buffer, bounds) {
@@ -39,7 +43,6 @@ electron_1.app.whenReady().then(function () {
39
43
  screenshots.on('save', function (e, buffer, bounds) {
40
44
  console.log('capture', buffer, bounds);
41
45
  });
42
- (0, electron_debug_1.default)({ showDevTools: true, devToolsMode: 'undocked' });
43
46
  });
44
47
  electron_1.app.on('window-all-closed', function () {
45
48
  if (process.platform !== 'darwin') {
@@ -22,12 +22,14 @@ export interface Lang {
22
22
  export interface ScreenshotsOpts {
23
23
  lang?: Lang;
24
24
  logger?: Logger;
25
+ singleWindow?: boolean;
25
26
  }
26
27
  export { Bounds };
27
28
  export default class Screenshots extends Events {
28
29
  $win: BrowserWindow | null;
29
30
  $view: BrowserView;
30
31
  private logger;
32
+ private singleWindow;
31
33
  private isReady;
32
34
  constructor(opts?: ScreenshotsOpts);
33
35
  /**
@@ -41,7 +43,7 @@ export default class Screenshots extends Events {
41
43
  /**
42
44
  * 设置语言
43
45
  */
44
- setLang(lang: Partial<Lang>): void;
46
+ setLang(lang: Partial<Lang>): Promise<void>;
45
47
  private reset;
46
48
  /**
47
49
  * 初始化窗口
@@ -101,6 +101,7 @@ var Screenshots = /** @class */ (function (_super) {
101
101
  });
102
102
  });
103
103
  _this.logger = (opts === null || opts === void 0 ? void 0 : opts.logger) || (0, debug_1.default)('electron-screenshots');
104
+ _this.singleWindow = (opts === null || opts === void 0 ? void 0 : opts.singleWindow) || false;
104
105
  _this.listenIpc();
105
106
  _this.$view.webContents.loadURL("file://".concat(require.resolve('react-screenshots/electron/electron.html')));
106
107
  if (opts === null || opts === void 0 ? void 0 : opts.lang) {
@@ -129,6 +130,7 @@ var Screenshots = /** @class */ (function (_super) {
129
130
  if (!this.$win) {
130
131
  return [2 /*return*/];
131
132
  }
133
+ this.$win.blur();
132
134
  this.$win.show();
133
135
  return [2 /*return*/];
134
136
  }
@@ -150,11 +152,22 @@ var Screenshots = /** @class */ (function (_super) {
150
152
  if (!this.$win) {
151
153
  return [2 /*return*/];
152
154
  }
153
- this.$win.setBrowserView(null);
154
- this.$win.setSimpleFullScreen(false);
155
+ // 先清除 Kiosk 模式,然后取消全屏才有效
155
156
  this.$win.setKiosk(false);
156
- this.$win.close();
157
- this.$win = null;
157
+ this.$win.setFullScreen(false);
158
+ this.$win.setSimpleFullScreen(false);
159
+ this.$win.blur();
160
+ this.$win.setBrowserView(null);
161
+ // 必须设置为 closable 为 true
162
+ // 否者不能关闭窗口
163
+ this.$win.setClosable(true);
164
+ if (this.singleWindow) {
165
+ this.$win.hide();
166
+ }
167
+ else {
168
+ this.$win.close();
169
+ this.$win = null;
170
+ }
158
171
  return [2 /*return*/];
159
172
  }
160
173
  });
@@ -164,10 +177,18 @@ var Screenshots = /** @class */ (function (_super) {
164
177
  * 设置语言
165
178
  */
166
179
  Screenshots.prototype.setLang = function (lang) {
167
- var _this = this;
168
- this.isReady.then(function () {
169
- _this.logger('setLang', lang);
170
- _this.$view.webContents.send('SCREENSHOTS:setLang', lang);
180
+ return __awaiter(this, void 0, void 0, function () {
181
+ return __generator(this, function (_a) {
182
+ switch (_a.label) {
183
+ case 0:
184
+ this.logger('setLang', lang);
185
+ return [4 /*yield*/, this.isReady];
186
+ case 1:
187
+ _a.sent();
188
+ this.$view.webContents.send('SCREENSHOTS:setLang', lang);
189
+ return [2 /*return*/];
190
+ }
191
+ });
171
192
  });
172
193
  };
173
194
  Screenshots.prototype.reset = function () {
@@ -222,6 +243,9 @@ var Screenshots = /** @class */ (function (_super) {
222
243
  transparent: true,
223
244
  resizable: false,
224
245
  movable: false,
246
+ closable: false,
247
+ minimizable: false,
248
+ maximizable: false,
225
249
  // focusable: true, 否则窗口不能及时响应esc按键,输入框也不能输入
226
250
  focusable: true,
227
251
  // linux 下必须设置为false,否则不能全屏显示在最上层
@@ -235,20 +259,22 @@ var Screenshots = /** @class */ (function (_super) {
235
259
  enableLargerThanScreen: true,
236
260
  skipTaskbar: true,
237
261
  hasShadow: false,
238
- minimizable: false,
239
- maximizable: false,
240
- paintWhenInitiallyHidden: false
262
+ paintWhenInitiallyHidden: false,
263
+ acceptFirstMouse: true
241
264
  });
242
265
  this.$win.on('show', function () {
243
266
  var _a, _b;
267
+ (_a = _this.$win) === null || _a === void 0 ? void 0 : _a.focus();
244
268
  // 在窗口显示时设置,防止与 fullscreen、x、y、width、height 等冲突
245
269
  // 导致显示效果不符合预期
246
- (_a = _this.$win) === null || _a === void 0 ? void 0 : _a.setKiosk(true);
247
- (_b = _this.$win) === null || _b === void 0 ? void 0 : _b.focus();
270
+ (_b = _this.$win) === null || _b === void 0 ? void 0 : _b.setKiosk(true);
248
271
  });
249
272
  }
250
- this.$win.setBounds(display);
273
+ this.$win.setFullScreen(process.platform === 'darwin');
274
+ // 设置为 false,mac 就不显示左上角关闭按钮
275
+ this.$win.setClosable(false);
251
276
  this.$win.setBrowserView(this.$view);
277
+ this.$win.setBounds(display);
252
278
  this.$view.setBounds({
253
279
  x: 0,
254
280
  y: 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "electron-screenshots",
3
- "version": "0.4.5",
3
+ "version": "0.5.2",
4
4
  "description": "electron 截图插件",
5
5
  "types": "lib/screenshots.d.ts",
6
6
  "main": "lib/screenshots.js",
@@ -38,7 +38,7 @@
38
38
  "debug": "^4.3.3",
39
39
  "fs-extra": "^10.1.0",
40
40
  "node-screenshots": "^0.0.3",
41
- "react-screenshots": "^0.4.5"
41
+ "react-screenshots": "^0.5.1"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "electron": ">=11"
@@ -50,7 +50,6 @@
50
50
  "@typescript-eslint/parser": "^5.10.0",
51
51
  "cross-env": "^7.0.3",
52
52
  "electron": "^16.0.7",
53
- "electron-debug": "^3.2.0",
54
53
  "eslint": "^8.7.0",
55
54
  "eslint-config-standard": "^16.0.3",
56
55
  "eslint-plugin-import": "^2.25.4",
@@ -59,5 +58,5 @@
59
58
  "rimraf": "^3.0.2",
60
59
  "typescript": "^4.5.5"
61
60
  },
62
- "gitHead": "83c063ecd6b84c75cea303543e01949b352d148c"
61
+ "gitHead": "8cfc003a0b5159255cea5e2990515fc824982b1e"
63
62
  }