| Index: samplecode/SampleApp.cpp
|
| diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
|
| index 780eabd1e38d2fa7ff162bbe87781612943daf73..5bf28aa38e539cfd3871a95c794c03059412fa84 100644
|
| --- a/samplecode/SampleApp.cpp
|
| +++ b/samplecode/SampleApp.cpp
|
| @@ -471,6 +471,20 @@ static HintingState gHintingStates[] = {
|
| {SkPaint::kFull_Hinting, "Full", "Hf " },
|
| };
|
|
|
| +struct PixelGeometryState {
|
| + SkPixelGeometry pixelGeometry;
|
| + const char* name;
|
| + const char* label;
|
| +};
|
| +static PixelGeometryState gPixelGeometryStates[] = {
|
| + {SkPixelGeometry::kUnknown_SkPixelGeometry, "Mixed", nullptr },
|
| + {SkPixelGeometry::kUnknown_SkPixelGeometry, "Flat", "{Flat} " },
|
| + {SkPixelGeometry::kRGB_H_SkPixelGeometry, "RGB H", "{RGB H} " },
|
| + {SkPixelGeometry::kBGR_H_SkPixelGeometry, "BGR H", "{BGR H} " },
|
| + {SkPixelGeometry::kRGB_V_SkPixelGeometry, "RGB_V", "{RGB V} " },
|
| + {SkPixelGeometry::kBGR_V_SkPixelGeometry, "BGR_V", "{BGR V} " },
|
| +};
|
| +
|
| struct FilterQualityState {
|
| SkFilterQuality fQuality;
|
| const char* fName;
|
| @@ -878,6 +892,7 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
|
| fAAState = SkOSMenu::kMixedState;
|
| fSubpixelState = SkOSMenu::kMixedState;
|
| fHintingState = 0;
|
| + fPixelGeometryIndex = 0;
|
| fFilterQualityIndex = 0;
|
| fFlipAxis = 0;
|
|
|
| @@ -938,6 +953,16 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
|
| nullptr);
|
| fAppMenu->assignKeyEquivalentToItem(itemID, 'h');
|
|
|
| + itemID = fAppMenu->appendList("Pixel Geometry", "Pixel Geometry", sinkID, fPixelGeometryIndex,
|
| + gPixelGeometryStates[0].name,
|
| + gPixelGeometryStates[1].name,
|
| + gPixelGeometryStates[2].name,
|
| + gPixelGeometryStates[3].name,
|
| + gPixelGeometryStates[4].name,
|
| + gPixelGeometryStates[5].name,
|
| + nullptr);
|
| + fAppMenu->assignKeyEquivalentToItem(itemID, 'P');
|
| +
|
| itemID =fAppMenu->appendList("Tiling", "Tiling", sinkID, fTilingMode,
|
| gTilingInfo[kNo_Tiling].label,
|
| gTilingInfo[kAbs_128x128_Tiling].label,
|
| @@ -1614,6 +1639,10 @@ bool SampleWindow::onEvent(const SkEvent& evt) {
|
| this->updateTitle();
|
| return true;
|
| }
|
| + if (SkOSMenu::FindListIndex(evt, "Pixel Geometry", &fPixelGeometryIndex)) {
|
| + this->setPixelGeometry(fPixelGeometryIndex);
|
| + return true;
|
| + }
|
| if (SkOSMenu::FindListIndex(evt, "Tiling", &fTilingMode)) {
|
| if (SampleView::IsSampleView(curr_view(this))) {
|
| ((SampleView*)curr_view(this))->onTileSizeChanged(this->tileSize());
|
| @@ -1797,9 +1826,7 @@ void SampleWindow::setDeviceType(DeviceType type) {
|
| return;
|
|
|
| fDevManager->tearDownBackend(this);
|
| -
|
| fDeviceType = type;
|
| -
|
| fDevManager->setUpBackend(this, fMSAASampleCount);
|
|
|
| this->updateTitle();
|
| @@ -1810,7 +1837,6 @@ void SampleWindow::setDeviceColorType(SkColorType ct, SkColorProfileType pt) {
|
| this->setColorType(ct, pt);
|
|
|
| fDevManager->tearDownBackend(this);
|
| -
|
| fDevManager->setUpBackend(this, fMSAASampleCount);
|
|
|
| this->updateTitle();
|
| @@ -1848,6 +1874,23 @@ void SampleWindow::toggleDistanceFieldFonts() {
|
| this->inval(nullptr);
|
| }
|
|
|
| +void SampleWindow::setPixelGeometry(int pixelGeometryIndex) {
|
| + // reset backend
|
| + fDevManager->tearDownBackend(this);
|
| + fDevManager->setUpBackend(this, fMSAASampleCount);
|
| +
|
| + const SkSurfaceProps& oldProps = this->getSurfaceProps();
|
| + SkSurfaceProps newProps(oldProps.flags(), SkSurfaceProps::kLegacyFontHost_InitType);
|
| + if (pixelGeometryIndex > 0) {
|
| + newProps = SkSurfaceProps(oldProps.flags(),
|
| + gPixelGeometryStates[pixelGeometryIndex].pixelGeometry);
|
| + }
|
| + this->setSurfaceProps(newProps);
|
| +
|
| + this->updateTitle();
|
| + this->inval(nullptr);
|
| +}
|
| +
|
| #include "SkDumpCanvas.h"
|
|
|
| bool SampleWindow::onHandleKey(SkKey key) {
|
| @@ -2074,6 +2117,7 @@ void SampleWindow::updateTitle() {
|
| title.prepend(fFlipAxis & kFlipAxis_X ? "X " : nullptr);
|
| title.prepend(fFlipAxis & kFlipAxis_Y ? "Y " : nullptr);
|
| title.prepend(gHintingStates[fHintingState].label);
|
| + title.prepend(gPixelGeometryStates[fPixelGeometryIndex].label);
|
|
|
| if (fOffset.fX || fOffset.fY) {
|
| title.prependf("(%.2f, %.2f) ", SkScalarToFloat(fOffset.fX), SkScalarToFloat(fOffset.fY));
|
|
|