From 4c378ef60a9f37fdf97ad5f0aaf6d3eb41be456d Mon Sep 17 00:00:00 2001 From: ektorcaba Date: Fri, 8 May 2026 21:16:10 +0100 Subject: [PATCH 1/2] Add rotation property to CGVirtualDisplay classes Added a rotation property to CGVirtualDisplay and CGVirtualDisplayDescriptor classes. --- DeskPad/CGVirtualDisplayPrivate.h | 45 ++++++++++++++++--------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/DeskPad/CGVirtualDisplayPrivate.h b/DeskPad/CGVirtualDisplayPrivate.h index 2b33593..0d2675b 100644 --- a/DeskPad/CGVirtualDisplayPrivate.h +++ b/DeskPad/CGVirtualDisplayPrivate.h @@ -2,7 +2,7 @@ // CGVirtualDisplayPrivate.h // VirtualDisplayExp // -// Created by Khaos Tian on 2/17/21. +// Modified to support Rotation // #import @@ -26,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN @property(retain, nonatomic) NSArray *modes; @property(nonatomic) unsigned int hiDPI; +@property(nonatomic) double rotation; // Propiedad añadida para rotación (0, 90, 180, 270) - (instancetype)init; @@ -33,18 +34,19 @@ NS_ASSUME_NONNULL_BEGIN @interface CGVirtualDisplay : NSObject -@property(readonly, nonatomic) NSArray *modes; // @synthesize modes=_modes; -@property(readonly, nonatomic) unsigned int hiDPI; // @synthesize hiDPI=_hiDPI; -@property(readonly, nonatomic) CGDirectDisplayID displayID; // @synthesize displayID=_displayID; -@property(readonly, nonatomic) id terminationHandler; // @synthesize terminationHandler=_terminationHandler; -@property(readonly, nonatomic) dispatch_queue_t queue; // @synthesize queue=_queue; -@property(readonly, nonatomic) unsigned int maxPixelsHigh; // @synthesize maxPixelsHigh=_maxPixelsHigh; -@property(readonly, nonatomic) unsigned int maxPixelsWide; // @synthesize maxPixelsWide=_maxPixelsWide; -@property(readonly, nonatomic) CGSize sizeInMillimeters; // @synthesize sizeInMillimeters=_sizeInMillimeters; -@property(readonly, nonatomic) NSString *name; // @synthesize name=_name; -@property(readonly, nonatomic) unsigned int serialNum; // @synthesize serialNum=_serialNum; -@property(readonly, nonatomic) unsigned int productID; // @synthesize productID=_productID; -@property(readonly, nonatomic) unsigned int vendorID; // @synthesize vendorID=_vendorID; +@property(readonly, nonatomic) NSArray *modes; +@property(readonly, nonatomic) unsigned int hiDPI; +@property(readonly, nonatomic) CGDirectDisplayID displayID; +@property(readonly, nonatomic) id terminationHandler; +@property(readonly, nonatomic) dispatch_queue_t queue; +@property(readonly, nonatomic) unsigned int maxPixelsHigh; +@property(readonly, nonatomic) unsigned int maxPixelsWide; +@property(readonly, nonatomic) CGSize sizeInMillimeters; +@property(readonly, nonatomic) NSString *name; +@property(readonly, nonatomic) unsigned int serialNum; +@property(readonly, nonatomic) unsigned int productID; +@property(readonly, nonatomic) unsigned int vendorID; +@property(readonly, nonatomic) double rotation; // Propiedad de solo lectura para el estado actual - (instancetype)initWithDescriptor:(CGVirtualDisplayDescriptor *)arg1; - (BOOL)applySettings:(CGVirtualDisplaySettings *)arg1; @@ -53,14 +55,15 @@ NS_ASSUME_NONNULL_BEGIN @interface CGVirtualDisplayDescriptor : NSObject -@property(retain, nonatomic) dispatch_queue_t queue; // @synthesize queue=_queue; -@property(retain, nonatomic) NSString *name; // @synthesize name=_name; -@property(nonatomic) unsigned int maxPixelsHigh; // @synthesize maxPixelsHigh=_maxPixelsHigh; -@property(nonatomic) unsigned int maxPixelsWide; // @synthesize maxPixelsWide=_maxPixelsWide; -@property(nonatomic) CGSize sizeInMillimeters; // @synthesize sizeInMillimeters=_sizeInMillimeters; -@property(nonatomic) unsigned int serialNum; // @synthesize serialNum=_serialNum; -@property(nonatomic) unsigned int productID; // @synthesize productID=_productID; -@property(nonatomic) unsigned int vendorID; // @synthesize vendorID=_vendorID; +@property(retain, nonatomic) dispatch_queue_t queue; +@property(retain, nonatomic) NSString *name; +@property(nonatomic) unsigned int maxPixelsHigh; +@property(nonatomic) unsigned int maxPixelsWide; +@property(nonatomic) CGSize sizeInMillimeters; +@property(nonatomic) unsigned int serialNum; +@property(nonatomic) unsigned int productID; +@property(nonatomic) unsigned int vendorID; +@property(nonatomic) double rotation; // Permite definir la rotación inicial @property(copy, nonatomic) void (^terminationHandler)(id, CGVirtualDisplay*); - (instancetype)init; From d9c3f32544d3acd4ebafabd51c7e30cf2028b088 Mon Sep 17 00:00:00 2001 From: ektorcaba Date: Wed, 27 May 2026 11:01:24 +0100 Subject: [PATCH 2/2] Add rotation setting to virtual display settings --- DeskPad/Frontend/Screen/ScreenViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/DeskPad/Frontend/Screen/ScreenViewController.swift b/DeskPad/Frontend/Screen/ScreenViewController.swift index b141e49..d67b549 100644 --- a/DeskPad/Frontend/Screen/ScreenViewController.swift +++ b/DeskPad/Frontend/Screen/ScreenViewController.swift @@ -37,6 +37,7 @@ class ScreenViewController: SubscriberViewController, NSWindowDe let settings = CGVirtualDisplaySettings() settings.hiDPI = 1 + settings.rotation = 0 settings.modes = [ // 32:9 CGVirtualDisplayMode(width: 5120, height: 1440, refreshRate: 60),