public void cursor(int y, int x) {
      // May be called with curs_y, curs_x to propagate cursor to top
      // level
      if (y < 0 || x < 0 || y >= rows || x >= cols) {
         cursorOff();
      } else {
         if (curs_x != x || curs_y != y) {
            curs_y = y;
            curs_x = x;
            if (backing == this)
               updated();
         }
         if (propagateCursor()) {
            // Cursor is also clipped
            if (clip.contains(y, x))
               backing.cursor(y + base_y, x + base_x);
            else
               backing.cursorOff();
         }
      }
   }