aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/mdbviz
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2017-09-01 12:17:03 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-05 13:57:44 +0000
commita6d2d708d7ca980b41cc2fefcb4a2916212b3960 (patch)
treef42983f5e003579da4b87fdf1dff46faa607bd2e /tools/mdbviz
parentb34b62692e518fb80aab1f7199f54c92a5de405f (diff)
Add gn plumbing for mdbviz tool
Change-Id: I06e6b63c2742da069f48ff5d7defafc63a485af7 Reviewed-on: https://skia-review.googlesource.com/41842 Reviewed-by: Mike Klein <mtklein@google.com> Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'tools/mdbviz')
-rw-r--r--tools/mdbviz/images/open.pngbin0 -> 215 bytes
-rw-r--r--tools/mdbviz/main.cpp30
-rw-r--r--tools/mdbviz/mainwindow.cpp119
-rw-r--r--tools/mdbviz/mainwindow.h36
-rw-r--r--tools/mdbviz/resources.qrc5
5 files changed, 190 insertions, 0 deletions
diff --git a/tools/mdbviz/images/open.png b/tools/mdbviz/images/open.png
new file mode 100644
index 0000000000..6043f4bdc0
--- /dev/null
+++ b/tools/mdbviz/images/open.png
Binary files differ
diff --git a/tools/mdbviz/main.cpp b/tools/mdbviz/main.cpp
new file mode 100644
index 0000000000..42abc2a7d8
--- /dev/null
+++ b/tools/mdbviz/main.cpp
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <QtWidgets>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ QCoreApplication::setOrganizationName("Google");
+ QCoreApplication::setApplicationName("MDB Viz");
+ QCoreApplication::setApplicationVersion("0.0");
+
+ QCommandLineParser parser;
+ parser.setApplicationDescription(QCoreApplication::applicationName());
+ parser.addVersionOption();
+ parser.process(app);
+
+ MainWindow mainWin;
+ mainWin.show();
+
+ return app.exec();
+}
+
+
diff --git a/tools/mdbviz/mainwindow.cpp b/tools/mdbviz/mainwindow.cpp
new file mode 100644
index 0000000000..c77bfd613b
--- /dev/null
+++ b/tools/mdbviz/mainwindow.cpp
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <QtWidgets>
+
+#include "MainWindow.h"
+
+#include "SkBitmap.h"
+#include "SkCanvas.h"
+#include "SkPicture.h"
+#include "SkStream.h"
+
+MainWindow::MainWindow()
+ : fImageLabel(new QLabel) {
+ this->setCentralWidget(fImageLabel);
+
+ this->createActions();
+ this->createStatusBar();
+ this->readSettings();
+ this->setUnifiedTitleAndToolBarOnMac(true);
+}
+
+void MainWindow::openFile() {
+ QString fileName = QFileDialog::getOpenFileName(this);
+ if (!fileName.isEmpty()) {
+ this->loadFile(fileName);
+ }
+}
+
+void MainWindow::loadFile(const QString &fileName) {
+ QFile file(fileName);
+ if (!file.open(QFile::ReadOnly | QFile::Text)) {
+ QMessageBox::warning(this, tr("MDB Viz"),
+ tr("Cannot read file %1:\n%2.")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString()));
+ return;
+ }
+
+ QTextStream in(&file);
+#ifndef QT_NO_CURSOR
+ QApplication::setOverrideCursor(Qt::WaitCursor);
+#endif
+
+ std::string str = file.fileName().toLocal8Bit().constData();
+
+ std::unique_ptr<SkStream> stream = SkStream::MakeFromFile(str.c_str());
+ if (!stream) {
+ this->statusBar()->showMessage(tr("Couldn't read file"));
+ return;
+ }
+ sk_sp<SkPicture> pic(SkPicture::MakeFromStream(stream.get()));
+ if (!pic) {
+ this->statusBar()->showMessage(tr("Couldn't decode picture"));
+ return;
+ }
+
+ SkBitmap bm;
+
+ SkImageInfo ii = SkImageInfo::MakeN32Premul(1024, 1024);
+ bm.allocPixels(ii, 0);
+
+ SkCanvas canvas(bm);
+
+ canvas.drawPicture(pic);
+
+ fImage = QImage((uchar*)bm.getPixels(), bm.width(), bm.height(), QImage::Format_RGBA8888);
+ fImageLabel->setPixmap(QPixmap::fromImage(fImage));
+
+#ifndef QT_NO_CURSOR
+ QApplication::restoreOverrideCursor();
+#endif
+}
+
+void MainWindow::createActions() {
+
+ QMenu *fileMenu = this->menuBar()->addMenu(tr("&File"));
+ QToolBar *fileToolBar = this->addToolBar(tr("File"));
+
+ const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));
+ QAction *openAct = new QAction(openIcon, tr("&Open..."), this);
+ openAct->setShortcuts(QKeySequence::Open);
+ openAct->setStatusTip(tr("Open an existing file"));
+ connect(openAct, &QAction::triggered, this, &MainWindow::openFile);
+ fileMenu->addAction(openAct);
+ fileToolBar->addAction(openAct);
+
+ fileMenu->addSeparator();
+
+ const QIcon exitIcon = QIcon::fromTheme("application-exit");
+ QAction *exitAct = fileMenu->addAction(exitIcon, tr("E&xit"), this, &QWidget::close);
+ exitAct->setShortcuts(QKeySequence::Quit);
+ exitAct->setStatusTip(tr("Exit the application"));
+}
+
+void MainWindow::createStatusBar() {
+ this->statusBar()->showMessage(tr("Ready"));
+}
+
+void MainWindow::readSettings() {
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+ const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray();
+ if (geometry.isEmpty()) {
+ const QRect availableGeometry = QApplication::desktop()->availableGeometry(this);
+ resize(availableGeometry.width() / 3, availableGeometry.height() / 2);
+ move((availableGeometry.width() - width()) / 2,
+ (availableGeometry.height() - height()) / 2);
+ } else {
+ this->restoreGeometry(geometry);
+ }
+}
+
+void MainWindow::writeSettings() {
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+ settings.setValue("geometry", this->saveGeometry());
+}
diff --git a/tools/mdbviz/mainwindow.h b/tools/mdbviz/mainwindow.h
new file mode 100644
index 0000000000..9aa9fcfda1
--- /dev/null
+++ b/tools/mdbviz/mainwindow.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef MainWindow_DEFINED
+#define MainWindow_DEFINED
+
+#include <QMainWindow>
+
+class QLabel;
+
+class MainWindow : public QMainWindow {
+ Q_OBJECT
+
+public:
+ MainWindow();
+
+private slots:
+ void openFile();
+
+private:
+ void loadFile(const QString &fileName);
+
+ void createActions();
+ void createStatusBar();
+ void readSettings();
+ void writeSettings();
+
+ QImage fImage;
+ QLabel* fImageLabel;
+};
+
+#endif
diff --git a/tools/mdbviz/resources.qrc b/tools/mdbviz/resources.qrc
new file mode 100644
index 0000000000..0d8713fce2
--- /dev/null
+++ b/tools/mdbviz/resources.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/open.png</file>
+</qresource>
+</RCC> \ No newline at end of file