Skip to content

Commit

Permalink
v3.1
Browse files Browse the repository at this point in the history
Backlog
  • Loading branch information
ccz-2 committed Mar 10, 2020
1 parent db0af8a commit be0de9d
Show file tree
Hide file tree
Showing 5 changed files with 169 additions and 140 deletions.
Binary file modified NDFS.ankiaddon
Binary file not shown.
73 changes: 38 additions & 35 deletions __init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# No Distractions Full Screen
# v3.0 2/27/2020
# v3.1 2/27/2020
# Copyright (c) 2020 Quip13 ([email protected])
#
# MIT License
Expand All @@ -25,7 +25,6 @@
from aqt.qt import *
from aqt import *
from aqt.webview import AnkiWebView
from aqt.reviewer import Reviewer
from aqt.deckbrowser import DeckBrowser
from anki.hooks import *
from anki.utils import isMac, isWin
Expand Down Expand Up @@ -97,25 +96,25 @@ def padCards():
mw.reviewer.bottom.web.evalWithCallback('getHeight();', padCardsCallback)

#CSS/JS injection
def reviewer_wrapper(*args):
def reviewer_wrapper(func):
reformat = open(os.path.join(os.path.dirname(__file__), 'NDFullScreen.js')).read()
draggable = open(os.path.join(os.path.dirname(__file__), 'draggable.js')).read()
hide_cursor = open(os.path.join(os.path.dirname(__file__), 'hide_cursor.js')).read()
pad_cards = open(os.path.join(os.path.dirname(__file__), 'card_padding.js')).read()
interact = open(os.path.join(os.path.dirname(__file__), 'interact.min.js')).read()

config = mw.addonManager.getConfig(__name__)
op = config['answer_button_opacity']
cursorIdleTimer = config['cursor_idle_timer']
color = config['answer_button_border_color']

mw.reviewer.bottom.web.eval(interact)
mw.reviewer.bottom.web.eval(draggable)
mw.reviewer.bottom.web.eval(f"var op = {op}; var color = '{color}'; {reformat}")
mw.reviewer.bottom.web.eval(f"var cursorIdleTimer = {cursorIdleTimer}; {hide_cursor}")

mw.reviewer.web.eval(f"var cursorIdleTimer = {cursorIdleTimer}; {hide_cursor}")
mw.reviewer.web.eval(pad_cards)
def _initReviewerWeb(*args):
config = mw.addonManager.getConfig(__name__)
op = config['answer_button_opacity']
cursorIdleTimer = config['cursor_idle_timer']
color = config['answer_button_border_color']
func()
mw.reviewer.bottom.web.eval(interact)
mw.reviewer.bottom.web.eval(draggable)
mw.reviewer.bottom.web.eval(f"var op = {op}; var color = '{color}'; {reformat}")
mw.reviewer.bottom.web.eval(f"var cursorIdleTimer = {cursorIdleTimer}; {hide_cursor}")
mw.reviewer.web.eval(pad_cards)
return _initReviewerWeb

#Passes touchevents (except touchcancel) and mousemovements to bottom; will trigger bottom to grab events
class eventPassThroughFilter(QObject):
Expand Down Expand Up @@ -187,11 +186,9 @@ def toggle():
softwareRendering()
og_adjustHeightToFit = mw.reviewer.bottom.web.adjustHeightToFit
og_window_state = mw.windowState()
og_reviewer = Reviewer._initWeb #stores initial reviewer before wrap
og_window_flags = mw.windowFlags() #stores initial flags

Reviewer._initWeb = wrap(og_reviewer, reviewer_wrapper) #tried to use triggers instead but is called prematurely upon suspend/bury

og_reviewer = mw.reviewer._initWeb #stores initial reviewer before wrap
mw.reviewer._initWeb = reviewer_wrapper(og_reviewer) #tried to use triggers instead but is called prematurely upon suspend/bury
mw.reviewer.bottom.web.adjustHeightToFit = adjustHeightToFit_override #disables adjustheighttofit
mw.reviewer.bottom.web.setFixedSize(QWIDGETSIZE_MAX,QWIDGETSIZE_MAX) #resets fixed minimums

Expand Down Expand Up @@ -228,7 +225,7 @@ def toggle():
ndfs_enabled = False
ndfs_inReview = False
mw.removeEventFilter(loseFocusEventFilter)
Reviewer._initWeb = og_reviewer #reassigns initial constructor
mw.reviewer._initWeb = og_reviewer #reassigns initial constructor
mw.setWindowState(og_window_state)
mw.reviewer.bottom.web.adjustHeightToFit = og_adjustHeightToFit
mw.mainLayout.removeWidget(fs_window)
Expand All @@ -254,6 +251,7 @@ def toggle():
def unpause():
mw.setUpdatesEnabled(True)
QTimer.singleShot(pause, unpause)

ndfs_inReview = False
def updateBottom(*args):
global ndfs_inReview
Expand All @@ -264,20 +262,17 @@ def updateBottom(*args):
mw.reviewer.bottom.web.eval(f"updatePos({posX}, {posY});")
mw.reviewer.bottom.web.eval("activateHover();")
padCards()

if lockDrag.isChecked():
mw.reviewer.bottom.web.eval("disable_drag();")
else:
mw.reviewer.bottom.web.eval("enable_drag();")

setLock()
if mw.isFullScreen():
mw.reviewer.bottom.web.eval("enable_bottomHover();") #enables showing of bottom bar when mouse on bottom

def resetPos():
config['answer_bar_posX'] = 0
config['answer_bar_posY'] = 0
mw.addonManager.writeConfig(__name__, config)
mw.reviewer.bottom.web.eval(f"updatePos(0, 0);")

#mw.reset() triggers this as well
def stateChange(new_state, old_state, *args):
#print(str(old_state) + " -> " + str(new_state))
global ndfs_inReview
Expand All @@ -301,18 +296,27 @@ def on_context_menu_event(web, menu):
else:
menu.removeAction(lockDrag)

#Qt inverts current selection before triggering
def toggleBar():
setLock()
config = mw.addonManager.getConfig(__name__)
updateBottom()
config['answer_bar_locked'] = lockDrag.isChecked()
mw.addonManager.writeConfig(__name__, config)

def setLock():
global ndfs_inReview
if ndfs_inReview:
if lockDrag.isChecked():
mw.reviewer.bottom.web.eval("disable_drag();")
else:
mw.reviewer.bottom.web.eval("enable_drag();")

#Format changes when not in review
addHook("afterStateChange", stateChange)
addHook("AnkiWebView.contextMenuEvent", on_context_menu_event)
addHook("showQuestion", updateBottom)
addHook("showAnswer", updateBottom)
addHook("revertedCard", updateBottom)
#addHook("showQuestion", updateBottom)
#addHook("showAnswer", updateBottom)
#addHook("revertedCard", updateBottom)

def toggle_full_screen():
config = mw.addonManager.getConfig(__name__)
Expand Down Expand Up @@ -400,7 +404,7 @@ def toggle_window():
menu.addAction(enable_cursor_hide)
enable_cursor_hide.triggered.connect(user_settings)

def linkHandler_wrapper(self, url):
def linkHandler_wrapper(url):
global posX
global posY
if "cursor_hide" in url and ndfs_inReview:
Expand All @@ -427,16 +431,15 @@ def linkHandler_wrapper(self, url):
config['answer_bar_posY'] = posY
mw.addonManager.writeConfig(__name__, config)
else:
origLinkHandler(self, url)
origLinkHandler = Reviewer._linkHandler
Reviewer._linkHandler = linkHandler_wrapper #custom wrapper
origLinkHandler(url)
origLinkHandler = mw.reviewer._linkHandler
mw.reviewer._linkHandler = linkHandler_wrapper #custom wrapper

class loseFocus(QObject):
def eventFilter(self, obj, event):
if ndfs_inReview:
if event.type() in [QEvent.WindowDeactivate, QEvent.HoverLeave]: #Card edit does not trigger these - cursor shown by state change hook
mw.reviewer.bottom.web.eval(f"show_mouse('{event.type()}');")
mw.reviewer.web.eval(f"show_mouse('{event.type()}');")
elif event.type() == QEvent.WindowActivate:
mw.reviewer.bottom.web.eval(f"countDown('{event.type()}');")
return False
Expand Down
4 changes: 2 additions & 2 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
"cursor_idle_timer": 10000,
"last_toggle": "full_screen",
"stay_on_top": false,
"answer_button_border_color": "rgba(110, 110, 110, 0.8)",
"answer_button_border_color": "rgba(180, 180, 180, 0.8)",
"fullscreen_hotkey": "F11",
"lock_answer_bar_hotkey": "Ctrl+L",
"answer_bar_locked": true,
"answer_bar_posX": 0,
"answer_bar_posY": 0,
"rendering_pause": 50,
"rendering_pause": 300,
"do_not_show_warnings": false
}
6 changes: 3 additions & 3 deletions config.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Note: Changing settings through menu buttons will override respective values
- `answer_button_border_color`: Color of border around answer buttons
Accepts HTML color codes. For help, see: [Color Picker](https://www.hexcolortool.com/#6e6e6e,0.8)

- `answer_button_opacity`: Pre-mouse hover opacity
- `answer_button_opacity`: Pre-mousehover opacity
`0` = hidden, `1` = solid. Must add leading 0 for decimals (e.g. `0.5`)

- `cursor_idle_timer`: Milliseconds to wait before hiding mouse
Expand All @@ -19,5 +19,5 @@ Note: Changing settings through menu buttons will override respective values
- `lock_answer_bar_hotkey`: Keybinding that toggles whether the answer bar should be draggable
**Must restart to take effect**

- `rendering_pause`: Milliseconds to wait before displaying changes. Helps reduce flickering and artifacts. Occurs after every fullscreen/windowed toggle
This can be changed depending on your machine and preferences. Higher amounts = cleaner transitions, but less responsive toggling
- `rendering_pause`: Milliseconds to wait before screen render is displayed. Helps reduce flickering and artifacts when toggling fullscreen/windowed.
Can be adjusted depending on your machine and preferences. Higher values = cleaner transitions, but less responsive toggling
Loading

0 comments on commit be0de9d

Please sign in to comment.