RETURN key now records default slide for startup

git-svn-id: http://skia.googlecode.com/svn/trunk@2925 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
mike@reedtribe.org 2011-12-27 22:33:50 +00:00
parent 49eac192fa
commit 6f6e8c39a7
2 changed files with 91 additions and 33 deletions

View File

@ -78,7 +78,56 @@ static void postEventToSink(SkEvent* evt, SkEventSink* sink) {
evt->setTargetID(sink->getSinkID())->post();
}
///////////////
///////////////////////////////////////////////////////////////////////////////
static const char* skip_until(const char* str, const char* skip) {
if (!str) {
return NULL;
}
return strstr(str, skip);
}
static const char* skip_past(const char* str, const char* skip) {
const char* found = skip_until(str, skip);
if (!found) {
return NULL;
}
return found + strlen(skip);
}
static const char* gPrefFileName = "sampleapp_prefs.txt";
static bool readTiTleFromPrefs(SkString* title) {
SkFILEStream stream(gPrefFileName);
if (!stream.isValid()) {
return false;
}
int len = stream.getLength();
SkString data(len);
stream.read(data.writable_str(), len);
const char* s = data.c_str();
s = skip_past(s, "curr-slide-title");
s = skip_past(s, "=");
s = skip_past(s, "\"");
const char* stop = skip_until(s, "\"");
if (stop > s) {
title->set(s, stop - s);
return true;
}
return false;
}
static bool writeTitleToPrefs(const char* title) {
SkFILEWStream stream(gPrefFileName);
SkString data;
data.printf("curr-slide-title = \"%s\"\n", title);
stream.write(data.c_str(), data.size());
}
///////////////////////////////////////////////////////////////////////////////
class SampleWindow::DefaultDeviceManager : public SampleWindow::DeviceManager {
public:
@ -488,6 +537,18 @@ static SkView* curr_view(SkWindow* wind) {
return iter.next();
}
static bool curr_title(SkWindow* wind, SkString* title) {
SkView* view = curr_view(wind);
if (view) {
SkEvent evt(gTitleEvtName);
if (view->doQuery(&evt)) {
title->set(evt.findString(gTitleEvtName));
return true;
}
}
return false;
}
void SampleWindow::setZoomCenter(float x, float y)
{
fZoomCenterX = SkFloatToScalar(x);
@ -548,7 +609,6 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
#endif
fUseClip = false;
fNClip = false;
fRepeatDrawing = false;
fAnimating = false;
fRotate = false;
fPerspAnim = false;
@ -645,17 +705,19 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev
}
fCurrIndex = 0;
if (argc > 1) {
int i, count = fSamples.count();
for (i = 0; i < count; i++) {
SkString title = getSampleTitle(i);
if (title.equals(argv[1])) {
fCurrIndex = i;
break;
}
}
if (i == count) {
fCurrIndex = findByTitle(argv[1]);
if (fCurrIndex < 0) {
fprintf(stderr, "Unknown sample \"%s\"\n", argv[1]);
}
} else {
SkString title;
if (readTiTleFromPrefs(&title)) {
fCurrIndex = findByTitle(title.c_str());
}
}
if (fCurrIndex < 0) {
fCurrIndex = 0;
}
this->loadView((*fSamples[fCurrIndex])());
@ -690,6 +752,15 @@ SampleWindow::~SampleWindow() {
SkSafeUnref(fDevManager);
}
int SampleWindow::findByTitle(const char title[]) {
int i, count = fSamples.count();
for (i = 0; i < count; i++) {
if (getSampleTitle(i).equals(title)) {
return i;
}
}
}
static SkBitmap capture_bitmap(SkCanvas* canvas) {
SkBitmap bm;
const SkBitmap& src = canvas->getDevice()->accessBitmap(false);
@ -927,9 +998,6 @@ void SampleWindow::showZoomer(SkCanvas* canvas) {
}
void SampleWindow::onDraw(SkCanvas* canvas) {
if (fRepeatDrawing) {
this->inval(NULL);
}
}
#include "SkColorPriv.h"
@ -1554,18 +1622,13 @@ bool SampleWindow::onHandleKey(SkKey key) {
this->updateTitle();
}
return true;
case kOK_SkKey:
if (false) {
SkDebugfDumper dumper;
SkDumpCanvas dc(&dumper);
this->draw(&dc);
} else {
fRepeatDrawing = !fRepeatDrawing;
if (fRepeatDrawing) {
this->inval(NULL);
}
case kOK_SkKey: {
SkString title;
if (curr_title(this, &title)) {
writeTitleToPrefs(title.c_str());
}
return true;
}
case kBack_SkKey:
this->showOverview();
return true;
@ -1700,15 +1763,10 @@ static const char* trystate_str(SkOSMenu::TriState state,
}
void SampleWindow::updateTitle() {
SkString title;
SkView* view = curr_view(this);
SkView::F2BIter iter(this);
SkView* view = iter.next();
SkEvent evt(gTitleEvtName);
if (view->doQuery(&evt)) {
title.set(evt.findString(gTitleEvtName));
}
if (title.size() == 0) {
SkString title;
if (!curr_title(this, &title)) {
title.set("<unknown>");
}

View File

@ -139,7 +139,6 @@ private:
bool fUseClip;
bool fNClip;
bool fRepeatDrawing;
bool fAnimating;
bool fRotate;
bool fPerspAnim;
@ -190,6 +189,7 @@ private:
void updateMatrix();
void postAnimatingEvent();
void installDrawFilter(SkCanvas*);
int findByTitle(const char*);
typedef SkOSWindow INHERITED;
};