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/SkTHash.h",
|
||||
"$_include/private/SkThreadID.h",
|
||||
"$_include/private/SkTDict.h",
|
||||
"$_include/private/SkTSearch.h",
|
||||
"$_include/private/SkTLogic.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 "SkRect.h"
|
||||
#include "SkDOM.h"
|
||||
#include "../private/SkTDict.h"
|
||||
#include "SkMatrix.h"
|
||||
#include "SkMetaData.h"
|
||||
|
||||
@ -258,7 +257,7 @@ public:
|
||||
*/
|
||||
class Artist : public SkRefCnt {
|
||||
public:
|
||||
|
||||
|
||||
|
||||
void draw(SkView*, SkCanvas*);
|
||||
void inflate(const SkDOM&, const SkDOM::Node*);
|
||||
@ -286,7 +285,7 @@ public:
|
||||
*/
|
||||
class Layout : public SkRefCnt {
|
||||
public:
|
||||
|
||||
|
||||
|
||||
void layoutChildren(SkView* parent);
|
||||
void inflate(const SkDOM&, const SkDOM::Node*);
|
||||
@ -313,14 +312,6 @@ public:
|
||||
/** Call this to initialize this view based on the specified XML 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;)
|
||||
|
||||
@ -362,7 +353,6 @@ protected:
|
||||
/** 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.
|
||||
*/
|
||||
virtual void onPostInflate(const SkTDict<SkView*>&);
|
||||
|
||||
public:
|
||||
#ifdef SK_DEBUG
|
||||
|
@ -247,54 +247,3 @@ SkEventSink* SkEventSink::FindSink(SkEventSinkID sinkID)
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user