1/* 2* Copyright 2016 Google Inc. 3* 4* Use of this source code is governed by a BSD-style license that can be 5* found in the LICENSE file. 6*/ 7 8#include "SampleSlide.h" 9 10#include "SkCanvas.h" 11#include "SkCommonFlags.h" 12#include "SkKey.h" 13#include "SkOSFile.h" 14#include "SkStream.h" 15 16using namespace sk_app; 17 18SampleSlide::SampleSlide(const SkViewFactory* factory) 19 : fViewFactory(factory) 20 , fClick(nullptr) { 21 SkView* view = (*factory)(); 22 SampleCode::RequestTitle(view, &fName); 23 view->unref(); 24} 25 26SampleSlide::~SampleSlide() { delete fClick; } 27 28void SampleSlide::draw(SkCanvas* canvas) { 29 SkASSERT(fView); 30 fView->draw(canvas); 31} 32 33void SampleSlide::load(SkScalar winWidth, SkScalar winHeight) { 34 fView.reset((*fViewFactory)()); 35 fView->setVisibleP(true); 36 fView->setClipToBounds(false); 37 fView->setSize(winWidth, winHeight); 38} 39 40void SampleSlide::unload() { 41 fView.reset(); 42} 43 44bool SampleSlide::onChar(SkUnichar c) { 45 if (!fView) { 46 return false; 47 } 48 SkEvent evt(gCharEvtName); 49 evt.setFast32(c); 50 return fView->doQuery(&evt); 51} 52 53bool SampleSlide::onMouse(SkScalar x, SkScalar y, Window::InputState state, 54 uint32_t modifiers) { 55 // map to SkView modifiers 56 unsigned modifierKeys = 0; 57 modifierKeys |= (modifiers & Window::kShift_ModifierKey) ? kShift_SkModifierKey : 0; 58 modifierKeys |= (modifiers & Window::kControl_ModifierKey) ? kControl_SkModifierKey : 0; 59 modifierKeys |= (modifiers & Window::kOption_ModifierKey) ? kOption_SkModifierKey : 0; 60 modifierKeys |= (modifiers & Window::kCommand_ModifierKey) ? kCommand_SkModifierKey : 0; 61 62 bool handled = false; 63 switch (state) { 64 case Window::kDown_InputState: { 65 delete fClick; 66 fClick = fView->findClickHandler(SkIntToScalar(x), SkIntToScalar(y), modifierKeys); 67 if (fClick) { 68 SkView::DoClickDown(fClick, x, y, modifierKeys); 69 handled = true; 70 } 71 break; 72 } 73 case Window::kMove_InputState: { 74 if (fClick) { 75 SkView::DoClickMoved(fClick, x, y, modifierKeys); 76 handled = true; 77 } 78 break; 79 } 80 case Window::kUp_InputState: { 81 if (fClick) { 82 SkView::DoClickUp(fClick, x, y, modifierKeys); 83 delete fClick; 84 fClick = nullptr; 85 handled = true; 86 } 87 break; 88 } 89 } 90 91 return handled; 92} 93