做一个 UEFI 下的 EasyX 图形库(11)

增加裁剪区域相关的几个函数:

// ---------------------------------------------------------------------------
// 剪裁区域(P0+)
// ---------------------------------------------------------------------------

//
// 剪裁区域对象(对应 EasyX 的 RECT)。
//
typedef struct {
  INT32  left;     // 左上角 X
  INT32  top;      // 左上角 Y
  INT32  right;    // 右下角 X
  INT32  bottom;   // 右下角 Y
} RECT;

/**
  设置剪裁区域。后续所有绘图操作都限制在此矩形内。

  @param[in]  Left    左上角 X 坐标。
  @param[in]  Top     左上角 Y 坐标。
  @param[in]  Right   右下角 X 坐标(含边界)。
  @param[in]  Bottom  右下角 Y 坐标(含边界)。

  说明:
  - 坐标为逻辑坐标(受 setorigin 影响)。
  - 剪裁区域与绘图目标的交集才是最终有效绘图区。
  - 传入的矩形自动规范化(Left 必 < Right,Top 必 < Bottom)。
**/
VOID
EFIAPI
setcliprgn (
  IN INT32  Left,
  IN INT32  Top,
  IN INT32  Right,
  IN INT32  Bottom
  );

/**
  获取当前剪裁区域。

  @param[out]  pRect  输出剪裁矩形,若剪裁未启用则返回全屏矩形。
**/
VOID
EFIAPI
getcliprgn (
  OUT RECT  *pRect
  );

/**
  清除剪裁区域(恢复全屏绘图)。
**/
VOID
EFIAPI
clearcliprgn (
  VOID
  );

运行结果(之前演示使用最大分辨率,这里修改为 1024x768)

完整代码和 EFI 在这里下载:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注