EdgeSnap: snapping delle finestre su AmigaOS 4 e MorphOS

EdgeSnap è un nuovo progetto open source che porta lo snapping delle finestre, nello stile di Windows e macOS, su AmigaOS 4.x e MorphOS. L’idea è semplice: trascini una finestra verso il bordo o un angolo dello schermo, una cornice mostra la zona di destinazione e al rilascio la finestra viene sistemata in una metà o in un quarto dello spazio disponibile.

Ho sviluppato EdgeSnap in C89 e la versione beta 0.1 è ora disponibile su Aminet. Il codice sorgente resta su GitHub, dove è possibile seguire lo sviluppo e segnalare problemi. Dietro alla cornice che si vede sul desktop c’è il tentativo di trasformare una piccola utility in un servizio condiviso per il window management Amiga-like.

Non è pensato per AmigaOS 3.x

La prima distinzione è importante. EdgeSnap non vuole sostituire GoSnap, che resta il riferimento per il caso classico AmigaOS 3.x. Il nuovo progetto parte invece da AmigaOS 4.x e MorphOS, cioè ambienti con dock e pannelli moderni, compositing dove disponibile, ReAction o MUI e un modello di commodity e librerie adatto a un’integrazione più ampia.

La differenza non è soltanto nella lista dei sistemi supportati. EdgeSnap prova a risolvere anche problemi che emergono quando lo snapping diventa una funzione da usare ogni giorno: non coprire il dock, ricordare la geometria precedente, offrire un’anteprima prima del rilascio e permettere di ridimensionare insieme due finestre già affiancate.

Dal trascinamento alla finestra affiancata

Il gesto principale è il trascinamento della barra del titolo. Se il programma riconosce che la finestra sta seguendo il puntatore, controlla la posizione del mouse rispetto all’area utile dello schermo:

  • bordo sinistro e destro per ottenere le due metà verticali;
  • angoli per le quattro zone a quarto di schermo;
  • bordo superiore per la massimizzazione;
  • rilascio fuori dalle zone per lasciare la finestra libera.

L’anteprima non modifica subito la finestra. Mostra invece la geometria prevista, con un frame a quattro barre: su MorphOS viene realizzato con finestre sottili e non attivanti, mentre su AmigaOS 4 il progetto usa un contorno XOR, scelta più robusta durante il trascinamento in QEMU e sui sistemi privi di un compositing utile.

La parte più originale è il divider. Quando due finestre sono state affiancate, EdgeSnap può mostrare una maniglia sul bordo comune. Trascinandola, le due finestre vengono ridimensionate insieme: una divisione 50/50 può diventare 60/40 senza dover aprire i gadget di dimensionamento delle singole applicazioni. In altre parole, lo snapping non finisce con il posizionamento; prova a trasformare la coppia in un piccolo layout modificabile.

Due finestre affiancate con il divider di EdgeSnap
Il divider permette di ridimensionare insieme due finestre già affiancate.

Il dock non deve diventare una finestra nascosta

Su AmigaOS e MorphOS l’area utilizzabile non coincide necessariamente con tutto lo schermo. Un dock o un pannello può stare in alto, in basso o su un lato, anche come finestra flottante. EdgeSnap prova quindi a rilevare le strisce che hanno la forma tipica di un pannello e le sottrae dalla geometria disponibile, aggiungendo anche un piccolo margine di respiro.

Il rilevamento non è affidato soltanto al nome della finestra. Il kernel portabile classifica forma, spessore, lunghezza e posizione nella fascia esterna dello schermo; il codice nativo filtra invece le finestre che non devono essere confuse con un dock, come finestre trascinabili, ridimensionabili o backdrop. Il comportamento è già stato verificato con un pannello flottante e rialzato su hardware MorphOS. Restano da validare meglio le forme AmiDock reali su AmigaOS 4 e il caso dei dock auto-nascosti.

La scelta architetturale: una libreria, non solo una commodity

Qui c’è il punto che rende EdgeSnap più interessante di una normale utility da hotkey. Il prodotto principale non dovrebbe essere il programma residente, ma edgesnap.library. La commodity è il primo client: raccoglie gli eventi, disegna l’anteprima e passa alla libreria i fatti necessari. La decisione su zone, geometria, stato e ripristino resta in un unico motore.

Il repository separa infatti:

  • un kernel C89 portabile, senza dipendenze Amiga, per zone, configurazione, stato del trascinamento, registry e divider;
  • un corpo della libreria che gestisce snapping, ripristino, esclusioni, opzioni, capacità e area utile;
  • una commodity comune ai due sistemi per input, anteprima, hotkey, Exchange e preferenze;
  • facciate ABI native per AmigaOS 4 e MorphOS;
  • un client di test, esnaptest, che usa l’API pubblica senza conoscere gli interni del progetto.

È un’impostazione ambiziosa ma sensata. Un altro programma potrebbe chiedere alla libreria di agganciare una finestra, interrogare la zona corrente, escludere un pannello o spostare il divider senza copiare una seconda implementazione dello snapping.

La prudenza sta nei dettagli

Il codice affronta anche alcuni problemi tipici dei sistemi Amiga. L’input handler gira nel contesto di input.device e non può chiamare direttamente Intuition senza rischiare deadlock. Per questo il gestore raccoglie contatori e segnala il task principale; tutte le operazioni sulle finestre avvengono fuori da quel contesto.

Le finestre possono inoltre chiudersi in qualunque momento. EdgeSnap non considera quindi valido per sempre un struct Window *: lo riferimenta e lo rivalida contro le liste vive sotto LockIBase(). L’API distingue una finestra scomparsa, una finestra esclusa, una geometria cambiata dall’applicazione e una capacità non disponibile. Anche il ripristino dopo uno snap verifica che la finestra sia ancora dove EdgeSnap l’aveva sistemata, così il riuso di un indirizzo non può spostare accidentalmente una finestra estranea.

La stessa attenzione compare nella compatibilità ABI: AmigaOS 4 usa il modello a interfacce ELF, mentre MorphOS conserva la jump table classica con i relativi gate per il passaggio 68k/PPC. Il progetto mantiene però una superficie pubblica comune e una generazione API esplicita, con capacità interrogabili invece di assunzioni nascoste.

Stato attuale e cosa manca alla 0.1

La cronologia tecnica del repository indica che il comportamento di base è stato validato su entrambi i sistemi: AmigaOS 4 in QEMU e MorphOS prima su QEMU e poi su hardware reale. Il kernel portabile passa una batteria di test con compilazione C89 rigorosa; il client di prova esercita anche gli errori dell’API, compreso il caso di una finestra diventata obsoleta.

La prima release beta è ora disponibile su Aminet. Il pacchetto 0.1 è un traguardo operativo, non ancora la parola finale sul progetto: restano da ampliare la validazione dei dock e dei pannelli sui target reali, stabilizzare il contratto pubblico della libreria e completare la documentazione. Il repository definisce infatti l’API come una bozza, quindi nomi, valori e firme possono ancora cambiare nelle versioni successive.

Cosa cambia davvero

EdgeSnap non inventa lo snapping delle finestre, e non pretende di essere la risposta per ogni versione di AmigaOS. La sua scommessa è un’altra: portare un gesto ormai naturale sui desktop moderni dentro due sistemi Amiga-like contemporanei, mantenendo un’architettura abbastanza piccola da poter essere esaminata e abbastanza generale da essere riutilizzata da altri programmi.

Il risultato più interessante, per ora, non è la promessa di “avere Windows su Amiga”. È il modo in cui il progetto tratta il problema: un kernel portabile, una libreria con contratto esplicito, front-end nativi, attenzione ai dock e test sugli errori. Con la beta 0.1 disponibile su Aminet, EdgeSnap è pronto per essere provato dagli utenti AmigaOS 4 e MorphOS, mentre il feedback reale guiderà le prossime versioni.

In breve

  • EdgeSnap porta lo snapping a bordi e angoli su AmigaOS 4.x e MorphOS.
  • Include anteprima, hotkey, ripristino della geometria, rilevamento di dock/pannelli e divider tra finestre affiancate.
  • Il motore è separato dalla commodity e progettato attorno a edgesnap.library.
  • Il kernel C89 è testato sull’host; il comportamento è stato validato in QEMU e su hardware MorphOS.
  • La versione beta 0.1 è disponibile su Aminet, mentre lo sviluppo continua su GitHub.

Fonti e contesto

AUTORE

Informatico, sviluppatore e sistemista con una lunga storia tra codice, server Linux, retrocomputer e piattaforme e-learning. Su AndroidLab porta uno sguardo tecnico e pragmatico: meno fumo da brochure, più attenzione a infrastruttura, usabilità, privacy, aggiornamenti e conseguenze concrete delle scelte dei produttori.

Leave a Comment