It should be the final feature updates. Next I will focus on the comment from developers and send the updates. If more features are needed, it will be better to be implemented in next release.
Sorry for thousands of code. Before submit, I have done strictly grammar check, coding style check and testing and try to let code to be readable. Wish this could let reviewer spend less effort on review. Changes in V4: a) Configure file is supported. Thanks Bryce's commment. configure file parser is provided. b) Output movement algorithm is done to support movements including rightof, leftof, above, below auto, and primary. c) Clone and output disable/enable are also added into algorithm but it needs support from compositor. It will be easy to enable if compositor is ready. d) Some bug fixes and previous V3 code review from Hardening. Thanks for your great support. Regards Quanxian Wang GENERAL SUMMARY: Important Notes: This protocol is not exposed to public. It is only for QA testing and Admin configuration at the moment. Objective: The idea is from xrandr provided by xserver. *Dynamic* output mode setting is the main objective of this protocol. Remember, it is one shot operation. For example, if setting the mode, just call one request weston_randr_set_mode and commit them. Result will be returned in done event. With this protocol, weston-wrandr application is developed to help implement randr protocol in command line just like xrandr command in xserver. FEATURES: 1) Scaling Scale the output to be more than 1. 2) Transform Rotate output to be 8 type of angles. 0, 90, 180, 270, flip-0, flip-90, flip-180, flip-270 3) Mode Set Fuzzy set: First matched, first active. For example: weston-wrandr --output HDMI3 --mode 1280x1024 This will select the first matched mode with width=1280 and height=1024. Exact set: a) Exact Timing set For example: weston-wrandr --output HDMI3 --timing='40000,800,840,968,1056,0,600,601,605,628,0,+hsync' b) Exact mode number set (select the nth mode from mode list) For example: weston-wrandr --output HDMI3 --mode 2 4) New a mode of output a) newmode for RDP (RDP developers should add additional newmode backend interface for that.) Example: weston-wrandr --output HDMI3 --newmode='1280x1024@50000' b) newtiming for drm backend Example: weston-wrandr --output HDMI3 --newtiming='40000,800,840,968,1056,0,600,601,605,628,0,+hsync' NOTICE: This action is bound with output. 5) Delete a mode of output All matched, all deleted. Fuzzy and exact match are supported as described above. 6) Re-position of output Primary, auto, leftof, rightof, above, below are supported. Primary: let output to the top left most output (x=0, y=0). Auto: re-organize all outputs to be horizontal with extended mode. leftof: left of relative output. So rightof, above, and below. Example: weston-wrandr --output HDMI3 --leftof VGA1 7) Support configure file Client can put all configure request in one file with defined format and submit it from randr interface. This option will be more flexible for future extension. Thanks for Bryce's idea for that. For example: weston-wrandr --configure /home/tizen/monitor.txt The content of configure file will be like that: ==== [compositor] auto=1 [HDMI3] mode=1 scale=2 [VGA1] mode=1024x768 transform=0 scale=2 8) Provide a set of actions above in one commit Requests can be combined together in one commit. like configure file. For example: weston-randr --output HDMI3 --transform 3 --scale 2 --mode 2 -leftof VGA1 9) Support multiple outputs operations with one commit. Just like configure file example. There are two outputs are processed. OTHERS IMPORTANT: a) Movement algorithm has included horizontal movement, vertical movement and clone operation. This algorithm is specailly designed for weston compositor as a common module. The algorithm detailed introduction has been included in the header file(module/wrandr/randr_layout_algorithm.h). In weston compositor, it can be included if moving output. Generally it can be used in weston.ini which contains layout configure or other interfaces which want to move/initialize outputs if weston.ini support layout. By the way, movement algorithm is designed to support any number of outputs. b) Clone, disable/enable output method are left for future development. Depends on the compositor process. Once compositor supports them, it will be enabled in randr interface. PATCH DEPENDENCY: 1) [PATCH 0/3] Add wl_output name event 2) [PATCH] desktop-shell: Bug fix client apps because of output change BUIDLING and INSTALLING: When you build weston, add option --enable-wrandr to enable building of this module. ./autogen.sh --enable-wrandr ... When you run weston, weston --tty=1 --enable-wrandr USER CASES: 1. Query mode info Command: weston-wrandr --output HDMI3 -q 1)1440x900@59887(current) 2)1920x1200@59950 3)1680x1050@59883 ... 2. weston-randr --output HDMI3 --mode 2 # which will set mode as 1920x1200 or weston-randr --output HDMI3 --mode 1920x1200@59950 or weston-randr --output HDMI3 --mode 1920x1200 or weston-randton-wrandr --output HDMI3 --timing='40000,800,840,968,1056,0,600,601,605,628,0,+hsync' 3. weston-randr --output HDMI3 --delmode 1 # Delete mode or weston-randr --output HDMI3 --delmode 1920x1200@59950 or weston-randr --output HDMI3 --delmode 1920x1200 4. weston-randr --output HDMI3 --transform 1 # rotate HDMI3 output 90 degree 5. weston-randr --output HDMI3 --leftof VGA1 # put HDMI3 output leftof VGA1 6. weston-randr --output HDMI3 --scale 2 # scale the output HDMI3 7. weston-wrandr --output HDMI3 --newmode='1000x1900@1034' weston-randton-wrandr --output HDMI3 --newtiming='40000,800,840,968,1056,0,600,601,605,628,0,+hsync' 8. weston-wrandr --configure=/home/tizen/monitor.txt Output Results for client: ====== *** OUTPUT: VGA1 *** MODE:SUCCESS! SCALE:SUCCESS! TRANSFORM:SUCCESS! *** OUTPUT: HDMI3 *** MODE:SUCCESS! TRANSFORM:SUCCESS! MOVE RIGHT:SUCCESS! *** Compositor *** Analyze Configure File:SUCCESS! ===== Group operations example: 1. weston-randr --output HDMI3 --transform 3 --scale 2 --mode 2 -leftof VGA1 2. weston-wrandr --output HDMI3 --transform 1 --scale 2 --mode 2 --rightof VGA1 Command: weston-randton-wrandr --output HDMI3 --transform 1 --scale 2 --rightof VGA1 Output Result: *** output:HDMI3 *** SCALE:SUCCESS! TRANSFORM:SUCCESS! MOVE RIGHT:SUCCESS! Quanxian Wang (7): weston: Add weston randr protocol weston: Add the weston randr support in compositor.h weston: Add enable-wrandr option and export common functions Add new mode function in drm backend weston:Add the weston randr protocol implementation weston: Add configure to support wrandr. Apps: Add weston-randr application Makefile.am | 5 + clients/Makefile.am | 9 + clients/wrandr.c | 1313 ++++++++++++++++++++++ configure.ac | 8 + module/Makefile.am | 3 + module/wrandr/Makefile.am | 37 + module/wrandr/monitors.txt | 19 + module/wrandr/randr_layout_algorithm.c | 693 ++++++++++++ module/wrandr/randr_layout_algorithm.h | 217 ++++ module/wrandr/randr_parser.c | 169 +++ module/wrandr/randr_parser.h | 57 + module/wrandr/wrandr.c | 1915 ++++++++++++++++++++++++++++++++ module/wrandr/wrandr.h | 133 +++ protocol/Makefile.am | 1 + protocol/randr.xml | 316 ++++++ src/compositor-drm.c | 92 ++ src/compositor.c | 35 +- src/compositor.h | 53 + 18 files changed, 5073 insertions(+), 2 deletions(-) create mode 100644 clients/wrandr.c create mode 100644 module/Makefile.am create mode 100644 module/wrandr/Makefile.am create mode 100644 module/wrandr/monitors.txt create mode 100644 module/wrandr/randr_layout_algorithm.c create mode 100644 module/wrandr/randr_layout_algorithm.h create mode 100644 module/wrandr/randr_parser.c create mode 100644 module/wrandr/randr_parser.h create mode 100644 module/wrandr/wrandr.c create mode 100644 module/wrandr/wrandr.h create mode 100644 protocol/randr.xml -- 1.8.1.2 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel