服务套件提供了可在插件模块端使用的功能。服务套件函数返回两个 TriglavPlugInInt 类型的常量。 返回 kTriglavPlugInAPIResultSuccess 表示成功,返回 kTriglavPlugInAPIResultFailed 表示操作失败。
先看看插件服务器跟各个服务套件是如何关联起来的:
- // 插件服务器
- typedef struct _TriglavPlugInServer {
- TriglavPlugInRecordSuite recordSuite;
- TriglavPlugInServiceSuite serviceSuite;
- TriglavPlugInHostObject hostObject;
- } TriglavPlugInServer;
- // 插件服务套件
- typedef struct _TriglavPlugInServiceSuite {
- TriglavPlugInStringService* stringService;
- TriglavPlugInBitmapService* bitmapService;
- TriglavPlugInOffscreenService* offscreenService;
- TriglavPlugInPropertyService* propertyService;
- TriglavPlugInOffscreenService2* offscreenService2;
- TriglavPlugInPropertyService2* propertyService2;
- ...
- } TriglavPlugInServiceSuite;
本篇介绍字符串服务和位图服务。
该服务主要提供处理字符串的功能。结构体定义如下:
- typedef struct _TriglavPlugInStringService {
- TriglavPlugInStringCreateWithAsciiStringProc createWithAsciiStringProc;
- TriglavPlugInStringCreateWithUnicodeStringProc createWithUnicodeStringProc;
- TriglavPlugInStringCreateWithLocalCodeStringProc createWithLocalCodeStringProc;
- TriglavPlugInStringCreateWithStringIDProc createWithStringIDProc;
- TriglavPlugInStringRetainProc retainProc;
- TriglavPlugInStringReleaseProc releaseProc;
- TriglavPlugInStringGetUnicodeCharsProc getUnicodeCharsProc;
- TriglavPlugInStringGetUnicodeLengthProc getUnicodeLengthProc;
- TriglavPlugInStringGetLocalCodeCharsProc getLocalCodeCharsProc;
- TriglavPlugInStringGetLocalCodeLengthProc getLocalCodeLengthProc;
- } TriglavPlugInStringService;
1. 从给定的 ascii 字符串创建一个字符串对象,不需要时需手动调用函数 releaceProc() 销毁。
- /**
- * stringObject: 字符串对象
- * ascii: ascii 字符串
- * length: ascii 字符串长度
- **/
- TRIGLAV_PLUGIN_API *createWithAsciiStringProc(
- TriglavPlugInStringObject* stringObject,
- const TriglavPlugInChar* ascii,
- const TriglavPlugInInt length);
2. 从给定的 unicode 字符串创建一个字符串对象,不需要时需手动调用函数 releaceProc() 销毁。
- /**
- * stringObject: 字符串对象
- * unicode: unicode 字符串
- * length: unicode 字符串长度
- **/
- TRIGLAV_PLUGIN_API *createWithUnicodeStringProc(
- TriglavPlugInStringObject* stringObject,
- const TriglavPlugInUniChar* unicode,
- const TriglavPlugInInt length );
3. 从指定的本地代码字符串创建字符串对象,不需要时需手动调用函数 releaceProc() 销毁。
- /**
- * stringObject: 字符串对象
- * localcode: 本地代码字符串
- * length: 本地代码字符串长度
- **/
- TRIGLAV_PLUGIN_API *createWithLocalCodeStringProc(
- TriglavPlugInStringObject* stringObject,
- const TriglavPlugInChar* localcode,
- const TriglavPlugInInt length);
4. 根据指定的资源标识符创建字符串对象,不需要时需手动调用函数 releaceProc() 销毁。
- /**
- * stringObject: 字符串对象
- * stringID: 资源标识符
- * hostObject: 宿主对象
- **/
- TRIGLAV_PLUGIN_API *createWithStringIDProc(
- TriglavPlugInStringObject* stringObject,
- const TriglavPlugInInt stringID,
- TriglavPlugInHostObject hostObject);
这里的 stringID 获取需要注意平台:
windows: 请使用 Visula Studio 的 String Table。将这里设置的值代入自变量 stringID 中,就会生成与之对应的字符串对象;
mac: 请使用 Localizable.strings。将这里设置的值代入自变量 stringID 中,就会生成与之对应的字符串对象。
5. 销毁指定的字符串对象
- /**
- * stringObject: 字符串对象
- **/
- TRIGLAV_PLUGIN_API *releaseProc(
- TriglavPlugInStringObject stringObject);
6. 从指定的字符串对象获取 unicode 字符串
- /**
- * unicode: unicode 字符串
- * stringObject: 字符串对象
- **/
- TRIGLAV_PLUGIN_API *getUnicodeCharsProc(
- const TriglavPlugInUniChar** unicode,
- TriglavPlugInStringObject stringObject);
7. 从指定的字符串对象获取 unicode 字符串长度
- /**
- * length: unicode 字符串长度
- * stringObject: 字符串对象
- **/
- TRIGLAV_PLUGIN_API *getUnicodeLengthProc(
- TriglavPlugInInt* length,
- TriglavPlugInStringObject stringObject);
8. 从指定的字符串对象获取本地代码字符串
- /**
- * localcode: 本地代码字符串
- * stringObject: 字符串对象
- **/
- TRIGLAV_PLUGIN_API *getLocalCodeCharsProc(
- const TriglavPlugInUniChar** localcode,
- TriglavPlugInStringObject stringObject );
9. 从指定的字符串对象获取本地代码字符串长度
- /**
- * length: 本地代码字符串长度
- * stringObject: 字符串对象
- **/
- TRIGLAV_PLUGIN_API *getLocalCodeLengthProc(
- TriglavPlugInInt* length,
- TriglavPlugInStringObject stringObject );
该服务主要提供使用位图的功能。结构体定义如下:
- typedef struct _TriglavPlugInBitmapService {
- TriglavPlugInBitmapCreateProc createProc;
- TriglavPlugInBitmapRetainProc retainProc;
- TriglavPlugInBitmapReleaseProc releaseProc;
- TriglavPlugInBitmapGetWidthProc getWidthProc;
- TriglavPlugInBitmapGetHeightProc getHeightProc;
- TriglavPlugInBitmapGetDepthProc getDepthProc;
- TriglavPlugInBitmapGetScanlineProc getScanlineProc;
- TriglavPlugInBitmapGetAddressProc getAddressProc;
- TriglavPlugInBitmapGetRowBytesProc getRowBytesProc;
- TriglavPlugInBitmapGetPixelBytesProc getPixelBytesProc;
- } TriglavPlugInBitmapService;
1. 创建位图对象,不需要时需手动调用函数 releaceProc() 销毁。
- /**
- * bitmapObject: 位图对象
- * width: 宽度(像素)
- * height: 高度(像素)
- * depth: 颜色深度(字节)
- * scanline: 扫描线
- **/
- TRIGLAV_PLUGIN_API *createProc(
- TriglavPlugInBitmapObject* bitmapObject,
- const TriglavPlugInInt width,
- const TriglavPlugInInt height,
- const TriglavPlugInInt depth,
- const TriglavPlugInInt scanline );
scanline 可选常量如下:
- #define kTriglavPlugInBitmapScanlineHorizontalLeftTop (0x10)
- #define kTriglavPlugInBitmapScanlineHorizontalRightTop (0x11)
- #define kTriglavPlugInBitmapScanlineHorizontalLeftBottom (0x12)
- #define kTriglavPlugInBitmapScanlineHorizontalRightBottom (0x13)
- #define kTriglavPlugInBitmapScanlineVerticalLeftTop (0x14)
- #define kTriglavPlugInBitmapScanlineVerticalRightTop (0x15)
- #define kTriglavPlugInBitmapScanlineVerticalLeftBottom (0x16)
- #define kTriglavPlugInBitmapScanlineVerticalRightBottom (0x17)
2. 销毁指定的 bitmap 对象
- /**
- * bitmapObject: 位图对象
- **/
- TRIGLAV_PLUGIN_API *releaseProc(
- TriglavPlugInBitmapObject bitmapObject );
3. 获取指定 bitmap 对象的宽度
- /**
- * bitmapObject: 位图对象
- * width: 宽度(像素)
- **/
- TRIGLAV_PLUGIN_API *getWidthProc(
- TriglavPlugInBitmapObject bitmapObject,
- TriglavPlugInInt* width );
4. 获取指定 bitmap 对象的高度
- /**
- * bitmapObject: 位图对象
- * height: 高度(像素)
- **/
- TRIGLAV_PLUGIN_API *getHeightProc(
- TriglavPlugInBitmapObject bitmapObject,
- TriglavPlugInInt* height );
5. 获取指定 bitmap 对象的颜色深度
- /**
- * bitmapObject: 位图对象
- * depth: 颜色深度(字节数)
- **/
- TRIGLAV_PLUGIN_API *getDepthProc(
- TriglavPlugInBitmapObject bitmapObject,
- TriglavPlugInInt* depth );
6. 获取指定 bitmap 对象的扫描线
- /**
- * bitmapObject: 位图对象
- * scanline: 扫描线
- **/
- TRIGLAV_PLUGIN_API *getScanlineProc(
- TriglavPlugInBitmapObject bitmapObject,
- TriglavPlugInInt* scanline );
7. 获取指定 bitmap 对象的参数 pos 的坐标地址
- /**
- * bitmapObject: 位图对象
- * pos: 坐标
- * address: 地址
- **/
- TRIGLAV_PLUGIN_API *getAddressProc(
- TriglavPlugInBitmapObject bitmapObject,
- const TriglavPlugInPoint* pos,
- TriglavPlugInPtr* address );
8. 获取指定 bitmap 对象的下一列像素的字节数
- /**
- * bitmapObject: 位图对象
- * rowBytes: 到下一列像素的字节数
- **/
- TRIGLAV_PLUGIN_API *getRowBytesProc(
- TriglavPlugInBitmapObject bitmapObject,
- TriglavPlugInInt* rowBytes );
9. 获取指定 bitmap 对象的下一行像素的字节数
- /**
- * bitmapObject: 位图对象
- * pixelBytes: 到下一行像素的字节数
- **/
- TRIGLAV_PLUGIN_API *getPixelBytesProc(
- TriglavPlugInBitmapObject bitmapObject,
- TriglavPlugInInt* pixelBytes );
以上就是字符串服务和位图服务的全部 api 了,下篇将介绍离屏服务的相关 api。