Home | History | Annotate | Download | only in android
      1 /*
      2  * Copyright 2008, The Android Open Source Project
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *  * Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  *  * Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "FontCustomPlatformData.h"
     28 
     29 #include "SkTypeface.h"
     30 #include "SkStream.h"
     31 #include "SharedBuffer.h"
     32 #include "FontPlatformData.h"
     33 
     34 namespace WebCore {
     35 
     36 FontCustomPlatformData::FontCustomPlatformData(SkTypeface* face)
     37 {
     38     face->safeRef();
     39     m_typeface = face;
     40 }
     41 
     42 FontCustomPlatformData::~FontCustomPlatformData()
     43 {
     44     m_typeface->safeUnref();
     45     // the unref is enough to release the font data...
     46 }
     47 
     48 FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic,
     49     FontRenderingMode mode)
     50 {
     51     // turn bold/italic into fakeBold/fakeItalic
     52     if (m_typeface != NULL) {
     53         if (m_typeface->isBold() == bold)
     54             bold = false;
     55         if (m_typeface->isItalic() == italic)
     56             italic = false;
     57     }
     58     return FontPlatformData(m_typeface, size, bold, italic);
     59 }
     60 
     61 FontCustomPlatformData* createFontCustomPlatformData(SharedBuffer* buffer)
     62 {
     63     // pass true until we know how we can share the data, and not have to
     64     // make a copy of it.
     65     SkStream* stream = new SkMemoryStream(buffer->data(), buffer->size(), true);
     66     SkTypeface* face = SkTypeface::CreateFromStream(stream);
     67     if (0 == face) {
     68         SkDebugf("--------- SkTypeface::CreateFromBuffer failed %d\n",
     69                  buffer->size());
     70         return NULL;
     71     }
     72 
     73     SkAutoUnref aur(face);
     74 
     75     return new FontCustomPlatformData(face);
     76 }
     77 
     78 }
     79