You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.4 KiB
136 lines
4.4 KiB
15 years ago
|
* 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
|