Пример #1
0
void Input::checkFocus()
{
    using M = tank::Mouse;
    if (M::isInEntity(*this)) {
        gainFocus();
    } else {
        loseFocus();
    }
}
Пример #2
0
void EventSystem::viewDying(View* view)
{
//   DOUT(view->name());
  
#define rm(vec, elem) {auto pos = find(vec.begin(), vec.end(), elem); if(pos != vec.end()) { vec.erase(pos); }}
  //DOUT(#vec<<" removing "<<elem->name());\
  

  loseFocus(view); // make sure current focus and its stack are consistent

  rm(currentViewStack, view);
  rm(previousMouseMoveStack, view);
  rm(previousMouseClickStack, view);
  rm(currentFocusStack, view);
  rm(previousFocusStack, view);
}
Пример #3
0
bool bGroup::clickDown(int _x, int _y)
{
  bool ret=false;
  if(current){
    if(current->newClickDD(_x, _y, ddopen)) ret=1;
    loseFocus();
  }
  else{
    ret=bar.clickDown(_x, _y);
    for (unsigned int i=0; i<blocks.size()&&!ret; i++) {
      if(!ret) ret=newHandleClick(blocks,i,_x,_y,true);
    }
    for (unsigned int i=0; i<base.blocksOn.size()&&!ret; i++) {
      if(!ret) 
        if(ret=newHandleClick(base.blocksOn,i,_x,_y)) bChanged=true;
    }
    if(!ret) ret=base.clickDown(_x, _y);
  }
  return ret;
}
Пример #4
0
void Input::handleInput()
{
    // FIXME: This assumes ASCII -> is not portable
    char c;
    while (tank::Game::keystream >> c) {
        try {
            if (c < 0x20 or c >= 0x7F) { // Outside display char range
                switch (c) {
                    case 0x15: // CTRL + w //TODO: "delete word"
                    case 0x17: // CTRL + u
                        input_.clear();
                        break;
                    case 0x1B: // ESC
                        loseFocus();
                        break;
                    case 0x08: // BS / CTRL + h
                        if (tank::Keyboard::control() and
                            tank::Keyboard::isKeyDown(tank::Key::BackSpace)) {
                            input_.clear(); // TODO: "delete word"
                            break;
                        }
                    case 0x7F: // DEL
                        input_.pop_back();
                        break;
                    default:
                        std::cout << static_cast<unsigned>(c) << std::endl;
                        break;
                }
            } else {
                input_.push_back(c);
            }
        }
        catch (std::out_of_range const& e) { }
    }

    text_->setText(input_);
    tank::Game::keystream.str("");
    tank::Game::keystream.clear();
}