Skip to content

Commit af84e4e

Browse files
support --screenshot=FULL mode
1 parent 48246dc commit af84e4e

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

gradia/main.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from collections.abc import Sequence
2424
from typing import Optional
2525

26-
from gi.repository import Adw, Gio
26+
from gi.repository import Adw, Gio, Xdp
2727

2828
from gradia.ui.window import GradientWindow
2929
from gradia.backend.logger import Logger
@@ -39,7 +39,7 @@ def __init__(self, version: str):
3939
flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE | Gio.ApplicationFlags.HANDLES_OPEN
4040
)
4141
self.version = version
42-
self.screenshot_mode = False
42+
self.screenshot_flags: Optional[Xdp.ScreenshotFlags] = None
4343
self.temp_dirs: list[str] = []
4444

4545
# Connect to shutdown signal for cleanup
@@ -50,7 +50,7 @@ def do_command_line(self, command_line: Gio.ApplicationCommandLine) -> int:
5050

5151
logging.debug(f"Command line arguments: {args}")
5252

53-
self.screenshot_mode = "--screenshot" in args
53+
self.screenshot_flags = self._parse_screenshot_flag(args)
5454
files_to_open = []
5555

5656
for arg in args:
@@ -74,6 +74,22 @@ def do_command_line(self, command_line: Gio.ApplicationCommandLine) -> int:
7474

7575
return 0
7676

77+
def _parse_screenshot_flag(self, args: list[str]) -> Optional[Xdp.ScreenshotFlags]:
78+
for arg in args:
79+
if arg.startswith("--screenshot"):
80+
if "=" in arg:
81+
mode = arg.split("=", 1)[1].strip().upper()
82+
else:
83+
mode = "INTERACTIVE"
84+
if mode == "INTERACTIVE":
85+
return Xdp.ScreenshotFlags.INTERACTIVE
86+
elif mode == "FULL":
87+
return Xdp.ScreenshotFlags.NONE
88+
else:
89+
logging.warning(f"Unknown screenshot mode: {mode}. Defaulting to INTERACTIVE.")
90+
return Xdp.ScreenshotFlags.INTERACTIVE
91+
return None
92+
7793
def do_open(self, files: Sequence[Gio.File], hint: str):
7894
logging.debug(f"do_open called with files: {[file.get_path() for file in files]} and hint: {hint}")
7995
for file in files:
@@ -84,11 +100,10 @@ def do_open(self, files: Sequence[Gio.File], hint: str):
84100

85101
def do_activate(self):
86102
logging.debug("do_activate called")
87-
# Fallback if app is run without args and not via do_open/command_line
88103
self._open_window(None)
89104

90105
def _open_window(self, file_path: Optional[str]):
91-
logging.debug(f"Opening window with file_path={file_path}, screenshot_mode={self.screenshot_mode}")
106+
logging.debug(f"Opening window with file_path={file_path}, screenshot_flags={self.screenshot_flags}")
92107
temp_dir = tempfile.mkdtemp()
93108
logging.debug(f"Created temp directory: {temp_dir}")
94109
self.temp_dirs.append(temp_dir)
@@ -97,7 +112,7 @@ def _open_window(self, file_path: Optional[str]):
97112
temp_dir=temp_dir,
98113
version=self.version,
99114
application=self,
100-
init_with_screenshot=self.screenshot_mode,
115+
init_screenshot_mode=self.screenshot_flags,
101116
file_path=file_path
102117
)
103118
window.build_ui()

gradia/ui/image_loaders.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,12 +186,12 @@ def __init__(self, window: Gtk.ApplicationWindow, temp_dir: str) -> None:
186186
super().__init__(window, temp_dir)
187187
self.portal = Xdp.Portal()
188188

189-
def take_screenshot(self) -> None:
190-
"""Initiate screenshot capture"""
189+
def take_screenshot(self, flags: Xdp.ScreenshotFlags = Xdp.ScreenshotFlags.INTERACTIVE) -> None:
190+
"""Initiate screenshot capture with optional flags"""
191191
try:
192192
self.portal.take_screenshot(
193193
None,
194-
Xdp.ScreenshotFlags.INTERACTIVE,
194+
flags,
195195
None,
196196
self._on_screenshot_taken,
197197
None
@@ -289,8 +289,8 @@ def _on_drop_action(self, action: Optional[object], param: object) -> None:
289289
def load_from_clipboard(self) -> None:
290290
self.clipboard_loader.load_from_clipboard()
291291

292-
def take_screenshot(self) -> None:
293-
self.screenshot_loader.take_screenshot()
292+
def take_screenshot(self, flags: Xdp.ScreenshotFlags = Xdp.ScreenshotFlags.INTERACTIVE) -> None:
293+
self.screenshot_loader.take_screenshot(flags)
294294

295295
def load_from_file(self, file_path: str) -> None:
296296
self.commandline_loader.load_from_file(file_path)

gradia/ui/window.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from collections.abc import Callable
2121
from typing import Optional, Any
2222

23-
from gi.repository import Gtk, Gio, Adw, Gdk, GLib
23+
from gi.repository import Gtk, Gio, Adw, Gdk, GLib, Xdp
2424
from gradia.graphics.image_processor import ImageProcessor
2525
from gradia.graphics.gradient import GradientSelector, GradientBackground
2626
from gradia.ui.ui_parts import *
@@ -46,7 +46,7 @@ class GradientWindow(Adw.ApplicationWindow):
4646
# Temp file names
4747
TEMP_PROCESSED_FILENAME: str = "processed.png"
4848

49-
def __init__(self, temp_dir: str, version: str, init_with_screenshot: bool = False, file_path: str = None, **kwargs) -> None:
49+
def __init__(self, temp_dir: str, version: str, init_screenshot_mode: Xdp.ScreenshotFlags , file_path: str = None, **kwargs) -> None:
5050
super().__init__(**kwargs)
5151

5252
self.app: Adw.Application = kwargs['application']
@@ -96,8 +96,8 @@ def __init__(self, temp_dir: str, version: str, init_with_screenshot: bool = Fal
9696
self.create_action("del-selected", lambda *_: self.drawing_overlay.remove_selected_action(), ["<Primary>x", "Delete"])
9797
self.file_path = file_path
9898

99-
if init_with_screenshot:
100-
self.import_manager.take_screenshot()
99+
if init_screenshot_mode != None:
100+
self.import_manager.take_screenshot(init_screenshot_mode)
101101

102102

103103
def create_action(self, name: str, callback: Callable[..., None], shortcuts: Optional[list[str]] = None, enabled: bool = True) -> None:

0 commit comments

Comments
 (0)