diff --git a/src/gfx_layout_icu.cpp b/src/gfx_layout_icu.cpp index 139cac083d..7821fc775c 100644 --- a/src/gfx_layout_icu.cpp +++ b/src/gfx_layout_icu.cpp @@ -338,12 +338,12 @@ std::vector ItemizeStyle(std::vector &runs_current, FontMap &fon int cur_pos = 0; auto cur_run = runs_current.begin(); - for (auto const &font_map : font_mapping) { - while (cur_pos < font_map.first && cur_run != runs_current.end()) { - int stop_pos = std::min(font_map.first, cur_run->start + cur_run->length); + for (auto const &[position, font] : font_mapping) { + while (cur_pos < position && cur_run != runs_current.end()) { + int stop_pos = std::min(position, cur_run->start + cur_run->length); assert(stop_pos - cur_pos > 0); - runs.emplace_back(cur_pos, stop_pos - cur_pos, cur_run->level, cur_run->script, font_map.second); + runs.emplace_back(cur_pos, stop_pos - cur_pos, cur_run->level, cur_run->script, font); if (stop_pos == cur_run->start + cur_run->length) cur_run++; cur_pos = stop_pos; @@ -360,8 +360,8 @@ std::vector ItemizeStyle(std::vector &runs_current, FontMap &fon if (length == 0) return nullptr; /* Can't layout our in-built sprite fonts. */ - for (auto const &pair : font_mapping) { - if (pair.second->fc->IsBuiltInFont()) return nullptr; + for (auto const &[position, font] : font_mapping) { + if (font->fc->IsBuiltInFont()) return nullptr; } auto runs = ItemizeBidi(buff, length); diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index c757e9560c..4af0421f9f 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -157,8 +157,8 @@ static CTRunDelegateCallbacks _sprite_font_callback = { if (length == 0) return nullptr; /* Can't layout our in-built sprite fonts. */ - for (const auto &i : font_mapping) { - if (i.second->fc->IsBuiltInFont()) return nullptr; + for (const auto &[position, font] : font_mapping) { + if (font->fc->IsBuiltInFont()) return nullptr; } /* Make attributed string with embedded font information. */ @@ -174,35 +174,35 @@ static CTRunDelegateCallbacks _sprite_font_callback = { /* Apply font and colour ranges to our string. This is important to make sure * that we get proper glyph boundaries on style changes. */ int last = 0; - for (const auto &i : font_mapping) { - if (i.first - last == 0) continue; + for (const auto &[position, font] : font_mapping) { + if (position - last == 0) continue; - CTFontRef font = (CTFontRef)i.second->fc->GetOSHandle(); - if (font == nullptr) { - if (!_font_cache[i.second->fc->GetSize()]) { + CTFontRef font_handle = static_cast(font->fc->GetOSHandle()); + if (font_handle == nullptr) { + if (!_font_cache[font->fc->GetSize()]) { /* Cache font information. */ - CFAutoRelease font_name(CFStringCreateWithCString(kCFAllocatorDefault, i.second->fc->GetFontName().c_str(), kCFStringEncodingUTF8)); - _font_cache[i.second->fc->GetSize()].reset(CTFontCreateWithName(font_name.get(), i.second->fc->GetFontSize(), nullptr)); + CFAutoRelease font_name(CFStringCreateWithCString(kCFAllocatorDefault, font->fc->GetFontName().c_str(), kCFStringEncodingUTF8)); + _font_cache[font->fc->GetSize()].reset(CTFontCreateWithName(font_name.get(), font->fc->GetFontSize(), nullptr)); } - font = _font_cache[i.second->fc->GetSize()].get(); + font_handle = _font_cache[font->fc->GetSize()].get(); } - CFAttributedStringSetAttribute(str.get(), CFRangeMake(last, i.first - last), kCTFontAttributeName, font); + CFAttributedStringSetAttribute(str.get(), CFRangeMake(last, position - last), kCTFontAttributeName, font_handle); - CGColorRef color = CGColorCreateGenericGray((uint8_t)i.second->colour / 255.0f, 1.0f); // We don't care about the real colours, just that they are different. - CFAttributedStringSetAttribute(str.get(), CFRangeMake(last, i.first - last), kCTForegroundColorAttributeName, color); + CGColorRef color = CGColorCreateGenericGray((uint8_t)font->colour / 255.0f, 1.0f); // We don't care about the real colours, just that they are different. + CFAttributedStringSetAttribute(str.get(), CFRangeMake(last, position - last), kCTForegroundColorAttributeName, color); CGColorRelease(color); /* Install a size callback for our special private-use sprite glyphs in case the font does not provide them. */ - for (ssize_t c = last; c < i.first; c++) { - if (buff[c] >= SCC_SPRITE_START && buff[c] <= SCC_SPRITE_END && i.second->fc->MapCharToGlyph(buff[c], false) == 0) { - CFAutoRelease del(CTRunDelegateCreate(&_sprite_font_callback, (void *)(size_t)(buff[c] | (i.second->fc->GetSize() << 24)))); + for (ssize_t c = last; c < position; c++) { + if (buff[c] >= SCC_SPRITE_START && buff[c] <= SCC_SPRITE_END && font->fc->MapCharToGlyph(buff[c], false) == 0) { + CFAutoRelease del(CTRunDelegateCreate(&_sprite_font_callback, (void *)(size_t)(buff[c] | (font->fc->GetSize() << 24)))); /* According to the offical documentation, if a run delegate is used, the char should always be 0xFFFC. */ CFAttributedStringReplaceString(str.get(), CFRangeMake(c, 1), replacment_str.get()); CFAttributedStringSetAttribute(str.get(), CFRangeMake(c, 1), kCTRunDelegateAttributeName, del.get()); } } - last = i.first; + last = position; } CFAttributedStringEndEditing(str.get()); diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index 1feb8f41ce..f062187d39 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -283,8 +283,8 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF if (length == 0) return nullptr; /* Can't layout our in-built sprite fonts. */ - for (auto const &pair : font_mapping) { - if (pair.second->fc->IsBuiltInFont()) return nullptr; + for (auto const &[position, font] : font_mapping) { + if (font->fc->IsBuiltInFont()) return nullptr; } /* Itemize text. */ @@ -297,12 +297,12 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF int cur_pos = 0; std::vector::iterator cur_item = items.begin(); - for (auto const &i : font_mapping) { - while (cur_pos < i.first && cur_item != items.end() - 1) { + for (auto const &[position, font] : font_mapping) { + while (cur_pos < position && cur_item != items.end() - 1) { /* Add a range that spans the intersection of the remaining item and font run. */ - int stop_pos = std::min(i.first, (cur_item + 1)->iCharPos); + int stop_pos = std::min(position, (cur_item + 1)->iCharPos); assert(stop_pos - cur_pos > 0); - ranges.emplace_back(cur_pos, stop_pos - cur_pos, i.second, cur_item->a); + ranges.emplace_back(cur_pos, stop_pos - cur_pos, font, cur_item->a); /* Shape the range. */ if (!UniscribeShapeRun(buff, ranges.back())) {