Add support for placement id to GraphicsCommand

This commit is contained in:
Kovid Goyal 2020-12-02 05:35:57 +05:30
parent b5e704a934
commit f52c843fa2
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 15 additions and 10 deletions

View File

@ -338,8 +338,8 @@ class DiffHandler(Handler):
if candidate.image.image_id == image_id: if candidate.image.image_id == image_id:
q = self.xpos_for_image(row, candidate, is_left) q = self.xpos_for_image(row, candidate, is_left)
if q is not None: if q is not None:
pl['x'] = q[0] pl.x = q[0]
pl['y'] = row pl.y = row
return True return True
return False return False

View File

@ -15,8 +15,7 @@ from typing import (
) )
from kitty.typing import ( from kitty.typing import (
CompletedProcess, GRT_a, GRT_d, GRT_f, GRT_m, GRT_o, GRT_t, HandlerType, CompletedProcess, GRT_a, GRT_d, GRT_f, GRT_m, GRT_o, GRT_t, HandlerType
TypedDict
) )
from kitty.utils import ScreenSize, fit_image from kitty.utils import ScreenSize, fit_image
@ -136,6 +135,7 @@ class GraphicsCommand:
S: int = 0 # size of data to read from file S: int = 0 # size of data to read from file
O: int = 0 # offset of data to read from file O: int = 0 # offset of data to read from file
i: int = 0 # image id i: int = 0 # image id
p: int = 0 # placement id
o: Optional[GRT_o] = None # type of compression o: Optional[GRT_o] = None # type of compression
m: GRT_m = 0 # 0 or 1 whether there is more chunked data m: GRT_m = 0 # 0 or 1 whether there is more chunked data
x: int = 0 # left edge of image area to display x: int = 0 # left edge of image area to display
@ -173,10 +173,15 @@ class GraphicsCommand:
setattr(self, k, defval) setattr(self, k, defval)
class Placement(TypedDict): class Placement:
cmd: GraphicsCommand cmd: GraphicsCommand
x: int x: int = 0
y: int y: int = 0
def __init__(self, cmd: GraphicsCommand, x: int = 0, y: int = 0):
self.cmd = cmd
self.x = x
self.y = y
class ImageManager: class ImageManager:
@ -263,8 +268,8 @@ class ImageManager:
skey = self.image_id_to_converted_data[image_id] skey = self.image_id_to_converted_data[image_id]
self.transmit_image(image_data, image_id, *skey) self.transmit_image(image_data, image_id, *skey)
with cursor(self.handler.write): with cursor(self.handler.write):
self.handler.cmd.set_cursor_position(pl['x'], pl['y']) self.handler.cmd.set_cursor_position(pl.x, pl.y)
self.handler.cmd.gr_command(pl['cmd']) self.handler.cmd.gr_command(pl.cmd)
def send_image(self, path: str, max_cols: Optional[int] = None, max_rows: Optional[int] = None, scale_up: bool = False) -> SentImageKey: def send_image(self, path: str, max_cols: Optional[int] = None, max_rows: Optional[int] = None, scale_up: bool = False) -> SentImageKey:
path = os.path.abspath(path) path = os.path.abspath(path)
@ -316,7 +321,7 @@ class ImageManager:
gc.i = image_id gc.i = image_id
if src_rect is not None: if src_rect is not None:
gc.x, gc.y, gc.w, gc.h = map(int, src_rect) gc.x, gc.y, gc.w, gc.h = map(int, src_rect)
self.placements_in_flight[image_id].append({'cmd': gc, 'x': x, 'y': y}) self.placements_in_flight[image_id].append(Placement(gc, x, y))
with cursor(self.handler.write): with cursor(self.handler.write):
self.handler.cmd.set_cursor_position(x, y) self.handler.cmd.set_cursor_position(x, y)
self.handler.cmd.gr_command(gc) self.handler.cmd.gr_command(gc)