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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
from enigma import *
from Screens.Screen import Screen
from Screens.MessageBox import MessageBox
from Components.ActionMap import NumberActionMap
from Components.Label import Label
from Components.MenuList import MenuList
from Components.GUIComponent import *
from Components.ChoiceList import ChoiceEntryComponent, ChoiceList
import os
# this is not so great.
MAX_X = 720
MAX_Y = 576
MAX_W = MAX_X * 3 / 4
MAX_H = MAX_Y * 3 / 4
MIN_W = MAX_X / 8
MIN_H = MAX_Y / 8
def clip(val, min, max):
if min <= val <= max:
return val
if min <= val:
return max
return min
class PiPSetup(Screen):
def __init__(self, session, pip):
Screen.__init__(self, session)
self.pip = pip
self.pos = (self.pip.instance.position().x(), self.pip.instance.position().y())
self.size = self.pip.getSize()
self.orgpos = self.pos
self.orgsize = self.size
self.resize = 100
self["text"] = Label(_("Please use direction keys to move the PiP window.\nPress Bouquet +/- to resize the window.\nPress OK to go back to the TV mode or EXIT to cancel the moving."))
self["actions"] = NumberActionMap(["PiPSetupActions", "NumberActions"],
{
"ok": self.go,
"cancel": self.cancel,
"up": self.up,
"down": self.down,
"left": self.left,
"right": self.right,
"size+": self.bigger,
"size-": self.smaller,
"1": self.keyNumberGlobal,
"2": self.keyNumberGlobal,
"3": self.keyNumberGlobal,
"4": self.keyNumberGlobal,
"5": self.keyNumberGlobal,
"6": self.keyNumberGlobal,
"7": self.keyNumberGlobal,
"8": self.keyNumberGlobal,
"9": self.keyNumberGlobal,
"0": self.keyNumberGlobal
}, -1)
def go(self):
self.close()
def cancel(self):
self.pos = self.orgpos
self.size = self.orgsize
self.setPiPPosition()
self.close()
def setPiPPosition(self):
self.pip.move(self.pos[0], self.pos[1])
self.pip.resize(self.size[0], self.size[1])
def resizePiP(self, resize):
resize += 100 # resize is in percent, so resize=+20 means: 120%
oldsize = self.size
w = clip(self.size[0] * resize / 100, MIN_W, MAX_W)
h = clip(self.size[1] * resize / 100, MIN_H, MAX_H)
# calculate offset from center
mx = (oldsize[0] - w) / 2
my = (oldsize[1] - h) / 2
self.size = (w, h)
# reclip, account for new center
self.moveRelative(x=mx, y=my)
def moveRelative(self, x=0, y=0):
self.pos = (clip(self.pos[0] + x, 0, MAX_X - self.size[0]), clip(self.pos[1] + y, 0, MAX_Y - self.size[1]))
self.setPiPPosition()
def up(self):
self.moveRelative(y=-32)
def down(self):
self.moveRelative(y=+32)
def left(self):
self.moveRelative(x=-24)
def right(self):
self.moveRelative(x=+24)
def bigger(self):
self.resizePiP(+10)
def smaller(self):
self.resizePiP(-10)
def keyNumberGlobal(self, number):
if number > 0:
colsize = MAX_X / 3
rowsize = MAX_Y / 3
col = (number-1) % 3
row = (number-1) / 3
self.size = (180, 135)
# offset to keep center
ox = (colsize - self.size[0]) / 2
oy = (rowsize - self.size[1]) / 2
self.pos = (col * colsize + ox, row * rowsize + oy)
else:
# restore old position
self.pos = self.orgpos
self.size = self.orgsize
# reclip
self.moveRelative()
|