void EC_VideoSource::PlayerStateChanged(Phonon::State new_state, Phonon::State old_state) { switch (new_state) { case Phonon::LoadingState: { break; } case Phonon::PlayingState: { break; } case Phonon::PausedState: { if (player_->currentTime() == player_->totalTime()) { if (!getlooping()) { stop_canvas_ = true; UpdateCanvas(); } } break; } case Phonon::StoppedState: { if (old_state == Phonon::LoadingState && getplaybackState() == PS_Play) { LogDebug("-- Loading done"); if (!player_->isPlaying() && !ready_poller_->isActive()) { Play(); UpdateCanvas(); } } break; } case Phonon::ErrorState: { LogError("Could not open video stream: " + media_object_->errorString().toStdString()); break; } case Phonon::BufferingState: { break; } } }
void wxSFAutoLayout::Layout(wxSFDiagramManager& manager, const wxString& algname) { wxSFLayoutAlgorithm *pAlg = m_mapAlgorithms[ algname ]; if( pAlg ) { ShapeList lstShapes; manager.GetShapes( CLASSINFO(wxSFShapeBase), lstShapes ); // remove all child shapes ShapeList::compatibility_iterator it = lstShapes.GetFirst(); while( it ) { wxSFShapeBase *pShape = it->GetData(); if( pShape->GetParentShape() || pShape->IsKindOf(CLASSINFO(wxSFLineShape)) ) { lstShapes.DeleteNode( it ); it = lstShapes.GetFirst(); } else it = it->GetNext(); } pAlg->DoLayout( lstShapes ); manager.MoveShapesFromNegatives(); if( manager.GetShapeCanvas() ) UpdateCanvas( manager.GetShapeCanvas() ); } }
void Timeline::SetLayerIndex(int index) { if (!mScene || mLayers.size() == 0) { return; } if (index < 0) { index = 0; } else if (index >= (int)mLayers.size()) { index = (int)mLayers.size() - 1; } if (index != mLayerIndex) { mLayerIndex = index; for (int i = 0; i < mLayers.size(); ++i) { mLayers[i]->SetSelected(i == index); } UpdateCanvas(); } }
void ColorPicker::OnSlide(Slide *slide, int slideId, double pos) { switch(slideId) { case SL_COLOR: { int color = pos*255; if(fixedColor <= FIX_BLUE) { switch(fixedColor) { case FIX_RED: r = color; break; case FIX_GREEN: g = color; break; case FIX_BLUE: b = color; break; } UpdateSample(r, g, b); } else { double H, S, V; KrRGBA c; RGB_to_HSV(r, g, b, H, S, V); switch(fixedColor) { case FIX_HUE: c = HSV_to_RGB(color, S, V); break; case FIX_SATURATION: c = HSV_to_RGB(H, color, V); break; case FIX_BRIGHTNESS: c = HSV_to_RGB(H, S, color); break; } UpdateSample(c.c.red, c.c.green, c.c.blue); } UpdateCanvas(color, fixedColor); } break; } }
void Timeline::SetFrameIndex(int value) { if (value != mFrameIndex) { mFrameIndex = value; UpdateCanvas(); } }
void ColorPicker::UpdateColorControls() { UpdateSlideColor(r, g, b, fixedColor); if(fixedColor <= FIX_BLUE) { switch(fixedColor) { case FIX_RED: colorSlide->SetPos(r/255.0); canvas->SetPointer(b, 255 - g); break; case FIX_GREEN: colorSlide->SetPos(g/255.0); canvas->SetPointer(b, 255 - r); break; case FIX_BLUE: colorSlide->SetPos(b/255.0); canvas->SetPointer(r, 255 - g); break; } } else { double H, S, V; RGB_to_HSV(r, g, b, H, S, V); switch(fixedColor) { case FIX_HUE: colorSlide->SetPos(H/255.0); canvas->SetPointer(S, 255 - V); break; case FIX_SATURATION: colorSlide->SetPos(S/255.0); canvas->SetPointer(H, 255 - V); break; case FIX_BRIGHTNESS: colorSlide->SetPos(V/255.0); canvas->SetPointer(H, 255 - S); break; } } UpdateCanvas(colorSlide->GetPos()*255, fixedColor); }
void EC_VideoSource::Play() { if (!video_widget_ || !media_object_) return; if (media_object_->state() == Phonon::LoadingState && getplaybackState() != PS_Stop) { if (!ready_poller_->isActive()) ready_poller_->start(1000); return; } else if (ready_poller_->isActive()) ready_poller_->stop(); if (media_object_->state() != Phonon::PlayingState || media_object_->state() == Phonon::PausedState) { if (media_object_->hasVideo() && !player_->isPlaying()) { LogDebug("Play"); player_->play(); if (original_size_.isNull()) { original_size_ = player_->size(); if (original_size_.width() < 1 && original_size_.height() < 1) original_size_ = QSize(0,0); else qDebug() << "Original size set: " << original_size_; } start_canvas_ = true; UpdateCanvas(); } else LogDebug("-- source does not have video, cannot play"); } if (getplaybackState() != PS_Play) playbackState.Set(PS_Play, AttributeChange::LocalOnly); }
ColorPicker::ColorPicker(int _r, int _g, int _b) : Panel("DlgColorPicker", (GameControl::Get()->Width() - WIDTH)/2, (GameControl::Get()->Height() - HEIGHT)/2, WIDTH, HEIGHT) { SetModal(); Text *text; Button *button; //Title text = AddText("Color Picker", CENTER_TEXT, 5); int y = DrawHLine(text->Down() + 2); //Body canvas = new ColorCanvas(this); oldColor = new ColorSampleOfPicker(this); newColor = new ColorSampleOfPicker(this); canvas->SetPos(10, y + 2); colorSlide = AddSlide(canvas->Right() + 5, canvas->Top(), 20, 256, SL_COLOR); colorSlide->SetPos(1.0); newColor->SetPos(colorSlide->Right() + 5, colorSlide->Top()); oldColor->SetPos(newColor->Left(), newColor->Down()); text = AddText(" Red: ", oldColor->Left(), oldColor->Down() + 16); rEdit = AddEditBox(text->Right(), text->Top(), 32); rEdit->SetNumeric(0, 255, 1); text = AddText(" Green: ", text->Left(), rEdit->Down() + 2); gEdit = AddEditBox(text->Right(), text->Top(), 32); gEdit->SetNumeric(0, 255, 1); text = AddText(" Blue: ", text->Left(), gEdit->Down() + 2); bEdit = AddEditBox(text->Right(), text->Top(), 32); bEdit->SetNumeric(0, 255, 1); text = AddText(" Hue: ", text->Left(), bEdit->Down() + 16); hEdit = AddEditBox(text->Right(), text->Top(), 32); hEdit->SetNumeric(0, 359, 1); text = AddText("Saturation: ", text->Left(), hEdit->Down() + 2); sEdit = AddEditBox(text->Right(), text->Top(), 32); sEdit->SetNumeric(0, 100, 1); text = AddText("Brightness: ", text->Left(), sEdit->Down() + 2); vEdit = AddEditBox(text->Right(), text->Top(), 32); vEdit->SetNumeric(0, 100, 1); listFix = AddListPop(oldColor->Left(), vEdit->Down() + 16, 104, 0, LS_FIX_COLOR); //Close y = DrawHLine(canvas->Down() + 2); button = AddButton("Ok", (WIDTH-135)/2, y, 0, 0, OK_BUTTON); SetConfirmButton(button); button = AddButton("Cancel", button->Right()+8, y, 0, 0, CANCEL_BUTTON); SetCancelButton(button); listFix->AddText("Red"); listFix->AddText("Green"); listFix->AddText("Blue"); listFix->AddText("Hue"); listFix->AddText("Saturation"); listFix->AddText("Brightness"); listFix->SetText("Red"); fixedColor = FIX_RED; r = _r; g = _g; b = _b; oldColor->SetColor(r, g, b); colorSlide->SetPos(r / 255.0); UpdateSample(r, g, b); UpdateCanvas(r, fixedColor); UpdateSlideColor(r, g, b, fixedColor); }
void EC_VideoSource::UpdateCanvas() { if (!video_widget_ || !media_object_) return; Scene::Entity* entity = GetParentEntity(); if (!entity) { LogError("No parent entity, cannot create/update 3DCanvas"); return; } // If entity has no valid mesh or prim yet, start a retry timer and try to set the canvas later if ((!entity->GetComponent(EC_Mesh::TypeNameStatic())) && (!entity->GetComponent(EC_OgreCustomObject::TypeNameStatic()))) { LogDebug("Mesh or prim did not exist yet, retrying"); QTimer::singleShot(500, this, SLOT(UpdateCanvas())); return; } canvas_ = Get3DCanvas(); if (!canvas_) { LogError("Could not get 3D Canvas component"); return; } // Update widget if (canvas_->GetWidget() != player_) { canvas_->SetWidget(player_); LogDebug("Widget set"); } // Update submesh int submesh = getsubmeshIndex(); if (submesh < 0) submesh = 0; if (!canvas_->GetSubMeshes().contains(submesh)) { canvas_->SetSubmesh(submesh); LogDebug("Submesh set"); } // Update refresh rate if (getrefreshRate() > 0) { int ref_rate_msec = 1000 / getrefreshRate(); if (canvas_->GetRefreshRate() != ref_rate_msec) { canvas_->SetRefreshRate(getrefreshRate()); LogDebug("Refresh rate set"); } } else canvas_->SetRefreshRate(0); // Scale down widget if (getscaleDown() && player_) { if (original_size_.isNull()) { original_size_ = player_->size(); if (original_size_.width() < 1 && original_size_.height() < 1) original_size_ = QSize(0,0); else qDebug() << "Original size set: " << original_size_; } if (!original_size_.isNull()) { QSize scale_down_size(320, 240); if (player_->size().width() > scale_down_size.width() && player_->size().height() > scale_down_size.height()) { //player_->resize(scale_down_size); //LogDebug("Scaled video widget down to 320x240 for performance"); } } } if (start_canvas_) { canvas_->Start(); start_canvas_ = false; playing_canvas_ = true; LogDebug("Started rendering updates"); if (ready_poller_->isActive()) ready_poller_->stop(); } if (stop_canvas_) { canvas_->Stop(); start_canvas_ = false; stop_canvas_ = false; playing_canvas_ = false; LogDebug("Stoppend rendering updates"); } }
void EC_VideoSource::OnAttributeUpdated(IAttribute *attribute) { if (!video_widget_ || !media_object_) return; bool update_canvas = false; if (attribute->GetNameString() == videoSourceUrl.GetNameString()) { if (!getvideoSourceUrl().isEmpty()) { QString source_string = getvideoSourceUrl(); QUrl source_url(source_string, QUrl::TolerantMode); if (source_url.isValid()) { if (media_object_->currentSource().url() != source_url) { ///\todo Regression. Reimplement using the new Asset API. -jj. /* Foundation::AssetServiceInterface *asset_service = GetFramework()->GetService<Foundation::AssetServiceInterface>(); if (asset_service) { Foundation::AssetInterfacePtr asset = asset_service->GetAsset(source_string.toStdString(), RexTypes::ASSETTYPENAME_VIDEO); if (asset) { LoadVideo(asset); } else { if (expecting_resources_ == false) { video_request_tag_ = asset_service->RequestAsset(source_string.toStdString(), RexTypes::ASSETTYPENAME_VIDEO); if (video_request_tag_) { expecting_resources_ = true; LogDebug("Downloading URL source: " + source_string.toStdString()); } } } } */ } } else if (QFile::exists(getvideoSourceUrl())) { if (media_object_->currentSource().fileName() != getvideoSourceUrl()) { player_->load(Phonon::MediaSource(getvideoSourceUrl())); LogDebug("Loading file source: " + getvideoSourceUrl().toStdString()); } } } else { if (!media_object_->currentSource().fileName().isEmpty()) { media_object_->clear(); qDebug() << "-- empty source set, clearing media object"; } } } else if (attribute->GetNameString() == playbackState.GetNameString()) { if (!videoSourceUrl.Get().isEmpty()) { // Play video if video source url has been set and if sound has been triggered or looped. if (getplaybackState() == PS_Play && !playing_canvas_) { Play(); } else if (getplaybackState() == PS_Stop && playing_canvas_) { Stop(); stop_canvas_ = true; update_canvas = true; } else if (getplaybackState() == PS_Pause && playing_canvas_) { Pause(); stop_canvas_ = true; update_canvas = true; } } } else if (attribute->GetNameString() == audioPlaybackVolume.GetNameString()) { qreal volume = getaudioPlaybackVolume(); if (player_->volume() != volume) { player_->setVolume(volume); LogDebug("Volume set to " + QString::number(volume).toStdString()); } } else if (attribute->GetNameString() == refreshRate.GetNameString()) { EC_3DCanvas *canvas = Get3DCanvas(); if (canvas) { if (getrefreshRate() > 0) { int ref_rate_msec = 1000 / getrefreshRate(); if (canvas->GetRefreshRate() != ref_rate_msec) { canvas->SetRefreshRate(getrefreshRate()); LogDebug("Refresh rate set"); } } else if (canvas->GetRefreshRate() != 0) canvas->SetRefreshRate(0); } else LogError("Could not get 3D Canvas component to set refresh rate"); } else if (attribute->GetNameString() == scaleDown.GetNameString()) { if (getscaleDown() && player_) { original_size_ = player_->size(); if (original_size_.width() < 1 && original_size_.height() < 1) original_size_ = QSize(0,0); else qDebug() << "Original size set: " << original_size_; if (original_size_.width() > 1 && original_size_.height() > 1) { QSize scale_down_size(320, 240); if (player_->size().width() > scale_down_size.width() && player_->size().height() > scale_down_size.height()) { //player_->resize(scale_down_size); //LogDebug("Scaled video widget down to 320x240 for performance"); } } } else if (!getscaleDown() && player_) { if (!original_size_.isNull()) { if (original_size_.width() > 0 && original_size_.height() > 0) { if (player_->size().width() > original_size_.width() && player_->size().height() > original_size_.height()) { //player_->resize(original_size_); //LogDebug("Restored original video widget size"); } } else original_size_ = QSize(0,0); } } } if (update_canvas) UpdateCanvas(); }