#ifndef FONT_STYLE_H_
#define FONT_STYLE_H_
#include <Font.h>
#include <Locker.h>
#include <Node.h>
#include <ObjectList.h>
#include <Path.h>
#include <Rect.h>
#include <Referenceable.h>
#include <String.h>
#include <ft2build.h>
#include FT_FREETYPE_H
struct node_ref;
class FontFamily;
class FontManager;
class ServerFont;
class FontStyle : public BReferenceable {
public:
FontStyle(node_ref& nodeRef, const char* path,
FT_Face face, FontManager* fontManager);
virtual ~FontStyle();
const node_ref& NodeRef() const { return fNodeRef; }
bool Lock();
void Unlock();
bool IsFixedWidth() const
{ return FT_IS_FIXED_WIDTH(fFreeTypeFace); }
bool IsFullAndHalfFixed() const
{ return fFullAndHalfFixed; };
bool IsScalable() const
{ return FT_IS_SCALABLE(fFreeTypeFace); }
bool HasKerning() const
{ return FT_HAS_KERNING(fFreeTypeFace); }
bool HasTuned() const
{ return FT_HAS_FIXED_SIZES(fFreeTypeFace); }
int32 TunedCount() const
{ return fFreeTypeFace->num_fixed_sizes; }
uint16 GlyphCount() const
{ return fFreeTypeFace->num_glyphs; }
uint16 CharMapCount() const
{ return fFreeTypeFace->num_charmaps; }
const char* Name() const
{ return fName.String(); }
FontFamily* Family() const
{ return fFamily; }
uint16 ID() const
{ return fID; }
uint32 Flags() const;
uint16 Face() const
{ return fFace; }
uint16 PreservedFace(uint16) const;
const char* Path() const;
void UpdatePath(const node_ref& parentNodeRef);
void GetHeight(float size, font_height &heigth) const;
font_direction Direction() const
{ return B_FONT_LEFT_TO_RIGHT; }
font_file_format FileFormat() const
{ return B_TRUETYPE_WINDOWS; }
FT_Face FreeTypeFace() const
{ return fFreeTypeFace; }
status_t UpdateFace(FT_Face face);
FontManager* Manager() const
{ return fFontManager; }
uint32 FontDataSize() const
{ return fFontDataSize; }
void SetFontData(FT_Byte* location, uint32 size);
FT_Byte* FontData() const
{ return fFontData; }
private:
friend class FontFamily;
friend class FontManager;
uint16 _TranslateStyleToFace(const char *name) const;
void _SetFontFamily(FontFamily* family, uint16 id);
private:
FT_Face fFreeTypeFace;
BString fName;
BPath fPath;
node_ref fNodeRef;
BReference<FontFamily>
fFamily;
uint16 fID;
BRect fBounds;
font_height fHeight;
uint16 fFace;
bool fFullAndHalfFixed;
FT_Byte* fFontData;
uint32 fFontDataSize;
FontManager* fFontManager;
};
#endif