/usr/lib/python3/dist-packages/ginga/web/pgw/Viewers.py is in python3-ginga 2.6.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | from ginga.web.pgw.ImageViewPg import CanvasView, ImageViewCanvas
from ginga.web.pgw import Widgets
from ginga.misc import Bunch
class GingaViewerWidget(Widgets.Canvas):
"""
This class implements the server-side backend of the surface for a
web-based Ginga viewer. It uses a web socket to connect to an HTML5
canvas with javascript callbacks in a web browser on the client.
The viewer is created separately on the backend and connects to this
surface via the set_viewer() method.
"""
def __init__(self, viewer=None, width=600, height=600):
super(GingaViewerWidget, self).__init__(width=600, height=600)
if viewer is None:
viewer = CanvasView(logger)
self.logger = viewer.logger
self._configured = False
self.refresh_delay = 0.010
self.set_viewer(viewer)
def set_viewer(self, viewer):
self.logger.debug("set_viewer called")
self.viewer = viewer
#self.logger = viewer.get_logger()
self._dispatch_event_table = {
"activate": self.ignore_event,
"setbounds": self.map_event_cb,
"mousedown": viewer.button_press_event,
"mouseup": viewer.button_release_event,
"mousemove": viewer.motion_notify_event,
"mouseout": viewer.leave_notify_event,
"mouseover": viewer.enter_notify_event,
"mousewheel": viewer.scroll_event,
"wheel": viewer.scroll_event,
"click": self.ignore_event,
"dblclick": self.ignore_event,
"keydown": viewer.key_down_event,
"keyup": viewer.key_up_event,
"keypress": viewer.key_press_event,
"resize": viewer.resize_event,
"focus": lambda event: viewer.focus_event(event, True),
"focusout": lambda event: viewer.focus_event(event, False),
"blur": lambda event: viewer.focus_event(event, False),
"drop": viewer.drop_event,
"paste": self.ignore_event,
# Hammer.js events
"pinch": viewer.pinch_event,
"pinchstart": viewer.pinch_event,
"pinchend": viewer.pinch_event,
"rotate": viewer.rotate_event,
"rotatestart": viewer.rotate_event,
"rotateend": viewer.rotate_event,
"tap": viewer.tap_event,
"pan": viewer.pan_event,
"panstart": viewer.pan_event,
"panend": viewer.pan_event,
"swipe": viewer.swipe_event,
}
self.add_timer('refresh', self.refresh_cb)
self.add_timer('redraw', self.viewer.delayed_redraw)
self.add_timer('msg', self.viewer.clear_onscreen_message)
self.viewer.set_widget(self)
def get_viewer(self):
return self.viewer
def ignore_event(self, event):
pass
def map_event_cb(self, event):
self.viewer.map_event(event)
self.reset_timer('refresh', self.refresh_delay)
def refresh_cb(self, *args):
app = self.get_app()
app.do_operation('refresh_canvas', id=self.id)
self.reset_timer('refresh', self.refresh_delay)
def do_update(self, buf):
self.clear_rect(0, 0, self.width, self.height)
self.logger.debug("drawing image")
self.draw_image(buf, 0, 0, self.width, self.height)
self.logger.debug("drew image")
def _cb_redirect(self, event):
method = self._dispatch_event_table[event.type]
try:
method(event)
except Exception as e:
self.logger.error("error redirecting '%s' event: %s" % (
event.type, str(e)))
# TODO: dump traceback to debug log
#END
|