/* virtual */ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message) { std::string message_class = message.getClass(); if (message_class == LLPLUGIN_MESSAGE_CLASS_BASIC) { LLPluginClassBasic::receivePluginMessage(message); } else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) { std::string message_name = message.getName(); if(message_name == "texture_params") { mRequestedTextureDepth = message.getValueS32("depth"); mRequestedTextureInternalFormat = message.getValueU32("internalformat"); mRequestedTextureFormat = message.getValueU32("format"); mRequestedTextureType = message.getValueU32("type"); mRequestedTextureSwapBytes = message.getValueBoolean("swap_bytes"); mRequestedTextureCoordsOpenGL = message.getValueBoolean("coords_opengl"); // These two are optional, and will default to 0 if they're not specified. mDefaultMediaWidth = message.getValueS32("default_width"); mDefaultMediaHeight = message.getValueS32("default_height"); mAllowDownsample = message.getValueBoolean("allow_downsample"); mPadding = message.getValueS32("padding"); setSizeInternal(); mTextureParamsReceived = true; } else if(message_name == "updated") { if(message.hasValue("left")) { LLRect newDirtyRect; newDirtyRect.mLeft = message.getValueS32("left"); newDirtyRect.mTop = message.getValueS32("top"); newDirtyRect.mRight = message.getValueS32("right"); newDirtyRect.mBottom = message.getValueS32("bottom"); // The plugin is likely to have top and bottom switched, due to vertical flip and OpenGL coordinate confusion. // If they're backwards, swap them. if(newDirtyRect.mTop < newDirtyRect.mBottom) { S32 temp = newDirtyRect.mTop; newDirtyRect.mTop = newDirtyRect.mBottom; newDirtyRect.mBottom = temp; } if(mDirtyRect.isEmpty()) { mDirtyRect = newDirtyRect; } else { mDirtyRect.unionWith(newDirtyRect); } LL_DEBUGS("PluginUpdated") << "adjusted incoming rect is: (" << newDirtyRect.mLeft << ", " << newDirtyRect.mTop << ", " << newDirtyRect.mRight << ", " << newDirtyRect.mBottom << "), new dirty rect is: (" << mDirtyRect.mLeft << ", " << mDirtyRect.mTop << ", " << mDirtyRect.mRight << ", " << mDirtyRect.mBottom << ")" << LL_ENDL; mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CONTENT_UPDATED); } bool time_duration_updated = false; int previous_percent = mProgressPercent; if(message.hasValue("current_time")) { mCurrentTime = message.getValueReal("current_time"); time_duration_updated = true; } if(message.hasValue("duration")) { mDuration = message.getValueReal("duration"); time_duration_updated = true; } if(message.hasValue("current_rate")) { mCurrentRate = message.getValueReal("current_rate"); } if(message.hasValue("loaded_duration")) { mLoadedDuration = message.getValueReal("loaded_duration"); time_duration_updated = true; } else { // If the message doesn't contain a loaded_duration param, assume it's equal to duration mLoadedDuration = mDuration; } // Calculate a percentage based on the loaded duration and total duration. if(mDuration != 0.0f) // Don't divide by zero. { mProgressPercent = (int)((mLoadedDuration * 100.0f)/mDuration); } if(time_duration_updated) { mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_TIME_DURATION_UPDATED); } if(previous_percent != mProgressPercent) { mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED); } } else if(message_name == "media_status") { std::string status = message.getValue("status"); LL_DEBUGS("Plugin") << "Status changed to: " << status << LL_ENDL; if(status == "loading") { mStatus = LLPluginClassMediaOwner::MEDIA_LOADING; } else if(status == "loaded") { mStatus = LLPluginClassMediaOwner::MEDIA_LOADED; } else if(status == "error") { mStatus = LLPluginClassMediaOwner::MEDIA_ERROR; } else if(status == "playing") { mStatus = LLPluginClassMediaOwner::MEDIA_PLAYING; } else if(status == "paused") { mStatus = LLPluginClassMediaOwner::MEDIA_PAUSED; } else if(status == "done") { mStatus = LLPluginClassMediaOwner::MEDIA_DONE; } else { // empty string or any unknown string mStatus = LLPluginClassMediaOwner::MEDIA_NONE; } } else if(message_name == "size_change_request") { S32 width = message.getValueS32("width"); S32 height = message.getValueS32("height"); std::string name = message.getValue("name"); // TODO: check that name matches? mNaturalMediaWidth = width; mNaturalMediaHeight = height; setSizeInternal(); } else if(message_name == "size_change_response") { std::string name = message.getValue("name"); // TODO: check that name matches? mTextureWidth = message.getValueS32("texture_width"); mTextureHeight = message.getValueS32("texture_height"); mMediaWidth = message.getValueS32("width"); mMediaHeight = message.getValueS32("height"); // This invalidates any existing dirty rect. resetDirty(); // TODO: should we verify that the plugin sent back the right values? // Two size changes in a row may cause them to not match, due to queueing, etc. mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_SIZE_CHANGED); } else if(message_name == "cursor_changed") { mCursorName = message.getValue("name"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CURSOR_CHANGED); } else if(message_name == "edit_state") { if(message.hasValue("cut")) { mCanCut = message.getValueBoolean("cut"); } if(message.hasValue("copy")) { mCanCopy = message.getValueBoolean("copy"); } if(message.hasValue("paste")) { mCanPaste = message.getValueBoolean("paste"); } } else if(message_name == "name_text") { mMediaName = message.getValue("name"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAME_CHANGED); } else if(message_name == "pick_file") { mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PICK_FILE_REQUEST); } else if(message_name == "auth_request") { mAuthURL = message.getValue("url"); mAuthRealm = message.getValue("realm"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST); } else if(message_name == "debug_message") { mDebugMessageText = message.getValue("message_text"); mDebugMessageLevel = message.getValue("message_level"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_DEBUG_MESSAGE); } else { LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; } } else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER) { std::string message_name = message.getName(); if(message_name == "navigate_begin") { mNavigateURI = message.getValue("uri"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_BEGIN); } else if(message_name == "navigate_complete") { mNavigateURI = message.getValue("uri"); mNavigateResultCode = message.getValueS32("result_code"); mNavigateResultString = message.getValue("result_string"); mHistoryBackAvailable = message.getValueBoolean("history_back_available"); mHistoryForwardAvailable = message.getValueBoolean("history_forward_available"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE); } else if(message_name == "progress") { mProgressPercent = message.getValueS32("percent"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED); } else if(message_name == "status_text") { mStatusText = message.getValue("status"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_STATUS_TEXT_CHANGED); } else if(message_name == "location_changed") { mLocation = message.getValue("uri"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LOCATION_CHANGED); } else if(message_name == "click_href") { mClickURL = message.getValue("uri"); mClickTarget = message.getValue("target"); mClickUUID = message.getValue("uuid"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_HREF); } else if(message_name == "click_nofollow") { mClickURL = message.getValue("uri"); mClickNavType = message.getValue("nav_type"); mClickTarget.clear(); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW); } else if(message_name == "navigate_error_page") { mStatusCode = message.getValueS32("status_code"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_ERROR_PAGE); } else if(message_name == "cookie_set") { if(mOwner) { mOwner->handleCookieSet(this, message.getValue("cookie")); } } else if(message_name == "close_request") { mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLOSE_REQUEST); } else if(message_name == "geometry_change") { mClickUUID = message.getValue("uuid"); mGeometryX = message.getValueS32("x"); mGeometryY = message.getValueS32("y"); mGeometryWidth = message.getValueS32("width"); mGeometryHeight = message.getValueS32("height"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_GEOMETRY_CHANGE); } else if(message_name == "link_hovered") { // text is not currently used -- the tooltip hover text is taken from the "title". mHoverLink = message.getValue("link"); mHoverText = message.getValue("title"); // message.getValue("text"); mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LINK_HOVERED); } else { LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; } } else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) { std::string message_name = message.getName(); // This class hasn't defined any incoming messages yet. // if(message_name == "message_name") // { // } // else { LL_WARNS("Plugin") << "Unknown " << message_class << " class message: " << message_name << LL_ENDL; } } }
/* virtual */ void LLPluginClassMedia::pluginLaunchFailed() { mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED_LAUNCH); }
/* virtual */ void LLPluginClassMedia::pluginDied() { mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED); }
/*! \brief gamewindow::gamewindow * Loads games depending on if its new or saved. Also sets up timer for music to play * in the background. The order of the music is randomly picked. */ gamewindow::gamewindow(QWidget *parent, bool newGame, QString sessionName) : QMainWindow(parent), ui(new Ui::gamewindow) { QString load; session = sessionName; if(newGame){ load = "levels/defaultlevel"; } else{ load = "saved/"+ sessionName; //score and other stuff will go here or maybe lets not have a score but life count } nextLevel = "levels/defaultlevel"; ui->setupUi(this); ginny = new engine(); //this->setWindowFlags(Qt::FramelessWindowHint); graphicsView = new GraphicsView(); graphicsView->setGeometry( QRect(0, 0, BLOCK_SIZE*30, BLOCK_SIZE*20 ) ); graphicsScene = new QGraphicsScene( QRect(0,0,BLOCK_SIZE*30,BLOCK_SIZE*20) ); graphicsView->setScene( graphicsScene ); ginny->SetScene( graphicsScene ); ginny->SetParentWindow( this ); graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ginny->loadGame(load); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(moveEvent())); timer->start(500); QTimer *mediaTimer = new QTimer(this); connect(mediaTimer, SIGNAL(timeout()), this, SLOT(mediaEvent())); mediaTimer->start(20); //choose random song QTime time = QTime::currentTime(); qsrand((uint)time.msec()); int random = qrand() % (3); QString song; if(random == 0) song = "sounds/aquarium.mp3"; else if(random == 1) song = "sounds/rafting_starlit_everglades.mp3"; else song = "sounds/bob_marley_is_this_love.mp3"; //start playing music from specified file player = new QMediaPlayer; player->setMedia(QUrl::fromLocalFile(QFileInfo(song).absoluteFilePath() ) ); player->setVolume(50); player->play(); mjHasBlock = false; }