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()); }
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(); }
void Fl_MIDIKeyboard::kbd_position(short pos){ if( _type == MKB_HORIZONTAL) position(pos, yposition()); else { position(xposition(), pos); } visible_keys(); // calls redraw() }
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); }
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); }
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); }
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; }