Remove SkTDict and calls from SkView.
R=reed@google.com Change-Id: Iebfddf752a2ac210a3f5c69de8decd06d0c35617 Reviewed-on: https://skia-review.googlesource.com/7436 Commit-Queue: Herb Derby <herb@google.com> Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Mike Reed <reed@google.com>
This commit is contained in:
parent
80d22ea13a
commit
5d72f7deb1
@ -466,7 +466,6 @@ skia_core_sources = [
|
|||||||
"$_include/private/SkTFitsIn.h",
|
"$_include/private/SkTFitsIn.h",
|
||||||
"$_include/private/SkTHash.h",
|
"$_include/private/SkTHash.h",
|
||||||
"$_include/private/SkThreadID.h",
|
"$_include/private/SkThreadID.h",
|
||||||
"$_include/private/SkTDict.h",
|
|
||||||
"$_include/private/SkTSearch.h",
|
"$_include/private/SkTSearch.h",
|
||||||
"$_include/private/SkTLogic.h",
|
"$_include/private/SkTLogic.h",
|
||||||
"$_include/private/SkWeakRefCnt.h",
|
"$_include/private/SkWeakRefCnt.h",
|
||||||
|
@ -1,146 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2006 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 SkTDict_DEFINED
|
|
||||||
#define SkTDict_DEFINED
|
|
||||||
|
|
||||||
#include "SkArenaAlloc.h"
|
|
||||||
#include "SkTSearch.h"
|
|
||||||
#include "SkTDArray.h"
|
|
||||||
|
|
||||||
template <typename T> class SkTDict : SkNoncopyable {
|
|
||||||
public:
|
|
||||||
SkTDict(size_t minStringAlloc) : fStrings(minStringAlloc) {}
|
|
||||||
|
|
||||||
void reset() {
|
|
||||||
fArray.reset();
|
|
||||||
fStrings.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
int count() const { return fArray.count(); }
|
|
||||||
|
|
||||||
bool set(const char name[], const T& value) {
|
|
||||||
return set(name, strlen(name), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool set(const char name[], size_t len, const T& value) {
|
|
||||||
SkASSERT(name);
|
|
||||||
|
|
||||||
int index = this->find_index(name, len);
|
|
||||||
|
|
||||||
if (index >= 0) {
|
|
||||||
fArray[index].fValue = value;
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
Pair* pair = fArray.insert(~index);
|
|
||||||
char* copy = fStrings.makeArrayDefault<char>(len + 1);
|
|
||||||
memcpy(copy, name, len);
|
|
||||||
copy[len] = '\0';
|
|
||||||
pair->fName = copy;
|
|
||||||
pair->fValue = value;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool find(const char name[]) const {
|
|
||||||
return this->find_index(name) >= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool find(const char name[], size_t len) const {
|
|
||||||
return this->find_index(name, len) >= 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool find(const char name[], T* value) const {
|
|
||||||
return find(name, strlen(name), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool find(const char name[], size_t len, T* value) const {
|
|
||||||
int index = this->find_index(name, len);
|
|
||||||
|
|
||||||
if (index >= 0) {
|
|
||||||
if (value) {
|
|
||||||
*value = fArray[index].fValue;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool findKey(T& value, const char** name) const {
|
|
||||||
const Pair* end = fArray.end();
|
|
||||||
for (const Pair* pair = fArray.begin(); pair < end; pair++) {
|
|
||||||
if (pair->fValue != value) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
*name = pair->fName;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
struct Pair {
|
|
||||||
const char* fName;
|
|
||||||
T fValue;
|
|
||||||
|
|
||||||
friend int operator<(const Pair& a, const Pair& b) {
|
|
||||||
return strcmp(a.fName, b.fName);
|
|
||||||
}
|
|
||||||
|
|
||||||
friend int operator!=(const Pair& a, const Pair& b) {
|
|
||||||
return strcmp(a.fName, b.fName);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
friend class Iter;
|
|
||||||
|
|
||||||
public:
|
|
||||||
class Iter {
|
|
||||||
public:
|
|
||||||
Iter(const SkTDict<T>& dict) {
|
|
||||||
fIter = dict.fArray.begin();
|
|
||||||
fStop = dict.fArray.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* next(T* value) {
|
|
||||||
const char* name = NULL;
|
|
||||||
if (fIter < fStop) {
|
|
||||||
name = fIter->fName;
|
|
||||||
if (value) {
|
|
||||||
*value = fIter->fValue;
|
|
||||||
}
|
|
||||||
fIter += 1;
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
const Pair* fIter;
|
|
||||||
const Pair* fStop;
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
SkTDArray<Pair> fArray;
|
|
||||||
SkArenaAlloc fStrings;
|
|
||||||
|
|
||||||
int find_index(const char name[]) const {
|
|
||||||
return find_index(name, strlen(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
int find_index(const char name[], size_t len) const {
|
|
||||||
SkASSERT(name);
|
|
||||||
|
|
||||||
int count = fArray.count();
|
|
||||||
int index = ~0;
|
|
||||||
|
|
||||||
if (count) {
|
|
||||||
index = SkStrSearch(&fArray.begin()->fName, count, name, len, sizeof(Pair));
|
|
||||||
}
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
friend class Iter;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -13,7 +13,6 @@
|
|||||||
#include "SkEventSink.h"
|
#include "SkEventSink.h"
|
||||||
#include "SkRect.h"
|
#include "SkRect.h"
|
||||||
#include "SkDOM.h"
|
#include "SkDOM.h"
|
||||||
#include "../private/SkTDict.h"
|
|
||||||
#include "SkMatrix.h"
|
#include "SkMatrix.h"
|
||||||
#include "SkMetaData.h"
|
#include "SkMetaData.h"
|
||||||
|
|
||||||
@ -313,14 +312,6 @@ public:
|
|||||||
/** Call this to initialize this view based on the specified XML node
|
/** Call this to initialize this view based on the specified XML node
|
||||||
*/
|
*/
|
||||||
void inflate(const SkDOM& dom, const SkDOM::Node* node);
|
void inflate(const SkDOM& dom, const SkDOM::Node* node);
|
||||||
/** After a view hierarchy is inflated, this may be called with a dictionary
|
|
||||||
containing pairs of <name, view*>, where the name string was the view's
|
|
||||||
"id" attribute when it was inflated.
|
|
||||||
|
|
||||||
This will call the virtual onPostInflate for this view, and the recursively
|
|
||||||
call postInflate on all of the view's children.
|
|
||||||
*/
|
|
||||||
void postInflate(const SkTDict<SkView*>& ids);
|
|
||||||
|
|
||||||
SkDEBUGCODE(void dump(bool recurse) const;)
|
SkDEBUGCODE(void dump(bool recurse) const;)
|
||||||
|
|
||||||
@ -362,7 +353,6 @@ protected:
|
|||||||
/** Override this if you want to perform post initialization work based on the ID dictionary built
|
/** Override this if you want to perform post initialization work based on the ID dictionary built
|
||||||
during XML parsing. Be sure to call the inherited version too.
|
during XML parsing. Be sure to call the inherited version too.
|
||||||
*/
|
*/
|
||||||
virtual void onPostInflate(const SkTDict<SkView*>&);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
#ifdef SK_DEBUG
|
#ifdef SK_DEBUG
|
||||||
|
@ -247,54 +247,3 @@ SkEventSink* SkEventSink::FindSink(SkEventSinkID sinkID)
|
|||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#if 0 // experimental, not tested
|
|
||||||
|
|
||||||
#include "SkMutex.h"
|
|
||||||
#include "SkTDict.h"
|
|
||||||
|
|
||||||
#define kMinStringBufferSize 128
|
|
||||||
SK_DECLARE_STATIC_MUTEX(gNamedSinkMutex);
|
|
||||||
static SkTDict<SkEventSinkID> gNamedSinkIDs(kMinStringBufferSize);
|
|
||||||
|
|
||||||
/** Register a name/id pair with the system. If the name already exists,
|
|
||||||
replace its ID with the new id. This pair will persist until UnregisterNamedSink()
|
|
||||||
is called.
|
|
||||||
*/
|
|
||||||
void SkEventSink::RegisterNamedSinkID(const char name[], SkEventSinkID id)
|
|
||||||
{
|
|
||||||
if (id && name && *name)
|
|
||||||
{
|
|
||||||
SkAutoMutexAcquire ac(gNamedSinkMutex);
|
|
||||||
gNamedSinkIDs.set(name, id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Return the id that matches the specified name (from a previous call to
|
|
||||||
RegisterNamedSinkID(). If no match is found, return 0
|
|
||||||
*/
|
|
||||||
SkEventSinkID SkEventSink::FindNamedSinkID(const char name[])
|
|
||||||
{
|
|
||||||
SkEventSinkID id = 0;
|
|
||||||
|
|
||||||
if (name && *name)
|
|
||||||
{
|
|
||||||
SkAutoMutexAcquire ac(gNamedSinkMutex);
|
|
||||||
(void)gNamedSinkIDs.find(name, &id);
|
|
||||||
}
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Remove all name/id pairs from the system. This is call internally
|
|
||||||
on shutdown, to ensure no memory leaks. It should not be called
|
|
||||||
before shutdown.
|
|
||||||
*/
|
|
||||||
void SkEventSink::RemoveAllNamedSinkIDs()
|
|
||||||
{
|
|
||||||
SkAutoMutexAcquire ac(gNamedSinkMutex);
|
|
||||||
(void)gNamedSinkIDs.reset();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -663,19 +663,6 @@ void SkView::inflate(const SkDOM& dom, const SkDOM::Node* node) {
|
|||||||
this->onInflate(dom, node);
|
this->onInflate(dom, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SkView::onPostInflate(const SkTDict<SkView*>&) {
|
|
||||||
// override in subclass as needed
|
|
||||||
}
|
|
||||||
|
|
||||||
void SkView::postInflate(const SkTDict<SkView*>& dict) {
|
|
||||||
this->onPostInflate(dict);
|
|
||||||
|
|
||||||
B2FIter iter(this);
|
|
||||||
SkView* child;
|
|
||||||
while ((child = iter.next()) != nullptr)
|
|
||||||
child->postInflate(dict);
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
SkView* SkView::sendEventToParents(const SkEvent& evt) {
|
SkView* SkView::sendEventToParents(const SkEvent& evt) {
|
||||||
|
Loading…
Reference in New Issue
Block a user