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
|
import traceback
|
||||||
from gettext import gettext as _
|
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 fs_images import fix_fullscreen_svg_images
|
||||||
from iframe_comm import IframeClient
|
from iframe_comm import IframeClient
|
||||||
@ -722,8 +722,8 @@ class IframeBoss:
|
|||||||
end_reference_mode()
|
end_reference_mode()
|
||||||
|
|
||||||
def annotations_msg_received(self, data):
|
def annotations_msg_received(self, data):
|
||||||
if data.type is 'set-selection':
|
if data.type is 'move-end-of-selection':
|
||||||
set_selections_extents_to(data.extents)
|
move_end_of_selection(data.pos, data.start)
|
||||||
elif data.type is 'set-highlight-style':
|
elif data.type is 'set-highlight-style':
|
||||||
set_selection_style(data.style)
|
set_selection_style(data.style)
|
||||||
elif data.type is 'trigger-shortcut':
|
elif data.type is 'trigger-shortcut':
|
||||||
@ -734,6 +734,8 @@ class IframeBoss:
|
|||||||
end_node, end_offset = sel.focusNode, sel.focusOffset
|
end_node, end_offset = sel.focusNode, sel.focusOffset
|
||||||
sel.modify('extend', 'backward', 'paragraphboundary')
|
sel.modify('extend', 'backward', 'paragraphboundary')
|
||||||
sel.setBaseAndExtent(sel.focusNode, sel.focusOffset, end_node, end_offset)
|
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':
|
elif data.type is 'edit-highlight':
|
||||||
crw_ = {v: k for k, v in Object.entries(annot_id_uuid_map)}[data.uuid]
|
crw_ = {v: k for k, v in Object.entries(annot_id_uuid_map)}[data.uuid]
|
||||||
if crw_ and select_crw(crw_):
|
if crw_ and select_crw(crw_):
|
||||||
|
@ -418,7 +418,7 @@ class SelectionBar:
|
|||||||
if self.state is not DRAGGING:
|
if self.state is not DRAGGING:
|
||||||
return
|
return
|
||||||
ev.stopPropagation(), ev.preventDefault()
|
ev.stopPropagation(), ev.preventDefault()
|
||||||
self.handle_moved(ev)
|
self.move_handle(ev)
|
||||||
|
|
||||||
def touchmove_on_container(self, ev):
|
def touchmove_on_container(self, ev):
|
||||||
if self.state is not DRAGGING:
|
if self.state is not DRAGGING:
|
||||||
@ -426,19 +426,23 @@ class SelectionBar:
|
|||||||
ev.stopPropagation(), ev.preventDefault()
|
ev.stopPropagation(), ev.preventDefault()
|
||||||
for touch in ev.changedTouches:
|
for touch in ev.changedTouches:
|
||||||
if touch.identifier is self.active_touch:
|
if touch.identifier is self.active_touch:
|
||||||
self.handle_moved(touch)
|
self.move_handle(touch)
|
||||||
return
|
return
|
||||||
|
|
||||||
def handle_moved(self, ev):
|
def move_handle(self, ev):
|
||||||
handle = document.getElementById(self.dragging_handle)
|
handle = document.getElementById(self.dragging_handle)
|
||||||
s = handle.style
|
s = handle.style
|
||||||
s.left = (ev.clientX - self.position_in_handle.x) + 'px'
|
s.left = (ev.clientX - self.position_in_handle.x) + 'px'
|
||||||
s.top = (ev.clientY - self.position_in_handle.y) + 'px'
|
s.top = (ev.clientY - self.position_in_handle.y) + 'px'
|
||||||
margins = get_margins()
|
margins = get_margins()
|
||||||
pos = self.current_handle_position
|
pos = self.current_handle_position
|
||||||
pos.start = map_to_iframe_coords(pos.start, margins)
|
if self.dragging_handle is self.left_handle_id:
|
||||||
pos.end = map_to_iframe_coords(pos.end, margins)
|
start = True
|
||||||
self.send_message('set-selection', extents=pos)
|
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
|
c = self.container
|
||||||
rect = c.getBoundingClientRect()
|
rect = c.getBoundingClientRect()
|
||||||
t = document.getElementById('book-top-margin').offsetHeight
|
t = document.getElementById('book-top-margin').offsetHeight
|
||||||
|
@ -114,28 +114,14 @@ def range_at_limit(invert_x, invert_y):
|
|||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
def set_selections_extents_to(extents):
|
def move_end_of_selection(pos, start):
|
||||||
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
|
|
||||||
sel = window.getSelection()
|
sel = window.getSelection()
|
||||||
if not sel.rangeCount:
|
if not sel.rangeCount:
|
||||||
return
|
return
|
||||||
r = sel.getRangeAt(0)
|
newr = range_from_point(pos.x, pos.y)
|
||||||
if extents.start.onscreen:
|
if newr:
|
||||||
start = range_from_point(extents.start.x, extents.start.y)
|
r = sel.getRangeAt(0)
|
||||||
if start:
|
if start:
|
||||||
r.setStart(start.startContainer, start.startOffset)
|
r.setStart(newr.startContainer, newr.startOffset)
|
||||||
if extents.end.onscreen:
|
else:
|
||||||
end = range_from_point(extents.end.x, extents.end.y)
|
r.setEnd(newr.endContainer, newr.endOffset)
|
||||||
if end:
|
|
||||||
r.setEnd(end.startContainer, end.startOffset)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user