Commit 5f421caf authored by Jean-Baptiste Queru's avatar Jean-Baptiste Queru Committed by Android Git Automerger
Browse files

am c2ad1992: Merge "Forward-compatibility stubs"

* commit 'c2ad1992':
  Forward-compatibility stubs
parents dccf2260 c2ad1992
......@@ -108,6 +108,7 @@ LOCAL_SRC_FILES:= \
src/core/SkGeometry.cpp \
src/core/SkGlyphCache.cpp \
src/core/SkGraphics.cpp \
src/core/SkLanguage.cpp \
src/core/SkLineClipper.cpp \
src/core/SkMallocPixelRef.cpp \
src/core/SkMask.cpp \
......
/*
* Copyright 2012 The Android Open Source Project
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkLanguage_DEFINED
#define SkLanguage_DEFINED
#include "SkTypes.h"
#ifdef SK_BUILD_FOR_ANDROID
#include "SkString.h"
struct SkLanguageInfo {
SkLanguageInfo(const char* tag) : fTag(tag) { }
SkString fTag; //! BCP 47 language identifier
};
/** \class SkLanguage
The SkLanguage class represents a human written language, and is used by
text draw operations to determine which glyph to draw when drawing
characters with variants (ie Han-derived characters).
*/
class SkLanguage {
public:
SkLanguage() : fInfo(getInfo("")) { }
SkLanguage(const char* tag) : fInfo(getInfo(tag)) { }
SkLanguage(const SkLanguage& b) : fInfo(b.fInfo) { }
/** Gets a BCP 47 language identifier for this SkLanguage.
@return a BCP 47 language identifier representing this language
*/
const SkString& getTag() const { return fInfo->fTag; }
/** Performs BCP 47 fallback to return an SkLanguage one step more general.
@return an SkLanguage one step more general
*/
SkLanguage getParent() const;
bool operator==(const SkLanguage& b) const {
return fInfo == b.fInfo;
}
bool operator!=(const SkLanguage& b) const {
return fInfo != b.fInfo;
}
bool operator<(const SkLanguage& b) const {
return fInfo < b.fInfo;
}
bool operator>(const SkLanguage& b) const {
return fInfo > b.fInfo;
}
SkLanguage& operator=(const SkLanguage& b) {
fInfo = b.fInfo;
return *this;
}
private:
const SkLanguageInfo* fInfo;
static const SkLanguageInfo* getInfo(const char* tag);
};
#endif // #ifdef SK_BUILD_FOR_ANDROID
#endif // #ifndef SkLanguage_DEFINED
......@@ -15,6 +15,10 @@
#include "SkXfermode.h"
#include "SkString.h"
#ifdef SK_BUILD_FOR_ANDROID
#include "SkLanguage.h"
#endif
class SkAutoGlyphCache;
class SkColorFilter;
class SkDescriptor;
......@@ -665,6 +669,11 @@ public:
@param locale set the paint's locale value for drawing text.
*/
void setTextLocale(const SkString& locale);
/** Set the paint's language value used for drawing text.
@param language set the paint's language value for drawing text.
*/
void setLanguage(const SkLanguage& language);
#endif
/** Return the paint's text size.
......
/*
* Copyright 2012 The Android Open Source Project
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "SkLanguage.h"
#ifdef SK_BUILD_FOR_ANDROID // currently only for Android
#include "SkTDict.h"
#include "SkThread.h"
#include <cstring>
SkLanguage SkLanguage::getParent() const {
SkASSERT(fInfo != NULL);
SkASSERT(fInfo->fTag != NULL);
const char* tag = fInfo->fTag.c_str();
SkASSERT(tag != NULL);
// strip off the rightmost "-.*"
char* parentTagEnd = strrchr(tag, '-');
if (parentTagEnd == NULL) {
return SkLanguage("");
}
size_t parentTagLen = parentTagEnd - tag;
char parentTag[parentTagLen + 1];
strncpy(parentTag, tag, parentTagLen);
parentTag[parentTagLen] = '\0';
return SkLanguage(parentTag);
}
SK_DECLARE_STATIC_MUTEX(gGetInfoMutex);
const SkLanguageInfo* SkLanguage::getInfo(const char* tag) {
SkAutoMutexAcquire lock(gGetInfoMutex);
static const size_t kDictSize = 128;
static SkTDict<SkLanguageInfo*> tagToInfo(kDictSize);
// try a lookup
SkLanguageInfo* info;
if (tagToInfo.find(tag, &info)) {
return info;
}
// no match - add this language
info = new SkLanguageInfo(tag);
tagToInfo.set(tag, info);
return info;
}
#endif
......@@ -372,6 +372,10 @@ void SkPaint::setTextLocale(const SkString& locale) {
GEN_ID_INC;
}
}
void SkPaint::setLanguage(const SkLanguage& language) {
setTextLocale(SkString(language.getTag()));
}
#endif
///////////////////////////////////////////////////////////////////////////////
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment