protected WaylandClientObject(string @interface, uint id, uint version, WaylandClientConnection connection) : base(@interface, id, version, connection) { ClientConnection = connection; }
public WaylandDisplay() { _outputs = new List <WaylandOutput>(); using (var connection = new WaylandClientConnection()) { ZxdgOutputManagerV1 outputManager = null; var registry = connection.Display.GetRegistry(); registry.Global += (wlRegistry, name, @interface, version) => { switch (@interface) { case "wl_output": var output = new WaylandOutput(); output.Index = _outputs.Count + 1; output.WlOutput = wlRegistry.Bind <WlOutput>(name, @interface, 1); output.WlOutput.Geometry += (wlOutput, x, y, physicalWidth, physicalHeight, subpixel, make, model, transform) => { if (output.XdgOutput == null || output.XdgOutput.Version < 2) { output.Position = new Vector2(x, y); output.Name = make; output.Description = model; } }; output.WlOutput.Mode += (wlOutput, flags, width, height, refresh) => { if (output.XdgOutput == null && flags.HasFlag(WlOutput.ModeEnum.Current)) { output.Width = width; output.Height = height; } }; _outputs.Add(output); break; case "zxdg_output_manager_v1": outputManager = wlRegistry.Bind <ZxdgOutputManagerV1>(name, @interface, Math.Min(version, 2)); break; } }; connection.Roundtrip(); if (outputManager != null) { foreach (var output in _outputs) { output.XdgOutput = outputManager.GetXdgOutput(output.WlOutput); output.XdgOutput.LogicalPosition += (xdgOutput, x, y) => { output.Position = new Vector2(x, y); }; output.XdgOutput.LogicalSize += (xdgOutput, width, height) => { output.Width = width; output.Height = height; }; output.XdgOutput.Name += (xdgOutput, name) => { output.Name = name; }; output.XdgOutput.Description += (xdgOutput, description) => { output.Description = description; }; } } connection.Roundtrip(); } }