/*---------------------------------------------------------------------------* Project: NintendoWare File: font_PairFont.cpp Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 24480 $ *---------------------------------------------------------------------------*/ #include "precompiled.h" #include #include #include namespace nw { namespace font { /* ------------------------------------------------------------------------ コンストラクタ/デストラクタ ------------------------------------------------------------------------ */ PairFont::PairFont(Font* primary, Font* secondary) : m_Primary(primary), m_Secondary(secondary), m_AlternateWithPrimary(true) { NN_POINTER_ASSERT(primary); NN_POINTER_ASSERT(secondary); NN_ASSERT(primary->GetTextureFormat() == secondary->GetTextureFormat()); NN_ASSERT(primary->GetCharacterCode() == secondary->GetCharacterCode()); } PairFont::~PairFont() { } /* ------------------------------------------------------------------------ フォント全体情報アクセサ ------------------------------------------------------------------------ */ int PairFont::GetWidth() const { return math::Max(m_Primary->GetWidth(), m_Secondary->GetWidth()); } int PairFont::GetHeight() const { return math::Max(m_Primary->GetHeight(), m_Secondary->GetHeight()); } int PairFont::GetAscent() const { return m_Primary->GetHeight() >= m_Secondary->GetHeight() ? m_Primary->GetAscent(): m_Secondary->GetAscent(); } int PairFont::GetDescent() const { return m_Primary->GetHeight() >= m_Secondary->GetHeight() ? m_Primary->GetDescent(): m_Secondary->GetDescent(); } int PairFont::GetBaselinePos() const { return m_Primary->GetHeight() >= m_Secondary->GetHeight() ? m_Primary->GetBaselinePos(): m_Secondary->GetBaselinePos(); } int PairFont::GetCellHeight() const { return m_Primary->GetHeight() >= m_Secondary->GetHeight() ? m_Primary->GetCellHeight(): m_Secondary->GetCellHeight(); } int PairFont::GetCellWidth() const { return m_Primary->GetWidth() >= m_Secondary->GetWidth() ? m_Primary->GetCellWidth(): m_Secondary->GetCellWidth(); } int PairFont::GetMaxCharWidth() const { return math::Max(m_Primary->GetMaxCharWidth(), m_Secondary->GetMaxCharWidth()); } Font::Type PairFont::GetType() const { return TYPE_PAIR; } TexFmt PairFont::GetTextureFormat() const { // テクスチャフォーマットは一致していなければならない return m_Primary->GetTextureFormat(); } int PairFont::GetLineFeed() const { return math::Max(m_Primary->GetLineFeed(), m_Secondary->GetLineFeed()); } const CharWidths PairFont::GetDefaultCharWidths() const { return m_Primary->GetWidth() >= m_Secondary->GetWidth() ? m_Primary->GetDefaultCharWidths(): m_Secondary->GetDefaultCharWidths(); } void PairFont::SetDefaultCharWidths(const CharWidths& widths) { m_Primary->SetDefaultCharWidths(widths); m_Secondary->SetDefaultCharWidths(widths); } bool PairFont::SetAlternateChar(CharCode c) { bool bPrimary = m_Primary->SetAlternateChar(c); bool bSecondary = m_Secondary->SetAlternateChar(c); if (bPrimary) { m_AlternateWithPrimary = true; return true; } else if (bSecondary) { m_AlternateWithPrimary = false; return true; } else { return false; } } void PairFont::SetLineFeed(int linefeed) { NW_FONT_MINMAX_ASSERT(linefeed, 0, USHRT_MAX); return m_Primary->GetHeight() >= m_Secondary->GetHeight() ? m_Primary->SetLineFeed(linefeed): m_Secondary->SetLineFeed(linefeed); } /* ------------------------------------------------------------------------ 文字単体情報アクセサ ------------------------------------------------------------------------ */ int PairFont::GetCharWidth(CharCode c) const { if (m_Primary->HasGlyph(c)) { return m_Primary->GetCharWidth(c); } else if (m_Secondary->HasGlyph(c)) { return m_Secondary->GetCharWidth(c); } else if (m_AlternateWithPrimary) { return m_Primary->GetCharWidth(c); } else { return m_Secondary->GetCharWidth(c); } } const CharWidths PairFont::GetCharWidths(CharCode c) const { if (m_Primary->HasGlyph(c)) { return m_Primary->GetCharWidths(c); } else if (m_Secondary->HasGlyph(c)) { return m_Secondary->GetCharWidths(c); } else if (m_AlternateWithPrimary) { return m_Primary->GetCharWidths(c); } else { return m_Secondary->GetCharWidths(c); } } void PairFont::GetGlyph( Glyph* glyph, CharCode c ) const { if (m_Primary->HasGlyph(c)) { return m_Primary->GetGlyph(glyph, c); } else if (m_Secondary->HasGlyph(c)) { return m_Secondary->GetGlyph(glyph, c); } else if (m_AlternateWithPrimary) { return m_Primary->GetGlyph(glyph, c); } else { return m_Secondary->GetGlyph(glyph, c); } } bool PairFont::HasGlyph(CharCode c) const { return m_Primary->HasGlyph(c) || m_Secondary->HasGlyph(c); } /* ------------------------------------------------------------------------ 文字ストリーム ------------------------------------------------------------------------ */ CharacterCode PairFont::GetCharacterCode() const { // 文字列エンコーディング形式は一致していなければならない return m_Primary->GetCharacterCode(); } /* ------------------------------------------------------------------------ テクスチャフィルタ ------------------------------------------------------------------------ */ void PairFont::EnableLinearFilter( bool atSmall, bool atLarge ) { m_Primary->EnableLinearFilter(atSmall, atLarge); m_Secondary->EnableLinearFilter(atSmall, atLarge); } bool PairFont::IsLinearFilterEnableAtSmall() const { // プライマリの値を返します(値は一致していなければならない)。 return m_Primary->IsLinearFilterEnableAtSmall(); } bool PairFont::IsLinearFilterEnableAtLarge() const { // プライマリの値を返します(値は一致していなければならない)。 return m_Primary->IsLinearFilterEnableAtLarge(); } u32 PairFont::GetTextureWrapFilterValue() const { // プライマリの値を返します(値は一致していなければならない)。 return m_Primary->GetTextureWrapFilterValue(); } } // namespace font } // namespace nw