| /* |
| * Copyright (C) 2020 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "minikin/BoundsCache.h" |
| |
| namespace minikin { |
| |
| void ValueExtractor::operator()(const LayoutPiece& layoutPiece, const MinikinPaint& paint) { |
| value.reset(new BoundsValue); |
| value->rect = BoundsCache::getBounds(layoutPiece, paint); |
| value->advance = layoutPiece.advance(); |
| } |
| |
| // static |
| MinikinRect BoundsCache::getBounds(const LayoutPiece& layoutPiece, const MinikinPaint& paint) { |
| MinikinRect pieceBounds; |
| MinikinRect tmpRect; |
| for (uint32_t i = 0; i < layoutPiece.glyphCount(); ++i) { |
| const FakedFont& font = layoutPiece.fontAt(i); |
| const Point& point = layoutPiece.pointAt(i); |
| |
| MinikinFont* minikinFont = font.font->typeface().get(); |
| minikinFont->GetBounds(&tmpRect, layoutPiece.glyphIdAt(i), paint, font.fakery); |
| tmpRect.offset(point.x, point.y); |
| pieceBounds.join(tmpRect); |
| } |
| return pieceBounds; |
| } |
| |
| } // namespace minikin |