Index: samplecode/SampleApp.cpp |
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp |
index 795f8021da9a6870e2de37e35de684afdcbff66f..9712b6bfb460eb6897ecfa1e33e1debc9f1afacf 100644 |
--- a/samplecode/SampleApp.cpp |
+++ b/samplecode/SampleApp.cpp |
@@ -488,12 +488,31 @@ static HintingState gHintingStates[] = { |
{SkPaint::kFull_Hinting, "Full", "Hf " }, |
}; |
+struct FilterLevelState { |
+ SkPaint::FilterLevel fLevel; |
+ const char* fName; |
+ const char* fLabel; |
+}; |
+static FilterLevelState gFilterLevelStates[] = { |
+ { SkPaint::kNone_FilterLevel, "Mixed", NULL }, |
+ { SkPaint::kNone_FilterLevel, "None", "F0 " }, |
+ { SkPaint::kLow_FilterLevel, "Low", "F1 " }, |
+ { SkPaint::kMedium_FilterLevel, "Medium", "F2 " }, |
+ { SkPaint::kHigh_FilterLevel, "High", "F3 " }, |
+}; |
+ |
class FlagsDrawFilter : public SkDrawFilter { |
public: |
- FlagsDrawFilter(SkOSMenu::TriState lcd, SkOSMenu::TriState aa, SkOSMenu::TriState filter, |
- SkOSMenu::TriState subpixel, int hinting) |
- : fLCDState(lcd), fAAState(aa), fFilterState(filter), fSubpixelState(subpixel) |
- , fHintingState(hinting) {} |
+ FlagsDrawFilter(SkOSMenu::TriState lcd, SkOSMenu::TriState aa, |
+ SkOSMenu::TriState subpixel, int hinting, int filterlevel) |
+ : fLCDState(lcd) |
+ , fAAState(aa) |
+ , fSubpixelState(subpixel) |
+ , fHintingState(hinting) |
+ , fFilterLevelIndex(filterlevel) |
+ { |
+ SkASSERT((unsigned)filterlevel < SK_ARRAY_COUNT(gFilterLevelStates)); |
+ } |
virtual bool filter(SkPaint* paint, Type t) { |
if (kText_Type == t && SkOSMenu::kMixedState != fLCDState) { |
@@ -502,9 +521,8 @@ public: |
if (SkOSMenu::kMixedState != fAAState) { |
paint->setAntiAlias(SkOSMenu::kOnState == fAAState); |
} |
- if (SkOSMenu::kMixedState != fFilterState) { |
- paint->setFilterLevel(SkOSMenu::kOnState == fFilterState ? |
- SkPaint::kLow_FilterLevel : SkPaint::kNone_FilterLevel); |
+ if (0 != fFilterLevelIndex) { |
+ paint->setFilterLevel(gFilterLevelStates[fFilterLevelIndex].fLevel); |
} |
if (SkOSMenu::kMixedState != fSubpixelState) { |
paint->setSubpixelText(SkOSMenu::kOnState == fSubpixelState); |
@@ -518,9 +536,9 @@ public: |
private: |
SkOSMenu::TriState fLCDState; |
SkOSMenu::TriState fAAState; |
- SkOSMenu::TriState fFilterState; |
SkOSMenu::TriState fSubpixelState; |
int fHintingState; |
+ int fFilterLevelIndex; |
}; |
////////////////////////////////////////////////////////////////////////////// |
@@ -871,9 +889,9 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev |
fMeasureFPS = false; |
fLCDState = SkOSMenu::kMixedState; |
fAAState = SkOSMenu::kMixedState; |
- fFilterState = SkOSMenu::kMixedState; |
fSubpixelState = SkOSMenu::kMixedState; |
fHintingState = 0; |
+ fFilterLevelIndex = 0; |
fFlipAxis = 0; |
fScrollTestX = fScrollTestY = 0; |
@@ -909,7 +927,13 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev |
fAppMenu->assignKeyEquivalentToItem(itemID, 'b'); |
itemID = fAppMenu->appendTriState("LCD", "LCD", sinkID, fLCDState); |
fAppMenu->assignKeyEquivalentToItem(itemID, 'l'); |
- itemID = fAppMenu->appendTriState("Filter", "Filter", sinkID, fFilterState); |
+ itemID = fAppMenu->appendList("FilterLevel", "FilterLevel", sinkID, fFilterLevelIndex, |
+ gFilterLevelStates[0].fName, |
+ gFilterLevelStates[1].fName, |
+ gFilterLevelStates[2].fName, |
+ gFilterLevelStates[3].fName, |
+ gFilterLevelStates[4].fName, |
+ NULL); |
fAppMenu->assignKeyEquivalentToItem(itemID, 'n'); |
itemID = fAppMenu->appendTriState("Subpixel", "Subpixel", sinkID, fSubpixelState); |
fAppMenu->assignKeyEquivalentToItem(itemID, 's'); |
@@ -1674,8 +1698,8 @@ void SampleWindow::showOverview() { |
} |
void SampleWindow::installDrawFilter(SkCanvas* canvas) { |
- canvas->setDrawFilter(new FlagsDrawFilter(fLCDState, fAAState, fFilterState, fSubpixelState, |
- fHintingState))->unref(); |
+ canvas->setDrawFilter(new FlagsDrawFilter(fLCDState, fAAState, fSubpixelState, |
+ fHintingState, fFilterLevelIndex))->unref(); |
} |
void SampleWindow::postAnimatingEvent() { |
@@ -1729,7 +1753,7 @@ bool SampleWindow::onEvent(const SkEvent& evt) { |
} |
if (SkOSMenu::FindTriState(evt, "AA", &fAAState) || |
SkOSMenu::FindTriState(evt, "LCD", &fLCDState) || |
- SkOSMenu::FindTriState(evt, "Filter", &fFilterState) || |
+ SkOSMenu::FindListIndex(evt, "FilterLevel", &fFilterLevelIndex) || |
SkOSMenu::FindTriState(evt, "Subpixel", &fSubpixelState) || |
SkOSMenu::FindListIndex(evt, "Hinting", &fHintingState) || |
SkOSMenu::FindSwitchState(evt, "Clip", &fUseClip) || |
@@ -2171,7 +2195,7 @@ void SampleWindow::updateTitle() { |
title.prepend(trystate_str(fLCDState, "LCD ", "lcd ")); |
title.prepend(trystate_str(fAAState, "AA ", "aa ")); |
- title.prepend(trystate_str(fFilterState, "N ", "n ")); |
+ title.prepend(gFilterLevelStates[fFilterLevelIndex].fLabel); |
title.prepend(trystate_str(fSubpixelState, "S ", "s ")); |
title.prepend(fFlipAxis & kFlipAxis_X ? "X " : NULL); |
title.prepend(fFlipAxis & kFlipAxis_Y ? "Y " : NULL); |