#ifndef _SVC_FONTMAKER_H #define _SVC_FONTMAKER_H #include #include #include #include #include class svc_font; // // This class doesn't do anything fantastic. It's just the way // you make your OS-Specific font class available to the system. class NOVTABLE svc_fontMaker : public Dispatchable { public: static FOURCC getServiceType() { return WaSvc::FONTRENDER; } // You implement these: const char *getFontMakerName(); svc_font *newTrueTypeFont(); int deleteTrueTypeFont(svc_font *font); protected: enum { GETFONTMAKERNAME, NEWTRUETYPEFONT, DELETETRUETYPEFONT, }; }; inline const char *svc_fontMaker::getFontMakerName() { return _call(GETFONTMAKERNAME, (const char *)0); } inline svc_font *svc_fontMaker::newTrueTypeFont() { return _call(NEWTRUETYPEFONT, (svc_font *)0); } inline int svc_fontMaker::deleteTrueTypeFont(svc_font *font) { return _call(DELETETRUETYPEFONT, (int)0, font); } // implementor derives from this one class NOVTABLE svc_fontMakerI : public svc_fontMaker { public: virtual const char *getFontMakerName() = 0; virtual svc_font *newTrueTypeFont() = 0; virtual int deleteTrueTypeFont(svc_font *font) = 0; protected: RECVS_DISPATCH; }; class FontMakerEnum : public SvcEnumT { public: FontMakerEnum(const char *_maker_name = NULL) : maker_name(_maker_name) {} protected: virtual int testService(svc_fontMaker *svc) { if (!maker_name.len()) return 1; // blank name returns all services. return (STRCASEEQL(svc->getFontMakerName(),maker_name)); } private: String maker_name; }; template class FontMakerCreator : public waServiceFactoryTSingle {}; #endif // _SVC_FONTMAKER_H