internal FontSelectorCache(FontSet defaultFontSet)
 {
     System.Diagnostics.Debug.Assert(defaultFontSet != null);
     this.defaultSelectors = new FontSelectorCache.FontSetSelectors();
     this.defaultSelectors.Update(defaultFontSet);
     this.defaultFontSet = defaultFontSet;
 }
        private bool Update(FontSelectorCache.FontSetSelectors selectors, FontSet fontSet)
        {
            bool updated = false;

            if (defaultSelectors.Update(defaultFontSet))
            {
                updated = true;
            }
            if (selectors != null && selectors.Update(fontSet))
            {
                updated = true;
            }
            return(updated);
        }
 internal virtual void Put(FontSelectorKey key, FontSelector fontSelector, FontSet fontSet)
 {
     if (fontSet == null)
     {
         Put(key, fontSelector);
     }
     else
     {
         FontSelectorCache.FontSetSelectors selectors = caches.Get(fontSet.GetId());
         if (selectors == null)
         {
             caches.Put(fontSet.GetId(), selectors = new FontSelectorCache.FontSetSelectors());
         }
         //update selectors and defaultSelectors to reset counter before pushing if needed.
         Update(selectors, fontSet);
         selectors.map.Put(key, fontSelector);
     }
 }
 internal virtual FontSelector Get(FontSelectorKey key, FontSet fontSet)
 {
     if (fontSet == null)
     {
         return(Get(key));
     }
     else
     {
         FontSelectorCache.FontSetSelectors selectors = caches.Get(fontSet.GetId());
         if (selectors == null)
         {
             caches.Put(fontSet.GetId(), selectors = new FontSelectorCache.FontSetSelectors());
         }
         if (Update(selectors, fontSet))
         {
             return(null);
         }
         else
         {
             return(selectors.map.Get(key));
         }
     }
 }