void handle_userevent(SDL_UserEvent user) { switch (user.code) { case TIMER_KEYREPEAT: SDL_RemoveTimer(timerKeyRepeat); if (layerVelocity > 0) { if (currentLayer < layerCount - 1) drawLayer(++currentLayer); else break; } else if (layerVelocity < 0) { if (currentLayer > 0) drawLayer(--currentLayer); else break; } timerKeyRepeat = SDL_AddTimer(20, &timerCallback, (void *) TIMER_KEYREPEAT); break; case TIMER_DRAGRENDER: SDL_RemoveTimer(timerDragRender); render(); timerDragRender = SDL_AddTimer(50, &timerCallback, (void *) TIMER_DRAGRENDER); break; } }
void ofxLayerMask::drawOverlay() { if(overlayOn) { overlayHeight = thumbSize * (layers.size() + 1) + (overlayPadding * layers.size()); //Draw overlay panel x = ofGetWidth() - tripleThumbWidth - textAreaWidth - quadruplePadding - overlayMargin; y = ofGetHeight() - overlayHeight - doublePadding - overlayMargin; drawDebugBox(x, y, tripleThumbWidth + textAreaWidth + quadruplePadding, overlayHeight + doublePadding); //Draw layers x += overlayPadding; y += overlayPadding; for(int i = 0; i < layers.size(); i++) { ofDrawBitmapString("Layer " + ofToString(i + 1), x, y + halfThumbHeight + 4); drawDebugBox(x - 1 + textAreaWidth, y - 1, thumbWidth + 2, thumbHeight + 2, ofColor(255, 255, 255, 150)); drawLayer(i, x + textAreaWidth, y, thumbWidth, thumbHeight, false); drawDebugBox(x - 1 + textAreaWidth + thumbWidth + overlayPadding, y - 1, thumbWidth + 2, thumbHeight + 2, ofColor(255, 255, 255, 150)); drawMask(i, x + textAreaWidth + thumbWidth + overlayPadding, y, thumbWidth, thumbHeight); drawDebugBox(x - 1 + textAreaWidth + doubleThumbWidth + doublePadding, y - 1, thumbWidth + 2, thumbHeight + 2, ofColor(255, 255, 255, 150)); drawLayer(i, x + textAreaWidth + doubleThumbWidth + doublePadding, y, thumbWidth, thumbHeight); y += thumbHeight + overlayPadding; } //Draw composite thumbnail ofDrawBitmapString("Composite", x, y + halfThumbHeight + 4); drawDebugBox(x - 1 + textAreaWidth + doubleThumbWidth + doublePadding, y - 1, thumbWidth + 2, thumbHeight + 2, ofColor(255, 255, 255, 150)); draw(x + textAreaWidth + doubleThumbWidth + doublePadding, y, thumbWidth, thumbHeight); } }
void CCRenderSurface::draw(LayerRendererChromium* layerRenderer, const FloatRect& surfaceDamageRect) { if (m_skipsDraw || !m_contentsTexture) return; // FIXME: By using the same RenderSurface for both the content and its reflection, // it's currently not possible to apply a separate mask to the reflection layer // or correctly handle opacity in reflections (opacity must be applied after drawing // both the layer and its reflection). The solution is to introduce yet another RenderSurface // to draw the layer and its reflection in. For now we only apply a separate reflection // mask if the contents don't have a mask of their own. CCLayerImpl* replicaMaskLayer = m_maskLayer; if (!m_maskLayer && m_owningLayer->replicaLayer()) replicaMaskLayer = m_owningLayer->replicaLayer()->maskLayer(); if (m_owningLayer->parent() && m_owningLayer->parent()->usesLayerClipping() && layerRenderer->capabilities().usingPartialSwap) { FloatRect clipAndDamageRect = m_clipRect; clipAndDamageRect.intersect(surfaceDamageRect); layerRenderer->setScissorToRect(enclosingIntRect(clipAndDamageRect)); } else if (layerRenderer->capabilities().usingPartialSwap) layerRenderer->setScissorToRect(enclosingIntRect(surfaceDamageRect)); else if (m_owningLayer->parent() && m_owningLayer->parent()->usesLayerClipping()) layerRenderer->setScissorToRect(m_clipRect); else GLC(layerRenderer->context(), layerRenderer->context()->disable(GraphicsContext3D::SCISSOR_TEST)); // Reflection draws before the layer. if (m_owningLayer->replicaLayer()) drawLayer(layerRenderer, replicaMaskLayer, m_replicaDrawTransform); drawLayer(layerRenderer, m_maskLayer, m_drawTransform); }
void stereo_straw_g1() { ostringstream fname; fname << "stereo_straw_" << numLayers << "_layers_" << Int_t(floor(innerRadius)) << "_x_" << Int_t(floor(outerRadius)) << ".01.geo"; const char* filename = (fname.str()).c_str(); // output file for straw endcap geometry ofstream* f = new ofstream(filename, ios::out | ios::trunc); //************************* Main procedure START ***************************** Mpdshape* layer = initDrawLayer(f, TVector3(angleLayers, 0.0, 0.0), TVector3(0, 0, initDist + layerThickness/2.0), 0); Mpdshape* layerR = initDrawLayer(f, TVector3(angleLayers, 0.0, 0.0), TVector3(0, 0, initDist + layerThickness*1 + layerThickness/2.0), angleStereo); Mpdshape* layerL = initDrawLayer(f, TVector3(angleLayers, 0.0, 0.0), TVector3(0, 0, initDist + layerThickness*2 + layerThickness/2.0), -angleStereo); drawLayer(layer, TVector3(angleLayers,0,0), TVector3(0,0,initDist + layerThickness*3 + layerThickness/2.0)); for (Int_t i = 4; i < numLayers; i+=4) { drawLayer(layer, TVector3((i/4.+1)*angleLayers,0,0), TVector3(0,0, initDist + layerThickness/2.0 + i*layerThickness)); drawLayer(layerR, TVector3((i/4.+1)*angleLayers,0,0), TVector3(0,0, initDist + layerThickness/2.0 + (i+1)*layerThickness)); drawLayer(layerL, TVector3((i/4.+1)*angleLayers,0,0), TVector3(0,0, initDist + layerThickness/2.0 + (i+2)*layerThickness)); drawLayer(layer, TVector3((i/4.+1)*angleLayers,0,0), TVector3(0,0, initDist + layerThickness/2.0 + (i+3)*layerThickness)); } //*********************** Main procedure END ********************************* delete layerL; delete layer; delete layerR; f->close(); return; }
void drawMap(const struct Map *map, SDL_Renderer *renderer, int x, int y){ unsigned i; if(map->numLayers == 0) return; drawLayer(map->tilesets, map->layers, renderer, x, y); // TODO: draw entities for(i = 1; i < map->numLayers; i++){ drawLayer(map->tilesets, map->layers + i, renderer, x, y); } }
void SquareMap::draw(BITMAP *dest, bool drawObstacle) { Rectangle oldClip; oldClip.clipToRect(dest); cameraScreenRect.rectToClip(dest); if (mapLayers[0]) drawLayer(dest, drawObstacle, mapLayers[0]); drawEntities(dest); if (mapLayers[1]) drawLayer(dest, drawObstacle, mapLayers[1]); drawAirborneEntities(dest); oldClip.rectToClip(dest); }
/** * Draw the full page, usually you would like to call this method * @param page The page to draw * @param cr Draw to thgis context * @param dontRenderEditingStroke false to draw currently drawing stroke * @param hideBackground true to hide the background */ void DocumentView::drawPage(PageRef page, cairo_t* cr, bool dontRenderEditingStroke, bool hideBackground) { XOJ_CHECK_TYPE(DocumentView); initDrawing(page, cr, dontRenderEditingStroke); bool backgroundVisible = page->isLayerVisible(0); if (!hideBackground && backgroundVisible) { drawBackground(); } if (!backgroundVisible) { drawTransparentBackgroundPattern(); } int layer = 0; for (Layer* l : *page->getLayers()) { if (!page->isLayerVisible(l)) { continue; } drawLayer(cr, l); layer++; } finializeDrawing(); }
void Stage::dibujarFront(bool time_stopped) { for(int i=0;i<(int)front.size();i++) { Layer* layer=front[i]; drawLayer(layer,time_stopped); } }
void Stage::dibujarBack(bool time_stopped) { for(int i=0;i<(int)back.size();i++) { Layer* layer=back[i]; drawLayer(layer,time_stopped); } }
void Stage::dibujarFront() { for(int i=0;i<(int)front.size();i++) { Layer* layer=front[i]; drawLayer(layer); } }
void handle_keydown(SDL_KeyboardEvent key) { switch(key.keysym.sym) { case SDLK_q: case SDLK_ESCAPE: printf("Exiting\n"); Running = false; break; case SDLK_r: printf("Resetting position\n"); zoomFactor = 3; #ifdef OPENGL transX = transY = 0.0; #else viewPortL = 0.0; viewPortB = 200.0; #endif resize(600, 600); render(); break; case SDLK_PAGEUP: layerVelocity = 1; if (timerKeyRepeat) SDL_RemoveTimer(timerKeyRepeat); else if (currentLayer < layerCount - 1) drawLayer(++currentLayer); timerKeyRepeat = SDL_AddTimer(500, &timerCallback, (void *) TIMER_KEYREPEAT); break; case SDLK_PAGEDOWN: layerVelocity = -1; if (timerKeyRepeat) SDL_RemoveTimer(timerKeyRepeat); else if (currentLayer > 0) drawLayer(--currentLayer); timerKeyRepeat = SDL_AddTimer(500, &timerCallback, (void *) TIMER_KEYREPEAT); break; case SDLK_LSHIFT: keymodifiermask |= KMM_LSHIFT; break; case SDLK_RSHIFT: keymodifiermask |= KMM_RSHIFT; break; default: printf("key %d pressed (%c)\n", key.keysym.sym, key.keysym.sym); break; } }
void LedCubeMonoExtended::lightAllLedOnLayer(uint16_t layerNum) { uint16_t ledMask[4]; ledMask[0] = bit(16) - 1; ledMask[1] = bit(16) - 1; ledMask[2] = bit(16) - 1; ledMask[3] = bit(16) - 1; drawLayer(LAYER_MASK(layerNum - 1), (uint16_t *) ledMask); }
void Stage::dibujarBack() { for(int i=0;i<(int)back.size();i++) { Layer* layer=back[i]; drawLayer(layer); } // rosalila()->graphics->clearScreen(Color(0,0,0,0)); }
void BoardGerberExport::exportLayerTopSilkscreen() const { QStringList layers = mSettings->getSilkscreenLayersTop(); if (layers.count() > 0) { // don't create silkscreen file if no layers selected FilePath fp = getOutputFilePath(mSettings->getSuffixSilkscreenTop()); GerberGenerator gen( mProject.getMetadata().getName() % " - " % mBoard.getName(), mBoard.getUuid(), mProject.getMetadata().getVersion()); foreach (const QString& layer, layers) { drawLayer(gen, layer); }
void BoardGerberExport::exportLayerBottomSolderMask() const { FilePath fp = getOutputFilePath(mSettings->getSuffixSolderMaskBot()); GerberGenerator gen( mProject.getMetadata().getName() % " - " % mBoard.getName(), mBoard.getUuid(), mProject.getMetadata().getVersion()); drawLayer(gen, GraphicsLayer::sBotStopMask); gen.generate(); gen.saveToFile(fp); mWrittenFiles.append(fp); }
void LayerItem::refreshPixmap() { _pixmap = QPixmap(size()); _pixmap.fill(this, 0, 0); QPainter painter(&_pixmap); painter.initFrom(this); drawLayer(&painter); update(); }
void ofApp::drawAnim() { ofBackground(ofColor::black); ofSetColor(ofColor::wheat); offset.y = 0.02; drawLayer(&tex); rotateScreen(90, halfWidth); drawLayer(&tex); rotateScreen(90, halfHeight); drawLayer(&tex); rotateScreen(90, halfWidth); drawLayer(&tex); rotateScreen(90, halfHeight); drawLayer2(&tex); //cover up if(ofGetFrameNum() == 100) { renderGif(); } }
void CCRenderSurface::drawContents(LayerRendererChromium* layerRenderer) { if (m_skipsDraw || !m_contentsTexture) return; // FIXME: Cache this value so that we don't have to do it for both the surface and its replica. // Apply filters to the contents texture. SkBitmap filterBitmap = applyFilters(layerRenderer, m_filters, m_contentsTexture.get()); int contentsTextureId = getSkBitmapTextureId(filterBitmap, m_contentsTexture->textureId()); drawLayer(layerRenderer, m_maskLayer, m_drawTransform, contentsTextureId); }
/** * @brief * * @param * * @return */ void update(screen scr, layer * layers) { int itr_layers; clrscr(scr); if (scr != NULL){ /* draw each layer, sequentially */ for (itr_layers = 0; layers[itr_layers] != NULL; itr_layers++){ drawLayer(scr, layers[itr_layers]); } bufferToStream(scr); } }
void BoardGerberExport::exportLayerInnerCopper() const { for (int i = 1; i <= mBoard.getLayerStack().getInnerLayerCount(); ++i) { mCurrentInnerCopperLayer = i; // used for attribute provider FilePath fp = getOutputFilePath(mSettings->getSuffixCopperInner()); GerberGenerator gen( mProject.getMetadata().getName() % " - " % mBoard.getName(), mBoard.getUuid(), mProject.getMetadata().getVersion()); drawLayer(gen, GraphicsLayer::getInnerLayerName(i)); gen.generate(); gen.saveToFile(fp); mWrittenFiles.append(fp); } mCurrentInnerCopperLayer = 0; }
void Stage::dibujarBack() { if(receiver->isOuyaDown('r') || receiver->isOuyaDown('s')) return; for(int i=0;i<(int)back.size();i++) { Layer* layer=back[i]; //if(i%2!=0) // continue; drawLayer(layer,i!=0); } }
/* Function who light one LED by it number */ void LedCubeMonoExtended::lightOneLEDByHisNum(int layerNum, int num) { uint16_t ledMask[4]; for(int i = 0; i<4;i++) ledMask[i] = 0; if(num <=16) ledMask[0] = bit(num-1); else if(num <= 32) ledMask[1] = bit(num-17); else if(num <= 48) ledMask[2] = bit(num-33); else if(num <= 64) ledMask[3] = bit(num-49); drawLayer(LAYER_MASK(layerNum - 1), (uint16_t *)ledMask); }
void ofApp::updateAnim(){ masker.beginBackground(); ofBackground(0, 0, 0, 255); ofSetColor(ofColor::red); tx0 = -0.5; ty0 = -ofGetFrameNum() * 0.003 + offset1; tx1 = tx0 + 1; ty1 = ty0 + 0.5; drawLayer(&tex2); masker.endBackground(); masker.beginMask(); ofEnableAlphaBlending(); ofBackground(0, 0, 0, 255); ofSetColor(ofColor::white); tx0 = -0.35; ty0 = ofGetFrameNum() * 0.01 + offset1; tx1 = tx0 + 0.7; ty1 = ty0 + 0.25; drawLayer(&tex1); ty0 = -ofGetFrameNum() * 0.02 + offset1; ty1 = ty0 + 0.25; drawLayer(&tex1); ty0 = ofGetFrameNum() * 0.01 + offset2; ty1 = ty0 + 0.25; drawLayer(&tex1); ty0 = -ofGetFrameNum() * 0.02 + offset2; ty1 = ty0 + 0.25; drawLayer(&tex1); ofRect(0, 0, 70, height); ofRect(width - 70, 0, 70, height); ofDisableAlphaBlending(); masker.endMask(); masker.beginForeground(); ofBackground(0, 0, 0, 255); ofSetColor(ofColor::white); tx0 = -0.5; ty0 = -ofGetFrameNum() * 0.0012 + offset2; tx1 = tx0 + 1; ty1 = ty0 + 0.5; drawLayer(&tex2); masker.endForeground(); }
void CCRenderSurface::drawReplica(LayerRendererChromium* layerRenderer) { ASSERT(hasReplica()); if (!hasReplica() || m_skipsDraw || !m_contentsTexture) return; // Apply filters to the contents texture. SkBitmap filterBitmap = applyFilters(layerRenderer, m_filters, m_contentsTexture.get()); // FIXME: By using the same RenderSurface for both the content and its reflection, // it's currently not possible to apply a separate mask to the reflection layer // or correctly handle opacity in reflections (opacity must be applied after drawing // both the layer and its reflection). The solution is to introduce yet another RenderSurface // to draw the layer and its reflection in. For now we only apply a separate reflection // mask if the contents don't have a mask of their own. CCLayerImpl* replicaMaskLayer = m_maskLayer; if (!m_maskLayer && m_owningLayer->replicaLayer()) replicaMaskLayer = m_owningLayer->replicaLayer()->maskLayer(); int contentsTextureId = getSkBitmapTextureId(filterBitmap, m_contentsTexture->textureId()); drawLayer(layerRenderer, replicaMaskLayer, m_replicaDrawTransform, contentsTextureId); }
void Layer::drawLayer(vector <Object *> &deleteObj) { if( !clsVisible ) { return; } if( !deleteObj.empty() ){ vector <ObjectNode> auxiliar; int k = clsInLayer.size() ; for( int i=k-1; i >= 0; i--){ Object * obj = clsInLayer[i].getObject(); if( !deleteObj.empty() && obj == deleteObj.back() ){ deleteObj.pop_back(); delete obj; }else{ auxiliar.push_back(obj); } }//end for clsInLayer.clear(); clsInLayer = auxiliar; auxiliar.clear(); }//end if drawLayer(); } // end method */
void Stage::dibujarFront() { for(int i=0;i<(int)front.size();i++) { Layer* layer=front[i]; drawLayer(layer,true); } for (std::list<Dialogue*>::iterator dialogue = active_dialogues.begin(); dialogue != active_dialogues.end(); dialogue++) { painter->draw2DImage ( dialogue_bg, dialogue_bg->getWidth(),dialogue_bg->getHeight(), dialogue_x,dialogue_y, 1.0, 0.0, false, 0,0, Color(255,255,255,255), false); ((Dialogue*)*dialogue)->render(this->dialogue_x+this->dialogue_padding_x,this->dialogue_y+this->dialogue_padding_y); } }
void DataMarkerLabel::paintEvent(QPaintEvent * /*event*/) { QPainter painter(this); painter.drawRect(0, 0, width() - 1, height() - 1); if (m_frameEnd - m_frameStart < 1) { return; } drawFrameBase(painter); ObjectModel *pModel = m_pEditData->getObjectModel(); QModelIndex index = m_pEditData->getSelIndex(); ObjectItem *obj = pModel->getObject(index); if (!obj) { return; } QList<int> frames; drawLayer(obj->getIndex(), painter, index, frames); if (m_pressCurrentFrame >= 0) { int x0 = getX(m_pressCurrentFrame); int x1 = getX(m_pressCurrentFrame + 1); int y0 = 0; QColor col = QColor(255, 0, 0, 128); if (pModel->isObject(index)) { y0 = height() / 3; col.setRed(255); } painter.fillRect(x0, y0, x1 - x0, height() / 3, col); } }
int main(int argc, char* argv[]) { msgbuf = malloc(256); msgbuf[0] = 0; currentLayer = 0; cache = true; int longIndex; int opt; do { opt = getopt_long(argc, argv, optString, longOpts, &longIndex); if (opt != -1) { switch( opt ) { case 'l': currentLayer = strtol(optarg, NULL, 10); break; case 'w': extrusionWidth = strtof(optarg, NULL); break; case 'n': printf("DISABLING CACHE\n"); cache = false; break; case 'h': /* fall-through is intentional */ case '?': display_usage(); break; case 0: /* long option without a short arg */ //if( strcmp( "randomize", longOpts[longIndex].name ) == 0 ) { // globalArgs.randomized = 1; //} break; default: /* You won't actually get here. */ break; } } } while (opt != -1); if (optind >= argc) display_usage(); int fd = open(argv[optind], 0); if (fd == -1) die("Open ", argv[optind]); struct stat filestats; if (fstat(fd, &filestats) == -1) die("fstat ", argv[optind]); filesz = filestats.st_size; printf("File is %d long\n", filesz); #ifdef __linux__ gcodefile = mmap(NULL, filesz, PROT_READ, MAP_PRIVATE | MAP_POPULATE, fd, 0); #elif defined __APPLE__ gcodefile = mmap(NULL, filesz, PROT_READ, MAP_PRIVATE, fd, 0); #else #error "don't know how to mmap on this system!" #endif if (gcodefile == MAP_FAILED) die("mmap ", argv[optind]); gcodefile_end = &gcodefile[filesz]; busy = BUSY_SCANFILE; scanLines(); if (currentLayer >= layerCount) currentLayer = layerCount - 1; //for (int i = 0; i < layerCount; i++) // printf("Layer %3d starts at %7d and is %7d bytes long\n", i, layer[i].index - gcodefile, layer[i].size); Running = true; Surf_Display = NULL; if (SDL_Init(SDL_INIT_EVERYTHING) < 0) die("SDL_init", ""); if (FcInitLoadConfigAndFonts() == ((void *) FcTrue)) die("FontConfig Init",""); // from http://www.spinics.net/lists/font-config/msg03050.html FcPattern *pat, *match; FcResult result; char *file; int index; pat = FcPatternCreate(); FcPatternAddString(pat, FC_FAMILY, (FcChar8 *) "Mono"); FcConfigSubstitute(NULL, pat, FcMatchPattern); FcDefaultSubstitute(pat); match = FcFontMatch(NULL, pat, &result); FcPatternGetString(match, FC_FILE, 0, (FcChar8 **) &file); FcPatternGetInteger(match, FC_INDEX, 0, &index); font = ftglCreateExtrudeFont(file); if (!font) die("FTGL createFont", ""); FcPatternDestroy (match); FcPatternDestroy (pat); #ifdef OPENGL transX = transY = 0.0; zoomFactor = 1.0; resize(600, 600); #else viewPortL = viewPortT = 0.0; viewPortR = viewPortB = 200.0; zoomFactor = 3.0; resize(viewPortR * zoomFactor, viewPortB * zoomFactor); #endif SDL_WM_SetCaption("gcodeview", 0); drawLayer(currentLayer); layerVelocity = 0; timerIdle = SDL_AddTimer(20, &timerCallback, (void *) TIMER_IDLE); SDL_Event Event; while(Running != false) { if (busy) { Event.type = SDL_NOEVENT; SDL_PollEvent(&Event); } else { if (SDL_WaitEvent(&Event) == 0) die("SDL_WaitEvent", ""); } //SDL_RemoveTimer(timerIdle); switch (Event.type) { case SDL_NOEVENT: if (busy & BUSY_SCANFILE) { // TODO: scan next layer scanLine(); if ((busy & BUSY_SCANFILE) == 0) { if (cache) { printf("File scanned, rendering...\n"); busy = BUSY_RENDER; } else { printf("File scanned.\n"); busy = 0; } } } else if ((busy & BUSY_RENDER) && cache) { bool allRendered = true; int i; // TODO: render next layer in background for (i = 0; i < layerCount; i++) { if (layer[i].glList == 0) { layer[i].glList = glGenLists(1); glNewList(layer[i].glList, GL_COMPILE); glBegin(GL_QUADS); for (int j = SHADOW_LAYERS; j >= 1; j--) { if (i - j > 0) render_layer(i - j, SHADOW_ALPHA - (j - 1) * (SHADOW_ALPHA / SHADOW_LAYERS)); } render_layer(i, 1.0); glEnd(); glEndList(); layer[i].flags |= LD_LISTGENERATED; allRendered = false; break; } } if (allRendered) { printf("All %d layers rendered\n", i); busy &= ~BUSY_RENDER; } } break; case SDL_QUIT: Running = false; break; case SDL_VIDEORESIZE: resize(Event.resize.w, Event.resize.h); break; case SDL_VIDEOEXPOSE: render(); break; case SDL_MOUSEBUTTONDOWN: handle_mousedown(Event.button); break; case SDL_MOUSEBUTTONUP: handle_mouseup(Event.button); break; case SDL_MOUSEMOTION: handle_mousemove(Event.motion); break; case SDL_ACTIVEEVENT: // lose or gain focus break; case SDL_KEYDOWN: handle_keydown(Event.key); break; case SDL_KEYUP: handle_keyup(Event.key); break; case SDL_USEREVENT: handle_userevent(Event.user); break; default: printf("SDL Event %d\n", Event.type); break; } //idle code //if (busy) // timerIdle = SDL_AddTimer(20, &timerCallback, (void *) TIMER_IDLE); } if (timerKeyRepeat) SDL_RemoveTimer(timerKeyRepeat); if (timerDragRender) SDL_RemoveTimer(timerDragRender); free(layer); SDL_FreeSurface(Surf_Display); SDL_Quit(); return 0; }
void handle_mousedown(SDL_MouseButtonEvent button) { //printf("SDL Mousebutton down event: mouse %d, button %d, state %d, %dx%d\n", Event.button.which, Event.button.button, Event.button.state, Event.button.x, Event.button.y); switch (button.button) { case 1: // left mouse { float mousex = button.x; float mousey = Surf_Display->h - button.y; float w = Surf_Display->w; float h = Surf_Display->h; float dim = minf(w, h); gXmouseDown = transX + (mousex / w) * 200.0 * w / dim / zoomFactor; gYmouseDown = transY + (mousey / h) * 200.0 * h / dim / zoomFactor; if (timerDragRender) SDL_RemoveTimer(timerDragRender); timerDragRender = SDL_AddTimer(50, &timerCallback, (void *) TIMER_DRAGRENDER); } break; case 2: // middle mouse break; case 3: // right mouse break; case 4: // wheel up if ((keymodifiermask & (KMM_LSHIFT | KMM_RSHIFT)) == 0) { #ifdef OPENGL float mousex = button.x; float mousey = Surf_Display->h - button.y; float w = Surf_Display->w; float h = Surf_Display->h; float dim = minf(w, h); float gX = transX + (mousex / w) * 200.0 * w / dim / zoomFactor; float gY = transY + (mousey / h) * 200.0 * h / dim / zoomFactor; //printf("%d,%d->%d,%d\n", (int) transX, (int) transY, (int) gX, (int) gY); zoomFactor *= 1.1; transX = gX - (mousex / w) * 200.0 * w / dim / zoomFactor; transY = gY - (mousey / h) * 200.0 * h / dim/ zoomFactor; #else //float viewX = (gX - viewPortL) * zoomFactor, float gX = ((float) button.x) / zoomFactor + viewPortL; // float viewY = (viewPortB - gY) * zoomFactor, float gY = viewPortB - ((float) button.y) / zoomFactor; zoomFactor *= 1.1; //printf("Zoom %g\n", zoomFactor); viewPortL = gX - ((float) button.x) / zoomFactor; viewPortB = ((float) button.y) / zoomFactor + gY; #endif render(); } else if (currentLayer > 0) drawLayer(--currentLayer); break; case 5: // wheel down if ((keymodifiermask & (KMM_LSHIFT | KMM_RSHIFT)) == 0) { #ifdef OPENGL float mousex = button.x; float mousey = Surf_Display->h - button.y; float w = Surf_Display->w; float h = Surf_Display->h; float dim = minf(w, h); float gX = transX + (mousex / w) * 200.0 * w / dim / zoomFactor; float gY = transY + (mousey / h) * 200.0 * h / dim / zoomFactor; //printf("%d,%d->%d,%d\n", (int) transX, (int) transY, (int) gX, (int) gY); zoomFactor /= 1.1; transX = gX - (mousex / w) * 200.0 * w / dim / zoomFactor; transY = gY - (mousey / h) * 200.0 * h / dim / zoomFactor; #else //float viewX = (gX - viewPortL) * zoomFactor, float gX = ((float) button.x) / zoomFactor + viewPortL; // float viewY = (viewPortB - gY) * zoomFactor, float gY = viewPortB - ((float) button.y) / zoomFactor; zoomFactor /= 1.1; //printf("Zoom %g\n", zoomFactor); viewPortL = gX - ((float) button.x) / zoomFactor; viewPortB = ((float) button.y) / zoomFactor + gY; #endif render(); } else if (currentLayer < layerCount - 1) drawLayer(++currentLayer); break; } }
void DataMarkerLabel::drawLayer(const QModelIndex &index, QPainter &painter, const QModelIndex selIndex, QList<int> &frames) { if (!index.isValid()) { return; } ObjectItem *pItem = m_pEditData->getObjectModel()->getItemFromIndex(index); if (!pItem) { return; } bool bMine = false; if (selIndex.isValid() && index == selIndex) { bMine = true; } const QList<FrameData> &datas = pItem->getFrameData(); for (int i = 0; i < datas.size(); i++) { const FrameData data = datas.at(i); if (data.frame < m_frameStart || data.frame > m_frameEnd) { continue; } int x0 = getX(data.frame); int x1 = getX(data.frame + 1); if (x1 < 0) { continue; } if (bMine) { if (m_pressFrame == data.frame) { continue; } painter.fillRect(x0, 0, x1 - x0, height() / 3, QColor(255, 0, 0, 128)); } else { if (frames.indexOf(data.frame) >= 0) { continue; } frames.append(data.frame); QColor col = QColor(0, 0, 255, 128); if (m_pEditData->getObjectModel()->isObject(m_pEditData->getSelIndex())) { col.setRed(255); } painter.fillRect(x0, height() / 3, x1 - x0, height() / 3, col); } } for (int i = 0; i < pItem->childCount(); i++) { QModelIndex child = m_pEditData->getObjectModel()->index(i, 0, index); drawLayer(child, painter, selIndex, frames); } }