diff options
Diffstat (limited to 'src/views')
30 files changed, 3048 insertions, 3048 deletions
diff --git a/src/views/SkBGViewArtist.cpp b/src/views/SkBGViewArtist.cpp index d9a45b8ffb..ffc410aea6 100644 --- a/src/views/SkBGViewArtist.cpp +++ b/src/views/SkBGViewArtist.cpp @@ -11,7 +11,7 @@ SkBGViewArtist::SkBGViewArtist(SkColor c) { - fPaint.setColor(c); + fPaint.setColor(c); } SkBGViewArtist::~SkBGViewArtist() @@ -20,12 +20,12 @@ SkBGViewArtist::~SkBGViewArtist() void SkBGViewArtist::onDraw(SkView*, SkCanvas* canvas) { - // only works for views that are clipped their bounds. - canvas->drawPaint(fPaint); + // only works for views that are clipped their bounds. + canvas->drawPaint(fPaint); } void SkBGViewArtist::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - SkPaint_Inflate(&fPaint, dom, node); + SkPaint_Inflate(&fPaint, dom, node); } diff --git a/src/views/SkEvent.cpp b/src/views/SkEvent.cpp index 0149215b2c..151317039b 100644 --- a/src/views/SkEvent.cpp +++ b/src/views/SkEvent.cpp @@ -59,9 +59,9 @@ static size_t makeCharArray(char* buffer, size_t compact) return strlen(buffer); } -void SkEvent::getType(SkString* str) const -{ - if (str) +void SkEvent::getType(SkString* str) const +{ + if (str) { if ((size_t) fType & 1) // not a pointer { @@ -74,13 +74,13 @@ void SkEvent::getType(SkString* str) const } } -bool SkEvent::isType(const SkString& str) const +bool SkEvent::isType(const SkString& str) const { - return this->isType(str.c_str(), str.size()); + return this->isType(str.c_str(), str.size()); } -bool SkEvent::isType(const char type[], size_t typeLen) const -{ +bool SkEvent::isType(const char type[], size_t typeLen) const +{ if (typeLen == 0) typeLen = strlen(type); if ((size_t) fType & 1) { // not a pointer @@ -88,7 +88,7 @@ bool SkEvent::isType(const char type[], size_t typeLen) const size_t len = makeCharArray(chars, (size_t) fType); return len == typeLen && strncmp(chars, type, typeLen) == 0; } - return strncmp(fType, type, typeLen) == 0 && fType[typeLen] == 0; + return strncmp(fType, type, typeLen) == 0 && fType[typeLen] == 0; } void SkEvent::setType(const char type[], size_t typeLen) @@ -183,7 +183,7 @@ void SkEvent::inflate(const SkDOM& dom, const SkDOM::Node* node) { if (title) SkDebugf("%s ", title); - + SkString etype; this->getType(&etype); SkDebugf("event<%s> fast32=%d", etype.c_str(), this->getFast32()); @@ -193,7 +193,7 @@ void SkEvent::inflate(const SkDOM& dom, const SkDOM::Node* node) SkMetaData::Type mtype; int count; const char* name; - + while ((name = iter.next(&mtype, &count)) != NULL) { SkASSERT(count > 0); @@ -296,7 +296,7 @@ void SkEvent::postDelay(SkMSec delay) { delete this; return; } - + if (delay) { this->postTime(SkTime::GetMSecs() + delay); return; @@ -307,7 +307,7 @@ void SkEvent::postDelay(SkMSec delay) { globals.fEventMutex.acquire(); bool wasEmpty = SkEvent::Enqueue(this); globals.fEventMutex.release(); - + // call outside of us holding the mutex if (wasEmpty) { SkEvent::SignalNonEmptyQueue(); @@ -321,11 +321,11 @@ void SkEvent::postTime(SkMSec time) { } SkEvent_Globals& globals = getGlobals(); - + globals.fEventMutex.acquire(); SkMSec queueDelay = SkEvent::EnqueueTime(this, time); globals.fEventMutex.release(); - + // call outside of us holding the mutex if ((int32_t)queueDelay != ~0) { SkEvent::SignalQueueTimer(queueDelay); @@ -473,7 +473,7 @@ void SkEvent::ServiceQueueTimer() int SkEvent::CountEventsOnQueue() { SkEvent_Globals& globals = getGlobals(); globals.fEventMutex.acquire(); - + int count = 0; const SkEvent* evt = globals.fEventQHead; while (evt) { diff --git a/src/views/SkEventSink.cpp b/src/views/SkEventSink.cpp index 8f39156c51..b6a3a6ee82 100644 --- a/src/views/SkEventSink.cpp +++ b/src/views/SkEventSink.cpp @@ -163,7 +163,7 @@ void SkEventSink::addListenerID(SkEventSinkID id) this->addTagList(next); } -void SkEventSink::copyListeners(const SkEventSink& sink) +void SkEventSink::copyListeners(const SkEventSink& sink) { SkListenersTagList* sinkList = (SkListenersTagList*)sink.findTagList(kListeners_SkTagList); if (sinkList == NULL) @@ -226,7 +226,7 @@ SkEventSink::EventResult SkEventSink::DoEvent(const SkEvent& evt) { if (proc) { return proc(evt) ? kHandled_EventResult : kNotHandled_EventResult; } - + SkEventSink* sink = SkEventSink::FindSink(evt.getTargetID()); if (sink) { return sink->doEvent(evt) ? kHandled_EventResult : kNotHandled_EventResult; diff --git a/src/views/SkOSMenu.cpp b/src/views/SkOSMenu.cpp index ed37541438..3de0a9eb77 100644 --- a/src/views/SkOSMenu.cpp +++ b/src/views/SkOSMenu.cpp @@ -11,7 +11,7 @@ static int gOSMenuCmd = 7000; SkOSMenu::SkOSMenu(const char title[]) { - fTitle.set(title); + fTitle.set(title); } SkOSMenu::~SkOSMenu() { @@ -46,7 +46,7 @@ void SkOSMenu::assignKeyEquivalentToItem(int itemID, SkUnichar key) { } } -bool SkOSMenu::handleKeyEquivalent(SkUnichar key) { +bool SkOSMenu::handleKeyEquivalent(SkUnichar key) { int value = 0, size = 0; bool state; SkOSMenu::TriState tristate; @@ -89,7 +89,7 @@ bool SkOSMenu::handleKeyEquivalent(SkUnichar key) { //////////////////////////////////////////////////////////////////////////////// -SkOSMenu::Item::Item(const char label[], SkOSMenu::Type type, +SkOSMenu::Item::Item(const char label[], SkOSMenu::Type type, const char slotName[], SkEvent* evt) { fLabel.set(label); fSlotName.set(slotName); @@ -133,7 +133,7 @@ static const char* gDelimiter = "|"; static const char* gList_Items_Str = "SkOSMenuList_Items"; static const char* gList_ItemCount_S32 = "SkOSMenuList_ItemCount"; -int SkOSMenu::appendItem(const char label[], Type type, const char slotName[], +int SkOSMenu::appendItem(const char label[], Type type, const char slotName[], SkEvent* evt) { SkOSMenu::Item* item = new Item(label, type, slotName, evt); fItems.append(1, &item); @@ -147,7 +147,7 @@ int SkOSMenu::appendAction(const char label[], SkEventSinkID target) { return appendItem(label, SkOSMenu::kAction_Type, "", evt); } -int SkOSMenu::appendList(const char label[], const char slotName[], +int SkOSMenu::appendList(const char label[], const char slotName[], SkEventSinkID target, int index, const char option[], ...) { SkEvent* evt = new SkEvent(gMenuEventType, target); va_list args; @@ -168,8 +168,8 @@ int SkOSMenu::appendList(const char label[], const char slotName[], return appendItem(label, SkOSMenu::kList_Type, slotName, evt); } -int SkOSMenu::appendSlider(const char label[], const char slotName[], - SkEventSinkID target, SkScalar min, SkScalar max, +int SkOSMenu::appendSlider(const char label[], const char slotName[], + SkEventSinkID target, SkScalar min, SkScalar max, SkScalar defaultValue) { SkEvent* evt = new SkEvent(gMenuEventType, target); evt->setScalar(gSlider_Min_Scalar, min); @@ -178,7 +178,7 @@ int SkOSMenu::appendSlider(const char label[], const char slotName[], return appendItem(label, SkOSMenu::kSlider_Type, slotName, evt); } -int SkOSMenu::appendSwitch(const char label[], const char slotName[], +int SkOSMenu::appendSwitch(const char label[], const char slotName[], SkEventSinkID target, bool defaultState) { SkEvent* evt = new SkEvent(gMenuEventType, target); evt->setBool(slotName, defaultState); @@ -192,7 +192,7 @@ int SkOSMenu::appendTriState(const char label[], const char slotName[], return appendItem(label, SkOSMenu::kTriState_Type, slotName, evt); } -int SkOSMenu::appendTextField(const char label[], const char slotName[], +int SkOSMenu::appendTextField(const char label[], const char slotName[], SkEventSinkID target, const char placeholder[]) { SkEvent* evt = new SkEvent(gMenuEventType, target); evt->setString(slotName, placeholder); @@ -234,7 +234,7 @@ bool SkOSMenu::FindAction(const SkEvent& evt, const char label[]) { } bool SkOSMenu::FindListIndex(const SkEvent& evt, const char slotName[], int* value) { - return evt.isType(gMenuEventType) && evt.findS32(slotName, value); + return evt.isType(gMenuEventType) && evt.findS32(slotName, value); } bool SkOSMenu::FindSliderValue(const SkEvent& evt, const char slotName[], SkScalar* value) { diff --git a/src/views/SkParsePaint.cpp b/src/views/SkParsePaint.cpp index 4839439bb8..7a305f2867 100644 --- a/src/views/SkParsePaint.cpp +++ b/src/views/SkParsePaint.cpp @@ -13,98 +13,98 @@ static SkShader* inflate_shader(const SkDOM& dom, const SkDOM::Node* node) { - if ((node = dom.getFirstChild(node, "shader")) == NULL) - return NULL; - - const char* str; - - if (dom.hasAttr(node, "type", "linear-gradient")) - { - SkColor colors[2]; - SkPoint pts[2]; - - colors[0] = colors[1] = SK_ColorBLACK; // need to initialized the alpha to opaque, since FindColor doesn't set it - if ((str = dom.findAttr(node, "c0")) != NULL && - SkParse::FindColor(str, &colors[0]) && - (str = dom.findAttr(node, "c1")) != NULL && - SkParse::FindColor(str, &colors[1]) && - dom.findScalars(node, "p0", &pts[0].fX, 2) && - dom.findScalars(node, "p1", &pts[1].fX, 2)) - { - SkShader::TileMode mode = SkShader::kClamp_TileMode; - int index; - - if ((index = dom.findList(node, "tile-mode", "clamp,repeat,mirror")) >= 0) - mode = (SkShader::TileMode)index; - return SkGradientShader::CreateLinear(pts, colors, NULL, 2, mode); - } - } - else if (dom.hasAttr(node, "type", "bitmap")) - { - if ((str = dom.findAttr(node, "src")) == NULL) - return NULL; - - SkBitmap bm; - - if (SkImageDecoder::DecodeFile(str, &bm)) - { - SkShader::TileMode mode = SkShader::kRepeat_TileMode; - int index; - - if ((index = dom.findList(node, "tile-mode", "clamp,repeat,mirror")) >= 0) - mode = (SkShader::TileMode)index; - - return SkShader::CreateBitmapShader(bm, mode, mode); - } - } - return NULL; + if ((node = dom.getFirstChild(node, "shader")) == NULL) + return NULL; + + const char* str; + + if (dom.hasAttr(node, "type", "linear-gradient")) + { + SkColor colors[2]; + SkPoint pts[2]; + + colors[0] = colors[1] = SK_ColorBLACK; // need to initialized the alpha to opaque, since FindColor doesn't set it + if ((str = dom.findAttr(node, "c0")) != NULL && + SkParse::FindColor(str, &colors[0]) && + (str = dom.findAttr(node, "c1")) != NULL && + SkParse::FindColor(str, &colors[1]) && + dom.findScalars(node, "p0", &pts[0].fX, 2) && + dom.findScalars(node, "p1", &pts[1].fX, 2)) + { + SkShader::TileMode mode = SkShader::kClamp_TileMode; + int index; + + if ((index = dom.findList(node, "tile-mode", "clamp,repeat,mirror")) >= 0) + mode = (SkShader::TileMode)index; + return SkGradientShader::CreateLinear(pts, colors, NULL, 2, mode); + } + } + else if (dom.hasAttr(node, "type", "bitmap")) + { + if ((str = dom.findAttr(node, "src")) == NULL) + return NULL; + + SkBitmap bm; + + if (SkImageDecoder::DecodeFile(str, &bm)) + { + SkShader::TileMode mode = SkShader::kRepeat_TileMode; + int index; + + if ((index = dom.findList(node, "tile-mode", "clamp,repeat,mirror")) >= 0) + mode = (SkShader::TileMode)index; + + return SkShader::CreateBitmapShader(bm, mode, mode); + } + } + return NULL; } void SkPaint_Inflate(SkPaint* paint, const SkDOM& dom, const SkDOM::Node* node) { - SkASSERT(paint); - SkASSERT(&dom); - SkASSERT(node); - - SkScalar x; - - if (dom.findScalar(node, "stroke-width", &x)) - paint->setStrokeWidth(x); - if (dom.findScalar(node, "text-size", &x)) - paint->setTextSize(x); - - bool b; - - SkASSERT("legacy: use is-stroke" && !dom.findBool(node, "is-frame", &b)); - - if (dom.findBool(node, "is-stroke", &b)) - paint->setStyle(b ? SkPaint::kStroke_Style : SkPaint::kFill_Style); - if (dom.findBool(node, "is-antialias", &b)) - paint->setAntiAlias(b); - if (dom.findBool(node, "is-lineartext", &b)) - paint->setLinearText(b); - - const char* str = dom.findAttr(node, "color"); - if (str) - { - SkColor c = paint->getColor(); - if (SkParse::FindColor(str, &c)) - paint->setColor(c); - } - - // do this AFTER parsing for the color - if (dom.findScalar(node, "opacity", &x)) - { - x = SkMaxScalar(0, SkMinScalar(x, SK_Scalar1)); - paint->setAlpha(SkScalarRound(x * 255)); - } - - int index = dom.findList(node, "text-anchor", "left,center,right"); - if (index >= 0) - paint->setTextAlign((SkPaint::Align)index); - - SkShader* shader = inflate_shader(dom, node); - if (shader) - paint->setShader(shader)->unref(); + SkASSERT(paint); + SkASSERT(&dom); + SkASSERT(node); + + SkScalar x; + + if (dom.findScalar(node, "stroke-width", &x)) + paint->setStrokeWidth(x); + if (dom.findScalar(node, "text-size", &x)) + paint->setTextSize(x); + + bool b; + + SkASSERT("legacy: use is-stroke" && !dom.findBool(node, "is-frame", &b)); + + if (dom.findBool(node, "is-stroke", &b)) + paint->setStyle(b ? SkPaint::kStroke_Style : SkPaint::kFill_Style); + if (dom.findBool(node, "is-antialias", &b)) + paint->setAntiAlias(b); + if (dom.findBool(node, "is-lineartext", &b)) + paint->setLinearText(b); + + const char* str = dom.findAttr(node, "color"); + if (str) + { + SkColor c = paint->getColor(); + if (SkParse::FindColor(str, &c)) + paint->setColor(c); + } + + // do this AFTER parsing for the color + if (dom.findScalar(node, "opacity", &x)) + { + x = SkMaxScalar(0, SkMinScalar(x, SK_Scalar1)); + paint->setAlpha(SkScalarRound(x * 255)); + } + + int index = dom.findList(node, "text-anchor", "left,center,right"); + if (index >= 0) + paint->setTextAlign((SkPaint::Align)index); + + SkShader* shader = inflate_shader(dom, node); + if (shader) + paint->setShader(shader)->unref(); } diff --git a/src/views/SkProgressView.cpp b/src/views/SkProgressView.cpp index d82b48ee24..edb78bdcf6 100644 --- a/src/views/SkProgressView.cpp +++ b/src/views/SkProgressView.cpp @@ -14,120 +14,120 @@ SkProgressView::SkProgressView(uint32_t flags) : SkView(flags), fOnShader(NULL), fOffShader(NULL) { - fValue = 0; - fMax = 0; - fInterp = NULL; - fDoInterp = false; + fValue = 0; + fMax = 0; + fInterp = NULL; + fDoInterp = false; } SkProgressView::~SkProgressView() { - delete fInterp; - SkSafeUnref(fOnShader); - SkSafeUnref(fOffShader); + delete fInterp; + SkSafeUnref(fOnShader); + SkSafeUnref(fOffShader); } void SkProgressView::setMax(U16CPU max) { - if (fMax != max) - { - fMax = SkToU16(max); - if (fValue > 0) - this->inval(NULL); - } + if (fMax != max) + { + fMax = SkToU16(max); + if (fValue > 0) + this->inval(NULL); + } } void SkProgressView::setValue(U16CPU value) { - if (fValue != value) - { - if (fDoInterp) - { - if (fInterp) - delete fInterp; - fInterp = new SkInterpolator(1, 2); - SkScalar x = (SkScalar)(fValue << 8); - fInterp->setKeyFrame(0, SkTime::GetMSecs(), &x, 0); - x = (SkScalar)(value << 8); - fInterp->setKeyFrame(1, SkTime::GetMSecs() + 333, &x); - } - fValue = SkToU16(value); - this->inval(NULL); - } + if (fValue != value) + { + if (fDoInterp) + { + if (fInterp) + delete fInterp; + fInterp = new SkInterpolator(1, 2); + SkScalar x = (SkScalar)(fValue << 8); + fInterp->setKeyFrame(0, SkTime::GetMSecs(), &x, 0); + x = (SkScalar)(value << 8); + fInterp->setKeyFrame(1, SkTime::GetMSecs() + 333, &x); + } + fValue = SkToU16(value); + this->inval(NULL); + } } void SkProgressView::onDraw(SkCanvas* canvas) { - if (fMax == 0) - return; - - SkFixed percent; - - if (fInterp) - { - SkScalar x; - if (fInterp->timeToValues(SkTime::GetMSecs(), &x) == SkInterpolator::kFreezeEnd_Result) - { - delete fInterp; - fInterp = NULL; - } - percent = (SkFixed)x; // now its 16.8 - percent = SkMax32(0, SkMin32(percent, fMax << 8)); // now its pinned - percent = SkFixedDiv(percent, fMax << 8); // now its 0.16 - this->inval(NULL); - } - else - { - U16CPU value = SkMax32(0, SkMin32(fValue, fMax)); - percent = SkFixedDiv(value, fMax); - } - - - SkRect r; - SkPaint p; - - r.set(0, 0, this->width(), this->height()); - p.setAntiAlias(true); - - r.fRight = r.fLeft + SkScalarMul(r.width(), SkFixedToScalar(percent)); - p.setStyle(SkPaint::kFill_Style); - - p.setColor(SK_ColorDKGRAY); - p.setShader(fOnShader); - canvas->drawRect(r, p); - - p.setColor(SK_ColorWHITE); - p.setShader(fOffShader); - r.fLeft = r.fRight; - r.fRight = this->width() - SK_Scalar1; - if (r.width() > 0) - canvas->drawRect(r, p); + if (fMax == 0) + return; + + SkFixed percent; + + if (fInterp) + { + SkScalar x; + if (fInterp->timeToValues(SkTime::GetMSecs(), &x) == SkInterpolator::kFreezeEnd_Result) + { + delete fInterp; + fInterp = NULL; + } + percent = (SkFixed)x; // now its 16.8 + percent = SkMax32(0, SkMin32(percent, fMax << 8)); // now its pinned + percent = SkFixedDiv(percent, fMax << 8); // now its 0.16 + this->inval(NULL); + } + else + { + U16CPU value = SkMax32(0, SkMin32(fValue, fMax)); + percent = SkFixedDiv(value, fMax); + } + + + SkRect r; + SkPaint p; + + r.set(0, 0, this->width(), this->height()); + p.setAntiAlias(true); + + r.fRight = r.fLeft + SkScalarMul(r.width(), SkFixedToScalar(percent)); + p.setStyle(SkPaint::kFill_Style); + + p.setColor(SK_ColorDKGRAY); + p.setShader(fOnShader); + canvas->drawRect(r, p); + + p.setColor(SK_ColorWHITE); + p.setShader(fOffShader); + r.fLeft = r.fRight; + r.fRight = this->width() - SK_Scalar1; + if (r.width() > 0) + canvas->drawRect(r, p); } #include "SkImageDecoder.h" static SkShader* inflate_shader(const char file[]) { - SkBitmap bm; + SkBitmap bm; - return SkImageDecoder::DecodeFile(file, &bm) ? - SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode) : - NULL; + return SkImageDecoder::DecodeFile(file, &bm) ? + SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode) : + NULL; } void SkProgressView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); - const char* s; + const char* s; - SkASSERT(fOnShader == NULL); - SkASSERT(fOffShader == NULL); + SkASSERT(fOnShader == NULL); + SkASSERT(fOffShader == NULL); - if ((s = dom.findAttr(node, "src-on")) != NULL) - fOnShader = inflate_shader(s); - if ((s = dom.findAttr(node, "src-off")) != NULL) - fOffShader = inflate_shader(s); - (void)dom.findBool(node, "do-interp", &fDoInterp); + if ((s = dom.findAttr(node, "src-on")) != NULL) + fOnShader = inflate_shader(s); + if ((s = dom.findAttr(node, "src-off")) != NULL) + fOffShader = inflate_shader(s); + (void)dom.findBool(node, "do-interp", &fDoInterp); } diff --git a/src/views/SkStackViewLayout.cpp b/src/views/SkStackViewLayout.cpp index bf6f36339e..e4fbb80ea8 100644 --- a/src/views/SkStackViewLayout.cpp +++ b/src/views/SkStackViewLayout.cpp @@ -9,51 +9,51 @@ SkStackViewLayout::SkStackViewLayout() { - fMargin.set(0, 0, 0, 0); - fSpacer = 0; - fOrient = kHorizontal_Orient; - fPack = kStart_Pack; - fAlign = kStart_Align; - fRound = false; + fMargin.set(0, 0, 0, 0); + fSpacer = 0; + fOrient = kHorizontal_Orient; + fPack = kStart_Pack; + fAlign = kStart_Align; + fRound = false; } void SkStackViewLayout::setOrient(Orient ori) { - SkASSERT((unsigned)ori < kOrientCount); - fOrient = SkToU8(ori); + SkASSERT((unsigned)ori < kOrientCount); + fOrient = SkToU8(ori); } void SkStackViewLayout::getMargin(SkRect* margin) const { - if (margin) - *margin = fMargin; + if (margin) + *margin = fMargin; } void SkStackViewLayout::setMargin(const SkRect& margin) { - fMargin = margin; + fMargin = margin; } void SkStackViewLayout::setSpacer(SkScalar spacer) { - fSpacer = spacer; + fSpacer = spacer; } void SkStackViewLayout::setPack(Pack pack) { - SkASSERT((unsigned)pack < kPackCount); - fPack = SkToU8(pack); + SkASSERT((unsigned)pack < kPackCount); + fPack = SkToU8(pack); } void SkStackViewLayout::setAlign(Align align) { - SkASSERT((unsigned)align < kAlignCount); - fAlign = SkToU8(align); + SkASSERT((unsigned)align < kAlignCount); + fAlign = SkToU8(align); } void SkStackViewLayout::setRound(bool r) { - fRound = SkToU8(r); + fRound = SkToU8(r); } //////////////////////////////////////////////////////////////////////////////// @@ -68,170 +68,170 @@ static SkScalar center_align_proc(SkScalar childLimit, SkScalar parentLimit) { r static SkScalar right_align_proc(SkScalar childLimit, SkScalar parentLimit) { return parentLimit - childLimit; } static SkScalar fill_align_proc(SkScalar childLimit, SkScalar parentLimit) { return 0; } -/* Measure the main-dimension for all the children. If a child is marked flex in that direction - ignore its current value but increment the counter for flexChildren +/* Measure the main-dimension for all the children. If a child is marked flex in that direction + ignore its current value but increment the counter for flexChildren */ static SkScalar compute_children_limit(SkView* parent, GetSizeProc sizeProc, int* count, - uint32_t flexMask, int* flexCount) + uint32_t flexMask, int* flexCount) { - SkView::B2FIter iter(parent); - SkView* child; - SkScalar limit = 0; - int n = 0, flex = 0; - - while ((child = iter.next()) != NULL) - { - n += 1; - if (child->getFlags() & flexMask) - flex += 1; - else - limit += (child->*sizeProc)(); - } - if (count) - *count = n; - if (flexCount) - *flexCount = flex; - return limit; + SkView::B2FIter iter(parent); + SkView* child; + SkScalar limit = 0; + int n = 0, flex = 0; + + while ((child = iter.next()) != NULL) + { + n += 1; + if (child->getFlags() & flexMask) + flex += 1; + else + limit += (child->*sizeProc)(); + } + if (count) + *count = n; + if (flexCount) + *flexCount = flex; + return limit; } void SkStackViewLayout::onLayoutChildren(SkView* parent) { - static AlignProc gAlignProcs[] = { - left_align_proc, - center_align_proc, - right_align_proc, - fill_align_proc - }; - - SkScalar startM, endM, crossStartM, crossLimit; - GetSizeProc mainGetSizeP, crossGetSizeP; - SetLocProc mainLocP, crossLocP; - SetSizeProc mainSetSizeP, crossSetSizeP; - SkView::Flag_Mask flexMask; - - if (fOrient == kHorizontal_Orient) - { - startM = fMargin.fLeft; - endM = fMargin.fRight; - crossStartM = fMargin.fTop; - crossLimit = -fMargin.fTop - fMargin.fBottom; - - mainGetSizeP = &SkView::width; - crossGetSizeP = &SkView::height; - mainLocP = &SkView::setLocX; - crossLocP = &SkView::setLocY; - - mainSetSizeP = &SkView::setWidth; - crossSetSizeP = &SkView::setHeight; - - flexMask = SkView::kFlexH_Mask; - } - else - { - startM = fMargin.fTop; - endM = fMargin.fBottom; - crossStartM = fMargin.fLeft; - crossLimit = -fMargin.fLeft - fMargin.fRight; - - mainGetSizeP = &SkView::height; - crossGetSizeP = &SkView::width; - mainLocP = &SkView::setLocY; - crossLocP = &SkView::setLocX; - - mainSetSizeP = &SkView::setHeight; - crossSetSizeP = &SkView::setWidth; - - flexMask = SkView::kFlexV_Mask; - } - crossLimit += (parent->*crossGetSizeP)(); - if (fAlign != kStretch_Align) - crossSetSizeP = NULL; - - int childCount, flexCount; - SkScalar childLimit = compute_children_limit(parent, mainGetSizeP, &childCount, flexMask, &flexCount); - - if (childCount == 0) - return; - - childLimit += (childCount - 1) * fSpacer; - - SkScalar parentLimit = (parent->*mainGetSizeP)() - startM - endM; - SkScalar pos = startM + gAlignProcs[fPack](childLimit, parentLimit); - SkScalar flexAmount = 0; - SkView::B2FIter iter(parent); - SkView* child; - - if (flexCount > 0 && parentLimit > childLimit) - flexAmount = (parentLimit - childLimit) / flexCount; - - while ((child = iter.next()) != NULL) - { - if (fRound) - pos = SkIntToScalar(SkScalarRound(pos)); - (child->*mainLocP)(pos); - SkScalar crossLoc = crossStartM + gAlignProcs[fAlign]((child->*crossGetSizeP)(), crossLimit); - if (fRound) - crossLoc = SkIntToScalar(SkScalarRound(crossLoc)); - (child->*crossLocP)(crossLoc); - - if (crossSetSizeP) - (child->*crossSetSizeP)(crossLimit); - if (child->getFlags() & flexMask) - (child->*mainSetSizeP)(flexAmount); - pos += (child->*mainGetSizeP)() + fSpacer; - } + static AlignProc gAlignProcs[] = { + left_align_proc, + center_align_proc, + right_align_proc, + fill_align_proc + }; + + SkScalar startM, endM, crossStartM, crossLimit; + GetSizeProc mainGetSizeP, crossGetSizeP; + SetLocProc mainLocP, crossLocP; + SetSizeProc mainSetSizeP, crossSetSizeP; + SkView::Flag_Mask flexMask; + + if (fOrient == kHorizontal_Orient) + { + startM = fMargin.fLeft; + endM = fMargin.fRight; + crossStartM = fMargin.fTop; + crossLimit = -fMargin.fTop - fMargin.fBottom; + + mainGetSizeP = &SkView::width; + crossGetSizeP = &SkView::height; + mainLocP = &SkView::setLocX; + crossLocP = &SkView::setLocY; + + mainSetSizeP = &SkView::setWidth; + crossSetSizeP = &SkView::setHeight; + + flexMask = SkView::kFlexH_Mask; + } + else + { + startM = fMargin.fTop; + endM = fMargin.fBottom; + crossStartM = fMargin.fLeft; + crossLimit = -fMargin.fLeft - fMargin.fRight; + + mainGetSizeP = &SkView::height; + crossGetSizeP = &SkView::width; + mainLocP = &SkView::setLocY; + crossLocP = &SkView::setLocX; + + mainSetSizeP = &SkView::setHeight; + crossSetSizeP = &SkView::setWidth; + + flexMask = SkView::kFlexV_Mask; + } + crossLimit += (parent->*crossGetSizeP)(); + if (fAlign != kStretch_Align) + crossSetSizeP = NULL; + + int childCount, flexCount; + SkScalar childLimit = compute_children_limit(parent, mainGetSizeP, &childCount, flexMask, &flexCount); + + if (childCount == 0) + return; + + childLimit += (childCount - 1) * fSpacer; + + SkScalar parentLimit = (parent->*mainGetSizeP)() - startM - endM; + SkScalar pos = startM + gAlignProcs[fPack](childLimit, parentLimit); + SkScalar flexAmount = 0; + SkView::B2FIter iter(parent); + SkView* child; + + if (flexCount > 0 && parentLimit > childLimit) + flexAmount = (parentLimit - childLimit) / flexCount; + + while ((child = iter.next()) != NULL) + { + if (fRound) + pos = SkIntToScalar(SkScalarRound(pos)); + (child->*mainLocP)(pos); + SkScalar crossLoc = crossStartM + gAlignProcs[fAlign]((child->*crossGetSizeP)(), crossLimit); + if (fRound) + crossLoc = SkIntToScalar(SkScalarRound(crossLoc)); + (child->*crossLocP)(crossLoc); + + if (crossSetSizeP) + (child->*crossSetSizeP)(crossLimit); + if (child->getFlags() & flexMask) + (child->*mainSetSizeP)(flexAmount); + pos += (child->*mainGetSizeP)() + fSpacer; + } } ////////////////////////////////////////////////////////////////////////////////////// #ifdef SK_DEBUG - static void assert_no_attr(const SkDOM& dom, const SkDOM::Node* node, const char attr[]) - { - const char* value = dom.findAttr(node, attr); - if (value) - SkDebugf("unknown attribute %s=\"%s\"\n", attr, value); - } + static void assert_no_attr(const SkDOM& dom, const SkDOM::Node* node, const char attr[]) + { + const char* value = dom.findAttr(node, attr); + if (value) + SkDebugf("unknown attribute %s=\"%s\"\n", attr, value); + } #else - #define assert_no_attr(dom, node, attr) + #define assert_no_attr(dom, node, attr) #endif void SkStackViewLayout::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - int index; - SkScalar value[4]; + int index; + SkScalar value[4]; - if ((index = dom.findList(node, "orient", "horizontal,vertical")) >= 0) - this->setOrient((Orient)index); - else { - assert_no_attr(dom, node, "orient"); + if ((index = dom.findList(node, "orient", "horizontal,vertical")) >= 0) + this->setOrient((Orient)index); + else { + assert_no_attr(dom, node, "orient"); } - if (dom.findScalars(node, "margin", value, 4)) - { - SkRect margin; - margin.set(value[0], value[1], value[2], value[3]); - this->setMargin(margin); - } - else { - assert_no_attr(dom, node, "margin"); + if (dom.findScalars(node, "margin", value, 4)) + { + SkRect margin; + margin.set(value[0], value[1], value[2], value[3]); + this->setMargin(margin); + } + else { + assert_no_attr(dom, node, "margin"); } - if (dom.findScalar(node, "spacer", value)) - this->setSpacer(value[0]); - else { - assert_no_attr(dom, node, "spacer"); + if (dom.findScalar(node, "spacer", value)) + this->setSpacer(value[0]); + else { + assert_no_attr(dom, node, "spacer"); } - if ((index = dom.findList(node, "pack", "start,center,end")) >= 0) - this->setPack((Pack)index); - else { - assert_no_attr(dom, node, "pack"); + if ((index = dom.findList(node, "pack", "start,center,end")) >= 0) + this->setPack((Pack)index); + else { + assert_no_attr(dom, node, "pack"); } - if ((index = dom.findList(node, "align", "start,center,end,stretch")) >= 0) - this->setAlign((Align)index); - else { - assert_no_attr(dom, node, "align"); + if ((index = dom.findList(node, "align", "start,center,end,stretch")) >= 0) + this->setAlign((Align)index); + else { + assert_no_attr(dom, node, "align"); } } @@ -239,36 +239,36 @@ void SkStackViewLayout::onInflate(const SkDOM& dom, const SkDOM::Node* node) SkFillViewLayout::SkFillViewLayout() { - fMargin.setEmpty(); + fMargin.setEmpty(); } void SkFillViewLayout::getMargin(SkRect* r) const { - if (r) - *r = fMargin; + if (r) + *r = fMargin; } void SkFillViewLayout::setMargin(const SkRect& margin) { - fMargin = margin; + fMargin = margin; } void SkFillViewLayout::onLayoutChildren(SkView* parent) { - SkView::B2FIter iter(parent); - SkView* child; - - while ((child = iter.next()) != NULL) - { - child->setLoc(fMargin.fLeft, fMargin.fTop); - child->setSize( parent->width() - fMargin.fRight - fMargin.fLeft, - parent->height() - fMargin.fBottom - fMargin.fTop); - } + SkView::B2FIter iter(parent); + SkView* child; + + while ((child = iter.next()) != NULL) + { + child->setLoc(fMargin.fLeft, fMargin.fTop); + child->setSize( parent->width() - fMargin.fRight - fMargin.fLeft, + parent->height() - fMargin.fBottom - fMargin.fTop); + } } void SkFillViewLayout::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); - (void)dom.findScalars(node, "margin", (SkScalar*)&fMargin, 4); + this->INHERITED::onInflate(dom, node); + (void)dom.findScalars(node, "margin", (SkScalar*)&fMargin, 4); } diff --git a/src/views/SkTextBox.cpp b/src/views/SkTextBox.cpp index 47237a905e..355944aef1 100644 --- a/src/views/SkTextBox.cpp +++ b/src/views/SkTextBox.cpp @@ -156,7 +156,7 @@ void SkTextBox::draw(SkCanvas* canvas, const char text[], size_t len, const SkPa y += scaledSpacing; if (y + metrics.fAscent >= height) break; - } + } } /////////////////////////////////////////////////////////////////////////////// diff --git a/src/views/SkTouchGesture.cpp b/src/views/SkTouchGesture.cpp index 1828f0390b..afda8c15cd 100644 --- a/src/views/SkTouchGesture.cpp +++ b/src/views/SkTouchGesture.cpp @@ -191,7 +191,7 @@ static const float MIN_ZOOM_SCALE = 0.25f; float SkTouchGesture::limitTotalZoom(float scale) const { // this query works 'cause we know that we're square-scale w/ no skew/rotation const float curr = SkScalarToFloat(fGlobalM[0]); - + if (scale > 1 && curr * scale > MAX_ZOOM_SCALE) { scale = MAX_ZOOM_SCALE / curr; } else if (scale < 1 && curr * scale < MIN_ZOOM_SCALE) { @@ -239,7 +239,7 @@ void SkTouchGesture::touchMoved(void* owner, float x, float y) { SkASSERT(kZoom_State == fState); const Rec& rec0 = fTouches[0]; const Rec& rec1 = fTouches[1]; - + float scale = this->computePinch(rec0, rec1); scale = this->limitTotalZoom(scale); diff --git a/src/views/SkView.cpp b/src/views/SkView.cpp index eb93198240..94eb490a0b 100644 --- a/src/views/SkView.cpp +++ b/src/views/SkView.cpp @@ -95,7 +95,7 @@ void SkView::offset(SkScalar dx, SkScalar dy) this->setLoc(fLoc.fX + dx, fLoc.fY + dy); } -void SkView::setLocalMatrix(const SkMatrix& matrix) +void SkView::setLocalMatrix(const SkMatrix& matrix) { this->inval(NULL); fMatrix = matrix; @@ -106,22 +106,22 @@ void SkView::draw(SkCanvas* canvas) { if (fWidth && fHeight && this->isVisible()) { - SkRect r; + SkRect r; r.set(fLoc.fX, fLoc.fY, fLoc.fX + fWidth, fLoc.fY + fHeight); if (this->isClipToBounds() && canvas->quickReject(r)) { return; } - SkAutoCanvasRestore as(canvas, true); + SkAutoCanvasRestore as(canvas, true); if (this->isClipToBounds()) { canvas->clipRect(r); } - - canvas->translate(fLoc.fX, fLoc.fY); + + canvas->translate(fLoc.fX, fLoc.fY); canvas->concat(fMatrix); - + if (fParent) { fParent->beforeChild(this, canvas); } @@ -133,21 +133,21 @@ void SkView::draw(SkCanvas* canvas) if (fParent) { fParent->afterChild(this, canvas); } - - B2FIter iter(this); - SkView* child; + + B2FIter iter(this); + SkView* child; SkCanvas* childCanvas = this->beforeChildren(canvas); while ((child = iter.next()) != NULL) child->draw(childCanvas); - + this->afterChildren(canvas); } } void SkView::inval(SkRect* rect) { - SkView* view = this; + SkView* view = this; SkRect storage; for (;;) { @@ -184,7 +184,7 @@ void SkView::inval(SkRect* rect) { bool SkView::setFocusView(SkView* fv) { SkView* view = this; - + do { if (view->onSetFocusView(fv)) return true; @@ -194,8 +194,8 @@ bool SkView::setFocusView(SkView* fv) SkView* SkView::getFocusView() const { - SkView* focus = NULL; - const SkView* view = this; + SkView* focus = NULL; + const SkView* view = this; do { if (view->onGetFocusView(&focus)) break; @@ -223,16 +223,16 @@ SkView* SkView::acceptFocus(FocusDirection dir) if (this->acceptFocus()) return this; - B2FIter iter(this); - SkView* child, *focus; + B2FIter iter(this); + SkView* child, *focus; while ((child = iter.next()) != NULL) if ((focus = child->acceptFocus(dir)) != NULL) return focus; } else // prev { - F2BIter iter(this); - SkView* child, *focus; + F2BIter iter(this); + SkView* child, *focus; while ((child = iter.next()) != NULL) if ((focus = child->acceptFocus(dir)) != NULL) return focus; @@ -249,13 +249,13 @@ SkView* SkView::moveFocus(FocusDirection dir) SkView* focus = this->getFocusView(); if (focus == NULL) - { // start with the root + { // start with the root focus = this; while (focus->fParent) focus = focus->fParent; } - SkView* child, *parent; + SkView* child, *parent; if (dir == kNext_FocusDirection) { @@ -279,10 +279,10 @@ SkView* SkView::moveFocus(FocusDirection dir) parent = parent->fParent; } while (parent != NULL); } - else // prevfocus + else // prevfocus { parent = focus->fParent; - if (parent == NULL) // we're the root + if (parent == NULL) // we're the root return focus->acceptFocus(dir); else { @@ -364,7 +364,7 @@ void SkView::Click::copyType(const char type[]) this->resetType(); if (type) { - size_t len = strlen(type) + 1; + size_t len = strlen(type) + 1; fType = (char*)sk_malloc_throw(len); memcpy(fType, type, len); fWeOwnTheType = true; @@ -379,8 +379,8 @@ SkView::Click* SkView::findClickHandler(SkScalar x, SkScalar y) } if (this->onSendClickToChildren(x, y)) { - F2BIter iter(this); - SkView* child; + F2BIter iter(this); + SkView* child; while ((child = iter.next()) != NULL) { @@ -526,9 +526,9 @@ void SkView::detachFromParent_NoLayout() this->inval(NULL); - SkView* next = NULL; + SkView* next = NULL; - if (fNextSibling != this) // do we have any siblings + if (fNextSibling != this) // do we have any siblings { fNextSibling->fPrevSibling = fPrevSibling; fPrevSibling->fNextSibling = fNextSibling; @@ -657,7 +657,7 @@ bool SkView::globalToLocal(SkScalar x, SkScalar y, SkPoint* local) const ////////////////////////////////////////////////////////////////// -/* Even if the subclass overrides onInflate, they should always be +/* Even if the subclass overrides onInflate, they should always be sure to call the inherited method, so that we get called. */ void SkView::onInflate(const SkDOM& dom, const SkDOM::Node* node) @@ -705,8 +705,8 @@ void SkView::postInflate(const SkTDict<SkView*>& dict) { this->onPostInflate(dict); - B2FIter iter(this); - SkView* child; + B2FIter iter(this); + SkView* child; while ((child = iter.next()) != NULL) child->postInflate(dict); } @@ -716,7 +716,7 @@ void SkView::postInflate(const SkTDict<SkView*>& dict) SkView* SkView::sendEventToParents(const SkEvent& evt) { SkView* parent = fParent; - + while (parent) { if (parent->doEvent(evt)) @@ -728,7 +728,7 @@ SkView* SkView::sendEventToParents(const SkEvent& evt) SkView* SkView::sendQueryToParents(SkEvent* evt) { SkView* parent = fParent; - + while (parent) { if (parent->doQuery(evt)) { return parent; @@ -747,7 +747,7 @@ SkView::F2BIter::F2BIter(const SkView* parent) fChild = fFirstChild ? fFirstChild->fPrevSibling : NULL; } -SkView* SkView::F2BIter::next() +SkView* SkView::F2BIter::next() { SkView* curr = fChild; @@ -767,7 +767,7 @@ SkView::B2FIter::B2FIter(const SkView* parent) fChild = fFirstChild; } -SkView* SkView::B2FIter::next() +SkView* SkView::B2FIter::next() { SkView* curr = fChild; @@ -810,9 +810,9 @@ static void dumpview(const SkView* view, int level, bool recurse) if (recurse) { - SkView::B2FIter iter(view); - SkView* child; - bool noChildren = true; + SkView::B2FIter iter(view); + SkView* child; + bool noChildren = true; while ((child = iter.next()) != NULL) { diff --git a/src/views/SkViewInflate.cpp b/src/views/SkViewInflate.cpp index 184e54021a..4d7de0483c 100644 --- a/src/views/SkViewInflate.cpp +++ b/src/views/SkViewInflate.cpp @@ -19,128 +19,128 @@ SkViewInflate::~SkViewInflate() void SkViewInflate::rInflate(const SkDOM& dom, const SkDOM::Node* node, SkView* parent) { - const char* str = dom.findAttr(node, "id"); - if (str) - fIDs.set(str, parent); - - const SkDOM::Node* child = dom.getFirstChild(node); - while (child) - { - SkView* view = this->createView(dom, child); - if (view) - { - this->rInflate(dom, child, view); - parent->attachChildToFront(view)->unref(); - } - else - { - const char* name = dom.getName(child); - const char* target; - - if (!strcmp(name, "listenTo") && (target = dom.findAttr(child, "target")) != NULL) - this->addIDStr(&fListenTo, parent, target); - - if (!strcmp(name, "broadcastTo") && (target = dom.findAttr(child, "target")) != NULL) - this->addIDStr(&fBroadcastTo, parent, target); - } - child = dom.getNextSibling(child); - } - - parent->setVisibleP(true); - this->inflateView(parent, dom, node); + const char* str = dom.findAttr(node, "id"); + if (str) + fIDs.set(str, parent); + + const SkDOM::Node* child = dom.getFirstChild(node); + while (child) + { + SkView* view = this->createView(dom, child); + if (view) + { + this->rInflate(dom, child, view); + parent->attachChildToFront(view)->unref(); + } + else + { + const char* name = dom.getName(child); + const char* target; + + if (!strcmp(name, "listenTo") && (target = dom.findAttr(child, "target")) != NULL) + this->addIDStr(&fListenTo, parent, target); + + if (!strcmp(name, "broadcastTo") && (target = dom.findAttr(child, "target")) != NULL) + this->addIDStr(&fBroadcastTo, parent, target); + } + child = dom.getNextSibling(child); + } + + parent->setVisibleP(true); + this->inflateView(parent, dom, node); } void SkViewInflate::inflateView(SkView* view, const SkDOM& dom, const SkDOM::Node* node) { - // called after all of view's children have been instantiated. - // this may be overridden by a subclass, to load in layout or other helpers - // they should call through to us (INHERITED) before or after their patch - view->inflate(dom, node); + // called after all of view's children have been instantiated. + // this may be overridden by a subclass, to load in layout or other helpers + // they should call through to us (INHERITED) before or after their patch + view->inflate(dom, node); } SkView* SkViewInflate::inflate(const SkDOM& dom, const SkDOM::Node* node, SkView* root) { - fIDs.reset(); - - if (root == NULL) - { - root = this->createView(dom, node); - if (root == NULL) - { - printf("createView returned NULL on <%s>\n", dom.getName(node)); - return NULL; - } - } - this->rInflate(dom, node, root); - - // resolve listeners and broadcasters - { - SkView* target; - const IDStr* iter = fListenTo.begin(); - const IDStr* stop = fListenTo.end(); - for (; iter < stop; iter++) - { - if (fIDs.find(iter->fStr, &target)) - target->addListenerID(iter->fView->getSinkID()); - } - - iter = fBroadcastTo.begin(); - stop = fBroadcastTo.end(); - for (; iter < stop; iter++) - { - if (fIDs.find(iter->fStr, &target)) - iter->fView->addListenerID(target->getSinkID()); - } - } - - // now that the tree is built, give everyone a shot at the ID dict - root->postInflate(fIDs); - return root; + fIDs.reset(); + + if (root == NULL) + { + root = this->createView(dom, node); + if (root == NULL) + { + printf("createView returned NULL on <%s>\n", dom.getName(node)); + return NULL; + } + } + this->rInflate(dom, node, root); + + // resolve listeners and broadcasters + { + SkView* target; + const IDStr* iter = fListenTo.begin(); + const IDStr* stop = fListenTo.end(); + for (; iter < stop; iter++) + { + if (fIDs.find(iter->fStr, &target)) + target->addListenerID(iter->fView->getSinkID()); + } + + iter = fBroadcastTo.begin(); + stop = fBroadcastTo.end(); + for (; iter < stop; iter++) + { + if (fIDs.find(iter->fStr, &target)) + iter->fView->addListenerID(target->getSinkID()); + } + } + + // now that the tree is built, give everyone a shot at the ID dict + root->postInflate(fIDs); + return root; } SkView* SkViewInflate::inflate(const char xml[], size_t len, SkView* root) { - SkDOM dom; - const SkDOM::Node* node = dom.build(xml, len); + SkDOM dom; + const SkDOM::Node* node = dom.build(xml, len); - return node ? this->inflate(dom, node, root) : NULL; + return node ? this->inflate(dom, node, root) : NULL; } SkView* SkViewInflate::findViewByID(const char id[]) const { - SkASSERT(id); - SkView* view; - return fIDs.find(id, &view) ? view : NULL; + SkASSERT(id); + SkView* view; + return fIDs.find(id, &view) ? view : NULL; } SkView* SkViewInflate::createView(const SkDOM& dom, const SkDOM::Node* node) { - if (!strcmp(dom.getName(node), "view")) - return new SkView; - return NULL; + if (!strcmp(dom.getName(node), "view")) + return new SkView; + return NULL; } void SkViewInflate::addIDStr(SkTDArray<IDStr>* list, SkView* view, const char* str) { - size_t len = strlen(str) + 1; - IDStr* pair = list->append(); - pair->fView = view; - pair->fStr = (char*)fStrings.alloc(len, SkChunkAlloc::kThrow_AllocFailType); - memcpy(pair->fStr, str, len); + size_t len = strlen(str) + 1; + IDStr* pair = list->append(); + pair->fView = view; + pair->fStr = (char*)fStrings.alloc(len, SkChunkAlloc::kThrow_AllocFailType); + memcpy(pair->fStr, str, len); } #ifdef SK_DEBUG void SkViewInflate::dump() const { - const IDStr* iter = fListenTo.begin(); - const IDStr* stop = fListenTo.end(); - for (; iter < stop; iter++) - SkDebugf("inflate: listenTo(\"%s\")\n", iter->fStr); - - iter = fBroadcastTo.begin(); - stop = fBroadcastTo.end(); - for (; iter < stop; iter++) - SkDebugf("inflate: broadcastFrom(\"%s\")\n", iter->fStr); + const IDStr* iter = fListenTo.begin(); + const IDStr* stop = fListenTo.end(); + for (; iter < stop; iter++) + SkDebugf("inflate: listenTo(\"%s\")\n", iter->fStr); + + iter = fBroadcastTo.begin(); + stop = fBroadcastTo.end(); + for (; iter < stop; iter++) + SkDebugf("inflate: broadcastFrom(\"%s\")\n", iter->fStr); } #endif diff --git a/src/views/SkViewPriv.cpp b/src/views/SkViewPriv.cpp index ad15f3fdb4..ba40c1e360 100644 --- a/src/views/SkViewPriv.cpp +++ b/src/views/SkViewPriv.cpp @@ -11,94 +11,94 @@ void SkView::Artist::draw(SkView* view, SkCanvas* canvas) { - SkASSERT(view && canvas); - this->onDraw(view, canvas); + SkASSERT(view && canvas); + this->onDraw(view, canvas); } void SkView::Artist::inflate(const SkDOM& dom, const SkDOM::Node* node) { - SkASSERT(&dom && node); - this->onInflate(dom, node); + SkASSERT(&dom && node); + this->onInflate(dom, node); } void SkView::Artist::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - // subclass should override this as needed + // subclass should override this as needed } SkView::Artist* SkView::getArtist() const { - Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); - SkASSERT(rec == NULL || rec->fArtist != NULL); + Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); + SkASSERT(rec == NULL || rec->fArtist != NULL); - return rec ? rec->fArtist : NULL; + return rec ? rec->fArtist : NULL; } SkView::Artist* SkView::setArtist(Artist* obj) { - if (obj == NULL) - { - this->removeTagList(kViewArtist_SkTagList); - } - else // add/replace - { - Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); - - if (rec) - SkRefCnt_SafeAssign(rec->fArtist, obj); - else - this->addTagList(new Artist_SkTagList(obj)); - } - return obj; + if (obj == NULL) + { + this->removeTagList(kViewArtist_SkTagList); + } + else // add/replace + { + Artist_SkTagList* rec = (Artist_SkTagList*)this->findTagList(kViewArtist_SkTagList); + + if (rec) + SkRefCnt_SafeAssign(rec->fArtist, obj); + else + this->addTagList(new Artist_SkTagList(obj)); + } + return obj; } //////////////////////////////////////////////////////////////////////////////// void SkView::Layout::layoutChildren(SkView* parent) { - SkASSERT(parent); - if (parent->width() > 0 && parent->height() > 0) - this->onLayoutChildren(parent); + SkASSERT(parent); + if (parent->width() > 0 && parent->height() > 0) + this->onLayoutChildren(parent); } void SkView::Layout::inflate(const SkDOM& dom, const SkDOM::Node* node) { - SkASSERT(&dom && node); - this->onInflate(dom, node); + SkASSERT(&dom && node); + this->onInflate(dom, node); } void SkView::Layout::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - // subclass should override this as needed + // subclass should override this as needed } SkView::Layout* SkView::getLayout() const { - Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); - SkASSERT(rec == NULL || rec->fLayout != NULL); + Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); + SkASSERT(rec == NULL || rec->fLayout != NULL); - return rec ? rec->fLayout : NULL; + return rec ? rec->fLayout : NULL; } SkView::Layout* SkView::setLayout(Layout* obj, bool invokeLayoutNow) { - if (obj == NULL) - { - this->removeTagList(kViewLayout_SkTagList); - } - else // add/replace - { - Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); - - if (rec) - SkRefCnt_SafeAssign(rec->fLayout, obj); - else - this->addTagList(new Layout_SkTagList(obj)); - } - - if (invokeLayoutNow) - this->invokeLayout(); - - return obj; + if (obj == NULL) + { + this->removeTagList(kViewLayout_SkTagList); + } + else // add/replace + { + Layout_SkTagList* rec = (Layout_SkTagList*)this->findTagList(kViewLayout_SkTagList); + + if (rec) + SkRefCnt_SafeAssign(rec->fLayout, obj); + else + this->addTagList(new Layout_SkTagList(obj)); + } + + if (invokeLayoutNow) + this->invokeLayout(); + + return obj; } diff --git a/src/views/SkViewPriv.h b/src/views/SkViewPriv.h index d8cf966ce9..8a9c0b7e9a 100644 --- a/src/views/SkViewPriv.h +++ b/src/views/SkViewPriv.h @@ -12,33 +12,33 @@ #include "SkTagList.h" struct Layout_SkTagList : SkTagList { - SkView::Layout* fLayout; - - Layout_SkTagList(SkView::Layout* layout) - : SkTagList(kViewLayout_SkTagList), fLayout(layout) - { - SkASSERT(layout); - layout->ref(); - } - virtual ~Layout_SkTagList() - { - fLayout->unref(); - } + SkView::Layout* fLayout; + + Layout_SkTagList(SkView::Layout* layout) + : SkTagList(kViewLayout_SkTagList), fLayout(layout) + { + SkASSERT(layout); + layout->ref(); + } + virtual ~Layout_SkTagList() + { + fLayout->unref(); + } }; struct Artist_SkTagList : SkTagList { - SkView::Artist* fArtist; - - Artist_SkTagList(SkView::Artist* artist) - : SkTagList(kViewArtist_SkTagList), fArtist(artist) - { - SkASSERT(artist); - artist->ref(); - } - virtual ~Artist_SkTagList() - { - fArtist->unref(); - } + SkView::Artist* fArtist; + + Artist_SkTagList(SkView::Artist* artist) + : SkTagList(kViewArtist_SkTagList), fArtist(artist) + { + SkASSERT(artist); + artist->ref(); + } + virtual ~Artist_SkTagList() + { + fArtist->unref(); + } }; #endif diff --git a/src/views/SkWidget.cpp b/src/views/SkWidget.cpp index 104429da57..e7de522107 100644 --- a/src/views/SkWidget.cpp +++ b/src/views/SkWidget.cpp @@ -22,7 +22,7 @@ SkWidgetView::~SkWidgetView() const char* SkWidgetView::GetEventType() { - return "SkWidgetView"; + return "SkWidgetView"; } ///////////////////////////////////////////////////////////////////////////// @@ -30,300 +30,300 @@ const char* SkWidgetView::GetEventType() class SkTextView::Interp { public: - Interp(const SkString& old, SkMSec now, SkMSec dur, AnimaDir dir) : fOldText(old), fInterp(1, 2) - { - SkScalar x = 0; - fInterp.setKeyFrame(0, now, &x, 0); - x = SK_Scalar1; - if (dir == kBackward_AnimDir) - x = -x; - fInterp.setKeyFrame(1, now + dur, &x); - } - bool draw(SkCanvas* canvas, const SkString& newText, SkScalar x, SkScalar y, SkPaint& paint) - { - SkScalar scale; - - if (fInterp.timeToValues(SkTime::GetMSecs(), &scale) == SkInterpolator::kFreezeEnd_Result) - { - canvas->drawText(newText.c_str(), newText.size(), x, y, paint); - return false; - } - else - { - U8 alpha = paint.getAlpha(); - SkScalar above, below; - (void)paint.measureText(NULL, 0, &above, &below); - SkScalar height = below - above; - SkScalar dy = SkScalarMul(height, scale); - if (scale < 0) - height = -height; - - // draw the old - paint.setAlpha((U8)SkScalarMul(alpha, SK_Scalar1 - SkScalarAbs(scale))); - canvas->drawText(fOldText.c_str(), fOldText.size(), x, y - dy, paint); - // draw the new - paint.setAlpha((U8)SkScalarMul(alpha, SkScalarAbs(scale))); - canvas->drawText(newText.c_str(), newText.size(), x, y + height - dy, paint); - // restore the paint - paint.setAlpha(alpha); - return true; - } - } + Interp(const SkString& old, SkMSec now, SkMSec dur, AnimaDir dir) : fOldText(old), fInterp(1, 2) + { + SkScalar x = 0; + fInterp.setKeyFrame(0, now, &x, 0); + x = SK_Scalar1; + if (dir == kBackward_AnimDir) + x = -x; + fInterp.setKeyFrame(1, now + dur, &x); + } + bool draw(SkCanvas* canvas, const SkString& newText, SkScalar x, SkScalar y, SkPaint& paint) + { + SkScalar scale; + + if (fInterp.timeToValues(SkTime::GetMSecs(), &scale) == SkInterpolator::kFreezeEnd_Result) + { + canvas->drawText(newText.c_str(), newText.size(), x, y, paint); + return false; + } + else + { + U8 alpha = paint.getAlpha(); + SkScalar above, below; + (void)paint.measureText(NULL, 0, &above, &below); + SkScalar height = below - above; + SkScalar dy = SkScalarMul(height, scale); + if (scale < 0) + height = -height; + + // draw the old + paint.setAlpha((U8)SkScalarMul(alpha, SK_Scalar1 - SkScalarAbs(scale))); + canvas->drawText(fOldText.c_str(), fOldText.size(), x, y - dy, paint); + // draw the new + paint.setAlpha((U8)SkScalarMul(alpha, SkScalarAbs(scale))); + canvas->drawText(newText.c_str(), newText.size(), x, y + height - dy, paint); + // restore the paint + paint.setAlpha(alpha); + return true; + } + } private: - SkString fOldText; - SkInterpolator fInterp; + SkString fOldText; + SkInterpolator fInterp; }; SkTextView::SkTextView(U32 flags) : SkView(flags), fInterp(NULL), fDoInterp(false) { - fMargin.set(0, 0); + fMargin.set(0, 0); } SkTextView::~SkTextView() { - delete fInterp; + delete fInterp; } void SkTextView::getText(SkString* str) const { - if (str) - str->set(fText); + if (str) + str->set(fText); } void SkTextView::setText(const char text[], AnimaDir dir) { - if (!fText.equals(text)) - { - SkString tmp(text); - this->privSetText(tmp, dir); - } + if (!fText.equals(text)) + { + SkString tmp(text); + this->privSetText(tmp, dir); + } } void SkTextView::setText(const char text[], size_t len, AnimaDir dir) { - if (!fText.equals(text)) - { - SkString tmp(text, len); - this->privSetText(tmp, dir); - } + if (!fText.equals(text)) + { + SkString tmp(text, len); + this->privSetText(tmp, dir); + } } void SkTextView::setText(const SkString& src, AnimaDir dir) { - if (fText != src) - this->privSetText(src, dir); + if (fText != src) + this->privSetText(src, dir); } void SkTextView::privSetText(const SkString& src, AnimaDir dir) { - SkASSERT(fText != src); - - if (fDoInterp) - { - if (fInterp) - delete fInterp; - fInterp = new Interp(fText, SkTime::GetMSecs(), 500, dir); - } - fText = src; - this->inval(NULL); + SkASSERT(fText != src); + + if (fDoInterp) + { + if (fInterp) + delete fInterp; + fInterp = new Interp(fText, SkTime::GetMSecs(), 500, dir); + } + fText = src; + this->inval(NULL); } ///////////////////////////////////////////////////////////////// void SkTextView::getMargin(SkPoint* margin) const { - if (margin) - *margin = fMargin; + if (margin) + *margin = fMargin; } void SkTextView::setMargin(const SkPoint& margin) { - if (fMargin != margin) - { - fMargin = margin; - this->inval(NULL); - } + if (fMargin != margin) + { + fMargin = margin; + this->inval(NULL); + } } void SkTextView::onDraw(SkCanvas* canvas) { - this->INHERITED::onDraw(canvas); - - if (fText.size() == 0) - return; - - SkPaint::Align align = fPaint.getTextAlign(); - SkScalar x, y; - - switch (align) { - case SkPaint::kLeft_Align: - x = fMargin.fX; - break; - case SkPaint::kCenter_Align: - x = SkScalarHalf(this->width()); - break; - default: - SkASSERT(align == SkPaint::kRight_Align); - x = this->width() - fMargin.fX; - break; - } - - fPaint.measureText(NULL, 0, &y, NULL); - y = fMargin.fY - y; - - if (fInterp) - { - if (fInterp->draw(canvas, fText, x, y, fPaint)) - this->inval(NULL); - else - { - delete fInterp; - fInterp = NULL; - } - } - else - canvas->drawText(fText.c_str(), fText.size(), x, y, fPaint); + this->INHERITED::onDraw(canvas); + + if (fText.size() == 0) + return; + + SkPaint::Align align = fPaint.getTextAlign(); + SkScalar x, y; + + switch (align) { + case SkPaint::kLeft_Align: + x = fMargin.fX; + break; + case SkPaint::kCenter_Align: + x = SkScalarHalf(this->width()); + break; + default: + SkASSERT(align == SkPaint::kRight_Align); + x = this->width() - fMargin.fX; + break; + } + + fPaint.measureText(NULL, 0, &y, NULL); + y = fMargin.fY - y; + + if (fInterp) + { + if (fInterp->draw(canvas, fText, x, y, fPaint)) + this->inval(NULL); + else + { + delete fInterp; + fInterp = NULL; + } + } + else + canvas->drawText(fText.c_str(), fText.size(), x, y, fPaint); } ////////////////////////////////////////////////////////////////////////////////////// void SkTextView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); - const char* text = dom.findAttr(node, "text"); - if (text) - this->setText(text); + const char* text = dom.findAttr(node, "text"); + if (text) + this->setText(text); - SkPoint margin; - if (dom.findScalars(node, "margin", (SkScalar*)&margin, 2)) - this->setMargin(margin); - (void)dom.findBool(node, "do-interp", &fDoInterp); + SkPoint margin; + if (dom.findScalars(node, "margin", (SkScalar*)&margin, 2)) + this->setMargin(margin); + (void)dom.findBool(node, "do-interp", &fDoInterp); - SkPaint_Inflate(&fPaint, dom, node); + SkPaint_Inflate(&fPaint, dom, node); } ////////////////////////////////////////////////////////////////////////////////////// SkSliderView::SkSliderView(U32 flags) : SkWidgetView(flags) { - fValue = 0; - fMax = 0; + fValue = 0; + fMax = 0; } static U16 actual_value(U16CPU value, U16CPU max) { - return SkToU16(SkMax32(0, SkMin32(value, max))); + return SkToU16(SkMax32(0, SkMin32(value, max))); } void SkSliderView::setMax(U16CPU max) { - if (fMax != max) - { - fMax = SkToU16(max); - if (fValue > 0) - this->inval(NULL); - } + if (fMax != max) + { + fMax = SkToU16(max); + if (fValue > 0) + this->inval(NULL); + } } void SkSliderView::setValue(U16CPU value) { - if (fValue != value) - { - U16 prev = actual_value(fValue, fMax); - U16 next = actual_value(value, fMax); - - fValue = SkToU16(value); - if (prev != next) - { - this->inval(NULL); - - if (this->hasListeners()) - { - SkEvent evt; - - evt.setType(SkWidgetView::GetEventType()); - evt.setFast32(this->getSinkID()); - evt.setS32("sliderValue", next); - this->postToListeners(evt); - } - } - } + if (fValue != value) + { + U16 prev = actual_value(fValue, fMax); + U16 next = actual_value(value, fMax); + + fValue = SkToU16(value); + if (prev != next) + { + this->inval(NULL); + + if (this->hasListeners()) + { + SkEvent evt; + + evt.setType(SkWidgetView::GetEventType()); + evt.setFast32(this->getSinkID()); + evt.setS32("sliderValue", next); + this->postToListeners(evt); + } + } + } } #include "SkGradientShader.h" static void setgrad(SkPaint* paint, const SkRect& r) { - SkPoint pts[2]; - SkColor colors[2]; + SkPoint pts[2]; + SkColor colors[2]; #if 0 - pts[0].set(r.fLeft, r.fTop); - pts[1].set(r.fLeft + r.height(), r.fBottom); + pts[0].set(r.fLeft, r.fTop); + pts[1].set(r.fLeft + r.height(), r.fBottom); #else - pts[0].set(r.fRight, r.fBottom); - pts[1].set(r.fRight - r.height(), r.fTop); + pts[0].set(r.fRight, r.fBottom); + pts[1].set(r.fRight - r.height(), r.fTop); #endif - colors[0] = SK_ColorBLUE; - colors[1] = SK_ColorWHITE; + colors[0] = SK_ColorBLUE; + colors[1] = SK_ColorWHITE; - paint->setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kMirror_TileMode))->unref(); + paint->setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kMirror_TileMode))->unref(); } void SkSliderView::onDraw(SkCanvas* canvas) { - this->INHERITED::onDraw(canvas); + this->INHERITED::onDraw(canvas); - U16CPU value = SkMax32(0, SkMin32(fValue, fMax)); + U16CPU value = SkMax32(0, SkMin32(fValue, fMax)); - SkRect r; - SkPaint p; + SkRect r; + SkPaint p; - r.set(0, 0, this->width(), this->height()); + r.set(0, 0, this->width(), this->height()); - p.setAntiAliasOn(true); - p.setStyle(SkPaint::kStroke_Style); - p.setStrokeWidth(SK_Scalar1); - r.inset(SK_Scalar1/2, SK_Scalar1/2); - canvas->drawRect(r, p); + p.setAntiAliasOn(true); + p.setStyle(SkPaint::kStroke_Style); + p.setStrokeWidth(SK_Scalar1); + r.inset(SK_Scalar1/2, SK_Scalar1/2); + canvas->drawRect(r, p); - if (fMax) - { - SkFixed percent = SkFixedDiv(value, fMax); - - r.inset(SK_Scalar1/2, SK_Scalar1/2); - r.fRight = r.fLeft + SkScalarMul(r.width(), SkFixedToScalar(percent)); - p.setStyle(SkPaint::kFill_Style); - setgrad(&p, r); - canvas->drawRect(r, p); - } + if (fMax) + { + SkFixed percent = SkFixedDiv(value, fMax); + + r.inset(SK_Scalar1/2, SK_Scalar1/2); + r.fRight = r.fLeft + SkScalarMul(r.width(), SkFixedToScalar(percent)); + p.setStyle(SkPaint::kFill_Style); + setgrad(&p, r); + canvas->drawRect(r, p); + } #if 0 - r.set(0, 0, this->width(), this->height()); - r.inset(SK_Scalar1, SK_Scalar1); - r.inset(r.width()/2, 0); - p.setColor(SK_ColorBLACK); - canvas->drawLine(*(SkPoint*)&r.fLeft, *(SkPoint*)&r.fRight, p); + r.set(0, 0, this->width(), this->height()); + r.inset(SK_Scalar1, SK_Scalar1); + r.inset(r.width()/2, 0); + p.setColor(SK_ColorBLACK); + canvas->drawLine(*(SkPoint*)&r.fLeft, *(SkPoint*)&r.fRight, p); #endif } SkView::Click* SkSliderView::onFindClickHandler(SkScalar x, SkScalar y) { - return new Click(this); + return new Click(this); } bool SkSliderView::onClick(Click* click) { - if (fMax) - { - SkScalar percent = SkScalarDiv(click->fCurr.fX + SK_Scalar1, this->width() - SK_Scalar1*2); - percent = SkMaxScalar(0, SkMinScalar(percent, SK_Scalar1)); - this->setValue(SkScalarRound(percent * fMax)); - return true; - } - return false; + if (fMax) + { + SkScalar percent = SkScalarDiv(click->fCurr.fX + SK_Scalar1, this->width() - SK_Scalar1*2); + percent = SkMaxScalar(0, SkMinScalar(percent, SK_Scalar1)); + this->setValue(SkScalarRound(percent * fMax)); + return true; + } + return false; } #endif diff --git a/src/views/SkWidgets.cpp b/src/views/SkWidgets.cpp index 69d755bd8b..1693a31239 100644 --- a/src/views/SkWidgets.cpp +++ b/src/views/SkWidgets.cpp @@ -15,14 +15,14 @@ #if 0 #ifdef SK_DEBUG - static void assert_no_attr(const SkDOM& dom, const SkDOM::Node* node, const char attr[]) - { - const char* value = dom.findAttr(node, attr); - if (value) - SkDebugf("unknown attribute %s=\"%s\"\n", attr, value); - } + static void assert_no_attr(const SkDOM& dom, const SkDOM::Node* node, const char attr[]) + { + const char* value = dom.findAttr(node, attr); + if (value) + SkDebugf("unknown attribute %s=\"%s\"\n", attr, value); + } #else - #define assert_no_attr(dom, node, attr) + #define assert_no_attr(dom, node, attr) #endif #include "SkAnimator.h" @@ -31,56 +31,56 @@ /////////////////////////////////////////////////////////////////////////////// enum SkinType { - kPushButton_SkinType, - kStaticText_SkinType, + kPushButton_SkinType, + kStaticText_SkinType, - kSkinTypeCount + kSkinTypeCount }; struct SkinSuite { - SkinSuite(); - ~SkinSuite() - { - for (int i = 0; i < kSkinTypeCount; i++) - delete fAnimators[i]; - } + SkinSuite(); + ~SkinSuite() + { + for (int i = 0; i < kSkinTypeCount; i++) + delete fAnimators[i]; + } - SkAnimator* get(SkinType); + SkAnimator* get(SkinType); private: - SkAnimator* fAnimators[kSkinTypeCount]; + SkAnimator* fAnimators[kSkinTypeCount]; }; SkinSuite::SkinSuite() { - static const char kSkinPath[] = "skins/"; + static const char kSkinPath[] = "skins/"; - static const char* gSkinNames[] = { - "pushbutton_skin.xml", - "statictext_skin.xml" - }; + static const char* gSkinNames[] = { + "pushbutton_skin.xml", + "statictext_skin.xml" + }; - for (unsigned i = 0; i < SK_ARRAY_COUNT(gSkinNames); i++) - { - size_t len = strlen(gSkinNames[i]); - SkString path(sizeof(kSkinPath) - 1 + len); + for (unsigned i = 0; i < SK_ARRAY_COUNT(gSkinNames); i++) + { + size_t len = strlen(gSkinNames[i]); + SkString path(sizeof(kSkinPath) - 1 + len); - memcpy(path.writable_str(), kSkinPath, sizeof(kSkinPath) - 1); - memcpy(path.writable_str() + sizeof(kSkinPath) - 1, gSkinNames[i], len); + memcpy(path.writable_str(), kSkinPath, sizeof(kSkinPath) - 1); + memcpy(path.writable_str() + sizeof(kSkinPath) - 1, gSkinNames[i], len); - fAnimators[i] = new SkAnimator; - if (!fAnimators[i]->decodeURI(path.c_str())) - { - delete fAnimators[i]; - fAnimators[i] = NULL; - } - } + fAnimators[i] = new SkAnimator; + if (!fAnimators[i]->decodeURI(path.c_str())) + { + delete fAnimators[i]; + fAnimators[i] = NULL; + } + } } SkAnimator* SkinSuite::get(SkinType st) { - SkASSERT((unsigned)st < kSkinTypeCount); - return fAnimators[st]; + SkASSERT((unsigned)st < kSkinTypeCount); + return fAnimators[st]; } static SkinSuite* gSkinSuite; @@ -88,11 +88,11 @@ static SkinSuite* gSkinSuite; static SkAnimator* get_skin_animator(SkinType st) { #if 0 - if (gSkinSuite == NULL) - gSkinSuite = new SkinSuite; - return gSkinSuite->get(st); + if (gSkinSuite == NULL) + gSkinSuite = new SkinSuite; + return gSkinSuite->get(st); #else - return NULL; + return NULL; #endif } @@ -104,134 +104,134 @@ void SkWidget::Init() void SkWidget::Term() { - delete gSkinSuite; + delete gSkinSuite; } void SkWidget::onEnabledChange() { - this->inval(NULL); + this->inval(NULL); } void SkWidget::postWidgetEvent() { - if (!fEvent.isType("") && this->hasListeners()) - { - this->prepareWidgetEvent(&fEvent); - this->postToListeners(fEvent); - } + if (!fEvent.isType("") && this->hasListeners()) + { + this->prepareWidgetEvent(&fEvent); + this->postToListeners(fEvent); + } } void SkWidget::prepareWidgetEvent(SkEvent*) { - // override in subclass to add any additional fields before posting + // override in subclass to add any additional fields before posting } void SkWidget::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); - if ((node = dom.getFirstChild(node, "event")) != NULL) - fEvent.inflate(dom, node); + if ((node = dom.getFirstChild(node, "event")) != NULL) + fEvent.inflate(dom, node); } /////////////////////////////////////////////////////////////////////////////// size_t SkHasLabelWidget::getLabel(SkString* str) const { - if (str) - *str = fLabel; - return fLabel.size(); + if (str) + *str = fLabel; + return fLabel.size(); } size_t SkHasLabelWidget::getLabel(char buffer[]) const { - if (buffer) - memcpy(buffer, fLabel.c_str(), fLabel.size()); - return fLabel.size(); + if (buffer) + memcpy(buffer, fLabel.c_str(), fLabel.size()); + return fLabel.size(); } void SkHasLabelWidget::setLabel(const SkString& str) { - this->setLabel(str.c_str(), str.size()); + this->setLabel(str.c_str(), str.size()); } void SkHasLabelWidget::setLabel(const char label[]) { - this->setLabel(label, strlen(label)); + this->setLabel(label, strlen(label)); } void SkHasLabelWidget::setLabel(const char label[], size_t len) { - if (!fLabel.equals(label, len)) - { - fLabel.set(label, len); - this->onLabelChange(); - } + if (!fLabel.equals(label, len)) + { + fLabel.set(label, len); + this->onLabelChange(); + } } void SkHasLabelWidget::onLabelChange() { - // override in subclass + // override in subclass } void SkHasLabelWidget::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); - const char* text = dom.findAttr(node, "label"); - if (text) - this->setLabel(text); + const char* text = dom.findAttr(node, "label"); + if (text) + this->setLabel(text); } ///////////////////////////////////////////////////////////////////////////////////// void SkButtonWidget::setButtonState(State state) { - if (fState != state) - { - fState = state; - this->onButtonStateChange(); - } + if (fState != state) + { + fState = state; + this->onButtonStateChange(); + } } void SkButtonWidget::onButtonStateChange() { - this->inval(NULL); + this->inval(NULL); } void SkButtonWidget::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); - int index; - if ((index = dom.findList(node, "buttonState", "off,on,unknown")) >= 0) - this->setButtonState((State)index); + int index; + if ((index = dom.findList(node, "buttonState", "off,on,unknown")) >= 0) + this->setButtonState((State)index); } ///////////////////////////////////////////////////////////////////////////////////// bool SkPushButtonWidget::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventType_Key) && evt.getFast32() == kOK_SkKey) - { - this->postWidgetEvent(); - return true; - } - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventType_Key) && evt.getFast32() == kOK_SkKey) + { + this->postWidgetEvent(); + return true; + } + return this->INHERITED::onEvent(evt); } static const char* computeAnimatorState(int enabled, int focused, SkButtonWidget::State state) { - if (!enabled) - return "disabled"; - if (state == SkButtonWidget::kOn_State) - { - SkASSERT(focused); - return "enabled-pressed"; - } - if (focused) - return "enabled-focused"; - return "enabled"; + if (!enabled) + return "disabled"; + if (state == SkButtonWidget::kOn_State) + { + SkASSERT(focused); + return "enabled-pressed"; + } + if (focused) + return "enabled-focused"; + return "enabled"; } #include "SkBlurMaskFilter.h" @@ -239,106 +239,106 @@ static const char* computeAnimatorState(int enabled, int focused, SkButtonWidget static void create_emboss(SkPaint* paint, SkScalar radius, bool focus, bool pressed) { - SkEmbossMaskFilter::Light light; + SkEmbossMaskFilter::Light light; - light.fDirection[0] = SK_Scalar1/2; - light.fDirection[1] = SK_Scalar1/2; - light.fDirection[2] = SK_Scalar1/3; - light.fAmbient = 0x48; - light.fSpecular = 0x80; + light.fDirection[0] = SK_Scalar1/2; + light.fDirection[1] = SK_Scalar1/2; + light.fDirection[2] = SK_Scalar1/3; + light.fAmbient = 0x48; + light.fSpecular = 0x80; - if (pressed) - { - light.fDirection[0] = -light.fDirection[0]; - light.fDirection[1] = -light.fDirection[1]; - } - if (focus) - light.fDirection[2] += SK_Scalar1/4; + if (pressed) + { + light.fDirection[0] = -light.fDirection[0]; + light.fDirection[1] = -light.fDirection[1]; + } + if (focus) + light.fDirection[2] += SK_Scalar1/4; - paint->setMaskFilter(new SkEmbossMaskFilter(light, radius))->unref(); + paint->setMaskFilter(new SkEmbossMaskFilter(light, radius))->unref(); } void SkPushButtonWidget::onDraw(SkCanvas* canvas) { - this->INHERITED::onDraw(canvas); + this->INHERITED::onDraw(canvas); - SkString label; - this->getLabel(&label); + SkString label; + this->getLabel(&label); - SkAnimator* anim = get_skin_animator(kPushButton_SkinType); + SkAnimator* anim = get_skin_animator(kPushButton_SkinType); - if (anim) - { - SkEvent evt("user"); + if (anim) + { + SkEvent evt("user"); - evt.setString("id", "prime"); - evt.setScalar("prime-width", this->width()); - evt.setScalar("prime-height", this->height()); - evt.setString("prime-text", label); - evt.setString("prime-state", computeAnimatorState(this->isEnabled(), this->hasFocus(), this->getButtonState())); + evt.setString("id", "prime"); + evt.setScalar("prime-width", this->width()); + evt.setScalar("prime-height", this->height()); + evt.setString("prime-text", label); + evt.setString("prime-state", computeAnimatorState(this->isEnabled(), this->hasFocus(), this->getButtonState())); - (void)anim->doUserEvent(evt); - SkPaint paint; - anim->draw(canvas, &paint, SkTime::GetMSecs()); - } - else - { - SkRect r; - SkPaint p; + (void)anim->doUserEvent(evt); + SkPaint paint; + anim->draw(canvas, &paint, SkTime::GetMSecs()); + } + else + { + SkRect r; + SkPaint p; - r.set(0, 0, this->width(), this->height()); - p.setAntiAliasOn(true); - p.setColor(SK_ColorBLUE); - create_emboss(&p, SkIntToScalar(12)/5, this->hasFocus(), this->getButtonState() == kOn_State); - canvas->drawRoundRect(r, SkScalarHalf(this->height()), SkScalarHalf(this->height()), p); - p.setMaskFilter(NULL); + r.set(0, 0, this->width(), this->height()); + p.setAntiAliasOn(true); + p.setColor(SK_ColorBLUE); + create_emboss(&p, SkIntToScalar(12)/5, this->hasFocus(), this->getButtonState() == kOn_State); + canvas->drawRoundRect(r, SkScalarHalf(this->height()), SkScalarHalf(this->height()), p); + p.setMaskFilter(NULL); - p.setTextAlign(SkPaint::kCenter_Align); + p.setTextAlign(SkPaint::kCenter_Align); - SkTextBox box; - box.setMode(SkTextBox::kOneLine_Mode); - box.setSpacingAlign(SkTextBox::kCenter_SpacingAlign); - box.setBox(0, 0, this->width(), this->height()); + SkTextBox box; + box.setMode(SkTextBox::kOneLine_Mode); + box.setSpacingAlign(SkTextBox::kCenter_SpacingAlign); + box.setBox(0, 0, this->width(), this->height()); -// if (this->getButtonState() == kOn_State) -// p.setColor(SK_ColorRED); -// else - p.setColor(SK_ColorWHITE); +// if (this->getButtonState() == kOn_State) +// p.setColor(SK_ColorRED); +// else + p.setColor(SK_ColorWHITE); - box.draw(canvas, label.c_str(), label.size(), p); - } + box.draw(canvas, label.c_str(), label.size(), p); + } } SkView::Click* SkPushButtonWidget::onFindClickHandler(SkScalar x, SkScalar y) { - this->acceptFocus(); - return new Click(this); + this->acceptFocus(); + return new Click(this); } bool SkPushButtonWidget::onClick(Click* click) { - SkRect r; - State state = kOff_State; + SkRect r; + State state = kOff_State; - this->getLocalBounds(&r); - if (r.contains(click->fCurr)) - { - if (click->fState == Click::kUp_State) - this->postWidgetEvent(); - else - state = kOn_State; - } - this->setButtonState(state); - return true; + this->getLocalBounds(&r); + if (r.contains(click->fCurr)) + { + if (click->fState == Click::kUp_State) + this->postWidgetEvent(); + else + state = kOn_State; + } + this->setButtonState(state); + return true; } ////////////////////////////////////////////////////////////////////////////////////////// SkStaticTextView::SkStaticTextView(U32 flags) : SkView(flags) { - fMargin.set(0, 0); - fMode = kFixedSize_Mode; - fSpacingAlign = SkTextBox::kStart_SpacingAlign; + fMargin.set(0, 0); + fMode = kFixedSize_Mode; + fSpacingAlign = SkTextBox::kStart_SpacingAlign; } SkStaticTextView::~SkStaticTextView() @@ -347,148 +347,148 @@ SkStaticTextView::~SkStaticTextView() void SkStaticTextView::computeSize() { - if (fMode == kAutoWidth_Mode) - { - SkScalar width = fPaint.measureText(fText.c_str(), fText.size(), NULL, NULL); - this->setWidth(width + fMargin.fX * 2); - } - else if (fMode == kAutoHeight_Mode) - { - SkScalar width = this->width() - fMargin.fX * 2; - int lines = width > 0 ? SkTextLineBreaker::CountLines(fText.c_str(), fText.size(), fPaint, width) : 0; + if (fMode == kAutoWidth_Mode) + { + SkScalar width = fPaint.measureText(fText.c_str(), fText.size(), NULL, NULL); + this->setWidth(width + fMargin.fX * 2); + } + else if (fMode == kAutoHeight_Mode) + { + SkScalar width = this->width() - fMargin.fX * 2; + int lines = width > 0 ? SkTextLineBreaker::CountLines(fText.c_str(), fText.size(), fPaint, width) : 0; - SkScalar before, after; - (void)fPaint.measureText(0, NULL, &before, &after); + SkScalar before, after; + (void)fPaint.measureText(0, NULL, &before, &after); - this->setHeight(lines * (after - before) + fMargin.fY * 2); - } + this->setHeight(lines * (after - before) + fMargin.fY * 2); + } } void SkStaticTextView::setMode(Mode mode) { - SkASSERT((unsigned)mode < kModeCount); + SkASSERT((unsigned)mode < kModeCount); - if (fMode != mode) - { - fMode = SkToU8(mode); - this->computeSize(); - } + if (fMode != mode) + { + fMode = SkToU8(mode); + this->computeSize(); + } } void SkStaticTextView::setSpacingAlign(SkTextBox::SpacingAlign align) { - fSpacingAlign = SkToU8(align); - this->inval(NULL); + fSpacingAlign = SkToU8(align); + this->inval(NULL); } void SkStaticTextView::getMargin(SkPoint* margin) const { - if (margin) - *margin = fMargin; + if (margin) + *margin = fMargin; } void SkStaticTextView::setMargin(SkScalar dx, SkScalar dy) { - if (fMargin.fX != dx || fMargin.fY != dy) - { - fMargin.set(dx, dy); - this->computeSize(); - this->inval(NULL); - } + if (fMargin.fX != dx || fMargin.fY != dy) + { + fMargin.set(dx, dy); + this->computeSize(); + this->inval(NULL); + } } size_t SkStaticTextView::getText(SkString* text) const { - if (text) - *text = fText; - return fText.size(); + if (text) + *text = fText; + return fText.size(); } size_t SkStaticTextView::getText(char text[]) const { - if (text) - memcpy(text, fText.c_str(), fText.size()); - return fText.size(); + if (text) + memcpy(text, fText.c_str(), fText.size()); + return fText.size(); } void SkStaticTextView::setText(const SkString& text) { - this->setText(text.c_str(), text.size()); + this->setText(text.c_str(), text.size()); } void SkStaticTextView::setText(const char text[]) { - this->setText(text, strlen(text)); + this->setText(text, strlen(text)); } void SkStaticTextView::setText(const char text[], size_t len) { - if (!fText.equals(text, len)) - { - fText.set(text, len); - this->computeSize(); - this->inval(NULL); - } + if (!fText.equals(text, len)) + { + fText.set(text, len); + this->computeSize(); + this->inval(NULL); + } } void SkStaticTextView::getPaint(SkPaint* paint) const { - if (paint) - *paint = fPaint; + if (paint) + *paint = fPaint; } void SkStaticTextView::setPaint(const SkPaint& paint) { - if (fPaint != paint) - { - fPaint = paint; - this->computeSize(); - this->inval(NULL); - } + if (fPaint != paint) + { + fPaint = paint; + this->computeSize(); + this->inval(NULL); + } } void SkStaticTextView::onDraw(SkCanvas* canvas) { - this->INHERITED::onDraw(canvas); + this->INHERITED::onDraw(canvas); - if (fText.isEmpty()) - return; + if (fText.isEmpty()) + return; - SkTextBox box; + SkTextBox box; - box.setMode(fMode == kAutoWidth_Mode ? SkTextBox::kOneLine_Mode : SkTextBox::kLineBreak_Mode); - box.setSpacingAlign(this->getSpacingAlign()); - box.setBox(fMargin.fX, fMargin.fY, this->width() - fMargin.fX, this->height() - fMargin.fY); - box.draw(canvas, fText.c_str(), fText.size(), fPaint); + box.setMode(fMode == kAutoWidth_Mode ? SkTextBox::kOneLine_Mode : SkTextBox::kLineBreak_Mode); + box.setSpacingAlign(this->getSpacingAlign()); + box.setBox(fMargin.fX, fMargin.fY, this->width() - fMargin.fX, this->height() - fMargin.fY); + box.draw(canvas, fText.c_str(), fText.size(), fPaint); } void SkStaticTextView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); - int index; - if ((index = dom.findList(node, "mode", "fixed,auto-width,auto-height")) >= 0) - this->setMode((Mode)index); - else - assert_no_attr(dom, node, "mode"); + int index; + if ((index = dom.findList(node, "mode", "fixed,auto-width,auto-height")) >= 0) + this->setMode((Mode)index); + else + assert_no_attr(dom, node, "mode"); - if ((index = dom.findList(node, "spacing-align", "start,center,end")) >= 0) - this->setSpacingAlign((SkTextBox::SpacingAlign)index); - else - assert_no_attr(dom, node, "mode"); + if ((index = dom.findList(node, "spacing-align", "start,center,end")) >= 0) + this->setSpacingAlign((SkTextBox::SpacingAlign)index); + else + assert_no_attr(dom, node, "mode"); - SkScalar s[2]; - if (dom.findScalars(node, "margin", s, 2)) - this->setMargin(s[0], s[1]); - else - assert_no_attr(dom, node, "margin"); + SkScalar s[2]; + if (dom.findScalars(node, "margin", s, 2)) + this->setMargin(s[0], s[1]); + else + assert_no_attr(dom, node, "margin"); - const char* text = dom.findAttr(node, "text"); - if (text) - this->setText(text); + const char* text = dom.findAttr(node, "text"); + if (text) + this->setText(text); - if ((node = dom.getFirstChild(node, "paint")) != NULL) - SkPaint_Inflate(&fPaint, dom, node); + if ((node = dom.getFirstChild(node, "paint")) != NULL) + SkPaint_Inflate(&fPaint, dom, node); } ///////////////////////////////////////////////////////////////////////////////////////////////////// @@ -505,56 +505,56 @@ SkBitmapView::~SkBitmapView() bool SkBitmapView::getBitmap(SkBitmap* bitmap) const { - if (bitmap) - *bitmap = fBitmap; - return fBitmap.getConfig() != SkBitmap::kNo_Config; + if (bitmap) + *bitmap = fBitmap; + return fBitmap.getConfig() != SkBitmap::kNo_Config; } void SkBitmapView::setBitmap(const SkBitmap* bitmap, bool viewOwnsPixels) { - if (bitmap) - { - fBitmap = *bitmap; - fBitmap.setOwnsPixels(viewOwnsPixels); - } + if (bitmap) + { + fBitmap = *bitmap; + fBitmap.setOwnsPixels(viewOwnsPixels); + } } bool SkBitmapView::loadBitmapFromFile(const char path[]) { - SkBitmap bitmap; + SkBitmap bitmap; - if (SkImageDecoder::DecodeFile(path, &bitmap)) - { - this->setBitmap(&bitmap, true); - bitmap.setOwnsPixels(false); - return true; - } - return false; + if (SkImageDecoder::DecodeFile(path, &bitmap)) + { + this->setBitmap(&bitmap, true); + bitmap.setOwnsPixels(false); + return true; + } + return false; } void SkBitmapView::onDraw(SkCanvas* canvas) { - if (fBitmap.getConfig() != SkBitmap::kNo_Config && - fBitmap.width() && fBitmap.height()) - { - SkAutoCanvasRestore restore(canvas, true); - SkPaint p; + if (fBitmap.getConfig() != SkBitmap::kNo_Config && + fBitmap.width() && fBitmap.height()) + { + SkAutoCanvasRestore restore(canvas, true); + SkPaint p; - p.setFilterType(SkPaint::kBilinear_FilterType); - canvas->scale( this->width() / fBitmap.width(), - this->height() / fBitmap.height(), - 0, 0); - canvas->drawBitmap(fBitmap, 0, 0, p); - } + p.setFilterType(SkPaint::kBilinear_FilterType); + canvas->scale( this->width() / fBitmap.width(), + this->height() / fBitmap.height(), + 0, 0); + canvas->drawBitmap(fBitmap, 0, 0, p); + } } void SkBitmapView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); - const char* src = dom.findAttr(node, "src"); - if (src) - (void)this->loadBitmapFromFile(src); + const char* src = dom.findAttr(node, "src"); + if (src) + (void)this->loadBitmapFromFile(src); } #endif diff --git a/src/views/SkWindow.cpp b/src/views/SkWindow.cpp index c952a61b6d..85b3803c59 100644 --- a/src/views/SkWindow.cpp +++ b/src/views/SkWindow.cpp @@ -19,31 +19,31 @@ #include "SkBounder.h" class test_bounder : public SkBounder { public: - test_bounder(const SkBitmap& bm) : fCanvas(bm) {} + test_bounder(const SkBitmap& bm) : fCanvas(bm) {} protected: - virtual bool onIRect(const SkIRect& r) - { - SkRect rr; + virtual bool onIRect(const SkIRect& r) + { + SkRect rr; - rr.set(SkIntToScalar(r.fLeft), SkIntToScalar(r.fTop), - SkIntToScalar(r.fRight), SkIntToScalar(r.fBottom)); + rr.set(SkIntToScalar(r.fLeft), SkIntToScalar(r.fTop), + SkIntToScalar(r.fRight), SkIntToScalar(r.fBottom)); - SkPaint p; + SkPaint p; - p.setStyle(SkPaint::kStroke_Style); - p.setColor(SK_ColorYELLOW); + p.setStyle(SkPaint::kStroke_Style); + p.setColor(SK_ColorYELLOW); #if 0 - rr.inset(SK_ScalarHalf, SK_ScalarHalf); + rr.inset(SK_ScalarHalf, SK_ScalarHalf); #else - rr.inset(-SK_ScalarHalf, -SK_ScalarHalf); + rr.inset(-SK_ScalarHalf, -SK_ScalarHalf); #endif - fCanvas.drawRect(rr, p); - return true; - } + fCanvas.drawRect(rr, p); + return true; + } private: - SkCanvas fCanvas; + SkCanvas fCanvas; }; SkWindow::SkWindow() : fFocusView(NULL) @@ -87,39 +87,39 @@ void SkWindow::postConcat(const SkMatrix& matrix) { void SkWindow::setConfig(SkBitmap::Config config) { - this->resize(fBitmap.width(), fBitmap.height(), config); + this->resize(fBitmap.width(), fBitmap.height(), config); } void SkWindow::resize(int width, int height, SkBitmap::Config config) { - if (config == SkBitmap::kNo_Config) - config = fConfig; - - if (width != fBitmap.width() || height != fBitmap.height() || config != fConfig) - { - fConfig = config; - fBitmap.setConfig(config, width, height); - fBitmap.allocPixels(); + if (config == SkBitmap::kNo_Config) + config = fConfig; + + if (width != fBitmap.width() || height != fBitmap.height() || config != fConfig) + { + fConfig = config; + fBitmap.setConfig(config, width, height); + fBitmap.allocPixels(); fBitmap.setIsOpaque(true); - this->setSize(SkIntToScalar(width), SkIntToScalar(height)); - this->inval(NULL); - } + this->setSize(SkIntToScalar(width), SkIntToScalar(height)); + this->inval(NULL); + } } void SkWindow::eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) { - fBitmap.eraseARGB(a, r, g, b); + fBitmap.eraseARGB(a, r, g, b); } void SkWindow::eraseRGB(U8CPU r, U8CPU g, U8CPU b) { - fBitmap.eraseRGB(r, g, b); + fBitmap.eraseRGB(r, g, b); } bool SkWindow::handleInval(const SkRect* localR) { - SkIRect ir; + SkIRect ir; if (localR) { SkRect devR; @@ -131,13 +131,13 @@ bool SkWindow::handleInval(const SkRect* localR) devR.round(&ir); } else { ir.set(0, 0, - SkScalarRound(this->width()), - SkScalarRound(this->height())); + SkScalarRound(this->width()), + SkScalarRound(this->height())); } - fDirtyRgn.op(ir, SkRegion::kUnion_Op); + fDirtyRgn.op(ir, SkRegion::kUnion_Op); - this->onHandleInval(ir); - return true; + this->onHandleInval(ir); + return true; } void SkWindow::forceInvalAll() { @@ -147,9 +147,9 @@ void SkWindow::forceInvalAll() { } #if defined(SK_BUILD_FOR_WINCE) && defined(USE_GX_SCREEN) - #include <windows.h> - #include <gx.h> - extern GXDisplayProperties gDisplayProps; + #include <windows.h> + #include <gx.h> + extern GXDisplayProperties gDisplayProps; #endif #ifdef SK_SIMULATE_FAILED_MALLOC @@ -158,128 +158,128 @@ extern bool gEnableControlledThrow; bool SkWindow::update(SkIRect* updateArea, SkCanvas* canvas) { - if (!fDirtyRgn.isEmpty()) - { - SkBitmap bm = this->getBitmap(); + if (!fDirtyRgn.isEmpty()) + { + SkBitmap bm = this->getBitmap(); #if defined(SK_BUILD_FOR_WINCE) && defined(USE_GX_SCREEN) - char* buffer = (char*)GXBeginDraw(); - SkASSERT(buffer); + char* buffer = (char*)GXBeginDraw(); + SkASSERT(buffer); - RECT rect; - GetWindowRect((HWND)((SkOSWindow*)this)->getHWND(), &rect); - buffer += rect.top * gDisplayProps.cbyPitch + rect.left * gDisplayProps.cbxPitch; + RECT rect; + GetWindowRect((HWND)((SkOSWindow*)this)->getHWND(), &rect); + buffer += rect.top * gDisplayProps.cbyPitch + rect.left * gDisplayProps.cbxPitch; - bm.setPixels(buffer); + bm.setPixels(buffer); #endif - SkCanvas rasterCanvas; + SkCanvas rasterCanvas; if (NULL == canvas) { canvas = &rasterCanvas; } canvas->setBitmapDevice(bm); - canvas->clipRegion(fDirtyRgn); - if (updateArea) - *updateArea = fDirtyRgn.getBounds(); + canvas->clipRegion(fDirtyRgn); + if (updateArea) + *updateArea = fDirtyRgn.getBounds(); SkAutoCanvasRestore acr(canvas, true); canvas->concat(fMatrix); - // empty this now, so we can correctly record any inval calls that - // might be made during the draw call. - fDirtyRgn.setEmpty(); + // empty this now, so we can correctly record any inval calls that + // might be made during the draw call. + fDirtyRgn.setEmpty(); #ifdef TEST_BOUNDER - test_bounder b(bm); - canvas->setBounder(&b); + test_bounder b(bm); + canvas->setBounder(&b); #endif #ifdef SK_SIMULATE_FAILED_MALLOC - gEnableControlledThrow = true; + gEnableControlledThrow = true; #endif #ifdef SK_BUILD_FOR_WIN32 - //try { - this->draw(canvas); - //} - //catch (...) { - //} + //try { + this->draw(canvas); + //} + //catch (...) { + //} #else - this->draw(canvas); + this->draw(canvas); #endif #ifdef SK_SIMULATE_FAILED_MALLOC - gEnableControlledThrow = false; + gEnableControlledThrow = false; #endif #ifdef TEST_BOUNDER - canvas->setBounder(NULL); + canvas->setBounder(NULL); #endif #if defined(SK_BUILD_FOR_WINCE) && defined(USE_GX_SCREEN) - GXEndDraw(); + GXEndDraw(); #endif - return true; - } - return false; + return true; + } + return false; } bool SkWindow::handleChar(SkUnichar uni) { - if (this->onHandleChar(uni)) - return true; + if (this->onHandleChar(uni)) + return true; - SkView* focus = this->getFocusView(); - if (focus == NULL) - focus = this; + SkView* focus = this->getFocusView(); + if (focus == NULL) + focus = this; - SkEvent evt(SK_EventType_Unichar); - evt.setFast32(uni); - return focus->doEvent(evt); + SkEvent evt(SK_EventType_Unichar); + evt.setFast32(uni); + return focus->doEvent(evt); } bool SkWindow::handleKey(SkKey key) { - if (key == kNONE_SkKey) - return false; - - if (this->onHandleKey(key)) - return true; - - // send an event to the focus-view - { - SkView* focus = this->getFocusView(); - if (focus == NULL) - focus = this; - - SkEvent evt(SK_EventType_Key); - evt.setFast32(key); - if (focus->doEvent(evt)) - return true; - } - - if (key == kUp_SkKey || key == kDown_SkKey) - { - if (this->moveFocus(key == kUp_SkKey ? kPrev_FocusDirection : kNext_FocusDirection) == NULL) - this->onSetFocusView(NULL); - return true; - } - return false; + if (key == kNONE_SkKey) + return false; + + if (this->onHandleKey(key)) + return true; + + // send an event to the focus-view + { + SkView* focus = this->getFocusView(); + if (focus == NULL) + focus = this; + + SkEvent evt(SK_EventType_Key); + evt.setFast32(key); + if (focus->doEvent(evt)) + return true; + } + + if (key == kUp_SkKey || key == kDown_SkKey) + { + if (this->moveFocus(key == kUp_SkKey ? kPrev_FocusDirection : kNext_FocusDirection) == NULL) + this->onSetFocusView(NULL); + return true; + } + return false; } bool SkWindow::handleKeyUp(SkKey key) { if (key == kNONE_SkKey) return false; - + if (this->onHandleKeyUp(key)) return true; - + //send an event to the focus-view { SkView* focus = this->getFocusView(); if (focus == NULL) focus = this; - + //should this one be the same? SkEvent evt(SK_EventType_KeyUp); evt.setFast32(key); @@ -290,8 +290,8 @@ bool SkWindow::handleKeyUp(SkKey key) } void SkWindow::addMenu(SkOSMenu* menu) { - *fMenus.append() = menu; - this->onAddMenu(menu); + *fMenus.append() = menu; + this->onAddMenu(menu); } void SkWindow::setTitle(const char title[]) { @@ -306,36 +306,36 @@ void SkWindow::setTitle(const char title[]) { bool SkWindow::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventDelayInval)) - { - SkRegion::Iterator iter(fDirtyRgn); - - for (; !iter.done(); iter.next()) - this->onHandleInval(iter.rect()); - fWaitingOnInval = false; - return true; - } - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventDelayInval)) + { + SkRegion::Iterator iter(fDirtyRgn); + + for (; !iter.done(); iter.next()) + this->onHandleInval(iter.rect()); + fWaitingOnInval = false; + return true; + } + return this->INHERITED::onEvent(evt); } bool SkWindow::onGetFocusView(SkView** focus) const { - if (focus) - *focus = fFocusView; - return true; + if (focus) + *focus = fFocusView; + return true; } bool SkWindow::onSetFocusView(SkView* focus) { - if (fFocusView != focus) - { - if (fFocusView) - fFocusView->onFocusChange(false); - fFocusView = focus; - if (focus) - focus->onFocusChange(true); - } - return true; + if (fFocusView != focus) + { + if (fFocusView) + fFocusView->onFocusChange(false); + fFocusView = focus; + if (focus) + focus->onFocusChange(true); + } + return true; } ////////////////////////////////////////////////////////////////////// @@ -346,12 +346,12 @@ void SkWindow::onHandleInval(const SkIRect&) bool SkWindow::onHandleChar(SkUnichar) { - return false; + return false; } bool SkWindow::onHandleKey(SkKey key) { - return false; + return false; } bool SkWindow::onHandleKeyUp(SkKey key) @@ -365,7 +365,7 @@ bool SkWindow::handleClick(int x, int y, Click::State state, void *owner) { bool SkWindow::onDispatchClick(int x, int y, Click::State state, void* owner) { - bool handled = false; + bool handled = false; // First, attempt to find an existing click with this owner. int index = -1; @@ -376,7 +376,7 @@ bool SkWindow::onDispatchClick(int x, int y, Click::State state, } } - switch (state) { + switch (state) { case Click::kDown_State: { if (index != -1) { delete fClicks[index]; @@ -410,7 +410,7 @@ bool SkWindow::onDispatchClick(int x, int y, Click::State state, default: // Do nothing break; - } - return handled; + } + return handled; } diff --git a/src/views/animated/SkBorderView.cpp b/src/views/animated/SkBorderView.cpp index cc1c08bc79..3eff6056f9 100644 --- a/src/views/animated/SkBorderView.cpp +++ b/src/views/animated/SkBorderView.cpp @@ -17,80 +17,80 @@ SkBorderView::SkBorderView() : fLeft(SkIntToScalar(0)), fTop(SkIntToScalar(0)), fBottom(SkIntToScalar(0)) { - fAnim.setHostEventSink(this); - init_skin_anim(kBorder_SkinEnum, &fAnim); + fAnim.setHostEventSink(this); + init_skin_anim(kBorder_SkinEnum, &fAnim); } SkBorderView::~SkBorderView() { - + } void SkBorderView::setSkin(const char skin[]) { - init_skin_anim(skin, &fAnim); + init_skin_anim(skin, &fAnim); } /* virtual */ void SkBorderView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); } /*virtual*/ void SkBorderView::onSizeChange() { - this->INHERITED::onSizeChange(); - SkEvent evt("user"); - evt.setString("id", "setDim"); - evt.setScalar("dimX", this->width()); - evt.setScalar("dimY", this->height()); - fAnim.doUserEvent(evt); + this->INHERITED::onSizeChange(); + SkEvent evt("user"); + evt.setString("id", "setDim"); + evt.setScalar("dimX", this->width()); + evt.setScalar("dimY", this->height()); + fAnim.doUserEvent(evt); } /*virtual*/ void SkBorderView::onDraw(SkCanvas* canvas) { - SkPaint paint; - SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); - - if (diff == SkAnimator::kDifferent) - this->inval(NULL); - else if (diff == SkAnimator::kPartiallyDifferent) - { - SkRect bounds; - fAnim.getInvalBounds(&bounds); - this->inval(&bounds); - } + SkPaint paint; + SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); + + if (diff == SkAnimator::kDifferent) + this->inval(NULL); + else if (diff == SkAnimator::kPartiallyDifferent) + { + SkRect bounds; + fAnim.getInvalBounds(&bounds); + this->inval(&bounds); + } } /*virtual*/ bool SkBorderView::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventType_Inval)) - { - this->inval(NULL); - return true; - } - if (evt.isType("recommendDim")) - { - evt.findScalar("leftMargin", &fLeft); - evt.findScalar("rightMargin", &fRight); - evt.findScalar("topMargin", &fTop); - evt.findScalar("bottomMargin", &fBottom); - - //setup_views.cpp uses SkView::Layout instead of SkStackViewLayout - //but that gives me an error - SkStackViewLayout* layout; - fMargin.set(fLeft, fTop, fRight, fBottom); - if (this->getLayout()) - { - layout = (SkStackViewLayout*)this->getLayout(); - layout->setMargin(fMargin); - } - else - { - layout = new SkStackViewLayout; - layout->setMargin(fMargin); - this->setLayout(layout)->unref(); - } - this->invokeLayout(); - } - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventType_Inval)) + { + this->inval(NULL); + return true; + } + if (evt.isType("recommendDim")) + { + evt.findScalar("leftMargin", &fLeft); + evt.findScalar("rightMargin", &fRight); + evt.findScalar("topMargin", &fTop); + evt.findScalar("bottomMargin", &fBottom); + + //setup_views.cpp uses SkView::Layout instead of SkStackViewLayout + //but that gives me an error + SkStackViewLayout* layout; + fMargin.set(fLeft, fTop, fRight, fBottom); + if (this->getLayout()) + { + layout = (SkStackViewLayout*)this->getLayout(); + layout->setMargin(fMargin); + } + else + { + layout = new SkStackViewLayout; + layout->setMargin(fMargin); + this->setLayout(layout)->unref(); + } + this->invokeLayout(); + } + return this->INHERITED::onEvent(evt); } diff --git a/src/views/animated/SkImageView.cpp b/src/views/animated/SkImageView.cpp index 8924dd32fb..a75aa73d1b 100644 --- a/src/views/animated/SkImageView.cpp +++ b/src/views/animated/SkImageView.cpp @@ -16,288 +16,288 @@ SkImageView::SkImageView() { - fMatrix = NULL; - fScaleType = kMatrix_ScaleType; + fMatrix = NULL; + fScaleType = kMatrix_ScaleType; - fData.fAnim = NULL; // handles initializing the other union values - fDataIsAnim = true; - - fUriIsValid = false; // an empty string is not valid + fData.fAnim = NULL; // handles initializing the other union values + fDataIsAnim = true; + + fUriIsValid = false; // an empty string is not valid } SkImageView::~SkImageView() { - if (fMatrix) - sk_free(fMatrix); - - this->freeData(); + if (fMatrix) + sk_free(fMatrix); + + this->freeData(); } void SkImageView::getUri(SkString* uri) const { - if (uri) - *uri = fUri; + if (uri) + *uri = fUri; } void SkImageView::setUri(const char uri[]) { - if (!fUri.equals(uri)) - { - fUri.set(uri); - this->onUriChange(); - } + if (!fUri.equals(uri)) + { + fUri.set(uri); + this->onUriChange(); + } } void SkImageView::setUri(const SkString& uri) { - if (fUri != uri) - { - fUri = uri; - this->onUriChange(); - } + if (fUri != uri) + { + fUri = uri; + this->onUriChange(); + } } void SkImageView::setScaleType(ScaleType st) { - SkASSERT((unsigned)st <= kFitEnd_ScaleType); - - if ((ScaleType)fScaleType != st) - { - fScaleType = SkToU8(st); - if (fUriIsValid) - this->inval(NULL); - } + SkASSERT((unsigned)st <= kFitEnd_ScaleType); + + if ((ScaleType)fScaleType != st) + { + fScaleType = SkToU8(st); + if (fUriIsValid) + this->inval(NULL); + } } bool SkImageView::getImageMatrix(SkMatrix* matrix) const { - if (fMatrix) - { - SkASSERT(!fMatrix->isIdentity()); - if (matrix) - *matrix = *fMatrix; - return true; - } - else - { - if (matrix) - matrix->reset(); - return false; - } + if (fMatrix) + { + SkASSERT(!fMatrix->isIdentity()); + if (matrix) + *matrix = *fMatrix; + return true; + } + else + { + if (matrix) + matrix->reset(); + return false; + } } void SkImageView::setImageMatrix(const SkMatrix* matrix) { - bool changed = false; - - if (matrix && !matrix->isIdentity()) - { - if (fMatrix == NULL) - fMatrix = (SkMatrix*)sk_malloc_throw(sizeof(SkMatrix)); - *fMatrix = *matrix; - changed = true; - } - else // set us to identity - { - if (fMatrix) - { - SkASSERT(!fMatrix->isIdentity()); - sk_free(fMatrix); - fMatrix = NULL; - changed = true; - } - } - - // only redraw if we changed our matrix and we're not in scaleToFit mode - if (changed && this->getScaleType() == kMatrix_ScaleType && fUriIsValid) - this->inval(NULL); + bool changed = false; + + if (matrix && !matrix->isIdentity()) + { + if (fMatrix == NULL) + fMatrix = (SkMatrix*)sk_malloc_throw(sizeof(SkMatrix)); + *fMatrix = *matrix; + changed = true; + } + else // set us to identity + { + if (fMatrix) + { + SkASSERT(!fMatrix->isIdentity()); + sk_free(fMatrix); + fMatrix = NULL; + changed = true; + } + } + + // only redraw if we changed our matrix and we're not in scaleToFit mode + if (changed && this->getScaleType() == kMatrix_ScaleType && fUriIsValid) + this->inval(NULL); } /////////////////////////////////////////////////////////////////////////////////////////////// bool SkImageView::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventType_Inval)) - { - if (fUriIsValid) - this->inval(NULL); - return true; - } - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventType_Inval)) + { + if (fUriIsValid) + this->inval(NULL); + return true; + } + return this->INHERITED::onEvent(evt); } static inline SkMatrix::ScaleToFit scaleTypeToScaleToFit(SkImageView::ScaleType st) { - SkASSERT(st != SkImageView::kMatrix_ScaleType); - SkASSERT((unsigned)st <= SkImageView::kFitEnd_ScaleType); - - SkASSERT(SkImageView::kFitXY_ScaleType - 1 == SkMatrix::kFill_ScaleToFit); - SkASSERT(SkImageView::kFitStart_ScaleType - 1 == SkMatrix::kStart_ScaleToFit); - SkASSERT(SkImageView::kFitCenter_ScaleType - 1 == SkMatrix::kCenter_ScaleToFit); - SkASSERT(SkImageView::kFitEnd_ScaleType - 1 == SkMatrix::kEnd_ScaleToFit); - - return (SkMatrix::ScaleToFit)(st - 1); + SkASSERT(st != SkImageView::kMatrix_ScaleType); + SkASSERT((unsigned)st <= SkImageView::kFitEnd_ScaleType); + + SkASSERT(SkImageView::kFitXY_ScaleType - 1 == SkMatrix::kFill_ScaleToFit); + SkASSERT(SkImageView::kFitStart_ScaleType - 1 == SkMatrix::kStart_ScaleToFit); + SkASSERT(SkImageView::kFitCenter_ScaleType - 1 == SkMatrix::kCenter_ScaleToFit); + SkASSERT(SkImageView::kFitEnd_ScaleType - 1 == SkMatrix::kEnd_ScaleToFit); + + return (SkMatrix::ScaleToFit)(st - 1); } void SkImageView::onDraw(SkCanvas* canvas) { - SkRect src; - if (!this->getDataBounds(&src)) - { - SkDEBUGCODE(canvas->drawColor(SK_ColorRED);) - return; // nothing to draw - } - - SkAutoCanvasRestore restore(canvas, true); - SkMatrix matrix; - - if (this->getScaleType() == kMatrix_ScaleType) - (void)this->getImageMatrix(&matrix); - else - { - SkRect dst; - dst.set(0, 0, this->width(), this->height()); - matrix.setRectToRect(src, dst, scaleTypeToScaleToFit(this->getScaleType())); - } - canvas->concat(matrix); - - SkPaint paint; - - paint.setAntiAlias(true); - - if (fDataIsAnim) - { - SkMSec now = SkTime::GetMSecs(); - - SkAnimator::DifferenceType diff = fData.fAnim->draw(canvas, &paint, now); - + SkRect src; + if (!this->getDataBounds(&src)) + { + SkDEBUGCODE(canvas->drawColor(SK_ColorRED);) + return; // nothing to draw + } + + SkAutoCanvasRestore restore(canvas, true); + SkMatrix matrix; + + if (this->getScaleType() == kMatrix_ScaleType) + (void)this->getImageMatrix(&matrix); + else + { + SkRect dst; + dst.set(0, 0, this->width(), this->height()); + matrix.setRectToRect(src, dst, scaleTypeToScaleToFit(this->getScaleType())); + } + canvas->concat(matrix); + + SkPaint paint; + + paint.setAntiAlias(true); + + if (fDataIsAnim) + { + SkMSec now = SkTime::GetMSecs(); + + SkAnimator::DifferenceType diff = fData.fAnim->draw(canvas, &paint, now); + SkDEBUGF(("SkImageView : now = %X[%12.3f], diff = %d\n", now, now/1000., diff)); - if (diff == SkAnimator::kDifferent) - this->inval(NULL); - else if (diff == SkAnimator::kPartiallyDifferent) - { - SkRect bounds; - fData.fAnim->getInvalBounds(&bounds); - matrix.mapRect(&bounds); // get the bounds into view coordinates - this->inval(&bounds); - } - } - else - canvas->drawBitmap(*fData.fBitmap, 0, 0, &paint); + if (diff == SkAnimator::kDifferent) + this->inval(NULL); + else if (diff == SkAnimator::kPartiallyDifferent) + { + SkRect bounds; + fData.fAnim->getInvalBounds(&bounds); + matrix.mapRect(&bounds); // get the bounds into view coordinates + this->inval(&bounds); + } + } + else + canvas->drawBitmap(*fData.fBitmap, 0, 0, &paint); } void SkImageView::onInflate(const SkDOM& dom, const SkDOMNode* node) { - this->INHERITED::onInflate(dom, node); - - const char* src = dom.findAttr(node, "src"); - if (src) - this->setUri(src); - - int index = dom.findList(node, "scaleType", "matrix,fitXY,fitStart,fitCenter,fitEnd"); - if (index >= 0) - this->setScaleType((ScaleType)index); - - // need inflate syntax/reader for matrix + this->INHERITED::onInflate(dom, node); + + const char* src = dom.findAttr(node, "src"); + if (src) + this->setUri(src); + + int index = dom.findList(node, "scaleType", "matrix,fitXY,fitStart,fitCenter,fitEnd"); + if (index >= 0) + this->setScaleType((ScaleType)index); + + // need inflate syntax/reader for matrix } ///////////////////////////////////////////////////////////////////////////////////// void SkImageView::onUriChange() { - if (this->freeData()) - this->inval(NULL); - fUriIsValid = true; // give ensureUriIsLoaded() a shot at the new uri + if (this->freeData()) + this->inval(NULL); + fUriIsValid = true; // give ensureUriIsLoaded() a shot at the new uri } bool SkImageView::freeData() { - if (fData.fAnim) // test is valid for all union values - { - if (fDataIsAnim) - delete fData.fAnim; - else - delete fData.fBitmap; - - fData.fAnim = NULL; // valid for all union values - return true; - } - return false; + if (fData.fAnim) // test is valid for all union values + { + if (fDataIsAnim) + delete fData.fAnim; + else + delete fData.fBitmap; + + fData.fAnim = NULL; // valid for all union values + return true; + } + return false; } bool SkImageView::getDataBounds(SkRect* bounds) { - SkASSERT(bounds); - - if (this->ensureUriIsLoaded()) - { - SkScalar width, height; - - if (fDataIsAnim) - { - if (SkScalarIsNaN(width = fData.fAnim->getScalar("dimensions", "x")) || - SkScalarIsNaN(height = fData.fAnim->getScalar("dimensions", "y"))) - { - // cons up fake bounds - width = this->width(); - height = this->height(); - } - } - else - { - width = SkIntToScalar(fData.fBitmap->width()); - height = SkIntToScalar(fData.fBitmap->height()); - } - bounds->set(0, 0, width, height); - return true; - } - return false; + SkASSERT(bounds); + + if (this->ensureUriIsLoaded()) + { + SkScalar width, height; + + if (fDataIsAnim) + { + if (SkScalarIsNaN(width = fData.fAnim->getScalar("dimensions", "x")) || + SkScalarIsNaN(height = fData.fAnim->getScalar("dimensions", "y"))) + { + // cons up fake bounds + width = this->width(); + height = this->height(); + } + } + else + { + width = SkIntToScalar(fData.fBitmap->width()); + height = SkIntToScalar(fData.fBitmap->height()); + } + bounds->set(0, 0, width, height); + return true; + } + return false; } bool SkImageView::ensureUriIsLoaded() { - if (fData.fAnim) // test is valid for all union values - { - SkASSERT(fUriIsValid); - return true; - } - if (!fUriIsValid) - return false; - - // try to load the url - if (fUri.endsWith(".xml")) // assume it is screenplay - { - SkAnimator* anim = new SkAnimator; - - if (!anim->decodeURI(fUri.c_str())) - { - delete anim; - fUriIsValid = false; - return false; - } - anim->setHostEventSink(this); - - fData.fAnim = anim; - fDataIsAnim = true; - } - else // assume it is an image format - { + if (fData.fAnim) // test is valid for all union values + { + SkASSERT(fUriIsValid); + return true; + } + if (!fUriIsValid) + return false; + + // try to load the url + if (fUri.endsWith(".xml")) // assume it is screenplay + { + SkAnimator* anim = new SkAnimator; + + if (!anim->decodeURI(fUri.c_str())) + { + delete anim; + fUriIsValid = false; + return false; + } + anim->setHostEventSink(this); + + fData.fAnim = anim; + fDataIsAnim = true; + } + else // assume it is an image format + { #if 0 - SkBitmap* bitmap = new SkBitmap; - - if (!SkImageDecoder::DecodeURL(fUri.c_str(), bitmap)) - { - delete bitmap; - fUriIsValid = false; - return false; - } - fData.fBitmap = bitmap; - fDataIsAnim = false; + SkBitmap* bitmap = new SkBitmap; + + if (!SkImageDecoder::DecodeURL(fUri.c_str(), bitmap)) + { + delete bitmap; + fUriIsValid = false; + return false; + } + fData.fBitmap = bitmap; + fDataIsAnim = false; #else return false; #endif - } - return true; + } + return true; } diff --git a/src/views/animated/SkListView.cpp b/src/views/animated/SkListView.cpp index 20747a285a..ec9d2ee7b0 100644 --- a/src/views/animated/SkListView.cpp +++ b/src/views/animated/SkListView.cpp @@ -16,192 +16,192 @@ SkEvent* SkListSource::getEvent(int index) { - return NULL; + return NULL; } #include "SkOSFile.h" class SkDirListSource : public SkListSource { public: - SkDirListSource(const char path[], const char suffix[], const char target[]) - : fPath(path), fSuffix(suffix), fTarget(target) - { - fCount = -1; - } - virtual int countRows() - { - if (fCount < 0) - { - fCount = 0; - fIter.reset(fPath.c_str(), fSuffix.c_str()); - while (fIter.next(NULL)) - fCount += 1; - fIter.reset(fPath.c_str(), fSuffix.c_str()); - fIndex = 0; - } - return fCount; - } - virtual void getRow(int index, SkString* left, SkString* right) - { - (void)this->countRows(); - SkASSERT((unsigned)index < (unsigned)fCount); - - if (fIndex > index) - { - fIter.reset(fPath.c_str(), fSuffix.c_str()); - fIndex = 0; - } - - while (fIndex < index) - { - fIter.next(NULL); - fIndex += 1; - } - - if (fIter.next(left)) - { - if (left) - left->remove(left->size() - fSuffix.size(), fSuffix.size()); - } - else - { - if (left) - left->reset(); - } - if (right) // only set to ">" if we know we're on a sub-directory - right->reset(); - - fIndex += 1; - } - virtual SkEvent* getEvent(int index) - { - SkASSERT((unsigned)index < (unsigned)fCount); - - SkEvent* evt = new SkEvent(); - SkString label; - - this->getRow(index, &label, NULL); - evt->setString("name", label.c_str()); - - int c = fPath.c_str()[fPath.size() - 1]; - if (c != '/' && c != '\\') - label.prepend("/"); - label.prepend(fPath); - label.append(fSuffix); - evt->setString("path", label.c_str()); - evt->setS32("index", index); - evt->setS32("duration", 22); - evt->setType(fTarget); - return evt; - } + SkDirListSource(const char path[], const char suffix[], const char target[]) + : fPath(path), fSuffix(suffix), fTarget(target) + { + fCount = -1; + } + virtual int countRows() + { + if (fCount < 0) + { + fCount = 0; + fIter.reset(fPath.c_str(), fSuffix.c_str()); + while (fIter.next(NULL)) + fCount += 1; + fIter.reset(fPath.c_str(), fSuffix.c_str()); + fIndex = 0; + } + return fCount; + } + virtual void getRow(int index, SkString* left, SkString* right) + { + (void)this->countRows(); + SkASSERT((unsigned)index < (unsigned)fCount); + + if (fIndex > index) + { + fIter.reset(fPath.c_str(), fSuffix.c_str()); + fIndex = 0; + } + + while (fIndex < index) + { + fIter.next(NULL); + fIndex += 1; + } + + if (fIter.next(left)) + { + if (left) + left->remove(left->size() - fSuffix.size(), fSuffix.size()); + } + else + { + if (left) + left->reset(); + } + if (right) // only set to ">" if we know we're on a sub-directory + right->reset(); + + fIndex += 1; + } + virtual SkEvent* getEvent(int index) + { + SkASSERT((unsigned)index < (unsigned)fCount); + + SkEvent* evt = new SkEvent(); + SkString label; + + this->getRow(index, &label, NULL); + evt->setString("name", label.c_str()); + + int c = fPath.c_str()[fPath.size() - 1]; + if (c != '/' && c != '\\') + label.prepend("/"); + label.prepend(fPath); + label.append(fSuffix); + evt->setString("path", label.c_str()); + evt->setS32("index", index); + evt->setS32("duration", 22); + evt->setType(fTarget); + return evt; + } private: - SkString fPath, fSuffix; - SkString fTarget; - SkOSFile::Iter fIter; - int fCount; - int fIndex; + SkString fPath, fSuffix; + SkString fTarget; + SkOSFile::Iter fIter; + int fCount; + int fIndex; }; SkListSource* SkListSource::CreateFromDir(const char path[], const char suffix[], const char target[]) { - return new SkDirListSource(path, suffix, target); + return new SkDirListSource(path, suffix, target); } ////////////////////////////////////////////////////////////////// class SkDOMListSource : public SkListSource { public: - enum Type { - kUnknown_Type, - kDir_Type, - kToggle_Type - }; - struct ItemRec { - SkString fLabel; - SkString fTail, fAltTail; - SkString fTarget; - Type fType; - }; - - SkDOMListSource(const SkDOM& dom, const SkDOM::Node* node) : fDirTail(">") - { - const SkDOM::Node* child = dom.getFirstChild(node, "item"); - int count = 0; - - while (child) - { - count += 1; - child = dom.getNextSibling(child, "item"); - } - - fCount = count; - fList = NULL; - if (count) - { - ItemRec* rec = fList = new ItemRec[count]; - - child = dom.getFirstChild(node, "item"); - while (child) - { - rec->fLabel.set(dom.findAttr(child, "label")); - rec->fTail.set(dom.findAttr(child, "tail")); - rec->fAltTail.set(dom.findAttr(child, "alt-tail")); - rec->fTarget.set(dom.findAttr(child, "target")); - rec->fType = kUnknown_Type; - - int index = dom.findList(child, "type", "dir,toggle"); - if (index >= 0) - rec->fType = (Type)(index + 1); - - child = dom.getNextSibling(child, "item"); - rec += 1; - } - } - } - virtual ~SkDOMListSource() - { - delete[] fList; - } - virtual int countRows() - { - return fCount; - } - virtual void getRow(int index, SkString* left, SkString* right) - { - SkASSERT((unsigned)index < (unsigned)fCount); - - if (left) - *left = fList[index].fLabel; - if (right) - *right = fList[index].fType == kDir_Type ? fDirTail : fList[index].fTail; - } - virtual SkEvent* getEvent(int index) - { - SkASSERT((unsigned)index < (unsigned)fCount); - - if (fList[index].fType == kDir_Type) - { - SkEvent* evt = new SkEvent(); - evt->setType(fList[index].fTarget); - evt->setFast32(index); - return evt; - } - if (fList[index].fType == kToggle_Type) - fList[index].fTail.swap(fList[index].fAltTail); - - return NULL; - } + enum Type { + kUnknown_Type, + kDir_Type, + kToggle_Type + }; + struct ItemRec { + SkString fLabel; + SkString fTail, fAltTail; + SkString fTarget; + Type fType; + }; + + SkDOMListSource(const SkDOM& dom, const SkDOM::Node* node) : fDirTail(">") + { + const SkDOM::Node* child = dom.getFirstChild(node, "item"); + int count = 0; + + while (child) + { + count += 1; + child = dom.getNextSibling(child, "item"); + } + + fCount = count; + fList = NULL; + if (count) + { + ItemRec* rec = fList = new ItemRec[count]; + + child = dom.getFirstChild(node, "item"); + while (child) + { + rec->fLabel.set(dom.findAttr(child, "label")); + rec->fTail.set(dom.findAttr(child, "tail")); + rec->fAltTail.set(dom.findAttr(child, "alt-tail")); + rec->fTarget.set(dom.findAttr(child, "target")); + rec->fType = kUnknown_Type; + + int index = dom.findList(child, "type", "dir,toggle"); + if (index >= 0) + rec->fType = (Type)(index + 1); + + child = dom.getNextSibling(child, "item"); + rec += 1; + } + } + } + virtual ~SkDOMListSource() + { + delete[] fList; + } + virtual int countRows() + { + return fCount; + } + virtual void getRow(int index, SkString* left, SkString* right) + { + SkASSERT((unsigned)index < (unsigned)fCount); + + if (left) + *left = fList[index].fLabel; + if (right) + *right = fList[index].fType == kDir_Type ? fDirTail : fList[index].fTail; + } + virtual SkEvent* getEvent(int index) + { + SkASSERT((unsigned)index < (unsigned)fCount); + + if (fList[index].fType == kDir_Type) + { + SkEvent* evt = new SkEvent(); + evt->setType(fList[index].fTarget); + evt->setFast32(index); + return evt; + } + if (fList[index].fType == kToggle_Type) + fList[index].fTail.swap(fList[index].fAltTail); + + return NULL; + } private: - int fCount; - ItemRec* fList; - SkString fDirTail; + int fCount; + ItemRec* fList; + SkString fDirTail; }; SkListSource* SkListSource::CreateFromDOM(const SkDOM& dom, const SkDOM::Node* node) { - return new SkDOMListSource(dom, node); + return new SkDOMListSource(dom, node); } ////////////////////////////////////////////////////////////////// @@ -209,304 +209,304 @@ SkListSource* SkListSource::CreateFromDOM(const SkDOM& dom, const SkDOM::Node* n SkListView::SkListView(U32 flags) : SkWidgetView(flags) { - fSource = NULL; - fScrollIndex = 0; - fCurrIndex = -1; - fRowHeight = SkIntToScalar(16); - fVisibleRowCount = 0; - fStrCache = NULL; + fSource = NULL; + fScrollIndex = 0; + fCurrIndex = -1; + fRowHeight = SkIntToScalar(16); + fVisibleRowCount = 0; + fStrCache = NULL; - fPaint[kBG_Attr].setColor(0); - fPaint[kNormalText_Attr].setTextSize(SkIntToScalar(14)); - fPaint[kHiliteText_Attr].setTextSize(SkIntToScalar(14)); - fPaint[kHiliteText_Attr].setColor(SK_ColorWHITE); - fPaint[kHiliteCell_Attr].setColor(SK_ColorBLUE); + fPaint[kBG_Attr].setColor(0); + fPaint[kNormalText_Attr].setTextSize(SkIntToScalar(14)); + fPaint[kHiliteText_Attr].setTextSize(SkIntToScalar(14)); + fPaint[kHiliteText_Attr].setColor(SK_ColorWHITE); + fPaint[kHiliteCell_Attr].setColor(SK_ColorBLUE); } SkListView::~SkListView() { - delete[] fStrCache; - fSource->safeUnref(); + delete[] fStrCache; + fSource->safeUnref(); } void SkListView::setRowHeight(SkScalar height) { - SkASSERT(height >= 0); + SkASSERT(height >= 0); - if (fRowHeight != height) - { - fRowHeight = height; - this->inval(NULL); - this->onSizeChange(); - } + if (fRowHeight != height) + { + fRowHeight = height; + this->inval(NULL); + this->onSizeChange(); + } } void SkListView::setSelection(int index) { - if (fCurrIndex != index) - { - this->invalSelection(); - fCurrIndex = index; - this->invalSelection(); - this->ensureSelectionIsVisible(); + if (fCurrIndex != index) + { + this->invalSelection(); + fCurrIndex = index; + this->invalSelection(); + this->ensureSelectionIsVisible(); - { - SkEvent evt; - evt.setType("listview-selection"); - evt.setFast32(index); - this->sendEventToParents(evt); - } - } + { + SkEvent evt; + evt.setType("listview-selection"); + evt.setFast32(index); + this->sendEventToParents(evt); + } + } } void SkListView::moveSelectionUp() { - if (fSource) - { - int index = fCurrIndex; - if (index < 0) // no selection - index = fSource->countRows() - 1; - else - index = SkMax32(index - 1, 0); - this->setSelection(index); - } + if (fSource) + { + int index = fCurrIndex; + if (index < 0) // no selection + index = fSource->countRows() - 1; + else + index = SkMax32(index - 1, 0); + this->setSelection(index); + } } void SkListView::moveSelectionDown() { - if (fSource) - { - int index = fCurrIndex; - if (index < 0) // no selection - index = 0; - else - index = SkMin32(index + 1, fSource->countRows() - 1); - this->setSelection(index); - } + if (fSource) + { + int index = fCurrIndex; + if (index < 0) // no selection + index = 0; + else + index = SkMin32(index + 1, fSource->countRows() - 1); + this->setSelection(index); + } } void SkListView::invalSelection() { - SkRect r; - if (this->getRowRect(fCurrIndex, &r)) - this->inval(&r); + SkRect r; + if (this->getRowRect(fCurrIndex, &r)) + this->inval(&r); } void SkListView::ensureSelectionIsVisible() { - if (fSource == NULL) - return; + if (fSource == NULL) + return; - if ((unsigned)fCurrIndex < (unsigned)fSource->countRows()) - { - int index = this->logicalToVisualIndex(fCurrIndex); + if ((unsigned)fCurrIndex < (unsigned)fSource->countRows()) + { + int index = this->logicalToVisualIndex(fCurrIndex); - if ((unsigned)index >= (unsigned)fVisibleRowCount) // need to scroll - { - if (index < 0) // too high - fScrollIndex = fCurrIndex; - else - fScrollIndex = fCurrIndex - fVisibleRowCount + 1; - SkASSERT((unsigned)fScrollIndex < (unsigned)fSource->countRows()); + if ((unsigned)index >= (unsigned)fVisibleRowCount) // need to scroll + { + if (index < 0) // too high + fScrollIndex = fCurrIndex; + else + fScrollIndex = fCurrIndex - fVisibleRowCount + 1; + SkASSERT((unsigned)fScrollIndex < (unsigned)fSource->countRows()); - this->dirtyStrCache(); - this->inval(NULL); - } - } + this->dirtyStrCache(); + this->inval(NULL); + } + } } bool SkListView::getRowRect(int index, SkRect* r) const { - SkASSERT(r); - index = this->logicalToVisualIndex(index); - if (index >= 0) - { - SkScalar top = index * fRowHeight; + SkASSERT(r); + index = this->logicalToVisualIndex(index); + if (index >= 0) + { + SkScalar top = index * fRowHeight; - if (top < this->height()) - { - if (r) - r->set(0, top, this->width(), top + fRowHeight); - return true; - } - } - return false; + if (top < this->height()) + { + if (r) + r->set(0, top, this->width(), top + fRowHeight); + return true; + } + } + return false; } SkPaint& SkListView::paint(Attr attr) { - SkASSERT((unsigned)attr < kAttrCount); - return fPaint[attr]; + SkASSERT((unsigned)attr < kAttrCount); + return fPaint[attr]; } SkListSource* SkListView::setListSource(SkListSource* src) { - if (fSource != src) - { - SkRefCnt_SafeAssign(fSource, src); - this->dirtyStrCache(); - this->ensureSelectionIsVisible(); - this->inval(NULL); - } - return src; + if (fSource != src) + { + SkRefCnt_SafeAssign(fSource, src); + this->dirtyStrCache(); + this->ensureSelectionIsVisible(); + this->inval(NULL); + } + return src; } void SkListView::onDraw(SkCanvas* canvas) { - this->INHERITED::onDraw(canvas); + this->INHERITED::onDraw(canvas); - canvas->drawPaint(fPaint[kBG_Attr]); + canvas->drawPaint(fPaint[kBG_Attr]); - int visibleCount = SkMin32(fVisibleRowCount, fSource->countRows() - fScrollIndex); - if (visibleCount == 0) - return; + int visibleCount = SkMin32(fVisibleRowCount, fSource->countRows() - fScrollIndex); + if (visibleCount == 0) + return; - this->ensureStrCache(visibleCount); - int currIndex = this->logicalToVisualIndex(fCurrIndex); + this->ensureStrCache(visibleCount); + int currIndex = this->logicalToVisualIndex(fCurrIndex); - if ((unsigned)currIndex < (unsigned)visibleCount) - { - SkAutoCanvasRestore restore(canvas, true); - SkRect r; + if ((unsigned)currIndex < (unsigned)visibleCount) + { + SkAutoCanvasRestore restore(canvas, true); + SkRect r; - canvas->translate(0, currIndex * fRowHeight); - (void)this->getRowRect(fScrollIndex, &r); - canvas->drawRect(r, fPaint[kHiliteCell_Attr]); - } + canvas->translate(0, currIndex * fRowHeight); + (void)this->getRowRect(fScrollIndex, &r); + canvas->drawRect(r, fPaint[kHiliteCell_Attr]); + } - SkPaint* p; - SkScalar y, x = SkIntToScalar(6); - SkScalar rite = this->width() - x; + SkPaint* p; + SkScalar y, x = SkIntToScalar(6); + SkScalar rite = this->width() - x; - { - SkScalar ascent, descent; - fPaint[kNormalText_Attr].measureText(0, NULL, &ascent, &descent); - y = SkScalarHalf(fRowHeight - descent + ascent) - ascent; - } + { + SkScalar ascent, descent; + fPaint[kNormalText_Attr].measureText(0, NULL, &ascent, &descent); + y = SkScalarHalf(fRowHeight - descent + ascent) - ascent; + } - for (int i = 0; i < visibleCount; i++) - { - if (i == currIndex) - p = &fPaint[kHiliteText_Attr]; - else - p = &fPaint[kNormalText_Attr]; + for (int i = 0; i < visibleCount; i++) + { + if (i == currIndex) + p = &fPaint[kHiliteText_Attr]; + else + p = &fPaint[kNormalText_Attr]; - p->setTextAlign(SkPaint::kLeft_Align); - canvas->drawText(fStrCache[i].c_str(), fStrCache[i].size(), x, y, *p); - p->setTextAlign(SkPaint::kRight_Align); - canvas->drawText(fStrCache[i + visibleCount].c_str(), fStrCache[i + visibleCount].size(), rite, y, *p); - canvas->translate(0, fRowHeight); - } + p->setTextAlign(SkPaint::kLeft_Align); + canvas->drawText(fStrCache[i].c_str(), fStrCache[i].size(), x, y, *p); + p->setTextAlign(SkPaint::kRight_Align); + canvas->drawText(fStrCache[i + visibleCount].c_str(), fStrCache[i + visibleCount].size(), rite, y, *p); + canvas->translate(0, fRowHeight); + } } void SkListView::onSizeChange() { - SkScalar count = SkScalarDiv(this->height(), fRowHeight); - int n = SkScalarFloor(count); + SkScalar count = SkScalarDiv(this->height(), fRowHeight); + int n = SkScalarFloor(count); - // only want to show rows that are mostly visible - if (n == 0 || count - SkIntToScalar(n) > SK_Scalar1*75/100) - n += 1; + // only want to show rows that are mostly visible + if (n == 0 || count - SkIntToScalar(n) > SK_Scalar1*75/100) + n += 1; - if (fVisibleRowCount != n) - { - fVisibleRowCount = n; - this->ensureSelectionIsVisible(); - this->dirtyStrCache(); - } + if (fVisibleRowCount != n) + { + fVisibleRowCount = n; + this->ensureSelectionIsVisible(); + this->dirtyStrCache(); + } } void SkListView::dirtyStrCache() { - if (fStrCache) - { - delete[] fStrCache; - fStrCache = NULL; - } + if (fStrCache) + { + delete[] fStrCache; + fStrCache = NULL; + } } void SkListView::ensureStrCache(int count) { - if (fStrCache == NULL) - { - fStrCache = new SkString[count << 1]; + if (fStrCache == NULL) + { + fStrCache = new SkString[count << 1]; - if (fSource) - for (int i = 0; i < count; i++) - fSource->getRow(i + fScrollIndex, &fStrCache[i], &fStrCache[i + count]); - } + if (fSource) + for (int i = 0; i < count; i++) + fSource->getRow(i + fScrollIndex, &fStrCache[i], &fStrCache[i + count]); + } } bool SkListView::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventType_Key)) - { - switch (evt.getFast32()) { - case kUp_SkKey: - this->moveSelectionUp(); - return true; - case kDown_SkKey: - this->moveSelectionDown(); - return true; - case kRight_SkKey: - case kOK_SkKey: - if (fSource && fCurrIndex >= 0) - { - SkEvent* evt = fSource->getEvent(fCurrIndex); - if (evt) - { - SkView* view = this->sendEventToParents(*evt); - delete evt; - return view != NULL; - } - else // hack to make toggle work - { - this->dirtyStrCache(); - this->inval(NULL); - } - } - break; - } - } - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventType_Key)) + { + switch (evt.getFast32()) { + case kUp_SkKey: + this->moveSelectionUp(); + return true; + case kDown_SkKey: + this->moveSelectionDown(); + return true; + case kRight_SkKey: + case kOK_SkKey: + if (fSource && fCurrIndex >= 0) + { + SkEvent* evt = fSource->getEvent(fCurrIndex); + if (evt) + { + SkView* view = this->sendEventToParents(*evt); + delete evt; + return view != NULL; + } + else // hack to make toggle work + { + this->dirtyStrCache(); + this->inval(NULL); + } + } + break; + } + } + return this->INHERITED::onEvent(evt); } void SkListView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); + this->INHERITED::onInflate(dom, node); - SkScalar x; - const SkDOM::Node* child; + SkScalar x; + const SkDOM::Node* child; - if (dom.findScalar(node, "row-height", &x)) - this->setRowHeight(x); + if (dom.findScalar(node, "row-height", &x)) + this->setRowHeight(x); - if ((child = dom.getFirstChild(node, "hilite-paint")) != NULL) - SkPaint_Inflate(&this->paint(kHiliteCell_Attr), dom, child); + if ((child = dom.getFirstChild(node, "hilite-paint")) != NULL) + SkPaint_Inflate(&this->paint(kHiliteCell_Attr), dom, child); - // look for a listsource - { - SkListSource* src = NULL; + // look for a listsource + { + SkListSource* src = NULL; - if ((child = dom.getFirstChild(node, "file-listsource")) != NULL) - { - const char* path = dom.findAttr(child, "path"); - if (path) - src = SkListSource::CreateFromDir( path, - dom.findAttr(child, "filter"), - dom.findAttr(child, "target")); - } - else if ((child = dom.getFirstChild(node, "xml-listsource")) != NULL) - { - src = SkListSource::CreateFromDOM(dom, child); - } + if ((child = dom.getFirstChild(node, "file-listsource")) != NULL) + { + const char* path = dom.findAttr(child, "path"); + if (path) + src = SkListSource::CreateFromDir( path, + dom.findAttr(child, "filter"), + dom.findAttr(child, "target")); + } + else if ((child = dom.getFirstChild(node, "xml-listsource")) != NULL) + { + src = SkListSource::CreateFromDOM(dom, child); + } - if (src) - { - this->setListSource(src)->unref(); - this->setSelection(0); - } - } + if (src) + { + this->setListSource(src)->unref(); + this->setSelection(0); + } + } } /////////////////////////////////////////////////////////////////////////////////////////// @@ -517,386 +517,386 @@ void SkListView::onInflate(const SkDOM& dom, const SkDOM::Node* node) class SkScrollBarView : public SkView { public: - SkScrollBarView(const char bg[], const char fg[]) - { - fBGRef = SkBitmapRef::Decode(bg, true); - fFGRef = SkBitmapRef::Decode(fg, true); - - if (fBGRef) - this->setWidth(SkIntToScalar(fBGRef->bitmap().width())); - } - ~SkScrollBarView() - { - delete fBGRef; - delete fFGRef; - } + SkScrollBarView(const char bg[], const char fg[]) + { + fBGRef = SkBitmapRef::Decode(bg, true); + fFGRef = SkBitmapRef::Decode(fg, true); + + if (fBGRef) + this->setWidth(SkIntToScalar(fBGRef->bitmap().width())); + } + ~SkScrollBarView() + { + delete fBGRef; + delete fFGRef; + } protected: - virtual void onDraw(SkCanvas* canvas) - { - if (fBGRef == NULL) return; + virtual void onDraw(SkCanvas* canvas) + { + if (fBGRef == NULL) return; - SkPaint paint; + SkPaint paint; - SkShader* shader = SkShader::CreateBitmapShader(fBGRef->bitmap(), false, SkPaint::kNo_FilterType, SkShader::kClamp_TileMode); - paint.setShader(shader)->unref(); + SkShader* shader = SkShader::CreateBitmapShader(fBGRef->bitmap(), false, SkPaint::kNo_FilterType, SkShader::kClamp_TileMode); + paint.setShader(shader)->unref(); - canvas->drawPaint(paint); - } + canvas->drawPaint(paint); + } private: - SkBitmapRef* fBGRef, *fFGRef; + SkBitmapRef* fBGRef, *fFGRef; }; SkGridView::SkGridView(U32 flags) : SkWidgetView(flags) { - fSource = NULL; - fCurrIndex = -1; - fVisibleCount.set(0, 0); + fSource = NULL; + fCurrIndex = -1; + fVisibleCount.set(0, 0); - fPaint[kBG_Attr].setColor(SK_ColorWHITE); - fPaint[kHiliteCell_Attr].setColor(SK_ColorYELLOW); - fPaint[kHiliteCell_Attr].setStyle(SkPaint::kStroke_Style); - fPaint[kHiliteCell_Attr].setAntiAliasOn(true); - fPaint[kHiliteCell_Attr].setStrokeWidth(SK_Scalar1*3); + fPaint[kBG_Attr].setColor(SK_ColorWHITE); + fPaint[kHiliteCell_Attr].setColor(SK_ColorYELLOW); + fPaint[kHiliteCell_Attr].setStyle(SkPaint::kStroke_Style); + fPaint[kHiliteCell_Attr].setAntiAliasOn(true); + fPaint[kHiliteCell_Attr].setStrokeWidth(SK_Scalar1*3); - fScrollBar = new SkScrollBarView("icons/scrollbarGrey.jpg", "icons/scrollbarBlue.jpg"); - this->attachChildToFront(fScrollBar)->unref(); - fScrollBar->setVisibleP(true); + fScrollBar = new SkScrollBarView("icons/scrollbarGrey.jpg", "icons/scrollbarBlue.jpg"); + this->attachChildToFront(fScrollBar)->unref(); + fScrollBar->setVisibleP(true); } SkGridView::~SkGridView() { - fSource->safeUnref(); + fSource->safeUnref(); } void SkGridView::getCellSize(SkPoint* size) const { - if (size) - *size = fCellSize; + if (size) + *size = fCellSize; } void SkGridView::setCellSize(SkScalar x, SkScalar y) { - SkASSERT(x >= 0 && y >= 0); + SkASSERT(x >= 0 && y >= 0); - if (!fCellSize.equals(x, y)) - { - fCellSize.set(x, y); - this->inval(NULL); - } + if (!fCellSize.equals(x, y)) + { + fCellSize.set(x, y); + this->inval(NULL); + } } void SkGridView::setSelection(int index) { - if (fCurrIndex != index) - { - this->invalSelection(); - fCurrIndex = index; - this->invalSelection(); - this->ensureSelectionIsVisible(); + if (fCurrIndex != index) + { + this->invalSelection(); + fCurrIndex = index; + this->invalSelection(); + this->ensureSelectionIsVisible(); - // this generates the click - { - SkEvent evt; - evt.setType("listview-selection"); - evt.setFast32(index); - this->sendEventToParents(evt); - } - } + // this generates the click + { + SkEvent evt; + evt.setType("listview-selection"); + evt.setFast32(index); + this->sendEventToParents(evt); + } + } } void SkGridView::moveSelectionUp() { - if (fSource) - { - int index = fCurrIndex; - if (index < 0) // no selection - index = fSource->countRows() - 1; - else - index = SkMax32(index - 1, 0); - this->setSelection(index); - } + if (fSource) + { + int index = fCurrIndex; + if (index < 0) // no selection + index = fSource->countRows() - 1; + else + index = SkMax32(index - 1, 0); + this->setSelection(index); + } } void SkGridView::moveSelectionDown() { - if (fSource) - { - int index = fCurrIndex; - if (index < 0) // no selection - index = 0; - else - index = SkMin32(index + 1, fSource->countRows() - 1); - this->setSelection(index); - } + if (fSource) + { + int index = fCurrIndex; + if (index < 0) // no selection + index = 0; + else + index = SkMin32(index + 1, fSource->countRows() - 1); + this->setSelection(index); + } } void SkGridView::invalSelection() { - SkRect r; - if (this->getCellRect(fCurrIndex, &r)) - { - SkScalar inset = 0; - if (fPaint[kHiliteCell_Attr].getStyle() != SkPaint::kFill_Style) - inset += fPaint[kHiliteCell_Attr].getStrokeWidth() / 2; - if (fPaint[kHiliteCell_Attr].isAntiAliasOn()) - inset += SK_Scalar1; - r.inset(-inset, -inset); - this->inval(&r); - } + SkRect r; + if (this->getCellRect(fCurrIndex, &r)) + { + SkScalar inset = 0; + if (fPaint[kHiliteCell_Attr].getStyle() != SkPaint::kFill_Style) + inset += fPaint[kHiliteCell_Attr].getStrokeWidth() / 2; + if (fPaint[kHiliteCell_Attr].isAntiAliasOn()) + inset += SK_Scalar1; + r.inset(-inset, -inset); + this->inval(&r); + } } void SkGridView::ensureSelectionIsVisible() { - if (fSource == NULL) - return; + if (fSource == NULL) + return; #if 0 - if ((unsigned)fCurrIndex < (unsigned)fSource->countRows()) - { - int index = this->logicalToVisualIndex(fCurrIndex); - - if ((unsigned)index >= (unsigned)fVisibleRowCount) // need to scroll - { - if (index < 0) // too high - fScrollIndex = fCurrIndex; - else - fScrollIndex = fCurrIndex - fVisibleRowCount + 1; - SkASSERT((unsigned)fScrollIndex < (unsigned)fSource->countRows()); - - this->dirtyStrCache(); - this->inval(NULL); - } - } + if ((unsigned)fCurrIndex < (unsigned)fSource->countRows()) + { + int index = this->logicalToVisualIndex(fCurrIndex); + + if ((unsigned)index >= (unsigned)fVisibleRowCount) // need to scroll + { + if (index < 0) // too high + fScrollIndex = fCurrIndex; + else + fScrollIndex = fCurrIndex - fVisibleRowCount + 1; + SkASSERT((unsigned)fScrollIndex < (unsigned)fSource->countRows()); + + this->dirtyStrCache(); + this->inval(NULL); + } + } #endif } bool SkGridView::getCellRect(int index, SkRect* r) const { - if (fVisibleCount.fY == 0) - return false; + if (fVisibleCount.fY == 0) + return false; - index = this->logicalToVisualIndex(index); - if (index >= 0) - { - SkRect bounds; - int row = index / fVisibleCount.fY; - int col = index % fVisibleCount.fY; + index = this->logicalToVisualIndex(index); + if (index >= 0) + { + SkRect bounds; + int row = index / fVisibleCount.fY; + int col = index % fVisibleCount.fY; - bounds.set(0, 0, fCellSize.fX, fCellSize.fY); - bounds.offset(col * (fCellSize.fX + SkIntToScalar(col > 0)), - row * (fCellSize.fY + SkIntToScalar(row > 0))); + bounds.set(0, 0, fCellSize.fX, fCellSize.fY); + bounds.offset(col * (fCellSize.fX + SkIntToScalar(col > 0)), + row * (fCellSize.fY + SkIntToScalar(row > 0))); - if (bounds.fTop < this->height()) - { - if (r) - *r = bounds; - return true; - } - } - return false; + if (bounds.fTop < this->height()) + { + if (r) + *r = bounds; + return true; + } + } + return false; } SkPaint& SkGridView::paint(Attr attr) { - SkASSERT((unsigned)attr < kAttrCount); - return fPaint[attr]; + SkASSERT((unsigned)attr < kAttrCount); + return fPaint[attr]; } SkListSource* SkGridView::setListSource(SkListSource* src) { - if (fSource != src) - { - SkRefCnt_SafeAssign(fSource, src); - // this->dirtyStrCache(); - this->ensureSelectionIsVisible(); - this->inval(NULL); - } - return src; + if (fSource != src) + { + SkRefCnt_SafeAssign(fSource, src); + // this->dirtyStrCache(); + this->ensureSelectionIsVisible(); + this->inval(NULL); + } + return src; } #include "SkShader.h" static void copybits(SkCanvas* canvas, const SkBitmap& bm, const SkRect& dst, const SkPaint& paint) { - SkRect src; - SkMatrix matrix; + SkRect src; + SkMatrix matrix; - src.set(0, 0, SkIntToScalar(bm.width()), SkIntToScalar(bm.height())); - if (matrix.setRectToRect(src, dst)) - { - SkPaint p(paint); - SkShader* shader = SkShader::CreateBitmapShader(bm, false, SkPaint::kNo_FilterType, SkShader::kClamp_TileMode); - p.setShader(shader)->unref(); + src.set(0, 0, SkIntToScalar(bm.width()), SkIntToScalar(bm.height())); + if (matrix.setRectToRect(src, dst)) + { + SkPaint p(paint); + SkShader* shader = SkShader::CreateBitmapShader(bm, false, SkPaint::kNo_FilterType, SkShader::kClamp_TileMode); + p.setShader(shader)->unref(); - shader->setLocalMatrix(matrix); - canvas->drawRect(dst, p); - } + shader->setLocalMatrix(matrix); + canvas->drawRect(dst, p); + } } #include "SkImageDecoder.h" void SkGridView::onDraw(SkCanvas* canvas) { - this->INHERITED::onDraw(canvas); + this->INHERITED::onDraw(canvas); - canvas->drawPaint(fPaint[kBG_Attr]); + canvas->drawPaint(fPaint[kBG_Attr]); - if (fSource == NULL) - return; + if (fSource == NULL) + return; #if 0 - int visibleCount = SkMin32(fVisibleRowCount, fSource->countRows() - fScrollIndex); - if (visibleCount == 0) - return; + int visibleCount = SkMin32(fVisibleRowCount, fSource->countRows() - fScrollIndex); + if (visibleCount == 0) + return; - this->ensureStrCache(visibleCount); - int currIndex = this->logicalToVisualIndex(fCurrIndex); + this->ensureStrCache(visibleCount); + int currIndex = this->logicalToVisualIndex(fCurrIndex); #endif - SkPaint p; - for (int i = 0; i < fSource->countRows(); i++) - { - bool forced = false; - SkEvent* evt = fSource->getEvent(i); - SkASSERT(evt); - SkString path(evt->findString("path")); - delete evt; - - SkBitmapRef* bmr = SkBitmapRef::Decode(path.c_str(), false); - if (bmr == NULL) - { - bmr = SkBitmapRef::Decode(path.c_str(), true); - if (bmr) - forced = true; - } - - if (bmr) - { - SkAutoTDelete<SkBitmapRef> autoRef(bmr); - SkRect r; - if (!this->getCellRect(i, &r)) - break; - copybits(canvas, bmr->bitmap(), r, p); - } - // only draw one forced bitmap at a time - if (forced) - { - this->inval(NULL); // could inval only the remaining visible cells... - break; - } - } - - // draw the hilite - { - SkRect r; - if (fCurrIndex >= 0 && this->getCellRect(fCurrIndex, &r)) - canvas->drawRect(r, fPaint[kHiliteCell_Attr]); - } + SkPaint p; + for (int i = 0; i < fSource->countRows(); i++) + { + bool forced = false; + SkEvent* evt = fSource->getEvent(i); + SkASSERT(evt); + SkString path(evt->findString("path")); + delete evt; + + SkBitmapRef* bmr = SkBitmapRef::Decode(path.c_str(), false); + if (bmr == NULL) + { + bmr = SkBitmapRef::Decode(path.c_str(), true); + if (bmr) + forced = true; + } + + if (bmr) + { + SkAutoTDelete<SkBitmapRef> autoRef(bmr); + SkRect r; + if (!this->getCellRect(i, &r)) + break; + copybits(canvas, bmr->bitmap(), r, p); + } + // only draw one forced bitmap at a time + if (forced) + { + this->inval(NULL); // could inval only the remaining visible cells... + break; + } + } + + // draw the hilite + { + SkRect r; + if (fCurrIndex >= 0 && this->getCellRect(fCurrIndex, &r)) + canvas->drawRect(r, fPaint[kHiliteCell_Attr]); + } } static int check_count(int n, SkScalar s) { - // only want to show cells that are mostly visible - if (n == 0 || s - SkIntToScalar(n) > SK_Scalar1*75/100) - n += 1; - return n; + // only want to show cells that are mostly visible + if (n == 0 || s - SkIntToScalar(n) > SK_Scalar1*75/100) + n += 1; + return n; } void SkGridView::onSizeChange() { - fScrollBar->setHeight(this->height()); - fScrollBar->setLoc(this->locX() + this->width() - fScrollBar->width(), 0); + fScrollBar->setHeight(this->height()); + fScrollBar->setLoc(this->locX() + this->width() - fScrollBar->width(), 0); - if (fCellSize.equals(0, 0)) - { - fVisibleCount.set(0, 0); - return; - } + if (fCellSize.equals(0, 0)) + { + fVisibleCount.set(0, 0); + return; + } - SkScalar rows = SkScalarDiv(this->height(), fCellSize.fY); - SkScalar cols = SkScalarDiv(this->width(), fCellSize.fX); - int y = SkScalarFloor(rows); - int x = SkScalarFloor(cols); + SkScalar rows = SkScalarDiv(this->height(), fCellSize.fY); + SkScalar cols = SkScalarDiv(this->width(), fCellSize.fX); + int y = SkScalarFloor(rows); + int x = SkScalarFloor(cols); - y = check_count(y, rows); - x = check_count(x, cols); + y = check_count(y, rows); + x = check_count(x, cols); - if (!fVisibleCount.equals(x, y)) - { - fVisibleCount.set(x, y); - this->ensureSelectionIsVisible(); - // this->dirtyStrCache(); - } + if (!fVisibleCount.equals(x, y)) + { + fVisibleCount.set(x, y); + this->ensureSelectionIsVisible(); + // this->dirtyStrCache(); + } } bool SkGridView::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventType_Key)) - { - switch (evt.getFast32()) { - case kUp_SkKey: - this->moveSelectionUp(); - return true; - case kDown_SkKey: - this->moveSelectionDown(); - return true; - case kRight_SkKey: - case kOK_SkKey: - if (fSource && fCurrIndex >= 0) - { - SkEvent* evt = fSource->getEvent(fCurrIndex); - if (evt) - { - // augment the event with our local rect - (void)this->getCellRect(fCurrIndex, (SkRect*)evt->setScalars("local-rect", 4, NULL)); - - SkView* view = this->sendEventToParents(*evt); - delete evt; - return view != NULL; - } - } - break; - } - } - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventType_Key)) + { + switch (evt.getFast32()) { + case kUp_SkKey: + this->moveSelectionUp(); + return true; + case kDown_SkKey: + this->moveSelectionDown(); + return true; + case kRight_SkKey: + case kOK_SkKey: + if (fSource && fCurrIndex >= 0) + { + SkEvent* evt = fSource->getEvent(fCurrIndex); + if (evt) + { + // augment the event with our local rect + (void)this->getCellRect(fCurrIndex, (SkRect*)evt->setScalars("local-rect", 4, NULL)); + + SkView* view = this->sendEventToParents(*evt); + delete evt; + return view != NULL; + } + } + break; + } + } + return this->INHERITED::onEvent(evt); } void SkGridView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); - - SkScalar x[2]; - const SkDOM::Node* child; - - if (dom.findScalars(node, "cell-size", x, 2)) - this->setCellSize(x[0], x[1]); - - if ((child = dom.getFirstChild(node, "hilite-paint")) != NULL) - SkPaint_Inflate(&this->paint(kHiliteCell_Attr), dom, child); - - // look for a listsource - { - SkListSource* src = NULL; - - if ((child = dom.getFirstChild(node, "file-listsource")) != NULL) - { - const char* path = dom.findAttr(child, "path"); - if (path) - src = SkListSource::CreateFromDir( path, - dom.findAttr(child, "filter"), - dom.findAttr(child, "target")); - } - else if ((child = dom.getFirstChild(node, "xml-listsource")) != NULL) - { - src = SkListSource::CreateFromDOM(dom, child); - } - - if (src) - { - this->setListSource(src)->unref(); - this->setSelection(0); - } - } - this->onSizeChange(); + this->INHERITED::onInflate(dom, node); + + SkScalar x[2]; + const SkDOM::Node* child; + + if (dom.findScalars(node, "cell-size", x, 2)) + this->setCellSize(x[0], x[1]); + + if ((child = dom.getFirstChild(node, "hilite-paint")) != NULL) + SkPaint_Inflate(&this->paint(kHiliteCell_Attr), dom, child); + + // look for a listsource + { + SkListSource* src = NULL; + + if ((child = dom.getFirstChild(node, "file-listsource")) != NULL) + { + const char* path = dom.findAttr(child, "path"); + if (path) + src = SkListSource::CreateFromDir( path, + dom.findAttr(child, "filter"), + dom.findAttr(child, "target")); + } + else if ((child = dom.getFirstChild(node, "xml-listsource")) != NULL) + { + src = SkListSource::CreateFromDOM(dom, child); + } + + if (src) + { + this->setListSource(src)->unref(); + this->setSelection(0); + } + } + this->onSizeChange(); } #endif diff --git a/src/views/animated/SkListWidget.cpp b/src/views/animated/SkListWidget.cpp index 4d95e0fc46..f91c6843b7 100644 --- a/src/views/animated/SkListWidget.cpp +++ b/src/views/animated/SkListWidget.cpp @@ -13,320 +13,320 @@ extern void init_skin_anim(const char name[], SkAnimator*); struct SkListView::BindingRec { - SkString fSlotName; - int fFieldIndex; + SkString fSlotName; + int fFieldIndex; }; SkListView::SkListView() { - fSource = NULL; // our list-source - fScrollBar = NULL; - fAnims = NULL; // array of animators[fVisibleRowCount] - fBindings = NULL; // our fields->slot array - fBindingCount = 0; // number of entries in fSlots array - fScrollIndex = 0; // number of cells to skip before first visible cell - fCurrIndex = -1; // index of "selected" cell - fVisibleRowCount = 0; // number of cells that can fit in our bounds - fAnimContentDirty = true; // true if fAnims[] have their correct content - fAnimFocusDirty = true; - - fHeights[kNormal_Height] = SkIntToScalar(16); - fHeights[kSelected_Height] = SkIntToScalar(16); - - this->setFlags(this->getFlags() | kFocusable_Mask); + fSource = NULL; // our list-source + fScrollBar = NULL; + fAnims = NULL; // array of animators[fVisibleRowCount] + fBindings = NULL; // our fields->slot array + fBindingCount = 0; // number of entries in fSlots array + fScrollIndex = 0; // number of cells to skip before first visible cell + fCurrIndex = -1; // index of "selected" cell + fVisibleRowCount = 0; // number of cells that can fit in our bounds + fAnimContentDirty = true; // true if fAnims[] have their correct content + fAnimFocusDirty = true; + + fHeights[kNormal_Height] = SkIntToScalar(16); + fHeights[kSelected_Height] = SkIntToScalar(16); + + this->setFlags(this->getFlags() | kFocusable_Mask); } SkListView::~SkListView() { - SkSafeUnref(fScrollBar); - SkSafeUnref(fSource); - delete[] fAnims; - delete[] fBindings; + SkSafeUnref(fScrollBar); + SkSafeUnref(fSource); + delete[] fAnims; + delete[] fBindings; } void SkListView::setHasScrollBar(bool hasSB) { - if (hasSB != this->hasScrollBar()) - { - if (hasSB) - { - SkASSERT(fScrollBar == NULL); - fScrollBar = (SkScrollBarView*)SkWidgetFactory(kScroll_WidgetEnum); - fScrollBar->setVisibleP(true); - this->attachChildToFront(fScrollBar); - fScrollBar->setHeight(this->height()); // assume it auto-sets its width - // fScrollBar->setLoc(this->getContentWidth(), 0); - fScrollBar->setLoc(this->width()-SkIntToScalar(10), 0); - } - else - { - SkASSERT(fScrollBar); - fScrollBar->detachFromParent(); - fScrollBar->unref(); - fScrollBar = NULL; - } - this->dirtyCache(kAnimContent_DirtyFlag); - } + if (hasSB != this->hasScrollBar()) + { + if (hasSB) + { + SkASSERT(fScrollBar == NULL); + fScrollBar = (SkScrollBarView*)SkWidgetFactory(kScroll_WidgetEnum); + fScrollBar->setVisibleP(true); + this->attachChildToFront(fScrollBar); + fScrollBar->setHeight(this->height()); // assume it auto-sets its width + // fScrollBar->setLoc(this->getContentWidth(), 0); + fScrollBar->setLoc(this->width()-SkIntToScalar(10), 0); + } + else + { + SkASSERT(fScrollBar); + fScrollBar->detachFromParent(); + fScrollBar->unref(); + fScrollBar = NULL; + } + this->dirtyCache(kAnimContent_DirtyFlag); + } } void SkListView::setSelection(int index) { - if (fCurrIndex != index) - { - fAnimFocusDirty = true; - this->inval(NULL); - - this->invalSelection(); - fCurrIndex = index; - this->invalSelection(); - this->ensureSelectionIsVisible(); - } + if (fCurrIndex != index) + { + fAnimFocusDirty = true; + this->inval(NULL); + + this->invalSelection(); + fCurrIndex = index; + this->invalSelection(); + this->ensureSelectionIsVisible(); + } } bool SkListView::moveSelectionUp() { - if (fSource) - { - int index = fCurrIndex; - if (index < 0) // no selection - index = fSource->countRecords() - 1; - else - index = SkMax32(index - 1, 0); - - if (fCurrIndex != index) - { - this->setSelection(index); - return true; - } - } - return false; + if (fSource) + { + int index = fCurrIndex; + if (index < 0) // no selection + index = fSource->countRecords() - 1; + else + index = SkMax32(index - 1, 0); + + if (fCurrIndex != index) + { + this->setSelection(index); + return true; + } + } + return false; } bool SkListView::moveSelectionDown() { - if (fSource) - { - int index = fCurrIndex; - if (index < 0) // no selection - index = 0; - else - index = SkMin32(index + 1, fSource->countRecords() - 1); - - if (fCurrIndex != index) - { - this->setSelection(index); - return true; - } - } - return false; + if (fSource) + { + int index = fCurrIndex; + if (index < 0) // no selection + index = 0; + else + index = SkMin32(index + 1, fSource->countRecords() - 1); + + if (fCurrIndex != index) + { + this->setSelection(index); + return true; + } + } + return false; } void SkListView::invalSelection() { - SkRect r; - if (this->getRowRect(fCurrIndex, &r)) - this->inval(&r); + SkRect r; + if (this->getRowRect(fCurrIndex, &r)) + this->inval(&r); } void SkListView::ensureSelectionIsVisible() { - if (fSource && (unsigned)fCurrIndex < (unsigned)fSource->countRecords()) - { - int index = this->logicalToVisualIndex(fCurrIndex); - - if ((unsigned)index >= (unsigned)fVisibleRowCount) // need to scroll - { - int newIndex; - - if (index < 0) // too high - newIndex = fCurrIndex; - else - newIndex = fCurrIndex - fVisibleRowCount + 1; - SkASSERT((unsigned)newIndex < (unsigned)fSource->countRecords()); - this->inval(NULL); - - if (fScrollIndex != newIndex) - { - fScrollIndex = newIndex; - if (fScrollBar) - fScrollBar->setStart(newIndex); - this->dirtyCache(kAnimContent_DirtyFlag); - } - } - } + if (fSource && (unsigned)fCurrIndex < (unsigned)fSource->countRecords()) + { + int index = this->logicalToVisualIndex(fCurrIndex); + + if ((unsigned)index >= (unsigned)fVisibleRowCount) // need to scroll + { + int newIndex; + + if (index < 0) // too high + newIndex = fCurrIndex; + else + newIndex = fCurrIndex - fVisibleRowCount + 1; + SkASSERT((unsigned)newIndex < (unsigned)fSource->countRecords()); + this->inval(NULL); + + if (fScrollIndex != newIndex) + { + fScrollIndex = newIndex; + if (fScrollBar) + fScrollBar->setStart(newIndex); + this->dirtyCache(kAnimContent_DirtyFlag); + } + } + } } SkScalar SkListView::getContentWidth() const { - SkScalar width = this->width(); - - if (fScrollBar) - { - width -= fScrollBar->width(); - if (width < 0) - width = 0; - } - return width; + SkScalar width = this->width(); + + if (fScrollBar) + { + width -= fScrollBar->width(); + if (width < 0) + width = 0; + } + return width; } bool SkListView::getRowRect(int index, SkRect* r) const { - SkASSERT(r); - - index = this->logicalToVisualIndex(index); - if (index >= 0) - { - int selection = this->logicalToVisualIndex(fCurrIndex); - - SkScalar height = fHeights[index == selection ? kSelected_Height : kNormal_Height]; - SkScalar top = index * fHeights[kNormal_Height]; - - if (index > selection && selection >= 0) - top += fHeights[kSelected_Height] - fHeights[kNormal_Height]; - - if (top < this->height()) - { - if (r) - r->set(0, top, this->getContentWidth(), top + height); - return true; - } - } - return false; + SkASSERT(r); + + index = this->logicalToVisualIndex(index); + if (index >= 0) + { + int selection = this->logicalToVisualIndex(fCurrIndex); + + SkScalar height = fHeights[index == selection ? kSelected_Height : kNormal_Height]; + SkScalar top = index * fHeights[kNormal_Height]; + + if (index > selection && selection >= 0) + top += fHeights[kSelected_Height] - fHeights[kNormal_Height]; + + if (top < this->height()) + { + if (r) + r->set(0, top, this->getContentWidth(), top + height); + return true; + } + } + return false; } SkListSource* SkListView::setListSource(SkListSource* src) { - if (fSource != src) - { - SkRefCnt_SafeAssign(fSource, src); - this->ensureSelectionIsVisible(); - this->inval(NULL); - - if (fScrollBar) - fScrollBar->setTotal(fSource->countRecords()); - } - return src; + if (fSource != src) + { + SkRefCnt_SafeAssign(fSource, src); + this->ensureSelectionIsVisible(); + this->inval(NULL); + + if (fScrollBar) + fScrollBar->setTotal(fSource->countRecords()); + } + return src; } void SkListView::dirtyCache(unsigned dirtyFlags) { - if (dirtyFlags & kAnimCount_DirtyFlag) - { - delete fAnims; - fAnims = NULL; - fAnimContentDirty = true; - fAnimFocusDirty = true; - } - if (dirtyFlags & kAnimContent_DirtyFlag) - { - if (!fAnimContentDirty) - { - this->inval(NULL); - fAnimContentDirty = true; - } - fAnimFocusDirty = true; - } + if (dirtyFlags & kAnimCount_DirtyFlag) + { + delete fAnims; + fAnims = NULL; + fAnimContentDirty = true; + fAnimFocusDirty = true; + } + if (dirtyFlags & kAnimContent_DirtyFlag) + { + if (!fAnimContentDirty) + { + this->inval(NULL); + fAnimContentDirty = true; + } + fAnimFocusDirty = true; + } } bool SkListView::ensureCache() { - if (fSkinName.size() == 0) - return false; - - if (fAnims == NULL) - { - int n = SkMax32(1, fVisibleRowCount); - - SkASSERT(fAnimContentDirty); - fAnims = new SkAnimator[n]; - for (int i = 0; i < n; i++) - { - fAnims[i].setHostEventSink(this); - init_skin_anim(fSkinName.c_str(), &fAnims[i]); - } - - fHeights[kNormal_Height] = fAnims[0].getScalar("idleHeight", "value"); - fHeights[kSelected_Height] = fAnims[0].getScalar("focusedHeight", "value"); - - fAnimFocusDirty = true; - } - - if (fAnimContentDirty && fSource) - { - fAnimContentDirty = false; - - SkString str; - SkEvent evt("user"); - evt.setString("id", "setFields"); - evt.setS32("rowCount", fVisibleRowCount); - - SkEvent dimEvt("user"); - dimEvt.setString("id", "setDim"); - dimEvt.setScalar("dimX", this->getContentWidth()); - dimEvt.setScalar("dimY", this->height()); - - for (int i = fScrollIndex; i < fScrollIndex + fVisibleRowCount; i++) - { - evt.setS32("relativeIndex", i - fScrollIndex); - for (int j = 0; j < fBindingCount; j++) - { - fSource->getRecord(i, fBindings[j].fFieldIndex, &str); + if (fSkinName.size() == 0) + return false; + + if (fAnims == NULL) + { + int n = SkMax32(1, fVisibleRowCount); + + SkASSERT(fAnimContentDirty); + fAnims = new SkAnimator[n]; + for (int i = 0; i < n; i++) + { + fAnims[i].setHostEventSink(this); + init_skin_anim(fSkinName.c_str(), &fAnims[i]); + } + + fHeights[kNormal_Height] = fAnims[0].getScalar("idleHeight", "value"); + fHeights[kSelected_Height] = fAnims[0].getScalar("focusedHeight", "value"); + + fAnimFocusDirty = true; + } + + if (fAnimContentDirty && fSource) + { + fAnimContentDirty = false; + + SkString str; + SkEvent evt("user"); + evt.setString("id", "setFields"); + evt.setS32("rowCount", fVisibleRowCount); + + SkEvent dimEvt("user"); + dimEvt.setString("id", "setDim"); + dimEvt.setScalar("dimX", this->getContentWidth()); + dimEvt.setScalar("dimY", this->height()); + + for (int i = fScrollIndex; i < fScrollIndex + fVisibleRowCount; i++) + { + evt.setS32("relativeIndex", i - fScrollIndex); + for (int j = 0; j < fBindingCount; j++) + { + fSource->getRecord(i, fBindings[j].fFieldIndex, &str); //SkDEBUGF(("getRecord(%d,%d,%s) slot(%s)\n", i, fBindings[j].fFieldIndex, str.c_str(), fBindings[j].fSlotName.c_str())); - evt.setString(fBindings[j].fSlotName.c_str(), str.c_str()); - } - (void)fAnims[i % fVisibleRowCount].doUserEvent(evt); - (void)fAnims[i % fVisibleRowCount].doUserEvent(dimEvt); - } - fAnimFocusDirty = true; - } - - if (fAnimFocusDirty) - { + evt.setString(fBindings[j].fSlotName.c_str(), str.c_str()); + } + (void)fAnims[i % fVisibleRowCount].doUserEvent(evt); + (void)fAnims[i % fVisibleRowCount].doUserEvent(dimEvt); + } + fAnimFocusDirty = true; + } + + if (fAnimFocusDirty) + { //SkDEBUGF(("service fAnimFocusDirty\n")); - fAnimFocusDirty = false; + fAnimFocusDirty = false; - SkEvent focusEvt("user"); - focusEvt.setString("id", "setFocus"); + SkEvent focusEvt("user"); + focusEvt.setString("id", "setFocus"); - for (int i = fScrollIndex; i < fScrollIndex + fVisibleRowCount; i++) - { - focusEvt.setS32("FOCUS", i == fCurrIndex); - (void)fAnims[i % fVisibleRowCount].doUserEvent(focusEvt); - } - } + for (int i = fScrollIndex; i < fScrollIndex + fVisibleRowCount; i++) + { + focusEvt.setS32("FOCUS", i == fCurrIndex); + (void)fAnims[i % fVisibleRowCount].doUserEvent(focusEvt); + } + } - return true; + return true; } void SkListView::ensureVisibleRowCount() { - SkScalar height = this->height(); - int n = 0; - - if (height > 0) - { - n = 1; - height -= fHeights[kSelected_Height]; - if (height > 0) - { - SkScalar count = SkScalarDiv(height, fHeights[kNormal_Height]); - n += SkScalarFloor(count); - if (count - SkIntToScalar(n) > SK_Scalar1*3/4) - n += 1; - - // SkDebugf("count %g, n %d\n", count/65536., n); - } - } - - if (fVisibleRowCount != n) - { - if (fScrollBar) - fScrollBar->setShown(n); - - fVisibleRowCount = n; - this->ensureSelectionIsVisible(); - this->dirtyCache(kAnimCount_DirtyFlag | kAnimContent_DirtyFlag); - } + SkScalar height = this->height(); + int n = 0; + + if (height > 0) + { + n = 1; + height -= fHeights[kSelected_Height]; + if (height > 0) + { + SkScalar count = SkScalarDiv(height, fHeights[kNormal_Height]); + n += SkScalarFloor(count); + if (count - SkIntToScalar(n) > SK_Scalar1*3/4) + n += 1; + + // SkDebugf("count %g, n %d\n", count/65536., n); + } + } + + if (fVisibleRowCount != n) + { + if (fScrollBar) + fScrollBar->setShown(n); + + fVisibleRowCount = n; + this->ensureSelectionIsVisible(); + this->dirtyCache(kAnimCount_DirtyFlag | kAnimContent_DirtyFlag); + } } /////////////////////////////////////////////////////////////////////////////////////////////// @@ -336,76 +336,76 @@ void SkListView::ensureVisibleRowCount() void SkListView::onSizeChange() { - this->INHERITED::onSizeChange(); + this->INHERITED::onSizeChange(); - if (fScrollBar) - fScrollBar->setLoc(this->width()-SkIntToScalar(10), 0); + if (fScrollBar) + fScrollBar->setLoc(this->width()-SkIntToScalar(10), 0); - this->ensureVisibleRowCount(); + this->ensureVisibleRowCount(); } void SkListView::onDraw(SkCanvas* canvas) { - this->INHERITED::onDraw(canvas); + this->INHERITED::onDraw(canvas); - this->ensureVisibleRowCount(); + this->ensureVisibleRowCount(); - int visibleCount = SkMin32(fVisibleRowCount, fSource->countRecords() - fScrollIndex); - if (visibleCount == 0 || !this->ensureCache()) - return; + int visibleCount = SkMin32(fVisibleRowCount, fSource->countRecords() - fScrollIndex); + if (visibleCount == 0 || !this->ensureCache()) + return; //SkDebugf("visibleCount %d scrollIndex %d currIndex %d\n", visibleCount, fScrollIndex, fCurrIndex); - SkAutoCanvasRestore ar(canvas, true); - SkMSec now = SkTime::GetMSecs(); - SkRect bounds; - - bounds.fLeft = 0; - bounds.fRight = this->getContentWidth(); - bounds.fBottom = 0; - // assign bounds.fTop inside the loop - - // hack to reveal our bounds for debugging - if (this->hasFocus()) - canvas->drawARGB(0x11, 0, 0, 0xFF); - else - canvas->drawARGB(0x11, 0x88, 0x88, 0x88); - - for (int i = fScrollIndex; i < fScrollIndex + visibleCount; i++) - { - SkPaint paint; - SkScalar height = fHeights[i == fCurrIndex ? kSelected_Height : kNormal_Height]; - - bounds.fTop = bounds.fBottom; - bounds.fBottom += height; - - canvas->save(); - if (fAnims[i % fVisibleRowCount].draw(canvas, &paint, now) != SkAnimator::kNotDifferent) - this->inval(&bounds); - canvas->restore(); - - canvas->translate(0, height); - } + SkAutoCanvasRestore ar(canvas, true); + SkMSec now = SkTime::GetMSecs(); + SkRect bounds; + + bounds.fLeft = 0; + bounds.fRight = this->getContentWidth(); + bounds.fBottom = 0; + // assign bounds.fTop inside the loop + + // hack to reveal our bounds for debugging + if (this->hasFocus()) + canvas->drawARGB(0x11, 0, 0, 0xFF); + else + canvas->drawARGB(0x11, 0x88, 0x88, 0x88); + + for (int i = fScrollIndex; i < fScrollIndex + visibleCount; i++) + { + SkPaint paint; + SkScalar height = fHeights[i == fCurrIndex ? kSelected_Height : kNormal_Height]; + + bounds.fTop = bounds.fBottom; + bounds.fBottom += height; + + canvas->save(); + if (fAnims[i % fVisibleRowCount].draw(canvas, &paint, now) != SkAnimator::kNotDifferent) + this->inval(&bounds); + canvas->restore(); + + canvas->translate(0, height); + } } bool SkListView::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventType_Key)) - { - switch (evt.getFast32()) { - case kUp_SkKey: - return this->moveSelectionUp(); - case kDown_SkKey: - return this->moveSelectionDown(); - case kRight_SkKey: - case kOK_SkKey: - this->postWidgetEvent(); - return true; - default: - break; - } - } - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventType_Key)) + { + switch (evt.getFast32()) { + case kUp_SkKey: + return this->moveSelectionUp(); + case kDown_SkKey: + return this->moveSelectionDown(); + case kRight_SkKey: + case kOK_SkKey: + this->postWidgetEvent(); + return true; + default: + break; + } + } + return this->INHERITED::onEvent(evt); } /////////////////////////////////////////////////////////////////////////////////////////////// @@ -414,78 +414,78 @@ static const char gListViewEventSlot[] = "sk-listview-slot-name"; /*virtual*/ bool SkListView::onPrepareWidgetEvent(SkEvent* evt) { - if (fSource && fCurrIndex >= 0 && this->INHERITED::onPrepareWidgetEvent(evt) && - fSource->prepareWidgetEvent(evt, fCurrIndex)) - { - evt->setS32(gListViewEventSlot, fCurrIndex); - return true; - } - return false; + if (fSource && fCurrIndex >= 0 && this->INHERITED::onPrepareWidgetEvent(evt) && + fSource->prepareWidgetEvent(evt, fCurrIndex)) + { + evt->setS32(gListViewEventSlot, fCurrIndex); + return true; + } + return false; } int SkListView::GetWidgetEventListIndex(const SkEvent& evt) { - int32_t index; + int32_t index; - return evt.findS32(gListViewEventSlot, &index) ? index : -1; + return evt.findS32(gListViewEventSlot, &index) ? index : -1; } /////////////////////////////////////////////////////////////////////////////////////////////// void SkListView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); - - { - bool hasScrollBar; - if (dom.findBool(node, "scrollBar", &hasScrollBar)) - this->setHasScrollBar(hasScrollBar); - } - - const SkDOM::Node* child; - - if ((child = dom.getFirstChild(node, "bindings")) != NULL) - { - delete[] fBindings; - fBindings = NULL; - fBindingCount = 0; - - SkListSource* listSrc = SkListSource::Factory(dom.findAttr(child, "data-fields")); - SkASSERT(listSrc); - fSkinName.set(dom.findAttr(child, "skin-slots")); - SkASSERT(fSkinName.size()); - - this->setListSource(listSrc)->unref(); - - int count = dom.countChildren(child, "bind"); - if (count > 0) - { - fBindings = new BindingRec[count]; - count = 0; // reuse this to count up to the number of valid bindings - - child = dom.getFirstChild(child, "bind"); - SkASSERT(child); - do { - const char* fieldName = dom.findAttr(child, "field"); - const char* slotName = dom.findAttr(child, "slot"); - if (fieldName && slotName) - { - fBindings[count].fFieldIndex = listSrc->findFieldIndex(fieldName); - if (fBindings[count].fFieldIndex >= 0) - fBindings[count++].fSlotName.set(slotName); - } - } while ((child = dom.getNextSibling(child, "bind")) != NULL); - - fBindingCount = SkToU16(count); - if (count == 0) - { - SkDEBUGF(("SkListView::onInflate: no valid <bind> elements in <listsource>\n")); - delete[] fBindings; - } - } - this->dirtyCache(kAnimCount_DirtyFlag); - this->setSelection(0); - } + this->INHERITED::onInflate(dom, node); + + { + bool hasScrollBar; + if (dom.findBool(node, "scrollBar", &hasScrollBar)) + this->setHasScrollBar(hasScrollBar); + } + + const SkDOM::Node* child; + + if ((child = dom.getFirstChild(node, "bindings")) != NULL) + { + delete[] fBindings; + fBindings = NULL; + fBindingCount = 0; + + SkListSource* listSrc = SkListSource::Factory(dom.findAttr(child, "data-fields")); + SkASSERT(listSrc); + fSkinName.set(dom.findAttr(child, "skin-slots")); + SkASSERT(fSkinName.size()); + + this->setListSource(listSrc)->unref(); + + int count = dom.countChildren(child, "bind"); + if (count > 0) + { + fBindings = new BindingRec[count]; + count = 0; // reuse this to count up to the number of valid bindings + + child = dom.getFirstChild(child, "bind"); + SkASSERT(child); + do { + const char* fieldName = dom.findAttr(child, "field"); + const char* slotName = dom.findAttr(child, "slot"); + if (fieldName && slotName) + { + fBindings[count].fFieldIndex = listSrc->findFieldIndex(fieldName); + if (fBindings[count].fFieldIndex >= 0) + fBindings[count++].fSlotName.set(slotName); + } + } while ((child = dom.getNextSibling(child, "bind")) != NULL); + + fBindingCount = SkToU16(count); + if (count == 0) + { + SkDEBUGF(("SkListView::onInflate: no valid <bind> elements in <listsource>\n")); + delete[] fBindings; + } + } + this->dirtyCache(kAnimCount_DirtyFlag); + this->setSelection(0); + } } ///////////////////////////////////////////////////////////////////////////////////////////// @@ -493,137 +493,137 @@ void SkListView::onInflate(const SkDOM& dom, const SkDOM::Node* node) class SkXMLListSource : public SkListSource { public: - SkXMLListSource(const char doc[], size_t len); - virtual ~SkXMLListSource() - { - delete[] fFields; - delete[] fRecords; - } - - virtual int countFields() { return fFieldCount; } - virtual void getFieldName(int index, SkString* field) - { - SkASSERT((unsigned)index < (unsigned)fFieldCount); - if (field) - *field = fFields[index]; - } - virtual int findFieldIndex(const char field[]) - { - for (int i = 0; i < fFieldCount; i++) - if (fFields[i].equals(field)) - return i; - return -1; - } - - virtual int countRecords() { return fRecordCount; } - virtual void getRecord(int rowIndex, int fieldIndex, SkString* data) - { - SkASSERT((unsigned)rowIndex < (unsigned)fRecordCount); - SkASSERT((unsigned)fieldIndex < (unsigned)fFieldCount); - if (data) - *data = fRecords[rowIndex * fFieldCount + fieldIndex]; - } - - virtual bool prepareWidgetEvent(SkEvent* evt, int rowIndex) - { - // hack, for testing right now. Need the xml to tell us what to jam in and where - SkString data; - - this->getRecord(rowIndex, 0, &data); - evt->setString("xml-listsource", data.c_str()); - return true; - } - + SkXMLListSource(const char doc[], size_t len); + virtual ~SkXMLListSource() + { + delete[] fFields; + delete[] fRecords; + } + + virtual int countFields() { return fFieldCount; } + virtual void getFieldName(int index, SkString* field) + { + SkASSERT((unsigned)index < (unsigned)fFieldCount); + if (field) + *field = fFields[index]; + } + virtual int findFieldIndex(const char field[]) + { + for (int i = 0; i < fFieldCount; i++) + if (fFields[i].equals(field)) + return i; + return -1; + } + + virtual int countRecords() { return fRecordCount; } + virtual void getRecord(int rowIndex, int fieldIndex, SkString* data) + { + SkASSERT((unsigned)rowIndex < (unsigned)fRecordCount); + SkASSERT((unsigned)fieldIndex < (unsigned)fFieldCount); + if (data) + *data = fRecords[rowIndex * fFieldCount + fieldIndex]; + } + + virtual bool prepareWidgetEvent(SkEvent* evt, int rowIndex) + { + // hack, for testing right now. Need the xml to tell us what to jam in and where + SkString data; + + this->getRecord(rowIndex, 0, &data); + evt->setString("xml-listsource", data.c_str()); + return true; + } + private: - SkString* fFields; // [fFieldCount] - SkString* fRecords; // [fRecordCount][fFieldCount] - int fFieldCount, fRecordCount; + SkString* fFields; // [fFieldCount] + SkString* fRecords; // [fRecordCount][fFieldCount] + int fFieldCount, fRecordCount; }; #include "SkDOM.h" SkXMLListSource::SkXMLListSource(const char doc[], size_t len) { - fFieldCount = fRecordCount = 0; - fFields = fRecords = NULL; - - SkDOM dom; - - const SkDOM::Node* node = dom.build(doc, len); - SkASSERT(node); - const SkDOM::Node* child; - - child = dom.getFirstChild(node, "fields"); - if (child) - { - fFieldCount = dom.countChildren(child, "field"); - fFields = new SkString[fFieldCount]; - - int n = 0; - child = dom.getFirstChild(child, "field"); - while (child) - { - fFields[n].set(dom.findAttr(child, "name")); - child = dom.getNextSibling(child, "field"); - n += 1; - } - SkASSERT(n == fFieldCount); - } - - child = dom.getFirstChild(node, "records"); - if (child) - { - fRecordCount = dom.countChildren(child, "record"); - fRecords = new SkString[fRecordCount * fFieldCount]; - - int n = 0; - child = dom.getFirstChild(child, "record"); - while (child) - { - for (int i = 0; i < fFieldCount; i++) - fRecords[n * fFieldCount + i].set(dom.findAttr(child, fFields[i].c_str())); - child = dom.getNextSibling(child, "record"); - n += 1; - } - SkASSERT(n == fRecordCount); - } + fFieldCount = fRecordCount = 0; + fFields = fRecords = NULL; + + SkDOM dom; + + const SkDOM::Node* node = dom.build(doc, len); + SkASSERT(node); + const SkDOM::Node* child; + + child = dom.getFirstChild(node, "fields"); + if (child) + { + fFieldCount = dom.countChildren(child, "field"); + fFields = new SkString[fFieldCount]; + + int n = 0; + child = dom.getFirstChild(child, "field"); + while (child) + { + fFields[n].set(dom.findAttr(child, "name")); + child = dom.getNextSibling(child, "field"); + n += 1; + } + SkASSERT(n == fFieldCount); + } + + child = dom.getFirstChild(node, "records"); + if (child) + { + fRecordCount = dom.countChildren(child, "record"); + fRecords = new SkString[fRecordCount * fFieldCount]; + + int n = 0; + child = dom.getFirstChild(child, "record"); + while (child) + { + for (int i = 0; i < fFieldCount; i++) + fRecords[n * fFieldCount + i].set(dom.findAttr(child, fFields[i].c_str())); + child = dom.getNextSibling(child, "record"); + n += 1; + } + SkASSERT(n == fRecordCount); + } } ///////////////////////////////////////////////////////////////////////////////////////////// SkListSource* SkListSource::Factory(const char name[]) { - static const char gDoc[] = - "<db name='contacts.db'>" - "<fields>" - "<field name='name'/>" - "<field name='work-num'/>" - "<field name='home-num'/>" - "<field name='type'/>" - "</fields>" - "<records>" - "<record name='Andy McFadden' work-num='919 357-1234' home-num='919 123-4567' type='0'/>" - "<record name='Brian Swetland' work-num='919 123-1234' home-num='929 123-4567' type='1' />" - "<record name='Chris Desalvo' work-num='919 345-1234' home-num='949 123-4567' type='1' />" - "<record name='Chris White' work-num='919 234-1234' home-num='939 123-4567' type='2' />" - "<record name='Dan Bornstein' work-num='919 357-1234' home-num='919 123-4567' type='0' />" - "<record name='Don Cung' work-num='919 123-1234' home-num='929 123-4567' type='2' />" - "<record name='Eric Fischer' work-num='919 345-1234' home-num='949 123-4567' type='2' />" - "<record name='Ficus Kirkpatric' work-num='919 234-1234' home-num='939 123-4567' type='1' />" - "<record name='Jack Veenstra' work-num='919 234-1234' home-num='939 123-4567' type='2' />" - "<record name='Jeff Yaksick' work-num='919 234-1234' home-num='939 123-4567' type='0' />" - "<record name='Joe Onorato' work-num='919 234-1234' home-num='939 123-4567' type='0' />" - "<record name='Mathias Agopian' work-num='919 234-1234' home-num='939 123-4567' type='1' />" - "<record name='Mike Fleming' work-num='919 234-1234' home-num='939 123-4567' type='2' />" - "<record name='Nick Sears' work-num='919 234-1234' home-num='939 123-4567' type='1' />" - "<record name='Rich Miner' work-num='919 234-1234' home-num='939 123-4567' type='1' />" - "<record name='Tracey Cole' work-num='919 234-1234' home-num='939 123-4567' type='0' />" - "<record name='Wei Huang' work-num='919 234-1234' home-num='939 123-4567' type='0' />" - "</records>" - "</db>"; - + static const char gDoc[] = + "<db name='contacts.db'>" + "<fields>" + "<field name='name'/>" + "<field name='work-num'/>" + "<field name='home-num'/>" + "<field name='type'/>" + "</fields>" + "<records>" + "<record name='Andy McFadden' work-num='919 357-1234' home-num='919 123-4567' type='0'/>" + "<record name='Brian Swetland' work-num='919 123-1234' home-num='929 123-4567' type='1' />" + "<record name='Chris Desalvo' work-num='919 345-1234' home-num='949 123-4567' type='1' />" + "<record name='Chris White' work-num='919 234-1234' home-num='939 123-4567' type='2' />" + "<record name='Dan Bornstein' work-num='919 357-1234' home-num='919 123-4567' type='0' />" + "<record name='Don Cung' work-num='919 123-1234' home-num='929 123-4567' type='2' />" + "<record name='Eric Fischer' work-num='919 345-1234' home-num='949 123-4567' type='2' />" + "<record name='Ficus Kirkpatric' work-num='919 234-1234' home-num='939 123-4567' type='1' />" + "<record name='Jack Veenstra' work-num='919 234-1234' home-num='939 123-4567' type='2' />" + "<record name='Jeff Yaksick' work-num='919 234-1234' home-num='939 123-4567' type='0' />" + "<record name='Joe Onorato' work-num='919 234-1234' home-num='939 123-4567' type='0' />" + "<record name='Mathias Agopian' work-num='919 234-1234' home-num='939 123-4567' type='1' />" + "<record name='Mike Fleming' work-num='919 234-1234' home-num='939 123-4567' type='2' />" + "<record name='Nick Sears' work-num='919 234-1234' home-num='939 123-4567' type='1' />" + "<record name='Rich Miner' work-num='919 234-1234' home-num='939 123-4567' type='1' />" + "<record name='Tracey Cole' work-num='919 234-1234' home-num='939 123-4567' type='0' />" + "<record name='Wei Huang' work-num='919 234-1234' home-num='939 123-4567' type='0' />" + "</records>" + "</db>"; + //SkDebugf("doc size %d\n", sizeof(gDoc)-1); - return new SkXMLListSource(gDoc, sizeof(gDoc) - 1); + return new SkXMLListSource(gDoc, sizeof(gDoc) - 1); } diff --git a/src/views/animated/SkProgressBarView.cpp b/src/views/animated/SkProgressBarView.cpp index ce26ac4ed8..e7754eb612 100644 --- a/src/views/animated/SkProgressBarView.cpp +++ b/src/views/animated/SkProgressBarView.cpp @@ -13,97 +13,97 @@ SkProgressBarView::SkProgressBarView() { - init_skin_anim(kProgress_SkinEnum, &fAnim); - fAnim.setHostEventSink(this); - fProgress = 0; - fMax = 100; - + init_skin_anim(kProgress_SkinEnum, &fAnim); + fAnim.setHostEventSink(this); + fProgress = 0; + fMax = 100; + } void SkProgressBarView::changeProgress(int diff) { - int newProg = fProgress + diff; - if (newProg > 0 && newProg < fMax) - this->setProgress(newProg); - //otherwise i'll just leave it as it is - //this implies that if a new max and progress are set, max must be set first + int newProg = fProgress + diff; + if (newProg > 0 && newProg < fMax) + this->setProgress(newProg); + //otherwise i'll just leave it as it is + //this implies that if a new max and progress are set, max must be set first } /*virtual*/ void SkProgressBarView::onDraw(SkCanvas* canvas) { - SkPaint paint; - SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); - - if (diff == SkAnimator::kDifferent) - this->inval(NULL); - else if (diff == SkAnimator::kPartiallyDifferent) - { - SkRect bounds; - fAnim.getInvalBounds(&bounds); - this->inval(&bounds); - } + SkPaint paint; + SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); + + if (diff == SkAnimator::kDifferent) + this->inval(NULL); + else if (diff == SkAnimator::kPartiallyDifferent) + { + SkRect bounds; + fAnim.getInvalBounds(&bounds); + this->inval(&bounds); + } } - + /*virtual*/ bool SkProgressBarView::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventType_Inval)) - { - this->inval(NULL); - return true; - } - if (evt.isType("recommendDim")) - { - SkScalar height; - - if (evt.findScalar("y", &height)) - this->setHeight(height); - return true; - } - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventType_Inval)) + { + this->inval(NULL); + return true; + } + if (evt.isType("recommendDim")) + { + SkScalar height; + + if (evt.findScalar("y", &height)) + this->setHeight(height); + return true; + } + return this->INHERITED::onEvent(evt); } /*virtual*/ void SkProgressBarView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); - int32_t temp; - if (dom.findS32(node, "max", &temp)) - this->setMax(temp); - if (dom.findS32(node, "progress", &temp)) - this->setProgress(temp); + this->INHERITED::onInflate(dom, node); + int32_t temp; + if (dom.findS32(node, "max", &temp)) + this->setMax(temp); + if (dom.findS32(node, "progress", &temp)) + this->setProgress(temp); } /*virtual*/ void SkProgressBarView::onSizeChange() { - this->INHERITED::onSizeChange(); - SkEvent evt("user"); - evt.setString("id", "setDim"); - evt.setScalar("dimX", this->width()); - evt.setScalar("dimY", this->height()); - fAnim.doUserEvent(evt); + this->INHERITED::onSizeChange(); + SkEvent evt("user"); + evt.setString("id", "setDim"); + evt.setScalar("dimX", this->width()); + evt.setScalar("dimY", this->height()); + fAnim.doUserEvent(evt); } void SkProgressBarView::reset() { - fProgress = 0; - SkEvent e("user"); - e.setString("id", "reset"); - fAnim.doUserEvent(e); + fProgress = 0; + SkEvent e("user"); + e.setString("id", "reset"); + fAnim.doUserEvent(e); } void SkProgressBarView::setMax(int max) { - fMax = max; - SkEvent e("user"); - e.setString("id", "setMax"); - e.setS32("newMax", max); - fAnim.doUserEvent(e); + fMax = max; + SkEvent e("user"); + e.setString("id", "setMax"); + e.setS32("newMax", max); + fAnim.doUserEvent(e); } void SkProgressBarView::setProgress(int progress) { - fProgress = progress; - SkEvent e("user"); - e.setString("id", "setProgress"); - e.setS32("newProgress", progress); - fAnim.doUserEvent(e); + fProgress = progress; + SkEvent e("user"); + e.setString("id", "setProgress"); + e.setS32("newProgress", progress); + fAnim.doUserEvent(e); } diff --git a/src/views/animated/SkScrollBarView.cpp b/src/views/animated/SkScrollBarView.cpp index 98288f5b74..0d937750be 100644 --- a/src/views/animated/SkScrollBarView.cpp +++ b/src/views/animated/SkScrollBarView.cpp @@ -16,131 +16,131 @@ SkScrollBarView::SkScrollBarView() { - fAnim.setHostEventSink(this); - init_skin_anim(kScroll_SkinEnum, &fAnim); + fAnim.setHostEventSink(this); + init_skin_anim(kScroll_SkinEnum, &fAnim); - fTotalLength = 0; - fStartPoint = 0; - fShownLength = 0; + fTotalLength = 0; + fStartPoint = 0; + fShownLength = 0; - this->adjust(); + this->adjust(); } void SkScrollBarView::setStart(unsigned start) { - if ((int)start < 0) - start = 0; - - if (fStartPoint != start) - { - fStartPoint = start; - this->adjust(); - } + if ((int)start < 0) + start = 0; + + if (fStartPoint != start) + { + fStartPoint = start; + this->adjust(); + } } void SkScrollBarView::setShown(unsigned shown) { - if ((int)shown < 0) - shown = 0; - - if (fShownLength != shown) - { - fShownLength = shown; - this->adjust(); - } + if ((int)shown < 0) + shown = 0; + + if (fShownLength != shown) + { + fShownLength = shown; + this->adjust(); + } } void SkScrollBarView::setTotal(unsigned total) { - if ((int)total < 0) - total = 0; - - if (fTotalLength != total) - { - fTotalLength = total; - this->adjust(); - } + if ((int)total < 0) + total = 0; + + if (fTotalLength != total) + { + fTotalLength = total; + this->adjust(); + } } /* virtual */ void SkScrollBarView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { - this->INHERITED::onInflate(dom, node); - - int32_t value; - if (dom.findS32(node, "total", &value)) - this->setTotal(value); - if (dom.findS32(node, "shown", &value)) - this->setShown(value); + this->INHERITED::onInflate(dom, node); + + int32_t value; + if (dom.findS32(node, "total", &value)) + this->setTotal(value); + if (dom.findS32(node, "shown", &value)) + this->setShown(value); } /*virtual*/ void SkScrollBarView::onSizeChange() { - this->INHERITED::onSizeChange(); - SkEvent evt("user"); - evt.setString("id", "setDim"); - evt.setScalar("dimX", this->width()); - evt.setScalar("dimY", this->height()); - fAnim.doUserEvent(evt); + this->INHERITED::onSizeChange(); + SkEvent evt("user"); + evt.setString("id", "setDim"); + evt.setScalar("dimX", this->width()); + evt.setScalar("dimY", this->height()); + fAnim.doUserEvent(evt); } /*virtual*/ void SkScrollBarView::onDraw(SkCanvas* canvas) { - SkPaint paint; - SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); - - if (diff == SkAnimator::kDifferent) - this->inval(NULL); - else if (diff == SkAnimator::kPartiallyDifferent) - { - SkRect bounds; - fAnim.getInvalBounds(&bounds); - this->inval(&bounds); - } + SkPaint paint; + SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); + + if (diff == SkAnimator::kDifferent) + this->inval(NULL); + else if (diff == SkAnimator::kPartiallyDifferent) + { + SkRect bounds; + fAnim.getInvalBounds(&bounds); + this->inval(&bounds); + } } /*virtual*/ bool SkScrollBarView::onEvent(const SkEvent& evt) { - if (evt.isType(SK_EventType_Inval)) - { - this->inval(NULL); - return true; - } - if (evt.isType("recommendDim")) - { - SkScalar width; - - if (evt.findScalar("x", &width)) - this->setWidth(width); - return true; - } - - return this->INHERITED::onEvent(evt); + if (evt.isType(SK_EventType_Inval)) + { + this->inval(NULL); + return true; + } + if (evt.isType("recommendDim")) + { + SkScalar width; + + if (evt.findScalar("x", &width)) + this->setWidth(width); + return true; + } + + return this->INHERITED::onEvent(evt); } void SkScrollBarView::adjust() { - int total = fTotalLength; - int start = fStartPoint; - int shown = fShownLength; - int hideBar = 0; - - if (total <= 0 || shown <= 0 || shown >= total) // no bar to show - { - total = 1; // avoid divide-by-zero. should be done by skin/script - hideBar = 1; // signal we don't want a thumb - } - else - { - if (start + shown > total) - start = total - shown; - } - - SkEvent e("user"); - e.setString("id", "adjustScrollBar"); - e.setScalar("_totalLength", SkIntToScalar(total)); - e.setScalar("_startPoint", SkIntToScalar(start)); - e.setScalar("_shownLength", SkIntToScalar(shown)); -// e.setS32("hideBar", hideBar); - fAnim.doUserEvent(e); + int total = fTotalLength; + int start = fStartPoint; + int shown = fShownLength; + int hideBar = 0; + + if (total <= 0 || shown <= 0 || shown >= total) // no bar to show + { + total = 1; // avoid divide-by-zero. should be done by skin/script + hideBar = 1; // signal we don't want a thumb + } + else + { + if (start + shown > total) + start = total - shown; + } + + SkEvent e("user"); + e.setString("id", "adjustScrollBar"); + e.setScalar("_totalLength", SkIntToScalar(total)); + e.setScalar("_startPoint", SkIntToScalar(start)); + e.setScalar("_shownLength", SkIntToScalar(shown)); +// e.setS32("hideBar", hideBar); + fAnim.doUserEvent(e); } diff --git a/src/views/animated/SkStaticTextView.cpp b/src/views/animated/SkStaticTextView.cpp index 79eecd6cbd..8ab11835d7 100644 --- a/src/views/animated/SkStaticTextView.cpp +++ b/src/views/animated/SkStaticTextView.cpp @@ -21,11 +21,11 @@ static void assert_no_attr(const SkDOM& dom, const SkDOM::Node* node, const char SkStaticTextView::SkStaticTextView() { - fMargin.set(0, 0); - fMode = kFixedSize_Mode; - fSpacingAlign = SkTextBox::kStart_SpacingAlign; - -// init_skin_paint(kStaticText_SkinEnum, &fPaint); + fMargin.set(0, 0); + fMode = kFixedSize_Mode; + fSpacingAlign = SkTextBox::kStart_SpacingAlign; + +// init_skin_paint(kStaticText_SkinEnum, &fPaint); } SkStaticTextView::~SkStaticTextView() @@ -34,155 +34,155 @@ SkStaticTextView::~SkStaticTextView() void SkStaticTextView::computeSize() { - if (fMode == kAutoWidth_Mode) - { - SkScalar width = fPaint.measureText(fText.c_str(), fText.size()); - this->setWidth(width + fMargin.fX * 2); - } - else if (fMode == kAutoHeight_Mode) - { - SkScalar width = this->width() - fMargin.fX * 2; - int lines = width > 0 ? SkTextLineBreaker::CountLines(fText.c_str(), fText.size(), fPaint, width) : 0; + if (fMode == kAutoWidth_Mode) + { + SkScalar width = fPaint.measureText(fText.c_str(), fText.size()); + this->setWidth(width + fMargin.fX * 2); + } + else if (fMode == kAutoHeight_Mode) + { + SkScalar width = this->width() - fMargin.fX * 2; + int lines = width > 0 ? SkTextLineBreaker::CountLines(fText.c_str(), fText.size(), fPaint, width) : 0; - this->setHeight(lines * fPaint.getFontSpacing() + fMargin.fY * 2); - } + this->setHeight(lines * fPaint.getFontSpacing() + fMargin.fY * 2); + } } void SkStaticTextView::setMode(Mode mode) { - SkASSERT((unsigned)mode < kModeCount); + SkASSERT((unsigned)mode < kModeCount); - if (fMode != mode) - { - fMode = SkToU8(mode); - this->computeSize(); - } + if (fMode != mode) + { + fMode = SkToU8(mode); + this->computeSize(); + } } void SkStaticTextView::setSpacingAlign(SkTextBox::SpacingAlign align) { - fSpacingAlign = SkToU8(align); - this->inval(NULL); + fSpacingAlign = SkToU8(align); + this->inval(NULL); } void SkStaticTextView::getMargin(SkPoint* margin) const { - if (margin) - *margin = fMargin; + if (margin) + *margin = fMargin; } void SkStaticTextView::setMargin(SkScalar dx, SkScalar dy) { - if (fMargin.fX != dx || fMargin.fY != dy) - { - fMargin.set(dx, dy); - this->computeSize(); - this->inval(NULL); - } + if (fMargin.fX != dx || fMargin.fY != dy) + { + fMargin.set(dx, dy); + this->computeSize(); + this->inval(NULL); + } } size_t SkStaticTextView::getText(SkString* text) const { - if (text) - *text = fText; - return fText.size(); + if (text) + *text = fText; + return fText.size(); } size_t SkStaticTextView::getText(char text[]) const { - if (text) - memcpy(text, fText.c_str(), fText.size()); - return fText.size(); + if (text) + memcpy(text, fText.c_str(), fText.size()); + return fText.size(); } void SkStaticTextView::setText(const SkString& text) { - this->setText(text.c_str(), text.size()); + this->setText(text.c_str(), text.size()); } void SkStaticTextView::setText(const char text[]) { - if (text == NULL) - text = ""; - this->setText(text, strlen(text)); + if (text == NULL) + text = ""; + this->setText(text, strlen(text)); } void SkStaticTextView::setText(const char text[], size_t len) { - if (!fText.equals(text, len)) - { - fText.set(text, len); - this->computeSize(); - this->inval(NULL); - } + if (!fText.equals(text, len)) + { + fText.set(text, len); + this->computeSize(); + this->inval(NULL); + } } void SkStaticTextView::getPaint(SkPaint* paint) const { - if (paint) - *paint = fPaint; + if (paint) + *paint = fPaint; } void SkStaticTextView::setPaint(const SkPaint& paint) { - if (fPaint != paint) - { - fPaint = paint; - this->computeSize(); - this->inval(NULL); - } + if (fPaint != paint) + { + fPaint = paint; + this->computeSize(); + this->inval(NULL); + } } void SkStaticTextView::onDraw(SkCanvas* canvas) { - this->INHERITED::onDraw(canvas); + this->INHERITED::onDraw(canvas); - if (fText.isEmpty()) - return; + if (fText.isEmpty()) + return; - SkTextBox box; + SkTextBox box; - box.setMode(fMode == kAutoWidth_Mode ? SkTextBox::kOneLine_Mode : SkTextBox::kLineBreak_Mode); - box.setSpacingAlign(this->getSpacingAlign()); - box.setBox(fMargin.fX, fMargin.fY, this->width() - fMargin.fX, this->height() - fMargin.fY); - box.draw(canvas, fText.c_str(), fText.size(), fPaint); + box.setMode(fMode == kAutoWidth_Mode ? SkTextBox::kOneLine_Mode : SkTextBox::kLineBreak_Mode); + box.setSpacingAlign(this->getSpacingAlign()); + box.setBox(fMargin.fX, fMargin.fY, this->width() - fMargin.fX, this->height() - fMargin.fY); + box.draw(canvas, fText.c_str(), fText.size(), fPaint); } void SkStaticTextView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { if (false) { // avoid bit rot, suppress warning - this->INHERITED::onInflate(dom, node); - - int index; - if ((index = dom.findList(node, "mode", "fixed,auto-width,auto-height")) >= 0) - this->setMode((Mode)index); - else - assert_no_attr(dom, node, "mode"); - - if ((index = dom.findList(node, "spacing-align", "start,center,end")) >= 0) - this->setSpacingAlign((SkTextBox::SpacingAlign)index); - else - assert_no_attr(dom, node, "spacing-align"); - - SkScalar s[2]; - if (dom.findScalars(node, "margin", s, 2)) - this->setMargin(s[0], s[1]); - else - assert_no_attr(dom, node, "margin"); - - const char* text = dom.findAttr(node, "text"); - if (text) - this->setText(text); - - if ((node = dom.getFirstChild(node, "paint")) != NULL && - (node = dom.getFirstChild(node, "screenplay")) != NULL) - { + this->INHERITED::onInflate(dom, node); + + int index; + if ((index = dom.findList(node, "mode", "fixed,auto-width,auto-height")) >= 0) + this->setMode((Mode)index); + else + assert_no_attr(dom, node, "mode"); + + if ((index = dom.findList(node, "spacing-align", "start,center,end")) >= 0) + this->setSpacingAlign((SkTextBox::SpacingAlign)index); + else + assert_no_attr(dom, node, "spacing-align"); + + SkScalar s[2]; + if (dom.findScalars(node, "margin", s, 2)) + this->setMargin(s[0], s[1]); + else + assert_no_attr(dom, node, "margin"); + + const char* text = dom.findAttr(node, "text"); + if (text) + this->setText(text); + + if ((node = dom.getFirstChild(node, "paint")) != NULL && + (node = dom.getFirstChild(node, "screenplay")) != NULL) + { // FIXME: Including inflate_paint causes Windows build to fail -- it complains // that SKListView::SkListView is undefined. #if 0 - inflate_paint(dom, node, &fPaint); + inflate_paint(dom, node, &fPaint); #endif - } + } } } diff --git a/src/views/animated/SkWidgetViews.cpp b/src/views/animated/SkWidgetViews.cpp index ee03b7b1a7..9c1cae7fb2 100644 --- a/src/views/animated/SkWidgetViews.cpp +++ b/src/views/animated/SkWidgetViews.cpp @@ -19,7 +19,7 @@ enum SkinEnum { kProgress_SkinEnum, kScroll_SkinEnum, kStaticText_SkinEnum, - + kSkinEnumCount }; */ @@ -45,7 +45,7 @@ void init_skin_anim(const char path[], SkAnimator* anim) { SkASSERT(path && anim); - SkFILEStream stream(path); + SkFILEStream stream(path); if (!stream.isValid()) { @@ -69,9 +69,9 @@ void init_skin_paint(SkinEnum se, SkPaint* paint) { SkASSERT(paint); - SkAnimator anim; - SkCanvas canvas; - + SkAnimator anim; + SkCanvas canvas; + init_skin_anim(se, &anim); anim.draw(&canvas, paint, 0); } @@ -80,15 +80,15 @@ void inflate_paint(const SkDOM& dom, const SkDOM::Node* node, SkPaint* paint) { SkASSERT(paint); - SkAnimator anim; - SkCanvas canvas; - + SkAnimator anim; + SkCanvas canvas; + if (!anim.decodeDOM(dom, node)) { SkDEBUGF(("inflate_paint: decoding dom failed\n")); SkDEBUGCODE(dom.dump(node);) sk_throw(); - } + } anim.draw(&canvas, paint, 0); } @@ -102,7 +102,7 @@ const char* SkWidgetView::getLabel() const { return fLabel.c_str(); } - + void SkWidgetView::getLabel(SkString* label) const { if (label) @@ -118,7 +118,7 @@ void SkWidgetView::setLabel(const char label[], size_t len) { if ((label == NULL && fLabel.size() != 0) || !fLabel.equals(label, len)) { - SkString tmp(label, len); + SkString tmp(label, len); this->onLabelChange(fLabel.c_str(), tmp.c_str()); fLabel.swap(tmp); @@ -138,13 +138,13 @@ bool SkWidgetView::postWidgetEvent() { if (!fEvent.isType("")) { - SkEvent evt(fEvent); // make a copy since onPrepareWidgetEvent may edit the event + SkEvent evt(fEvent); // make a copy since onPrepareWidgetEvent may edit the event if (this->onPrepareWidgetEvent(&evt)) { SkDEBUGCODE(evt.dump("SkWidgetView::postWidgetEvent");) - this->postToListeners(evt); // wonder if this should return true if there are > 0 listeners... + this->postToListeners(evt); // wonder if this should return true if there are > 0 listeners... return true; } } @@ -158,7 +158,7 @@ bool SkWidgetView::postWidgetEvent() const char* label = dom.findAttr(node, "label"); if (label) this->setLabel(label); - + if ((node = dom.getFirstChild(node, "event")) != NULL) fEvent.inflate(dom, node); } @@ -178,8 +178,8 @@ static const char gWidgetEventSinkIDSlotName[] = "sk-widget-sinkid-slot"; SkEventSinkID SkWidgetView::GetWidgetEventSinkID(const SkEvent& evt) { - int32_t sinkID; - + int32_t sinkID; + return evt.findS32(gWidgetEventSinkIDSlotName, &sinkID) ? (SkEventSinkID)sinkID : 0; } @@ -204,14 +204,14 @@ SkCheckButtonView::SkCheckButtonView() : fCheckState(kOff_CheckState) void SkCheckButtonView::setCheckState(CheckState state) { SkASSERT((unsigned)state <= kUnknown_CheckState); - + if (fCheckState != state) { this->onCheckStateChange(this->getCheckState(), state); fCheckState = SkToU8(state); } } - + /*virtual*/ void SkCheckButtonView::onCheckStateChange(CheckState oldState, CheckState newState) { this->inval(NULL); @@ -220,7 +220,7 @@ void SkCheckButtonView::setCheckState(CheckState state) /*virtual*/ void SkCheckButtonView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { this->INHERITED::onInflate(dom, node); - + int index = dom.findList(node, "check-state", "off,on,unknown"); if (index >= 0) this->setCheckState((CheckState)index); @@ -238,8 +238,8 @@ static const char gCheckStateSlotName[] = "sk-checkbutton-check-slot"; bool SkCheckButtonView::GetWidgetEventCheckState(const SkEvent& evt, CheckState* state) { - int32_t state32; - + int32_t state32; + if (evt.findS32(gCheckStateSlotName, &state32)) { if (state) @@ -274,7 +274,7 @@ protected: evt.setString("LABEL", newLabel); fAnim.doUserEvent(evt); } - + virtual void onFocusChange(bool gainFocus) { this->INHERITED::onFocusChange(gainFocus); @@ -298,19 +298,19 @@ protected: virtual void onDraw(SkCanvas* canvas) { - SkPaint paint; - SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); - + SkPaint paint; + SkAnimator::DifferenceType diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs()); + if (diff == SkAnimator::kDifferent) this->inval(NULL); else if (diff == SkAnimator::kPartiallyDifferent) { - SkRect bounds; + SkRect bounds; fAnim.getInvalBounds(&bounds); this->inval(&bounds); } } - + virtual bool onEvent(const SkEvent& evt) { if (evt.isType(SK_EventType_Inval)) @@ -320,20 +320,20 @@ protected: } if (evt.isType("recommendDim")) { - SkScalar height; - + SkScalar height; + if (evt.findScalar("y", &height)) this->setHeight(height); return true; } return this->INHERITED::onEvent(evt); } - + virtual bool onPrepareWidgetEvent(SkEvent* evt) { if (this->INHERITED::onPrepareWidgetEvent(evt)) { - SkEvent e("user"); + SkEvent e("user"); e.setString("id", "handlePress"); (void)fAnim.doUserEvent(e); return true; @@ -342,8 +342,8 @@ protected: } private: - SkAnimator fAnim; - + SkAnimator fAnim; + typedef SkButtonView INHERITED; }; @@ -354,7 +354,7 @@ SkView* SkWidgetFactory(const char name[]) { if (name == NULL) return NULL; - + // must be in the same order as the SkSkinWidgetEnum is declared static const char* gNames[] = { "sk-border", @@ -364,7 +364,7 @@ SkView* SkWidgetFactory(const char name[]) "sk-progress", "sk-scroll", "sk-text" - + }; for (size_t i = 0; i < SK_ARRAY_COUNT(gNames); i++) diff --git a/src/views/mac/SkNSView.h b/src/views/mac/SkNSView.h index 8b83b34f49..109a9982cc 100644 --- a/src/views/mac/SkNSView.h +++ b/src/views/mac/SkNSView.h @@ -21,7 +21,7 @@ class SkEvent; @interface SkNSView : NSView { BOOL fRedrawRequestPending; - + NSString* fTitle; SkOSWindow* fWind; #if SK_SUPPORT_GPU diff --git a/src/views/mac/SkOSWindow_Mac.cpp b/src/views/mac/SkOSWindow_Mac.cpp index 63106f088d..ec107901f8 100644 --- a/src/views/mac/SkOSWindow_Mac.cpp +++ b/src/views/mac/SkOSWindow_Mac.cpp @@ -26,15 +26,15 @@ static void (*gPrevNewHandler)(); extern "C" { - static void sk_new_handler() - { - if (SkGraphics::SetFontCacheUsed(0)) - return; - if (gPrevNewHandler) - gPrevNewHandler(); - else - sk_throw(); - } + static void sk_new_handler() + { + if (SkGraphics::SetFontCacheUsed(0)) + return; + if (gPrevNewHandler) + gPrevNewHandler(); + else + sk_throw(); + } } static SkOSWindow* gCurrOSWin; @@ -43,36 +43,36 @@ static EventQueueRef gCurrEventQ; static OSStatus MyDrawEventHandler(EventHandlerCallRef myHandler, EventRef event, void *userData) { - // NOTE: GState is save/restored by the HIView system doing the callback, + // NOTE: GState is save/restored by the HIView system doing the callback, // so the draw handler doesn't need to do it - OSStatus status = noErr; - CGContextRef context; - HIRect bounds; + OSStatus status = noErr; + CGContextRef context; + HIRect bounds; - // Get the CGContextRef - status = GetEventParameter (event, kEventParamCGContextRef, + // Get the CGContextRef + status = GetEventParameter (event, kEventParamCGContextRef, typeCGContextRef, NULL, sizeof (CGContextRef), NULL, &context); - if (status != noErr) { - SkDebugf("Got error %d getting the context!\n", status); - return status; - } + if (status != noErr) { + SkDebugf("Got error %d getting the context!\n", status); + return status; + } - // Get the bounding rectangle - HIViewGetBounds ((HIViewRef) userData, &bounds); + // Get the bounding rectangle + HIViewGetBounds ((HIViewRef) userData, &bounds); gCurrOSWin->doPaint(context); - return status; + return status; } -#define SK_MacEventClass FOUR_CHAR_CODE('SKec') -#define SK_MacEventKind FOUR_CHAR_CODE('SKek') -#define SK_MacEventParamName FOUR_CHAR_CODE('SKev') -#define SK_MacEventSinkIDParamName FOUR_CHAR_CODE('SKes') +#define SK_MacEventClass FOUR_CHAR_CODE('SKec') +#define SK_MacEventKind FOUR_CHAR_CODE('SKek') +#define SK_MacEventParamName FOUR_CHAR_CODE('SKev') +#define SK_MacEventSinkIDParamName FOUR_CHAR_CODE('SKes') static void set_bindingside(HISideBinding* side, HIViewRef parent, HIBindingKind kind) { side->toView = parent; @@ -94,17 +94,17 @@ static void set_axisposition(HIAxisPosition* pos, HIViewRef parent, HIPositionKi SkOSWindow::SkOSWindow(void* hWnd) : fHWND(hWnd), fAGLCtx(NULL) { - OSStatus result; + OSStatus result; WindowRef wr = (WindowRef)hWnd; HIViewRef imageView, parent; HIViewRef rootView = HIViewGetRoot(wr); HIViewFindByID(rootView, kHIViewWindowContentID, &parent); result = HIImageViewCreate(NULL, &imageView); - SkASSERT(result == noErr); + SkASSERT(result == noErr); result = HIViewAddSubview(parent, imageView); - SkASSERT(result == noErr); + SkASSERT(result == noErr); fHVIEW = imageView; @@ -128,41 +128,41 @@ SkOSWindow::SkOSWindow(void* hWnd) : fHWND(hWnd), fAGLCtx(NULL) HIImageViewSetOpaque(imageView, true); HIImageViewSetScaleToFit(imageView, false); - static const EventTypeSpec gTypes[] = { - { kEventClassKeyboard, kEventRawKeyDown }, + static const EventTypeSpec gTypes[] = { + { kEventClassKeyboard, kEventRawKeyDown }, { kEventClassKeyboard, kEventRawKeyUp }, - { kEventClassMouse, kEventMouseDown }, - { kEventClassMouse, kEventMouseDragged }, - { kEventClassMouse, kEventMouseMoved }, - { kEventClassMouse, kEventMouseUp }, - { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent }, - { kEventClassWindow, kEventWindowBoundsChanged }, -// { kEventClassWindow, kEventWindowDrawContent }, - { SK_MacEventClass, SK_MacEventKind } - }; - - EventHandlerUPP handlerUPP = NewEventHandlerUPP(SkOSWindow::EventHandler); - int count = SK_ARRAY_COUNT(gTypes); - - result = InstallEventHandler(GetWindowEventTarget(wr), handlerUPP, - count, gTypes, this, nil); - SkASSERT(result == noErr); - - gCurrOSWin = this; - gCurrEventQ = GetCurrentEventQueue(); - gEventTarget = GetWindowEventTarget(wr); - - static bool gOnce = true; - if (gOnce) { - gOnce = false; - gPrevNewHandler = set_new_handler(sk_new_handler); - } + { kEventClassMouse, kEventMouseDown }, + { kEventClassMouse, kEventMouseDragged }, + { kEventClassMouse, kEventMouseMoved }, + { kEventClassMouse, kEventMouseUp }, + { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent }, + { kEventClassWindow, kEventWindowBoundsChanged }, +// { kEventClassWindow, kEventWindowDrawContent }, + { SK_MacEventClass, SK_MacEventKind } + }; + + EventHandlerUPP handlerUPP = NewEventHandlerUPP(SkOSWindow::EventHandler); + int count = SK_ARRAY_COUNT(gTypes); + + result = InstallEventHandler(GetWindowEventTarget(wr), handlerUPP, + count, gTypes, this, nil); + SkASSERT(result == noErr); + + gCurrOSWin = this; + gCurrEventQ = GetCurrentEventQueue(); + gEventTarget = GetWindowEventTarget(wr); + + static bool gOnce = true; + if (gOnce) { + gOnce = false; + gPrevNewHandler = set_new_handler(sk_new_handler); + } } void SkOSWindow::doPaint(void* ctx) { #if 0 - this->update(NULL); + this->update(NULL); const SkBitmap& bm = this->getBitmap(); CGImageRef img = SkCreateCGImageRef(bm); @@ -187,10 +187,10 @@ void SkOSWindow::doPaint(void* ctx) void SkOSWindow::updateSize() { - Rect r; + Rect r; - GetWindowBounds((WindowRef)fHWND, kWindowContentRgn, &r); - this->resize(r.right - r.left, r.bottom - r.top); + GetWindowBounds((WindowRef)fHWND, kWindowContentRgn, &r); + this->resize(r.right - r.left, r.bottom - r.top); #if 0 HIRect frame; @@ -238,24 +238,24 @@ void SkOSWindow::onAddMenu(const SkOSMenu* sk_menu) static void getparam(EventRef inEvent, OSType name, OSType type, UInt32 size, void* data) { - EventParamType actualType; - UInt32 actualSize; - OSStatus status; - - status = GetEventParameter(inEvent, name, type, &actualType, size, &actualSize, data); - SkASSERT(status == noErr); - SkASSERT(actualType == type); - SkASSERT(actualSize == size); + EventParamType actualType; + UInt32 actualSize; + OSStatus status; + + status = GetEventParameter(inEvent, name, type, &actualType, size, &actualSize, data); + SkASSERT(status == noErr); + SkASSERT(actualType == type); + SkASSERT(actualSize == size); } enum { - SK_MacReturnKey = 36, - SK_MacDeleteKey = 51, - SK_MacEndKey = 119, - SK_MacLeftKey = 123, - SK_MacRightKey = 124, - SK_MacDownKey = 125, - SK_MacUpKey = 126, + SK_MacReturnKey = 36, + SK_MacDeleteKey = 51, + SK_MacEndKey = 119, + SK_MacLeftKey = 123, + SK_MacRightKey = 124, + SK_MacDownKey = 125, + SK_MacUpKey = 126, SK_Mac0Key = 0x52, SK_Mac1Key = 0x53, @@ -271,17 +271,17 @@ enum { static SkKey raw2key(UInt32 raw) { - static const struct { - UInt32 fRaw; - SkKey fKey; - } gKeys[] = { - { SK_MacUpKey, kUp_SkKey }, - { SK_MacDownKey, kDown_SkKey }, - { SK_MacLeftKey, kLeft_SkKey }, - { SK_MacRightKey, kRight_SkKey }, - { SK_MacReturnKey, kOK_SkKey }, - { SK_MacDeleteKey, kBack_SkKey }, - { SK_MacEndKey, kEnd_SkKey }, + static const struct { + UInt32 fRaw; + SkKey fKey; + } gKeys[] = { + { SK_MacUpKey, kUp_SkKey }, + { SK_MacDownKey, kDown_SkKey }, + { SK_MacLeftKey, kLeft_SkKey }, + { SK_MacRightKey, kRight_SkKey }, + { SK_MacReturnKey, kOK_SkKey }, + { SK_MacDeleteKey, kBack_SkKey }, + { SK_MacEndKey, kEnd_SkKey }, { SK_Mac0Key, k0_SkKey }, { SK_Mac1Key, k1_SkKey }, { SK_Mac2Key, k2_SkKey }, @@ -292,54 +292,54 @@ static SkKey raw2key(UInt32 raw) { SK_Mac7Key, k7_SkKey }, { SK_Mac8Key, k8_SkKey }, { SK_Mac9Key, k9_SkKey } - }; + }; - for (unsigned i = 0; i < SK_ARRAY_COUNT(gKeys); i++) - if (gKeys[i].fRaw == raw) - return gKeys[i].fKey; - return kNONE_SkKey; + for (unsigned i = 0; i < SK_ARRAY_COUNT(gKeys); i++) + if (gKeys[i].fRaw == raw) + return gKeys[i].fKey; + return kNONE_SkKey; } static void post_skmacevent() { - EventRef ref; - OSStatus status = CreateEvent(nil, SK_MacEventClass, SK_MacEventKind, 0, 0, &ref); - SkASSERT(status == noErr); + EventRef ref; + OSStatus status = CreateEvent(nil, SK_MacEventClass, SK_MacEventKind, 0, 0, &ref); + SkASSERT(status == noErr); #if 0 - status = SetEventParameter(ref, SK_MacEventParamName, SK_MacEventParamName, sizeof(evt), &evt); - SkASSERT(status == noErr); - status = SetEventParameter(ref, SK_MacEventSinkIDParamName, SK_MacEventSinkIDParamName, sizeof(sinkID), &sinkID); - SkASSERT(status == noErr); + status = SetEventParameter(ref, SK_MacEventParamName, SK_MacEventParamName, sizeof(evt), &evt); + SkASSERT(status == noErr); + status = SetEventParameter(ref, SK_MacEventSinkIDParamName, SK_MacEventSinkIDParamName, sizeof(sinkID), &sinkID); + SkASSERT(status == noErr); #endif - EventTargetRef target = gEventTarget; - SetEventParameter(ref, kEventParamPostTarget, typeEventTargetRef, sizeof(target), &target); - SkASSERT(status == noErr); + EventTargetRef target = gEventTarget; + SetEventParameter(ref, kEventParamPostTarget, typeEventTargetRef, sizeof(target), &target); + SkASSERT(status == noErr); - status = PostEventToQueue(gCurrEventQ, ref, kEventPriorityStandard); - SkASSERT(status == noErr); + status = PostEventToQueue(gCurrEventQ, ref, kEventPriorityStandard); + SkASSERT(status == noErr); - ReleaseEvent(ref); + ReleaseEvent(ref); } pascal OSStatus SkOSWindow::EventHandler( EventHandlerCallRef inHandler, EventRef inEvent, void* userData ) { - SkOSWindow* win = (SkOSWindow*)userData; - OSStatus result = eventNotHandledErr; - UInt32 wClass = GetEventClass(inEvent); - UInt32 wKind = GetEventKind(inEvent); + SkOSWindow* win = (SkOSWindow*)userData; + OSStatus result = eventNotHandledErr; + UInt32 wClass = GetEventClass(inEvent); + UInt32 wKind = GetEventKind(inEvent); - gCurrOSWin = win; // will need to be in TLS. Set this so PostEvent will work + gCurrOSWin = win; // will need to be in TLS. Set this so PostEvent will work - switch (wClass) { + switch (wClass) { case kEventClassMouse: { - Point pt; - getparam(inEvent, kEventParamMouseLocation, typeQDPoint, sizeof(pt), &pt); - SetPortWindowPort((WindowRef)win->getHWND()); - GlobalToLocal(&pt); + Point pt; + getparam(inEvent, kEventParamMouseLocation, typeQDPoint, sizeof(pt), &pt); + SetPortWindowPort((WindowRef)win->getHWND()); + GlobalToLocal(&pt); - switch (wKind) { + switch (wKind) { case kEventMouseDown: if (win->handleClick(pt.h, pt.v, Click::kDown_State)) { result = noErr; @@ -357,9 +357,9 @@ pascal OSStatus SkOSWindow::EventHandler( EventHandlerCallRef inHandler, EventRe break; default: break; - } + } break; - } + } case kEventClassKeyboard: if (wKind == kEventRawKeyDown) { UInt32 raw; @@ -412,8 +412,8 @@ pascal OSStatus SkOSWindow::EventHandler( EventHandlerCallRef inHandler, EventRe post_skmacevent(); } #if 0 - SkEvent* evt; - SkEventSinkID sinkID; + SkEvent* evt; + SkEventSinkID sinkID; getparam(inEvent, SK_MacEventParamName, SK_MacEventParamName, sizeof(evt), &evt); getparam(inEvent, SK_MacEventSinkIDParamName, SK_MacEventSinkIDParamName, sizeof(sinkID), &sinkID); #endif @@ -422,47 +422,47 @@ pascal OSStatus SkOSWindow::EventHandler( EventHandlerCallRef inHandler, EventRe } default: break; - } - if (result == eventNotHandledErr) { - result = CallNextEventHandler(inHandler, inEvent); } - return result; + if (result == eventNotHandledErr) { + result = CallNextEventHandler(inHandler, inEvent); + } + return result; } /////////////////////////////////////////////////////////////////////////////////////// void SkEvent::SignalNonEmptyQueue() { - post_skmacevent(); -// SkDebugf("signal nonempty\n"); + post_skmacevent(); +// SkDebugf("signal nonempty\n"); } -static TMTask gTMTaskRec; -static TMTask* gTMTaskPtr; +static TMTask gTMTaskRec; +static TMTask* gTMTaskPtr; static void sk_timer_proc(TMTask* rec) { - SkEvent::ServiceQueueTimer(); -// SkDebugf("timer task fired\n"); + SkEvent::ServiceQueueTimer(); +// SkDebugf("timer task fired\n"); } void SkEvent::SignalQueueTimer(SkMSec delay) { - if (gTMTaskPtr) - { - RemoveTimeTask((QElem*)gTMTaskPtr); - DisposeTimerUPP(gTMTaskPtr->tmAddr); - gTMTaskPtr = nil; - } - if (delay) - { - gTMTaskPtr = &gTMTaskRec; - memset(gTMTaskPtr, 0, sizeof(gTMTaskRec)); - gTMTaskPtr->tmAddr = NewTimerUPP(sk_timer_proc); - OSErr err = InstallTimeTask((QElem*)gTMTaskPtr); -// SkDebugf("installtimetask of %d returned %d\n", delay, err); - PrimeTimeTask((QElem*)gTMTaskPtr, delay); - } + if (gTMTaskPtr) + { + RemoveTimeTask((QElem*)gTMTaskPtr); + DisposeTimerUPP(gTMTaskPtr->tmAddr); + gTMTaskPtr = nil; + } + if (delay) + { + gTMTaskPtr = &gTMTaskRec; + memset(gTMTaskPtr, 0, sizeof(gTMTaskRec)); + gTMTaskPtr->tmAddr = NewTimerUPP(sk_timer_proc); + OSErr err = InstallTimeTask((QElem*)gTMTaskPtr); +// SkDebugf("installtimetask of %d returned %d\n", delay, err); + PrimeTimeTask((QElem*)gTMTaskPtr, delay); + } } #define USE_MSAA 0 diff --git a/src/views/sdl/SkOSWindow_SDL.cpp b/src/views/sdl/SkOSWindow_SDL.cpp index c2ba8b4349..4edc5acfd3 100644 --- a/src/views/sdl/SkOSWindow_SDL.cpp +++ b/src/views/sdl/SkOSWindow_SDL.cpp @@ -24,7 +24,7 @@ static void post_SkEvent_event() { static bool skia_setBitmapFromSurface(SkBitmap* dst, SDL_Surface* src) { SkBitmap::Config config; - + switch (src->format->BytesPerPixel) { case 2: config = SkBitmap::kRGB_565_Config; @@ -35,7 +35,7 @@ static bool skia_setBitmapFromSurface(SkBitmap* dst, SDL_Surface* src) { default: return false; } - + dst->setConfig(config, src->w, src->h, src->pitch); dst->setPixels(src->pixels); return true; @@ -44,7 +44,7 @@ static bool skia_setBitmapFromSurface(SkBitmap* dst, SDL_Surface* src) { SkOSWindow::SkOSWindow(void* screen) { fScreen = reinterpret_cast<SDL_Surface*>(screen); this->resize(fScreen->w, fScreen->h); - + uint32_t rmask = SK_R32_MASK << SK_R32_SHIFT; uint32_t gmask = SK_G32_MASK << SK_G32_SHIFT; uint32_t bmask = SK_B32_MASK << SK_B32_SHIFT; @@ -141,7 +141,7 @@ static SkKey find_skkey(SDLKey src) { SDLK_UNKNOWN, // power SDLK_UNKNOWN, // camera }; - + const SDLKey* array = gKeys; for (size_t i = 0; i < SK_ARRAY_COUNT(gKeys); i++) { if (array[i] == src) { @@ -213,7 +213,7 @@ void SkEvent::SignalNonEmptyQueue() { static Uint32 timer_callback(Uint32 interval) { // SkDebugf("-------- timercallback %d\n", interval); - SkEvent::ServiceQueueTimer(); + SkEvent::ServiceQueueTimer(); return 0; } diff --git a/src/views/unix/SkOSWindow_Unix.cpp b/src/views/unix/SkOSWindow_Unix.cpp index e761bdef74..46a2b3dd09 100644 --- a/src/views/unix/SkOSWindow_Unix.cpp +++ b/src/views/unix/SkOSWindow_Unix.cpp @@ -231,7 +231,7 @@ bool SkOSWindow::attach(SkBackEndTypes /* attachType */, int msaaSampleCount) { this->initWindow(msaaSampleCount); if (NULL == fUnixWindow.fDisplay) { return false; - } + } if (NULL == fUnixWindow.fGLContext) { SkASSERT(NULL != fVi); diff --git a/src/views/unix/keysym2ucs.c b/src/views/unix/keysym2ucs.c index 520c6a7614..a0c4ced9e0 100644 --- a/src/views/unix/keysym2ucs.c +++ b/src/views/unix/keysym2ucs.c @@ -828,19 +828,19 @@ long keysym2ucs(KeySym keysym) /* also check for directly encoded 24-bit UCS characters */ if ((keysym & 0xff000000) == 0x01000000) - return keysym & 0x00ffffff; + return keysym & 0x00ffffff; /* binary search in table */ while (max >= min) { - mid = (min + max) / 2; - if (keysymtab[mid].keysym < keysym) - min = mid + 1; - else if (keysymtab[mid].keysym > keysym) - max = mid - 1; - else { - /* found it */ - return keysymtab[mid].ucs; - } + mid = (min + max) / 2; + if (keysymtab[mid].keysym < keysym) + min = mid + 1; + else if (keysymtab[mid].keysym > keysym) + max = mid - 1; + else { + /* found it */ + return keysymtab[mid].ucs; + } } /* no matching Unicode value found */ diff --git a/src/views/win/SkOSWindow_win.cpp b/src/views/win/SkOSWindow_win.cpp index 88a0a36a0f..038a2e85a1 100644 --- a/src/views/win/SkOSWindow_win.cpp +++ b/src/views/win/SkOSWindow_win.cpp @@ -115,7 +115,7 @@ bool SkOSWindow::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } break; case WM_UNICHAR: this->handleChar(wParam); - return true; + return true; case WM_CHAR: { this->handleChar(SkUTF8_ToUnichar((char*)&wParam)); return true; @@ -138,11 +138,11 @@ bool SkOSWindow::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) delete rect; return true; } break; - - case WM_LBUTTONDOWN: + + case WM_LBUTTONDOWN: this->handleClick(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), Click::kDown_State); return true; - + case WM_MOUSEMOVE: this->handleClick(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), Click::kMoved_State); return true; @@ -172,15 +172,15 @@ void SkOSWindow::doPaint(void* ctx) { memset(&bmi, 0, sizeof(bmi)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = bitmap.width(); - bmi.bmiHeader.biHeight = -bitmap.height(); // top-down image + bmi.bmiHeader.biHeight = -bitmap.height(); // top-down image bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biSizeImage = 0; - // - // Do the SetDIBitsToDevice. - // + // + // Do the SetDIBitsToDevice. + // // TODO(wjmaclean): // Fix this call to handle SkBitmaps that have rowBytes != width, // i.e. may have padding at the end of lines. The SkASSERT below @@ -235,7 +235,7 @@ enum { SK_MacRightKey = 124, SK_MacDownKey = 125, SK_MacUpKey = 126, - + SK_Mac0Key = 0x52, SK_Mac1Key = 0x53, SK_Mac2Key = 0x54, @@ -247,7 +247,7 @@ enum { SK_Mac8Key = 0x5b, SK_Mac9Key = 0x5c }; - + static SkKey raw2key(uint32_t raw) { static const struct { @@ -272,7 +272,7 @@ static SkKey raw2key(uint32_t raw) { SK_Mac8Key, k8_SkKey }, { SK_Mac9Key, k9_SkKey } }; - + for (unsigned i = 0; i < SK_ARRAY_COUNT(gKeys); i++) if (gKeys[i].fRaw == raw) return gKeys[i].fKey; @@ -303,7 +303,7 @@ void SkEvent::SignalQueueTimer(SkMSec delay) gTimer = NULL; } if (delay) - { + { gTimer = SetTimer(NULL, 0, delay, sk_timer_proc); //SkDebugf("SetTimer of %d returned %d\n", delay, gTimer); } @@ -382,7 +382,7 @@ HGLRC create_gl(HWND hwnd, int msaaSampleCount) { BOOL set = SetPixelFormat(dc, format, &pfd); SkASSERT(TRUE == set); } - + HGLRC glrc = wglCreateContext(dc); SkASSERT(glrc); @@ -428,7 +428,7 @@ bool create_ANGLE(EGLNativeWindowType hWnd, EGLSurface* eglSurface) { static const EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, - EGL_NONE, EGL_NONE + EGL_NONE, EGL_NONE }; static const EGLint configAttribList[] = { EGL_RED_SIZE, 8, @@ -482,33 +482,33 @@ bool create_ANGLE(EGLNativeWindowType hWnd, } } if (!foundConfig) { - if (!eglChooseConfig(display, configAttribList, + if (!eglChooseConfig(display, configAttribList, &config, 1, &numConfigs)) { return false; } } // Create a surface - EGLSurface surface = eglCreateWindowSurface(display, config, - (EGLNativeWindowType)hWnd, + EGLSurface surface = eglCreateWindowSurface(display, config, + (EGLNativeWindowType)hWnd, surfaceAttribList); if (surface == EGL_NO_SURFACE) { return false; } // Create a GL context - EGLContext context = eglCreateContext(display, config, + EGLContext context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs ); if (context == EGL_NO_CONTEXT ) { return false; - } - + } + // Make the context current if (!eglMakeCurrent(display, surface, surface, context)) { return false; } - + *eglDisplay = display; *eglContext = context; *eglSurface = surface; @@ -583,7 +583,7 @@ bool SkOSWindow::attach(SkBackEndTypes attachType, int msaaSampleCount) { switch (attachType) { case kNone_BackEndType: // nothing to do - break; + break; #if SK_SUPPORT_GPU case kNativeGL_BackEndType: result = attachGL(msaaSampleCount); @@ -611,7 +611,7 @@ void SkOSWindow::detach() { switch (fAttached) { case kNone_BackEndType: // nothing to do - break; + break; #if SK_SUPPORT_GPU case kNativeGL_BackEndType: detachGL(); @@ -633,7 +633,7 @@ void SkOSWindow::present() { switch (fAttached) { case kNone_BackEndType: // nothing to do - return; + return; #if SK_SUPPORT_GPU case kNativeGL_BackEndType: presentGL(); |