shenjianxing 6b341ae2b4 适配VR
2025-04-01 16:16:45 +08:00

170 lines
5.3 KiB
C#

////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2007-2020 , Inc. All Rights Reserved.
//
////////////////////////////////////////////////////////////////////////////////
using System;
using GCSeries.Core.Interop;
namespace GCSeries.Core.Sdk
{
public class ZDisplayManager : ZNativeResourceCache<ZDisplay>
{
public ZDisplayManager(ZContext context)
{
this._context = context;
}
////////////////////////////////////////////////////////////////////////
// Public Methods
////////////////////////////////////////////////////////////////////////
/// <summary>
/// Refreshes the internal cache of information corresponding to
/// all active displays.
/// </summary>
///
/// <remarks>
/// This method is expensive performance-wise and should be called
/// sparingly (if at all).
/// </remarks>
public void RefreshDisplays()
{
this.ClearCache();
ZPlugin.LogOnError(
ZPlugin.RefreshDisplays(this._context.NativePtr),
"RefreshDisplays");
}
/// <summary>
/// Gets the number of displays that are currently active.
/// </summary>
///
/// <returns>
/// The number of displays that are currently active.
/// </returns>
public int GetNumDisplays()
{
int numDisplays = 0;
ZPlugin.LogOnError(
ZPlugin.GetNumDisplays(this._context.NativePtr, out numDisplays),
"GetNumDisplays");
return numDisplays;
}
/// <summary>
/// Gets the number of displays of a specified type that are
/// currently active.
/// </summary>
///
/// <param name="displayType">
/// The display type.
/// </param>
///
/// <returns>
/// The number of displays of a specified type that are currently
/// active.
/// </returns>
public int GetNumDisplays(ZDisplayType displayType)
{
int numDisplays = 0;
ZPlugin.LogOnError(ZPlugin.GetNumDisplaysByType(
this._context.NativePtr, displayType, out numDisplays),
"GetNumDisplaysByType");
return numDisplays;
}
/// <summary>
/// Gets a display based on a specified index.
/// </summary>
///
/// <param name="index">
/// The index to retrieve the display for.
/// </param>
///
/// <returns>
/// The display at the specified index.
/// </returns>
public ZDisplay GetDisplay(int index)
{
IntPtr displayNativePtr = IntPtr.Zero;
ZPlugin.LogOnError(ZPlugin.GetDisplayByIndex(
this._context.NativePtr, index, out displayNativePtr),
"GetDisplayByIndex");
return this.GetOrCreateCachedResource(displayNativePtr);
}
/// <summary>
/// Gets a display that contains the specified (x, y) virtual desktop
/// position in pixels.
/// </summary>
///
/// <param name="x">
/// The virtual desktop x-position in pixels.
/// </param>
/// <param name="y">
/// The virtual desktop y-position in pixels.
/// </param>
///
/// <returns>
/// The display that contains the specified position.
/// </returns>
public ZDisplay GetDisplay(int x, int y)
{
IntPtr displayNativePtr = IntPtr.Zero;
ZPlugin.LogOnError(ZPlugin.GetDisplay(
this._context.NativePtr, x, y, out displayNativePtr),
"GetDisplay");
return this.GetOrCreateCachedResource(displayNativePtr);
}
/// <summary>
/// Gets a display of a specified type at a specified index.
/// </summary>
///
/// <param name="displayType">
/// The type of display.
/// </param>
/// <param name="index">
/// The index of the display.
/// </param>
///
/// <returns>
/// The display of a specified type at a specified index.
/// </returns>
public ZDisplay GetDisplay(ZDisplayType displayType, int index = 0)
{
IntPtr displayNativePtr = IntPtr.Zero;
ZPlugin.LogOnError(ZPlugin.GetDisplayByType(
this._context.NativePtr, displayType, index,
out displayNativePtr),
"GetDisplayByType");
return this.GetOrCreateCachedResource(displayNativePtr);
}
////////////////////////////////////////////////////////////////////////
// Private Methods
////////////////////////////////////////////////////////////////////////
private ZDisplay GetOrCreateCachedResource(IntPtr displayNativePtr)
{
return this.GetOrCreateCachedResource(
displayNativePtr, d => new ZDisplay(d));
}
////////////////////////////////////////////////////////////////////////
// Private Members
////////////////////////////////////////////////////////////////////////
private ZContext _context = null;
}
}