Ignore:
Timestamp:
Aug 22, 2010, 2:55:39 AM (9 years ago)
Author:
sam
Message:

Factor Forge and Tiler using the new Dict class.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/forge.cpp

    r150 r153  
    77#   include "config.h"
    88#endif
    9 
    10 #include <cstring>
    11 #include <cstdio>
    12 #include <cstdlib>
    139
    1410#include "core.h"
     
    2723
    2824public:
    29     ForgeData() :
    30         fonts(0),
    31         nfonts(0)
    32     {
    33         /* Nothing to do */
    34     }
    35 
    36     ~ForgeData()
    37     {
    38         if (nfonts)
    39             fprintf(stderr, "ERROR: still %i fonts in forge\n", nfonts);
    40         free(fonts);
    41     }
    42 
    43 private:
    44     Font **fonts;
    45     int nfonts;
     25    Dict fonts;
    4626}
    4727forgedata;
     
    5333 */
    5434
    55 Font *Forge::GetFont(char const *path)
     35int Forge::Register(char const *path)
    5636{
    57     int id, empty = -1;
     37    int id = data->fonts.MakeSlot(path);
    5838
    59     /* If the font is already registered, remember its ID. Look for an
    60      * empty slot at the same time. */
    61     for (id = 0; id < data->nfonts; id++)
     39    if (!data->fonts.GetEntity(id))
    6240    {
    63         Font *t = data->fonts[id];
    64         if (!t)
    65             empty = id;
    66         else if (!strcasecmp(path, t->GetName()))
    67             break;
     41        Font *font = new Font(path);
     42        data->fonts.SetEntity(id, font);
    6843    }
    6944
    70     /* If this is a new font, create a new one. */
    71     if (id == data->nfonts)
    72     {
    73         if (empty == -1)
    74         {
    75             empty = data->nfonts++;
    76             data->fonts = (Font **)realloc(data->fonts,
    77                                            data->nfonts * sizeof(Font *));
    78         }
    79 
    80         data->fonts[empty] = new Font(path);
    81         id = empty;
    82     }
    83 
    84     data->fonts[id]->Ref();
    85     return data->fonts[id];
     45    return id;
    8646}
    8747
    88 void Forge::ReleaseFont(Font *font)
     48void Forge::Deregister(int id)
    8949{
    90     if (font->Unref() == 0)
    91         for (int id = 0; id < data->nfonts; id++)
    92             if (font == data->fonts[id])
    93             {
    94                 data->fonts[id] = NULL;
    95                 break;
    96             }
     50    data->fonts.RemoveSlot(id);
    9751}
    9852
     53Font *Forge::GetFont(int id)
     54{
     55    return (Font *)data->fonts.GetEntity(id);
     56}
     57
Note: See TracChangeset for help on using the changeset viewer.