Ho riflettuto su questo argomento per un po 'di tempo e, con l'aiuto di questa risposta qui , ho ideato un AppleScriptObjc script che, su High Sierra almeno (ma dovrebbe funzionare anche su Mojave ), consente alcune personalizzazioni sul modo in cui l'immagine di sfondo del desktop viene ridimensionata alla schermata (principale):
use framework "AppKit"
--------------------------------------------------------------------------------
# PROPERTY DECLARATIONS:
property this : a reference to current application
property NSWorkspace : a reference to NSWorkspace of this
property NSScreen : a reference to NSScreen of this
property NSColor : a reference to NSColor of this
property NSDictionary : a reference to NSDictionary of this
property fit : 1 -- NSImageScaleAxesIndependently (will never clip)
property centre : 2 -- NSImageScaleNone (will never clip)
property best : 3 -- NSImageScaleProportionallyUpOrDown (no clipping)
property fill : 3.1 -- NSImageScaleProportionallyUpOrDown (clipping)
property black : {0, 0, 0}
property white : {100, 100, 100}
property grey50 : {50, 50, 50}
property red : {100, 0, 0}
property green : {0, 100, 0}
property blue : {0, 0, 100}
--------------------------------------------------------------------------------
# IMPLEMENTATION:
on run
scaleDesktopImage to fill over blue
end run
--------------------------------------------------------------------------------
# HANDLERS:
to scaleDesktopImage to scalingOption over {r, g, b} : {50, 50, 50}
local scalingOption -- fit, centre, fill
local r, g, b -- 0 to 100
set clipping to false
if scalingOption is not in [fit, centre, best, fill] then return false
if scalingOption = fill then set clipping to true
set sharedWorkspace to NSWorkspace's sharedWorkspace()
set mainScreen to NSScreen's mainScreen()
set options to {NSWorkspaceDesktopImageScalingKey:scalingOption ¬
, NSWorkspaceDesktopImageAllowClippingKey:clipping ¬
, NSWorkspaceDesktopImageFillColorKey:RGB(r, g, b)}
set imageURL to sharedWorkspace's desktopImageURLForScreen:mainScreen
set [success, E] to sharedWorkspace's setDesktopImageURL:imageURL ¬
forScreen:mainScreen options:options |error|:(reference)
if E = missing value then return success
E's localizedDescription() as text
end scaleDesktopImage
on RGB(r as real, g as real, b as real)
NSColor's colorWithCalibratedRed:r / 100 ¬
green:g / 100 ¬
blue:b / 100 ¬
alpha:1.0
end RGB
---------------------------------------------------------------------------❮END❯
Se non hai familiarità con AppleScriptObjC, osserva che lo script è suddiviso in tre sezioni: PROPERTY DECLARATIONS
, IMPLEMENTATION
e HANDLERS
, il primo e l'ultimo dei quali ti suggerisco di non provare ad aggiustare troppo o affatto, a meno che non sia un esercizio di apprendimento.
Detto questo, sono sicuro che non andrai molto male se decidi di aggiungere le tue proprietà personalizzate per il colore al raggruppamento nelle sezioni PROPERTY DECLARATIONS
, ognuna delle quali è semplicemente un Elenco di 3 elementi che specifica le componenti di colore rosso, verde e blu con valori compresi tra 0 (contributo zero) e 100 (contributo completo).
La seconda sezione dello script, con in testa IMPLEMENTATION
, è il bit funzionale contenente il gestore esplicitamente dichiarato (solo per chiarezza) run
. Il comando singolare è una chiamata al gestore scaleDesktopImage
, che è la linea con la quale vorresti giocare per soddisfare le tue esigenze.
Ci vogliono due forme, che illustrerò con l'esempio:
scaleDesktopImage to fill over blue
o
scaleDesktopImage to fill
In altre parole, specificare il colore su cui è posata l'immagine del desktop (ovvero il colore di sfondo) è facoltativo. Se omesso, il colore di sfondo viene impostato su grigio al 50%. Ovviamente, non è necessario utilizzare una proprietà pre-dichiarata per specificare il colore di sfondo; puoi fornire direttamente un elenco di valori RGB:
scaleDesktopImage to best over {100, 25, 50}
Il parametro rimanente è obbligatorio e ci sono quattro possibili valori nominali:
-
fit
: estende l'immagine per adattarla alla larghezza e all'altezza del desktop;
-
centre
: centra l'immagine senza ingrandirla, tuttavia ridurrà la dimensione di un'immagine che altrimenti si riverserebbe fuori dal bordo del desktop;
-
best
: Ingrandisce o riduce la dimensione dell'immagine per occupare l'area massima possibile del desktop senza che va oltre il limite del desktop e preserva le proporzioni dell'immagine, cioè una regolazione proporzionale delle dimensioni;
-
fill
: consente di ridimensionare l'immagine per coprire l'intera area del desktop, mantenendo le proporzioni, ma estendendosi oltre il limite del desktop lungo uno dei suoi assi, se necessario, al fine di coprire lo sfondo.