6 String printingDocumentName;
8 public void SetPrintingDocumentName(String name)
10 printingDocumentName = name;
13 public class DisplaySystemResPtr : struct
15 DisplaySystemResPtr prev, next;
19 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
20 static void FreeTexture(NamedLink texture)
22 ((Bitmap)texture.data).Free();
26 static void FreeMaterial(Material material)
32 public class DisplaySystem
38 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
41 materials.Free(Material::Free);
42 textures.Free(FreeTexture);
43 for(mesh = meshes.first; mesh; mesh = mesh.next)
44 ((Mesh)mesh.data).Free(0);
49 driver.DestroyDisplaySystem(this);
51 if(driver.displaySystem == this)
52 driver.displaySystem = null;
55 bool Create(char * driverName, void * window, bool fullScreen)
58 subclass(DisplayDriver) displayDriver = GetDisplayDriver(driverName);
61 flags.fullScreen = fullScreen;
63 if(displayDriver.CreateDisplaySystem(this))
66 driver = displayDriver;
69 // LogErrorCode(GERR_DISPLAY_INIT_FAILED, driver);
70 displayDriver.displaySystem = null;
72 else if(!displayDriver.displaySystem)
74 displayDriver.displaySystem = this;
80 Font LoadFont(char * faceName, float size, FontFlags flags)
83 subclass(DisplayDriver) driver = this ? this.driver : ((subclass(DisplayDriver))class(LFBDisplayDriver));
84 char * string = CopyString(faceName);
88 int numFonts = TokenizeWith(string, 32, fonts, ",", true);
90 for(c = 0; c<numFonts; c++)
92 TrimLSpaces(fonts[c],fonts[c]);
93 TrimRSpaces(fonts[c],fonts[c]);
94 if((result = driver.LoadFont(this, fonts[c], size, flags)))
104 void UnloadFont(Font font)
106 subclass(DisplayDriver) driver = this ? this.driver : ((subclass(DisplayDriver))class(LFBDisplayDriver));
107 driver.UnloadFont(this, font);
110 void FontExtent(Font font, byte * text, int len, int * width, int * height)
113 driver.FontExtent(this, font, text, len, width, height);
116 if(width) *width = 0;
117 if(height) *height = 0;
121 void * LoadResource(Resource resource)
123 DisplaySystemResPtr res;
124 for(res = resources.first; res; res = res.next)
126 Resource existing = res.resource;
128 if(existing._class == resource._class)
130 if(resource.OnCompare(existing) == 0)
136 // res = DisplaySystemResPtr { resource = new classof(resource) };
137 res = DisplaySystemResPtr { resource = eInstance_New(resource._class) };
140 // This will load e.g. the Bitmap *
141 res.resource.Load(resource, this);
143 // This would copy e.g. the Bitmap *
145 resource.Reference(res.resource);
150 void UnloadResource(Resource resource, DisplaySystemResPtr res)
152 // This would clear e.g. the Bitmap *
153 resource.Dereference();
156 if(res.resource._refCount == 1)
159 resources.Delete(res);
162 res.resource._refCount--;
172 result = driver.LockSystem(this);
183 driver.UnlockSystem(this);
187 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
188 // --- Materials List Management ---
190 Material AddNamedMaterial(char * name)
192 Material material = materials.FindName(name, false);
195 material = Material { };
198 material.name = CopyString(name);
200 materials.AddName(material);
202 materials.Add(material);
208 bool AddMaterial(Material material)
211 materials.AddName(material);
213 materials.Add(material);
217 Material GetMaterial(char * name)
219 return materials.FindName(name, false);
222 bool RemoveMaterial(Material material)
224 delete material.name;
225 materials.Delete(material);
229 void ClearMaterials()
231 materials.Free(FreeMaterial);
234 // --- Textures List Management ---
236 NamedLink AddTexture(char * name, Bitmap bitmap)
242 item.name = new char[strlen(name) + 1];
243 strcpy(item.name, name);
244 textures.AddName(item);
249 Bitmap GetTexture(char * name)
251 return textures.FindNamedLink(name, false);
254 bool RemoveTexture(char * name)
256 NamedLink item = textures.FindName(name, false);
260 textures.Delete(item);
268 textures.Free(FreeTexture);
271 // --- Meshes List Management ---
273 OldLink AddMesh(Mesh mesh)
281 mesh.displaySystem = this;
289 bool RemoveMesh(Mesh mesh)
291 OldLink item = meshes.FindLink(mesh);
304 for(mesh = meshes.first; mesh; mesh = mesh.next)
305 ((Mesh)mesh.data).Free(0);
311 subclass(DisplayDriver) driver;
314 public PixelFormat pixelFormat;
315 public DisplayFlags flags;
320 #if !defined(ECERE_VANILLA) && !defined(ECERE_NO3D)
321 // This will all go in resources