mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Simply adjusting selection on handle move
Also re-enable drag scrollign with handles though it does not really work yet
This commit is contained in:
parent
1e24b66dad
commit
1911ec41b4
@ -4,7 +4,7 @@ from __python__ import bound_methods, hash_literals
|
||||
|
||||
import traceback
|
||||
from gettext import gettext as _
|
||||
from select import selection_extents, set_selections_extents_to, word_at_point
|
||||
from select import selection_extents, move_end_of_selection, word_at_point
|
||||
|
||||
from fs_images import fix_fullscreen_svg_images
|
||||
from iframe_comm import IframeClient
|
||||
@ -722,8 +722,8 @@ class IframeBoss:
|
||||
end_reference_mode()
|
||||
|
||||
def annotations_msg_received(self, data):
|
||||
if data.type is 'set-selection':
|
||||
set_selections_extents_to(data.extents)
|
||||
if data.type is 'move-end-of-selection':
|
||||
move_end_of_selection(data.pos, data.start)
|
||||
elif data.type is 'set-highlight-style':
|
||||
set_selection_style(data.style)
|
||||
elif data.type is 'trigger-shortcut':
|
||||
@ -734,6 +734,8 @@ class IframeBoss:
|
||||
end_node, end_offset = sel.focusNode, sel.focusOffset
|
||||
sel.modify('extend', 'backward', 'paragraphboundary')
|
||||
sel.setBaseAndExtent(sel.focusNode, sel.focusOffset, end_node, end_offset)
|
||||
elif data.type is 'drag-scroll':
|
||||
self.scroll_to_extend_annotation(data.backwards)
|
||||
elif data.type is 'edit-highlight':
|
||||
crw_ = {v: k for k, v in Object.entries(annot_id_uuid_map)}[data.uuid]
|
||||
if crw_ and select_crw(crw_):
|
||||
|
@ -418,7 +418,7 @@ class SelectionBar:
|
||||
if self.state is not DRAGGING:
|
||||
return
|
||||
ev.stopPropagation(), ev.preventDefault()
|
||||
self.handle_moved(ev)
|
||||
self.move_handle(ev)
|
||||
|
||||
def touchmove_on_container(self, ev):
|
||||
if self.state is not DRAGGING:
|
||||
@ -426,19 +426,23 @@ class SelectionBar:
|
||||
ev.stopPropagation(), ev.preventDefault()
|
||||
for touch in ev.changedTouches:
|
||||
if touch.identifier is self.active_touch:
|
||||
self.handle_moved(touch)
|
||||
self.move_handle(touch)
|
||||
return
|
||||
|
||||
def handle_moved(self, ev):
|
||||
def move_handle(self, ev):
|
||||
handle = document.getElementById(self.dragging_handle)
|
||||
s = handle.style
|
||||
s.left = (ev.clientX - self.position_in_handle.x) + 'px'
|
||||
s.top = (ev.clientY - self.position_in_handle.y) + 'px'
|
||||
margins = get_margins()
|
||||
pos = self.current_handle_position
|
||||
pos.start = map_to_iframe_coords(pos.start, margins)
|
||||
pos.end = map_to_iframe_coords(pos.end, margins)
|
||||
self.send_message('set-selection', extents=pos)
|
||||
if self.dragging_handle is self.left_handle_id:
|
||||
start = True
|
||||
position = map_to_iframe_coords(pos.start, margins)
|
||||
else:
|
||||
start = False
|
||||
position = map_to_iframe_coords(pos.end, margins)
|
||||
self.send_message('move-end-of-selection', start=start, pos=position)
|
||||
c = self.container
|
||||
rect = c.getBoundingClientRect()
|
||||
t = document.getElementById('book-top-margin').offsetHeight
|
||||
|
@ -114,28 +114,14 @@ def range_at_limit(invert_x, invert_y):
|
||||
return r
|
||||
|
||||
|
||||
def set_selections_extents_to(extents):
|
||||
if extents.start.onscreen and extents.end.onscreen:
|
||||
start = range_from_point(extents.start.x, extents.start.y)
|
||||
if start:
|
||||
end = range_from_point(extents.end.x, extents.end.y)
|
||||
if end:
|
||||
r = document.createRange()
|
||||
r.setStart(start.startContainer, start.startOffset)
|
||||
r.setEnd(end.startContainer, end.startOffset)
|
||||
sel = window.getSelection()
|
||||
sel.removeAllRanges()
|
||||
sel.addRange(r)
|
||||
return
|
||||
def move_end_of_selection(pos, start):
|
||||
sel = window.getSelection()
|
||||
if not sel.rangeCount:
|
||||
return
|
||||
newr = range_from_point(pos.x, pos.y)
|
||||
if newr:
|
||||
r = sel.getRangeAt(0)
|
||||
if extents.start.onscreen:
|
||||
start = range_from_point(extents.start.x, extents.start.y)
|
||||
if start:
|
||||
r.setStart(start.startContainer, start.startOffset)
|
||||
if extents.end.onscreen:
|
||||
end = range_from_point(extents.end.x, extents.end.y)
|
||||
if end:
|
||||
r.setEnd(end.startContainer, end.startOffset)
|
||||
r.setStart(newr.startContainer, newr.startOffset)
|
||||
else:
|
||||
r.setEnd(newr.endContainer, newr.endOffset)
|
||||
|
Loading…
x
Reference in New Issue
Block a user