boolean StandardPicker::pick(Canvas* c, Glyph* glyph, int depth, Hit& h) { if (!h.event()) { return false; } const Event& e = *h.event(); if (e.grabber()) { h.target(depth, glyph, 0, e.grabber()); return true; } event(e); long cnt = handlers_[ms_]->count(); for (long i=0; i < cnt; ++i) { ButtonHandler& b = *handlers_[ms_]->item(i); if (b.eb_ == Event::any || b.eb_ == mb_) { if (b.handler_) { h.target(depth, glyph, 0, b.handler_); }else{ b.rband_->canvas(c); h.target(depth, glyph, 0, b.rband_); } return true; } } return false; }
void XYView_helper::pick(Canvas* c, const Allocation& a, int depth, Hit& h) { if (MyMath::inside(h.left(), h.bottom(), v_->left(), v_->bottom(), v_->right(), v_->top())) { if (h.event()->grabber()) { // fixes a bug but I dont know why #if 1 //The above fix broke the handling of keystrokes for crosshairs and Rotate3D //It was needed so that buttons would appear normal when moving quickly from // a button through a box to a scene. Now we put in the right handler in //case event was a keystroke. if (h.event()->type() == Event::key) { h.target(depth, this, 0, h.event()->grabber()); } #endif return; } current_pick_view_ = v_; MonoGlyph::pick(c, a, depth, h); if (h.event()->type() == Event::down) { #if 0 printf("XYView_helper hit (%g, %g) event (%g, %g)\n", h.left(), h.bottom(), h.event()->pointer_x(), h.event()->pointer_y()); printf(" allocation lb=(%g, %g), rt=(%g,%g)\n", a.left(), a.bottom(), a.right(), a.top()); #endif } } }
void Space::pick(Canvas*, const Allocation& a, int depth, Hit& h) { Coord x = h.left(); Coord left = a.left(); Coord right = a.right(); if (x >= left && x < right) { h.target(depth, this, (x > (left+right)/2) ? 1 : 0); } }
void FieldStringEditor::pick( Canvas*, const Allocation& a, int depth, Hit& h ) { const Event* ep = h.event(); if (ep != nil && h.left() < a.right() && h.right() >= a.left() && h.bottom() < a.top() && h.top() >= a.bottom() ) { h.target(depth, this, 0); } }
void MonoKitFrame::pick(Canvas* c, const Allocation& a, int depth, Hit& h) { if (target_) { Coord x = h.left(); Coord y = h.bottom(); if (x >= a.left() && x < a.right() && y >= a.bottom() && y < a.top()) { h.target(depth, this, 0); } } else { BevelFrame::pick(c, a, depth, h); } }
void Text::pick(Canvas*, const Allocation&, int depth, Hit& h) { const Event* e = h.event(); EventButton t = (e == nil) ? Event::none : e->pointer_button(); EventType t1 = (e == nil) ? Event::undefined : e->type(); if (t == Event::left || t == Event::right || t == Event::middle || t1 == Event::key) { Coord x = e->pointer_x(); Coord y = e->pointer_y(); Allocation* a = allocation_; if (x >= a->left() && x <= a->right() && y >= a->bottom() && y <= a->top()) { h.target(depth, this, 0, handler()); } } }
void ScenePicker::pick_menu(Glyph* glyph, int depth, Hit& h) { h.target(depth, glyph, 0, spi_); }