ecere/gui/Window: Prevent uninitialized values if base Window methods not overridden...
[sdk] / ecere / src / gfx / FontResource.ec
1 namespace gfx;
2
3 import "Window"
4
5 public class FontResource : Resource
6 {
7 public:
8    property const char * faceName { set { delete faceName; faceName = CopyString(value); } get { return this ? faceName : null; } };
9    property float size { set { size = value; } get { return this ? size : 0; } };
10    property bool bold { set { flags.bold = value; } get { return this ? flags.bold : false; } };
11    property bool italic { set { flags.italic = value; } get { return this ? flags.italic : false; } };
12    property bool underline { set { flags.underline = value; } get { return this ? flags.underline : false; } };
13    property Font font { get { return this ? font : null; } };
14    property Window window { set { if(value) { value.RemoveResource(this); value.AddResource(this); } }  };
15    property float outlineSize { set { outlineSize = value; } get { return this ? outlineSize : 0; } };
16    property float outlineFade { set { outlineFade = value; } get { return this ? outlineFade : 0; } };
17
18 private:
19    char * faceName;
20    Font font;
21    float size;
22    FontFlags flags;
23    DisplaySystem displaySystem;
24    float outlineSize, outlineFade;
25
26    void Load(FontResource copy, DisplaySystem displaySystem)
27    {
28       delete faceName;
29       faceName = *&CopyString(copy.faceName);
30       *&size = *&copy.size;
31       *&flags = *&copy.flags;
32       *&outlineSize = *&copy.outlineSize;
33       *&outlineFade = *&copy.outlineFade;
34       if(faceName && displaySystem)
35       {
36          this.displaySystem = displaySystem;
37          font = displaySystem.LoadOutlineFont(faceName, size, flags, outlineSize, outlineFade);
38       }
39    }
40
41    void Reference(FontResource reference)
42    {
43       delete faceName;
44       faceName = *&CopyString(reference.faceName);
45       *&size = *&reference.size;
46       *&flags = *&reference.flags;
47       *&outlineSize = *&reference.outlineSize;
48       *&outlineFade = *&reference.outlineFade;
49       font = reference.font;
50    }
51
52    void Dereference()
53    {
54       font = null;
55    }
56
57    ~FontResource()
58    {
59       if(font && displaySystem)
60          displaySystem.UnloadFont(font);
61       delete faceName;
62    }
63
64    void OnCopy(FontResource newData)
65    {
66       property::size = newData.size;
67       property::faceName = newData.faceName;
68       property::bold = newData.bold;
69       property::outlineSize = newData.outlineSize;
70       property::outlineFade = newData.outlineFade;
71    }
72
73 /*
74    Window OnEdit(Window window, Window master, int x, int y, int w, int h, void * userData)
75    {
76       Window editData = class::OnEdit(window, master, x + 24,y,w - 48,h, userData);
77       Button browse
78       {
79          window, master = editData, inactive = true, text = "...", hotKey = F2,
80          position = { Max(x + 24, x + w - 24), y }, size = { 24, h }
81       };
82       browse.Create();
83       return editData;
84    }
85
86    void OnDisplay(Surface surface, int x, int y, int width, void * fieldData, Alignment alignment, DataDisplayFlags flags)
87    {
88       char * string = this ? faceName : null;
89       Font font = this ? font : null;
90       if(!string) string = "(none)";
91       surface.WriteTextDots(alignment, x + 24, y + 1, width - 24, string, strlen(string));
92       surface.SetBackground(White);
93       surface.Area(x - 4, y, x + 20, y + 15);
94
95       surface.SetForeground(Black);
96       surface.Rectangle(x-1, y + 1, x + 18, y + 14);
97    }
98
99    int OnCompare(FontResource font2)
100    {
101       int result = 0;
102       if(this && font2)
103       {
104          char * string1 = faceName;
105          char * string2 = font2.faceName;
106          if(string1 && string2)
107             result = strcmpi(string1, string2);
108       }
109       return result;
110    }
111
112    const char * OnGetString(char * string, void * fieldDat, bool * needClass)
113    {
114       if(this)
115       {
116          char * fileName = faceName;
117          if(fileName)
118             strcpy(string, fileName);
119          else
120             string[0] = '\0';
121          return string;
122       }
123       return null;
124    }
125
126    bool OnGetDataFromString(const char * string)
127    {
128       this = (string && string[0]) ? FontResource { } : null;
129       if(this)
130          faceName = string;
131    }
132 */
133 };