예제 #1
0
void gKeyboard::__cb_addColumn()
{
	int colx;
	int colxw;
	int colw = 380;
	if (columns.size == 0) {
		colx  = x() - xposition();  // mind the offset with xposition()
		colxw = colx + colw;
	}
	else {
		gColumn *prev = columns.last();
		colx  = prev->x()+prev->w() + 16;
		colxw = colx + colw;
	}

	/* add gColumn to gKeyboard and to columns vector */

	gColumn *gc = new gColumn(colx, y(), colw-20, 2000, indexColumn, this);
  add(gc);
	columns.add(gc);
	indexColumn++;

	/* move addColumn button */

	addColumnBtn->position(colxw-4, y());
	redraw();

	gLog("[gKeyboard::__cb_addColumn] new column added (index = %d), total count=%d, addColumn(x)=%d\n",
		gc->getIndex(), columns.size, addColumnBtn->x());
}
예제 #2
0
void gKeyboard::__cb_addColumn(int width)
{
	int colx;
	int colxw;
	int gap = 16;
	if (columns.size() == 0) {
		colx  = x() - xposition();  // mind the offset with xposition()
		colxw = colx + width;
	}
	else {
		gColumn *prev = columns.back();
		colx  = prev->x()+prev->w() + gap;
		colxw = colx + width;
	}

	/* add gColumn to gKeyboard and to columns vector */

	gColumn *gc = new gColumn(colx, y(), width, 2000, indexColumn, this);
  add(gc);
	columns.push_back(gc);
	indexColumn++;

	/* move addColumn button */

	addColumnBtn->position(colxw + gap, y());
	redraw();

	gu_log("[gKeyboard::__cb_addColumn] new column added (index=%d, w=%d), total count=%d, addColumn(x)=%d\n",
		gc->getIndex(), width, columns.size(), addColumnBtn->x());

	/* recompute col indexes */

	refreshColIndexes();
}
예제 #3
0
void Fl_MIDIKeyboard::kbd_position(short pos){
    if( _type == MKB_HORIZONTAL)
        position(pos, yposition());
    else {
        position(xposition(),  pos);
    }
    visible_keys();                                         // calls redraw()
}
예제 #4
0
void CqCenterScroll::resize(int x, int y, int w, int h)
{
	int dw = w - this->w();
	int dh = h - this->h();
	Fl_Scroll::resize(x,y,w,h);
	// Scroll the widget so that the window seems to expand equally around the
	// contained widget.  This keeps the widget more centred than the default.
	position(xposition()-dw/2, yposition()-dh/2);
}
예제 #5
0
void CqCenterScroll::setImage(const boost::shared_ptr<CqImage>& image)
{
	int oldW = m_imageWidget.w();
	int oldH = m_imageWidget.h();
	m_imageWidget.setImage(image);
	// Scroll the position such that the centre of the child widget remains in
	// the same place.
	position(xposition() + (m_imageWidget.w() - oldW)/2,
			 yposition() + (m_imageWidget.h() - oldH)/2);
}
예제 #6
0
int CqCenterScroll::handle(int event)
{
	switch(event)
	{
		case FL_PUSH:
			if(Fl::event_button() == FL_MIDDLE_MOUSE)
			{
				m_prevDragX = Fl::event_x();
				m_prevDragY = Fl::event_y();
				return 1;
			}
			break;
		case FL_RELEASE:
			if(Fl::event_button() == FL_MIDDLE_MOUSE)
				return 1;
			break;
		case FL_DRAG:
			if(Fl::event_button() == FL_MIDDLE_MOUSE)
			{
				position(xposition() - (Fl::event_x() - m_prevDragX),
						yposition() - (Fl::event_y() - m_prevDragY));
				m_prevDragX = Fl::event_x();
				m_prevDragY = Fl::event_y();
				return 1;
			}
			break;
		case FL_KEYDOWN:
		case FL_SHORTCUT:
			int key = Fl::event_key();
			switch(key)
			{
				case 'h':
					if(Fl::event_alt())
						return 0;
						// passthrough
				case FL_Home:
					centerImageWidget();
					return 1;
					break;

				// Ignore cursors, so that the browser gets them.
				case FL_Up:
				case FL_Down:
				case FL_Left:
				case FL_Right:
					return 0;
			}
			break;
	}
	if(m_imageWidget.handle(event))
		return(1);
	else
		return Fl_Scroll::handle(event);
}
예제 #7
0
void ParticleSystem::fuel(int particles, sf::Vector2f ySpawnRange, sf::Vector2f xSpawnRange) {
  for (int i = 0; i < particles; i++) {

    /* Randomizer initialization */
    std::random_device rd;
    std::mt19937 gen(rd());

    UniRealDist yposition(ySpawnRange.x, ySpawnRange.y);
    UniRealDist xposition(xSpawnRange.x, xSpawnRange.y);
    UniRealDist yspeed(10.0f, 40.0f);
    m_particleSpeed = yspeed(gen);
    /* Generate a new particle and put it at the generation point */
    Particle *particle;
    particle = new Particle();
    particle->drawVertex.position.x = xposition(gen);
    particle->drawVertex.position.y = yposition(gen);
    particle->vel.x = 0.0f;
    particle->vel.y = 1.0f;
    /*
        switch (m_shape) {
        case Shape::CIRCLE: {
          // Generate a random angle
          UniRealDist randomAngle(0.0f, (2.0f * 3.14159265));
          float angle = randomAngle(gen);

          // Use the random angle as a thrust vector for the particle
          // UniRealDist randomAngleCos(0.0f, cos(angle));
          // UniRealDist randomAngleSin(0.0f, sin(angle));
          particle->vel.x = (float)(rand() % 100) * 0.01f; // randomAngleCos(gen);
          particle->vel.y = (float)(rand() % 100) * 0.01f; // randomAngleSin(gen);

          break;
        }
        case Shape::SQUARE: {
          // Square generation
          UniRealDist randomSide(-1.0f, 1.0f);
          particle->vel.x = randomSide(gen);
          particle->vel.y = randomSide(gen);

          break;
        }
        default: {
          particle->vel.x = 0.5f; // Easily detected
          particle->vel.y = 0.5f; // Easily detected
        }
        }
    */

    // We don't want lame particles. Reject, start over.
    if (particle->vel.x == 0.0f && particle->vel.y == 0.0f) {
      delete particle;
      continue;
    }

    /* Randomly change the colors of the particles */
    const auto a = (((m_particleSpeed - 10.0f) / 30.0f) * 255.0f) + 0;
    particle->drawVertex.color.r = 255;
    particle->drawVertex.color.g = 255 - a;
    particle->drawVertex.color.b = 255 - a;
    particle->drawVertex.color.a = 255;

    m_particles.push_back(ParticlePtr(particle));
  }

  return;
}