/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// EXTERNAL INCLUDES
#include <dali/integration-api/debug.h>
-#include <dali/devel-api/adaptor-framework/singleton-service.h>
+#include <dali/devel-api/common/singleton-service.h>
#include <dali/devel-api/text-abstraction/font-client.h>
// INTERNAL INCLUDES
currentFontRun.characterRun.characterIndex = startIndex;
currentFontRun.characterRun.numberOfCharacters = 0u;
currentFontRun.fontId = 0u;
+ currentFontRun.isBoldRequired = false;
+ currentFontRun.isItalicRequired = false;
// Get the font client.
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
bool isPreviousEmojiScript = false;
- // Description of fallback font which is selected at current iteration.
- TextAbstraction::FontDescription selectedFontDescription;
-
CharacterIndex lastCharacter = startIndex + numberOfCharacters;
for( Length index = startIndex; index < lastCharacter; ++index )
{
// Get the current character.
const Character character = *( textBuffer + index );
- bool needSoftwareBoldening = false;
- bool needSoftwareItalic = false;
+ bool isItalicRequired = false;
+ bool isBoldRequired = false;
// new description for current character
TextAbstraction::FontDescription currentFontDescription;
currentFontRun.characterRun.characterIndex = currentFontRun.characterRun.characterIndex + currentFontRun.characterRun.numberOfCharacters;
currentFontRun.characterRun.numberOfCharacters = 0u;
currentFontRun.fontId = fontId;
+ currentFontRun.isItalicRequired = false;
+ currentFontRun.isBoldRequired = false;
}
// If the given font is not valid, it means either:
// Checks if the current character is supported by the selected font.
isValidFont = fontClient.IsCharacterSupportedByFont( fontId, character );
- // Emojis are present in many monochrome fonts; prefer color by default.
- if( isValidFont &&
- isEmojiScript )
- {
- const GlyphIndex glyphIndex = fontClient.GetGlyphIndex( fontId, character );
-
- // For color emojis, the font is valid if the glyph is a color glyph (the bitmap is RGBA).
- isValidFont = fontClient.IsColorGlyph( fontId, glyphIndex );
- }
-
// If there is a valid font, cache it.
if( isValidFont && !isCommonScript )
{
DefaultFonts* defaultFontsPerScript = NULL;
- // Emojis are present in many monochrome fonts; prefer color by default.
- const bool preferColor = ( TextAbstraction::EMOJI == script );
-
// Find a fallback-font.
fontId = fontClient.FindFallbackFont( character,
currentFontDescription,
currentFontPointSize,
- preferColor );
+ false );
if( 0u == fontId )
{
}
#endif
- if( fontId != currentFontRun.fontId )
- {
- fontClient.GetDescription(fontId,selectedFontDescription);
- }
-
- // Developer sets bold to character but selected font cannot support it
- needSoftwareBoldening = ( currentFontDescription.weight >= TextAbstraction::FontWeight::BOLD ) && ( selectedFontDescription.weight < TextAbstraction::FontWeight::BOLD );
+ // Whether bols style is required.
+ isBoldRequired = ( currentFontDescription.weight >= TextAbstraction::FontWeight::BOLD );
- // Developer sets italic to character but selected font cannot support it
- needSoftwareItalic = ( currentFontDescription.slant == TextAbstraction::FontSlant::ITALIC ) && ( selectedFontDescription.slant < TextAbstraction::FontSlant::ITALIC );
+ // Whether italic style is required.
+ isItalicRequired = ( currentFontDescription.slant >= TextAbstraction::FontSlant::ITALIC );
// The font is now validated.
if( ( fontId != currentFontRun.fontId ) ||
isNewParagraphCharacter ||
// If font id is same as previous but style is diffrent, initialize new one
- ( ( fontId == currentFontRun.fontId ) && ( ( needSoftwareBoldening != currentFontRun.softwareBold ) || ( needSoftwareItalic != currentFontRun.softwareItalic ) ) ) )
+ ( ( fontId == currentFontRun.fontId ) && ( ( isBoldRequired != currentFontRun.isBoldRequired ) || ( isItalicRequired != currentFontRun.isItalicRequired ) ) ) )
{
// Current run needs to be stored and a new one initialized.
currentFontRun.characterRun.characterIndex = currentFontRun.characterRun.characterIndex + currentFontRun.characterRun.numberOfCharacters;
currentFontRun.characterRun.numberOfCharacters = 0u;
currentFontRun.fontId = fontId;
- currentFontRun.softwareItalic = needSoftwareItalic;
- currentFontRun.softwareBold = needSoftwareBoldening;
+ currentFontRun.isBoldRequired = isBoldRequired;
+ currentFontRun.isItalicRequired = isItalicRequired;
}
// Add one more character to the run.