11from typing import Optional
22from PySide6 .QtWidgets import (
3- QWidget , QVBoxLayout , QHBoxLayout , QLabel , QSpinBox ,
3+ QApplication , QWidget , QVBoxLayout , QHBoxLayout , QLabel , QSpinBox ,
44 QComboBox , QGroupBox , QPushButton , QCheckBox , QColorDialog
55)
66from PySide6 .QtCore import Signal
@@ -281,6 +281,44 @@ def init_ui(self) -> None:
281281 self .chk_kv_counts .setChecked (self .config .key_viewer .show_counts )
282282 self .chk_kv_counts .stateChanged .connect (self .on_change )
283283 layout .addWidget (self .chk_kv_counts )
284+
285+ # Attempt to get maximum screen height from all connected screens
286+ try :
287+ screens = QApplication .screens ()
288+ if screens :
289+ max_screen_y = max (screen .size ().height () for screen in screens )
290+ else :
291+ max_screen_y = 5000
292+ except Exception :
293+ max_screen_y = 5000
294+
295+ # Fade Controls
296+ fade_layout = QHBoxLayout ()
297+ fade_layout .addWidget (QLabel ("Fade Y:" ))
298+ self .spin_kv_fade_pos = QSpinBox ()
299+ self .spin_kv_fade_pos .setRange (0 , max_screen_y )
300+ self .spin_kv_fade_pos .setValue (self .config .key_viewer .fade_position_y )
301+ self .spin_kv_fade_pos .valueChanged .connect (self .on_change )
302+ fade_layout .addWidget (self .spin_kv_fade_pos )
303+
304+ fade_layout .addWidget (QLabel ("Length:" ))
305+ self .spin_kv_fade_len = QSpinBox ()
306+ self .spin_kv_fade_len .setRange (10 , max_screen_y )
307+ self .spin_kv_fade_len .setValue (self .config .key_viewer .fade_length_y )
308+ self .spin_kv_fade_len .valueChanged .connect (self .on_change )
309+ fade_layout .addWidget (self .spin_kv_fade_len )
310+ layout .addLayout (fade_layout )
311+
312+ # Fade Trigger
313+ trigger_layout = QHBoxLayout ()
314+ trigger_layout .addWidget (QLabel ("Fade Trigger:" ))
315+ self .combo_kv_fade_trig = QComboBox ()
316+ self .combo_kv_fade_trig .addItems (["head" , "tail" ])
317+ self .combo_kv_fade_trig .setCurrentText (self .config .key_viewer .fade_trigger )
318+ self .combo_kv_fade_trig .currentTextChanged .connect (self .on_change )
319+ trigger_layout .addWidget (self .combo_kv_fade_trig )
320+ trigger_layout .addStretch ()
321+ layout .addLayout (trigger_layout )
284322
285323 self .setLayout (layout )
286324
@@ -293,6 +331,9 @@ def on_change(self) -> None:
293331 self .config .key_viewer .panel_offset_y = self .spin_kv_off_y .value ()
294332 self .config .key_viewer .show_counts = self .chk_kv_counts .isChecked ()
295333 self .config .key_viewer .opacity = self .spin_kv_opacity .value () / 100.0
334+ self .config .key_viewer .fade_position_y = self .spin_kv_fade_pos .value ()
335+ self .config .key_viewer .fade_length_y = self .spin_kv_fade_len .value ()
336+ self .config .key_viewer .fade_trigger = self .combo_kv_fade_trig .currentText ()
296337 self .settings .save ()
297338
298339 def update_from_config (self ) -> None :
@@ -304,7 +345,9 @@ def update_from_config(self) -> None:
304345 self .spin_kv_off_x ,
305346 self .spin_kv_off_y ,
306347 self .spin_kv_opacity ,
307- self .chk_kv_counts
348+ self .chk_kv_counts ,
349+ self .spin_kv_fade_pos ,
350+ self .spin_kv_fade_len
308351 ):
309352 self .chk_kv_enabled .setChecked (self .config .key_viewer .enabled )
310353 self .spin_kv_height .setValue (self .config .key_viewer .height )
@@ -316,3 +359,6 @@ def update_from_config(self) -> None:
316359 self .spin_kv_off_y .setValue (self .config .key_viewer .panel_offset_y )
317360 self .spin_kv_opacity .setValue (int (self .config .key_viewer .opacity * 100 ))
318361 self .chk_kv_counts .setChecked (self .config .key_viewer .show_counts )
362+ self .spin_kv_fade_pos .setValue (self .config .key_viewer .fade_position_y )
363+ self .spin_kv_fade_len .setValue (self .config .key_viewer .fade_length_y )
364+ self .combo_kv_fade_trig .setCurrentText (self .config .key_viewer .fade_trigger )
0 commit comments