| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | #ifndef _SVC_FONTMAKER_H#define _SVC_FONTMAKER_H#include <bfc/dispatch.h>#include <bfc/string/string.h>#include <api/service/svc_enum.h>#include <api/service/services.h>#include <api/service/servicei.h>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 oneclass 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<svc_fontMaker> {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 T>class FontMakerCreator : public waServiceFactoryTSingle<svc_fontMaker, T> {};#endif // _SVC_FONTMAKER_H
 |