Merge branch 'master' of https://github.com/highfidelity/hifi into smooth-initial-crash-volume

This commit is contained in:
Howard Stearns 2015-06-04 09:10:42 -07:00
commit 0b52f85c60
7 changed files with 79 additions and 89 deletions

View file

@ -1696,12 +1696,9 @@ bool Application::acceptSnapshot(const QString& urlString) {
SnapshotMetaData* snapshotData = Snapshot::parseSnapshotData(snapshotPath); SnapshotMetaData* snapshotData = Snapshot::parseSnapshotData(snapshotPath);
if (snapshotData) { if (snapshotData) {
if (!snapshotData->getDomain().isEmpty()) { if (!snapshotData->getURL().toString().isEmpty()) {
DependencyManager::get<NodeList>()->getDomainHandler().setHostnameAndPort(snapshotData->getDomain()); DependencyManager::get<AddressManager>()->handleLookupString(snapshotData->getURL().toString());
} }
_myAvatar->setPosition(snapshotData->getLocation());
_myAvatar->setOrientation(snapshotData->getOrientation());
} else { } else {
QMessageBox msgBox; QMessageBox msgBox;
msgBox.setText("No location details were found in the file " msgBox.setText("No location details were found in the file "
@ -3452,6 +3449,7 @@ void Application::displaySide(Camera& theCamera, bool selfAvatarOnly, bool billb
Glower glower; // Sets alpha to 1.0 Glower glower; // Sets alpha to 1.0
_overlays.renderWorld(true); _overlays.renderWorld(true);
} }
activeRenderingThread = nullptr; activeRenderingThread = nullptr;
} }

View file

@ -17,6 +17,9 @@
#include <QShowEvent> #include <QShowEvent>
#include <QHideEvent> #include <QHideEvent>
#include <QWindowStateChangeEvent> #include <QWindowStateChangeEvent>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
#include "MainWindow.h" #include "MainWindow.h"
#include "Menu.h" #include "Menu.h"
@ -27,6 +30,7 @@ MainWindow::MainWindow(QWidget* parent) :
_windowGeometry("WindowGeometry"), _windowGeometry("WindowGeometry"),
_windowState("WindowState", 0) _windowState("WindowState", 0)
{ {
setAcceptDrops(true);
} }
void MainWindow::restoreGeometry() { void MainWindow::restoreGeometry() {
@ -106,3 +110,13 @@ void MainWindow::changeEvent(QEvent* event) {
} }
QMainWindow::changeEvent(event); QMainWindow::changeEvent(event);
} }
void MainWindow::dragEnterEvent(QDragEnterEvent* event) {
if (event->mimeData()) {
event->acceptProposedAction();
}
}
void MainWindow::dropEvent(QDropEvent* event) {
QCoreApplication::sendEvent(QCoreApplication::instance(), event);
}

View file

@ -36,6 +36,8 @@ protected:
virtual void showEvent(QShowEvent* event); virtual void showEvent(QShowEvent* event);
virtual void hideEvent(QHideEvent* event); virtual void hideEvent(QHideEvent* event);
virtual void changeEvent(QEvent* event); virtual void changeEvent(QEvent* event);
virtual void dragEnterEvent(QDragEnterEvent *e);
virtual void dropEvent(QDropEvent *e);
private: private:
Setting::Handle<QRect> _windowGeometry; Setting::Handle<QRect> _windowGeometry;

View file

@ -15,8 +15,10 @@
#include <QFileInfo> #include <QFileInfo>
#include <QImage> #include <QImage>
#include <QTemporaryFile> #include <QTemporaryFile>
#include <QUrl>
#include <AccountManager.h> #include <AccountManager.h>
#include <AddressManager.h>
#include <avatar/AvatarManager.h> #include <avatar/AvatarManager.h>
#include <avatar/MyAvatar.h> #include <avatar/MyAvatar.h>
#include <FileUtils.h> #include <FileUtils.h>
@ -28,21 +30,12 @@
// filename format: hifi-snap-by-%username%-on-%date%_%time%_@-%location%.jpg // filename format: hifi-snap-by-%username%-on-%date%_%time%_@-%location%.jpg
// %1 <= username, %2 <= date and time, %3 <= current location // %1 <= username, %2 <= date and time, %3 <= current location
const QString FILENAME_PATH_FORMAT = "hifi-snap-by-%1-on-%2@%3.jpg"; const QString FILENAME_PATH_FORMAT = "hifi-snap-by-%1-on-%2.jpg";
const QString DATETIME_FORMAT = "yyyy-MM-dd_hh-mm-ss"; const QString DATETIME_FORMAT = "yyyy-MM-dd_hh-mm-ss";
const QString SNAPSHOTS_DIRECTORY = "Snapshots"; const QString SNAPSHOTS_DIRECTORY = "Snapshots";
const QString LOCATION_X = "location-x"; const QString URL = "highfidelity_url";
const QString LOCATION_Y = "location-y";
const QString LOCATION_Z = "location-z";
const QString ORIENTATION_X = "orientation-x";
const QString ORIENTATION_Y = "orientation-y";
const QString ORIENTATION_Z = "orientation-z";
const QString ORIENTATION_W = "orientation-w";
const QString DOMAIN_KEY = "domain";
Setting::Handle<QString> Snapshot::snapshotsLocation("snapshotsLocation", Setting::Handle<QString> Snapshot::snapshotsLocation("snapshotsLocation",
QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)); QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
@ -56,26 +49,21 @@ SnapshotMetaData* Snapshot::parseSnapshotData(QString snapshotPath) {
QImage shot(snapshotPath); QImage shot(snapshotPath);
// no location data stored // no location data stored
if (shot.text(LOCATION_X).isEmpty() || shot.text(LOCATION_Y).isEmpty() || shot.text(LOCATION_Z).isEmpty()) { if (shot.text(URL).isEmpty()) {
return NULL; return NULL;
} }
// parsing URL
QUrl url = QUrl(shot.text(URL), QUrl::ParsingMode::StrictMode);
SnapshotMetaData* data = new SnapshotMetaData(); SnapshotMetaData* data = new SnapshotMetaData();
data->setLocation(glm::vec3(shot.text(LOCATION_X).toFloat(), data->setURL(url);
shot.text(LOCATION_Y).toFloat(),
shot.text(LOCATION_Z).toFloat()));
data->setOrientation(glm::quat(shot.text(ORIENTATION_W).toFloat(),
shot.text(ORIENTATION_X).toFloat(),
shot.text(ORIENTATION_Y).toFloat(),
shot.text(ORIENTATION_Z).toFloat()));
data->setDomain(shot.text(DOMAIN_KEY));
return data; return data;
} }
QString Snapshot::saveSnapshot(QImage image) { QString Snapshot::saveSnapshot(QImage image) {
QFile* snapshotFile = savedFileForSnapshot(image, false); QFile* snapshotFile = savedFileForSnapshot(image, false);
// we don't need the snapshot file, so close it, grab its filename and delete it // we don't need the snapshot file, so close it, grab its filename and delete it
@ -90,31 +78,14 @@ QString Snapshot::saveSnapshot(QImage image) {
QTemporaryFile* Snapshot::saveTempSnapshot(QImage image) { QTemporaryFile* Snapshot::saveTempSnapshot(QImage image) {
// return whatever we get back from saved file for snapshot // return whatever we get back from saved file for snapshot
return static_cast<QTemporaryFile*>(savedFileForSnapshot(image, true));; return static_cast<QTemporaryFile*>(savedFileForSnapshot(image, true));
} }
QFile* Snapshot::savedFileForSnapshot(QImage & shot, bool isTemporary) { QFile* Snapshot::savedFileForSnapshot(QImage & shot, bool isTemporary) {
Avatar* avatar = DependencyManager::get<AvatarManager>()->getMyAvatar(); // adding URL to snapshot
QUrl currentURL = DependencyManager::get<AddressManager>()->currentAddress();
glm::vec3 location = avatar->getPosition(); shot.setText(URL, currentURL.toString());
glm::quat orientation = avatar->getHead()->getOrientation();
// add metadata
shot.setText(LOCATION_X, QString::number(location.x));
shot.setText(LOCATION_Y, QString::number(location.y));
shot.setText(LOCATION_Z, QString::number(location.z));
shot.setText(ORIENTATION_X, QString::number(orientation.x));
shot.setText(ORIENTATION_Y, QString::number(orientation.y));
shot.setText(ORIENTATION_Z, QString::number(orientation.z));
shot.setText(ORIENTATION_W, QString::number(orientation.w));
shot.setText(DOMAIN_KEY, DependencyManager::get<NodeList>()->getDomainHandler().getHostname());
QString formattedLocation = QString("%1_%2_%3").arg(location.x).arg(location.y).arg(location.z);
// replace decimal . with '-'
formattedLocation.replace('.', '-');
QString username = AccountManager::getInstance().getAccountInfo().getUsername(); QString username = AccountManager::getInstance().getAccountInfo().getUsername();
// normalize username, replace all non alphanumeric with '-' // normalize username, replace all non alphanumeric with '-'
@ -122,7 +93,7 @@ QFile* Snapshot::savedFileForSnapshot(QImage & shot, bool isTemporary) {
QDateTime now = QDateTime::currentDateTime(); QDateTime now = QDateTime::currentDateTime();
QString filename = FILENAME_PATH_FORMAT.arg(username, now.toString(DATETIME_FORMAT), formattedLocation); QString filename = FILENAME_PATH_FORMAT.arg(username, now.toString(DATETIME_FORMAT));
const int IMAGE_QUALITY = 100; const int IMAGE_QUALITY = 100;
@ -142,6 +113,7 @@ QFile* Snapshot::savedFileForSnapshot(QImage & shot, bool isTemporary) {
imageFile->close(); imageFile->close();
return imageFile; return imageFile;
} else { } else {
QTemporaryFile* imageTempFile = new QTemporaryFile(QDir::tempPath() + "/XXXXXX-" + filename); QTemporaryFile* imageTempFile = new QTemporaryFile(QDir::tempPath() + "/XXXXXX-" + filename);

View file

@ -25,19 +25,11 @@ class QTemporaryFile;
class SnapshotMetaData { class SnapshotMetaData {
public: public:
QString getDomain() { return _domain; } QUrl getURL() { return _URL; }
void setDomain(QString domain) { _domain = domain; } void setURL(QUrl URL) { _URL = URL; }
glm::vec3 getLocation() { return _location; }
void setLocation(glm::vec3 location) { _location = location; }
glm::quat getOrientation() { return _orientation; }
void setOrientation(glm::quat orientation) { _orientation = orientation; }
private: private:
QString _domain; QUrl _URL;
glm::vec3 _location;
glm::quat _orientation;;
}; };
class Snapshot { class Snapshot {

View file

@ -16,6 +16,17 @@
OffscreenGlCanvas::OffscreenGlCanvas() { OffscreenGlCanvas::OffscreenGlCanvas() {
} }
OffscreenGlCanvas::~OffscreenGlCanvas() {
#ifdef DEBUG
if (_logger) {
makeCurrent();
delete _logger;
_logger = nullptr;
}
#endif
_context.doneCurrent();
}
void OffscreenGlCanvas::create(QOpenGLContext* sharedContext) { void OffscreenGlCanvas::create(QOpenGLContext* sharedContext) {
if (nullptr != sharedContext) { if (nullptr != sharedContext) {
sharedContext->doneCurrent(); sharedContext->doneCurrent();

View file

@ -20,6 +20,7 @@ class QOpenGLDebugLogger;
class OffscreenGlCanvas : public QObject { class OffscreenGlCanvas : public QObject {
public: public:
OffscreenGlCanvas(); OffscreenGlCanvas();
~OffscreenGlCanvas();
void create(QOpenGLContext* sharedContext = nullptr); void create(QOpenGLContext* sharedContext = nullptr);
bool makeCurrent(); bool makeCurrent();
void doneCurrent(); void doneCurrent();