16b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com/* 26b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved. 36b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 46b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Licensed under the Apache License, Version 2.0 = the "License"); 56b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * you may not use this file except in compliance with the License. 66b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * You may obtain a copy of the License at 76b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 86b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * http://www.apache.org/licenses/LICENSE-2.0 96b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * 106b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * Unless required by applicable law or agreed to in writing, software 116b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS, 126b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * See the License for the specific language governing permissions and 146b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * limitations under the License. 156b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com */ 166b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 176b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#include "sfntly/table/bitmap/composite_bitmap_glyph.h" 186b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 196b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comnamespace sfntly { 206b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com/****************************************************************************** 216b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * CompositeBitmapGlyph class 226b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com ******************************************************************************/ 236b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comCompositeBitmapGlyph::CompositeBitmapGlyph(ReadableFontData* data, 246b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t format) 256b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com : BitmapGlyph(data, format) { 266b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com Initialize(format); 276b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 286b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 296b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comCompositeBitmapGlyph::~CompositeBitmapGlyph() { 306b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 316b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 326b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comint32_t CompositeBitmapGlyph::NumComponents() { 336b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com return data_->ReadUShort(num_components_offset_); 346b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 356b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 366b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comCompositeBitmapGlyph::Component CompositeBitmapGlyph::GetComponent( 376b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t component_num) const { 386b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t component_offset = component_array_offset_ + 396b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com component_num * Offset::kEbdtComponentLength; 406b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com return CompositeBitmapGlyph::Component( 416b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com data_->ReadUShort(component_offset + Offset::kEbdtComponent_glyphCode), 426b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com data_->ReadChar(component_offset + Offset::kEbdtComponent_xOffset), 436b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com data_->ReadChar(component_offset + Offset::kEbdtComponent_yOffset)); 446b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 456b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 466b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comvoid CompositeBitmapGlyph::Initialize(int32_t format) { 476b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com if (format == 8) { 486b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com num_components_offset_ = Offset::kGlyphFormat8_numComponents; 496b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com component_array_offset_ = Offset::kGlyphFormat8_componentArray; 506b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com } else if (format == 9) { 516b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com num_components_offset_ = Offset::kGlyphFormat9_numComponents; 526b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com component_array_offset_ = Offset::kGlyphFormat9_componentArray; 536b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com } else { 546b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#if !defined (SFNTLY_NO_EXCEPTION) 556b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com throw IllegalStateException("Attempt to create a Composite Bitmap Glyph " 566b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com "with a non-composite format."); 576b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com#endif 586b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com } 596b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 606b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 616b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com/****************************************************************************** 626b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com * CompositeBitmapGlyph::Component class 636b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com ******************************************************************************/ 646b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comCompositeBitmapGlyph::Component::Component(const Component& rhs) 656b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com : glyph_code_(rhs.glyph_code_), 666b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com x_offset_(rhs.x_offset_), 676b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com y_offset_(rhs.y_offset_) { 686b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 696b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 706b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.combool CompositeBitmapGlyph::Component::operator==( 716b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com const CompositeBitmapGlyph::Component& rhs) { 726b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com return glyph_code_ == rhs.glyph_code_; 736b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 746b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 756b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comCompositeBitmapGlyph::Component& CompositeBitmapGlyph::Component::operator=( 766b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com const CompositeBitmapGlyph::Component& rhs) { 776b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com glyph_code_ = rhs.glyph_code_; 786b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com x_offset_ = rhs.x_offset_; 796b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com y_offset_ = rhs.y_offset_; 806b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com return *this; 816b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 826b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 836b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.comCompositeBitmapGlyph::Component::Component(int32_t glyph_code, 846b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t x_offset, 856b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com int32_t y_offset) 866b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com : glyph_code_(glyph_code), x_offset_(x_offset), y_offset_(y_offset) { 876b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} 886b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com 89333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com/****************************************************************************** 90333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com * CompositeBitmapGlyph::Builder class 91333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com ******************************************************************************/ 92333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comCompositeBitmapGlyph::Builder::Builder(ReadableFontData* data, int32_t format) 93333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com : BitmapGlyph::Builder(data, format) { 94333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com} 95333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 96333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comCompositeBitmapGlyph::Builder::Builder(WritableFontData* data, int32_t format) 97333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com : BitmapGlyph::Builder(data, format) { 98333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com} 99333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 100333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comCompositeBitmapGlyph::Builder::~Builder() { 101333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com} 102333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 103333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comCALLER_ATTACH FontDataTable* 104333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.comCompositeBitmapGlyph::Builder::SubBuildTable(ReadableFontData* data) { 105333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com Ptr<CompositeBitmapGlyph> glyph = new CompositeBitmapGlyph(data, format()); 106333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com return glyph.Detach(); 107333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com} 108333edd91cb32d6acfd0307ba2ae8f60baed75ff4arthurhsu@google.com 1096b8e073e978eed96605da6f92d6db740a39864baarthurhsu@google.com} // namespace sfntly 110