SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3813|回复: 0
打印 上一主题 下一主题

[Discuss] 提示(Hint)

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2017-1-1 15:01:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2017-1-1 19:10 编辑

提示(Hint)表示一种设置。各操作系统存在个和设置相关的环境区,像Windows上的SetEnvironmentVariable/GetEnvironmentVariable,linux中的putenv/setenv。Hint区和环境区可存在同名变量。

设置、读取提示
  1. SDL_bool SDL_SetHintWithPriority(const char *name, const char *value, SDL_HintPriority priority)
  2. SDL_bool SDL_SetHint(const char *name, const char *value)。priority固定为SDL_HINT_NORMAL的SDL_SetHintWithPriority。
复制代码

  • name:提示名称,不能是null,大小写敏感。SDL会定义这些提示名称。app可以使用自定义名称,这意味着SDL只支持存储、读取这提示,不会影响SDL内部行为。
  • value:提示值,不能是null,大小写敏感。当name[0]=='\0',会认为它是有效值,但除了表示空字符串,强烈建议不要用在其它类型,像bool、整型。
  • priority:优先级。如果系统中没有该提示,将把该优先级绑定到此提示。下次如果想修改该提示,不能低于此优先级。如果修改时使用的优先级比原先优先级高,会将新优先级绑定到此提示。

0SDL_HINT_DEFAULT
1SDL_HINT_NORMALSDL_SetHint时默认使用该优先级
2SDL_HINT_OVERRIDE要想访问环境变量,必须使用此优先级。重载:如果环境区中已有此变量,Hint区将新建此变量,然后使用此中的value。

系统以着一个开环单向链表结构表示已有的提示。结点类型是SDL_Hint,当中的next指向下一个结点。变量SDL_hints指向头结点。以下是SDL_Hint数据结构。
  1. typedef struct SDL_Hint {
  2.         char *name;
  3.         char *value;
  4.         SDL_HintPriority priority;
  5.         SDL_HintWatch *callbacks;
  6.         struct SDL_Hint *next;
  7. } SDL_Hint;

  8. typedef struct SDL_HintWatch {
  9.         SDL_HintCallback callback;
  10.         void *userdata;
  11.         struct SDL_HintWatch *next;
  12. } SDL_HintWatch;
复制代码

priority存放着设置该提示时的最低优先级。callbacks指示该值发生修改(新建不属于修改)时要执行的回调。
  • 如果环境变量中存有该名称,优先级小于SDL_HINT_OVERRIDE,设置失败。
  • 一旦出现修改(新建不属于修改),会调用callbacks中的所有回调。
  • 此次设置使用的priority绑定到该提示。


  1. const char* SDL_GetHint(const char *name)
  2. SDL_bool SDL_GetHintBoolean(const char *name, SDL_bool default_value)
  3.         const char *hint = SDL_GetHint(name);
  4.         if (!hint) {
  5.                 return default_value;
  6.         }
  7.         if (*hint == '0' || SDL_strcasecmp(hint, "false") == 0) {
  8.                 return SDL_FALSE;
  9.         }
  10.         return SDL_TRUE;
  11. }
复制代码

  • default_value:SDL_GetHint返回null时,返回该值。

值是"0"或"false"时,返回SDL_FALSE,否则SDL_TRUE。value[0]='\0'是返回SDL_TRUE。这不符惯常认为,因而除非是表示字符串,强烈建议不要传下value[0]='\0'。

和环境区变量关系
Hint系统不可能修改环境区变量中的值,但可以读取环境区变量。以下是如何读环境区变量。

  • 之前不能使用SDL_SetHintWithPriority设置过该环境区变量。或SDL_GetHint使用低于SDL_HINT_OVERRIDE的优先级。
  • 调用SDL_GetHint。读出的就是环境变量值。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 03:41 , Processed in 0.046964 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表