mirror of
https://github.com/kbumsik/VirtScreen.git
synced 2025-03-09 15:40:18 +00:00
Backend: make use of DisplayProperty class
This commit is contained in:
parent
68efb022c7
commit
6bee3d556a
2 changed files with 102 additions and 55 deletions
24
main.qml
24
main.qml
|
@ -6,6 +6,7 @@ import QtQuick.Window 2.2
|
|||
|
||||
import Qt.labs.platform 1.0 as Labs
|
||||
|
||||
import VirtScreen.DisplayProperty 1.0
|
||||
import VirtScreen.Backend 1.0
|
||||
|
||||
|
||||
|
@ -34,6 +35,10 @@ ApplicationWindow {
|
|||
id: backend
|
||||
}
|
||||
|
||||
DisplayProperty {
|
||||
id: display
|
||||
}
|
||||
|
||||
// Timer object and function
|
||||
Timer {
|
||||
id: timer
|
||||
|
@ -86,16 +91,13 @@ ApplicationWindow {
|
|||
Layout.fillWidth: true
|
||||
Label { text: "Width"; Layout.fillWidth: true }
|
||||
SpinBox {
|
||||
value: backend.width
|
||||
value: backend.virt.width
|
||||
from: 640
|
||||
to: 1920
|
||||
stepSize: 1
|
||||
editable: true
|
||||
textFromValue: function(value, locale) {
|
||||
return Number(value).toLocaleString(locale, 'f', 0) + " px";
|
||||
}
|
||||
onValueModified: {
|
||||
backend.width = value;
|
||||
backend.virt.width = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -104,16 +106,13 @@ ApplicationWindow {
|
|||
Layout.fillWidth: true
|
||||
Label { text: "Height"; Layout.fillWidth: true }
|
||||
SpinBox {
|
||||
value: backend.height
|
||||
value: backend.virt.height
|
||||
from: 360
|
||||
to: 1080
|
||||
stepSize : 1
|
||||
editable: true
|
||||
textFromValue: function(value, locale) {
|
||||
return Number(value).toLocaleString(locale, 'f', 0) + " px";
|
||||
}
|
||||
onValueModified: {
|
||||
backend.height = value;
|
||||
backend.virt.height = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -322,8 +321,9 @@ ApplicationWindow {
|
|||
}
|
||||
sysTrayIcon.clicked = true;
|
||||
// Move window to the corner of the primary display
|
||||
var width = backend.primaryDisplayWidth;
|
||||
var height = backend.primaryDisplayHeight;
|
||||
var primary = backend.primary;
|
||||
var width = primary.width;
|
||||
var height = primary.height;
|
||||
var x_mid = width / 2;
|
||||
var y_mid = height / 2;
|
||||
window.x = width - window.width; //(backend.cursor_x > x_mid)? width - window.width : 0;
|
||||
|
|
133
virtscreen.py
133
virtscreen.py
|
@ -50,16 +50,17 @@ class SubprocessWrapper:
|
|||
#-------------------------------------------------------------------------------
|
||||
# Display properties
|
||||
#-------------------------------------------------------------------------------
|
||||
class DisplayProperty:
|
||||
def __init__(self):
|
||||
self.name: str
|
||||
self.primary: bool
|
||||
self.connected: bool
|
||||
self.active: bool
|
||||
self.width: int
|
||||
self.height: int
|
||||
self.x_offset: int
|
||||
self.y_offset: int
|
||||
class DisplayProperty(QObject):
|
||||
def __init__(self, parent=None):
|
||||
super(DisplayProperty, self).__init__(parent)
|
||||
self._name: str
|
||||
self._primary: bool
|
||||
self._connected: bool
|
||||
self._active: bool
|
||||
self._width: int
|
||||
self._height: int
|
||||
self._x_offset: int
|
||||
self._y_offset: int
|
||||
def __str__(self):
|
||||
ret = f"{self.name}"
|
||||
if self.connected:
|
||||
|
@ -73,6 +74,62 @@ class DisplayProperty:
|
|||
else:
|
||||
ret += " disconnected"
|
||||
return ret
|
||||
|
||||
@pyqtProperty(str)
|
||||
def name(self):
|
||||
return self._name
|
||||
@name.setter
|
||||
def name(self, name):
|
||||
self._name = name
|
||||
|
||||
@pyqtProperty(bool)
|
||||
def primary(self):
|
||||
return self._primary
|
||||
@primary.setter
|
||||
def primary(self, primary):
|
||||
self._primary = primary
|
||||
|
||||
@pyqtProperty(bool)
|
||||
def connected(self):
|
||||
return self._connected
|
||||
@connected.setter
|
||||
def connected(self, connected):
|
||||
self._connected = connected
|
||||
|
||||
@pyqtProperty(bool)
|
||||
def active(self):
|
||||
return self._active
|
||||
@active.setter
|
||||
def active(self, active):
|
||||
self._active = active
|
||||
|
||||
@pyqtProperty(int)
|
||||
def width(self):
|
||||
return self._width
|
||||
@width.setter
|
||||
def width(self, width):
|
||||
self._width = width
|
||||
|
||||
@pyqtProperty(int)
|
||||
def height(self):
|
||||
return self._height
|
||||
@height.setter
|
||||
def height(self, height):
|
||||
self._height = height
|
||||
|
||||
@pyqtProperty(int)
|
||||
def x_offset(self):
|
||||
return self._x_offset
|
||||
@x_offset.setter
|
||||
def x_offset(self, x_offset):
|
||||
self._x_offset = x_offset
|
||||
|
||||
@pyqtProperty(int)
|
||||
def y_offset(self):
|
||||
return self._y_offset
|
||||
@y_offset.setter
|
||||
def y_offset(self, y_offset):
|
||||
self._y_offset = y_offset
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Screen adjustment class
|
||||
|
@ -158,6 +215,10 @@ class XRandR(SubprocessWrapper):
|
|||
self.delete_virtual_screen()
|
||||
os._exit(0)
|
||||
|
||||
def get_primary_screen(self) -> DisplayProperty:
|
||||
self._update_screens()
|
||||
return self.primary
|
||||
|
||||
def get_virtual_screen(self) -> DisplayProperty:
|
||||
self._update_screens()
|
||||
return self.virt
|
||||
|
@ -272,9 +333,12 @@ class Backend(QObject):
|
|||
|
||||
def __init__(self, parent=None):
|
||||
super(Backend, self).__init__(parent)
|
||||
# objects
|
||||
self.xrandr = XRandR()
|
||||
# Virtual screen properties
|
||||
self._width = 1368
|
||||
self._height = 1024
|
||||
self._virt = DisplayProperty()
|
||||
self.virt.width = 1368
|
||||
self.virt.height = 1024
|
||||
self._portrait = False
|
||||
self._hidpi = False
|
||||
self._virtScreenCreated = False
|
||||
|
@ -283,27 +347,17 @@ class Backend(QObject):
|
|||
self._vncPassword = ""
|
||||
self._vncState = VNCState.OFF
|
||||
# Primary screen and mouse posistion
|
||||
self._primary: DisplayProperty() = self.xrandr.get_primary_screen()
|
||||
self._cursor_x: int
|
||||
self._cursor_y: int
|
||||
self._primaryDisplayWidth: int
|
||||
self._primaryDisplayHeight: int
|
||||
# objects
|
||||
self.xrandr = XRandR()
|
||||
|
||||
# Qt properties
|
||||
@pyqtProperty(int)
|
||||
def width(self):
|
||||
return self._width
|
||||
@width.setter
|
||||
def width(self, width):
|
||||
self._width = width
|
||||
|
||||
@pyqtProperty(int)
|
||||
def height(self):
|
||||
return self._height
|
||||
@height.setter
|
||||
def height(self, height):
|
||||
self._height = height
|
||||
@pyqtProperty(DisplayProperty)
|
||||
def virt(self):
|
||||
return self._virt
|
||||
@virt.setter
|
||||
def virt(self, virt):
|
||||
self._virt = virt
|
||||
|
||||
@pyqtProperty(bool)
|
||||
def portrait(self):
|
||||
|
@ -349,6 +403,11 @@ class Backend(QObject):
|
|||
self._vncState = state
|
||||
self.onVncStateChanged.emit(self._vncState.value)
|
||||
|
||||
@pyqtProperty(DisplayProperty)
|
||||
def primary(self):
|
||||
self._primary = self.xrandr.get_primary_screen()
|
||||
return self._primary
|
||||
|
||||
@pyqtProperty(int)
|
||||
def cursor_x(self):
|
||||
cursor = QCursor().pos()
|
||||
|
@ -360,27 +419,14 @@ class Backend(QObject):
|
|||
cursor = QCursor().pos()
|
||||
self._cursor_y = cursor.y()
|
||||
return self._cursor_y
|
||||
|
||||
@pyqtProperty(int)
|
||||
def primaryDisplayWidth(self):
|
||||
screen = QApplication.desktop().screenGeometry()
|
||||
self._primaryDisplayWidth = screen.width()
|
||||
return self._primaryDisplayWidth
|
||||
|
||||
@pyqtProperty(int)
|
||||
def primaryDisplayHeight(self):
|
||||
screen = QApplication.desktop().screenGeometry()
|
||||
self._primaryDisplayHeight = screen.height()
|
||||
return self._primaryDisplayHeight
|
||||
|
||||
# Qt Slots
|
||||
@pyqtSlot()
|
||||
def createVirtScreen(self):
|
||||
print("Creating a Virtual Screen...")
|
||||
self.xrandr.create_virtual_screen(self.width, self.height, self.portrait, self.hidpi)
|
||||
self.xrandr.create_virtual_screen(self.virt.width, self.virt.height, self.portrait, self.hidpi)
|
||||
self.virtScreenCreated = True
|
||||
|
||||
# Qt Slots
|
||||
@pyqtSlot()
|
||||
def deleteVirtScreen(self):
|
||||
print("Deleting the Virtual Screen...")
|
||||
|
@ -489,6 +535,7 @@ if __name__ == '__main__':
|
|||
|
||||
# Register the Python type. Its URI is 'People', it's v1.0 and the type
|
||||
# will be called 'Person' in QML.
|
||||
qmlRegisterType(DisplayProperty, 'VirtScreen.DisplayProperty', 1, 0, 'DisplayProperty')
|
||||
qmlRegisterType(Backend, 'VirtScreen.Backend', 1, 0, 'Backend')
|
||||
|
||||
# Create a component factory and load the QML script.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue