protected WaylandClientObject(string @interface, uint id, uint version,
                               WaylandClientConnection connection) : base(@interface, id, version, connection)
 {
     ClientConnection = connection;
 }
Пример #2
0
        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();
            }
        }