* How many cards do we have? autodetection? * Is our card a dualhead card? * How many monitors are connected? * difference between one and two card is different device sections * twinview has one device, one screen, one serverlayout * xinerama has two devices, two screens, two monitors twinview <> xinerama: all sections double one or two cards: different device sections one or two monitors ?? one or two cards ?? twinview or xinerama (driver? different resolutions?) class XSetup(Object): Screens[] getScreens() bool maySetDualhead() getUseDualhead() setUseDualhead(bool) (xoff,yoff) getDualheadPosition() # offset from screen 1 top left corner. setDualheadOrientation(xoff,yoff) bool is3DAccelerated() GFXCard[] getGFXCards() class Screen(Object): maySetResolution() Resolution[] getAvailableResolutions() getResolution() setResolution(Resolution) maySetRefresh() int getRefreshRate() setRefreshRate(int) maySetRotation() getRotation() getAvailableRotations() setRotation() bool isAvailableMirrorHorizontal() getMirrorHorizontal() setMirrorHorizontal() bool isAvailableMirrorVertical() getMirrorVertical() setMirrorVertical() class Resolution(Object): int getWidth() int getHeight() int[] getRefreshRates(): * What is the current setup? (Xinerama? Singlehead? Twinview?) - Warning: Xinerama vs. DRI * "unlinking" the sliders will yield a warning "Using different resolutions on the screens will disable 3D hardware acceleration on the second head", which is a Xinerama deficiency). Note: Probably only Ati and nvidia do support mergedFB properly, other drivers might lose xinerama features like placement and maximize - Drag and drop widget * The fun part: implementing a Drag and Drop widget where the (resizing) screens can be dragged into their respective relative position, "snapping" in the more obvious ones, i.e. plain "left of" and "right of", "above" and "under" (without offset). - displayconfig.MonitorPreview: Singleheadpreview: Monitor keeps size DualheadPreview: like now, monitor resizes to show relative screen size Displayconfig; Notes abstractielaag ------------------------------------- * een XSetup heeft N gfxcards. * een GfxCard heeft N Monitors * XSetup is een container voor alle objecten uit de abstractielaag. * XSetup.addMonitor(monitor,gfxcard) waarbij gfxcard al in XSetup zit en een referentie naar de kaart vormt waarop monitor is aangesloten. * Een Adaptor heeft een 1:1 relatie met een monitor, en is 'onderdeel' van een "Screen" (in de zin van Screen section uit xorg.conf) * Controls zoals resize en de rotatie / mirroring widgets manipuleren een Adaptor, die intern de Screen manipuleert * Singlehead resolutie verandert via xrandr en slaat settings op via displayconfig-restore.py * Dualhead resolutie aanpassen pakt intern een passende metamode (bij twinview) en checkt of alle zinvolle metamodes beschikbaar zijn, anders wordt de user gewaarschuwd dat dit eerst moet gebeuren. * Adaptor in dualhead / twinview modus worden dus naar een screen vertaald metamodes heeft. * Screen moet dan nog support voor metamodes krijgen. displayconfig: =============== * Current resolution doesn't get recognized if current != highest resolution * new tab display powermanagement, just like the existing tab, we need to be able to at least replace existing functionality New Widgets: ------------- * DualheadPreview * RadioButtons instead of dropdown for Positioning * Detect if we're already running on dualhead, (en|dis)able widgets accordingly * Nvidia MergedFB - Make preview of dualhead more clear (only xinerama or also mergedFB?) - Generate list of Metamodes from resolutions available - write dualhead settings to xorg.conf * Compare dualhead with different drivers WRT xorg.conf - generic Xinerama (Matrox, others?) - dualhead for fglrx, SiS ... - MergedFB as special case for nvidia (sis?) * Preview should be rotatable (and|or) resizable (and|or) DualHeadpreview? * Add missing elements to DualHeadTab - [ ] Use MergedFB (binds two resolution sliders) - label with warning "You can only use DRI on one head with different resolutions blahblah" FIXME: enabling Dualhead should: - Update resolutions with "metamodes" - disable Rotation/mirroring stuff - Add ServerLayout to xorg.conf - Add second Screen to xorg.conf - Alternatively (if both resolutions are the same enable MergedFB