diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/Makefile.am | 2 | ||||
-rw-r--r-- | client/control.cc | 29 | ||||
-rw-r--r-- | client/control.h | 5 | ||||
-rw-r--r-- | client/decoder.cc | 2 | ||||
-rw-r--r-- | client/icons.cc | 147 | ||||
-rw-r--r-- | client/icons.h | 48 | ||||
-rw-r--r-- | client/mainwindow.cc | 140 | ||||
-rw-r--r-- | client/mainwindow.h | 30 | ||||
-rw-r--r-- | client/yuv_draw.cc | 29 |
9 files changed, 299 insertions, 133 deletions
diff --git a/client/Makefile.am b/client/Makefile.am index b7d3a74..4a49d35 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -15,6 +15,7 @@ miav_client_SOURCES = $(shell ../tools/MocList cc ) \ decoder.cc \ dv1394.cc \ dvfile.cc \ + icons.cc \ networksender.cc \ historyframe.cc \ historywidget.cc \ @@ -37,6 +38,7 @@ EXTRA_DIST = \ decoder.h \ dv1394.h \ dvfile.h \ + icons.h \ networksender.h \ historyframe.h \ historywidget.h \ diff --git a/client/control.cc b/client/control.cc index 6dd4b4b..b6495d2 100644 --- a/client/control.cc +++ b/client/control.cc @@ -31,6 +31,7 @@ Control::Control() // Initialize control state frozen = false; recording = false; + muted = false; cpr = ""; } @@ -86,14 +87,21 @@ void Control::stop() recording = false; mutex.unlock(); } -/* -void Control::takeScreenshot() + +void Control::mute() { mutex.lock(); - screenshot = true; + muted = true; mutex.unlock(); } -*/ + +void Control::unmute() +{ + mutex.lock(); + muted = false; + mutex.unlock(); +} + bool Control::isFrozen() { bool isfrozen; @@ -111,17 +119,16 @@ bool Control::isRecording() mutex.unlock(); return isrecording; } -/* -bool Control::isScreenshot() + +bool Control::isMuted() { - bool isscreenshot; + bool ismuted; mutex.lock(); - isscreenshot = screenshot; - screenshot = false; + ismuted = muted; mutex.unlock(); - return isscreenshot; + return ismuted; } -*/ + // Global control object Control MIaV::control; diff --git a/client/control.h b/client/control.h index 1563f3d..f6b4599 100644 --- a/client/control.h +++ b/client/control.h @@ -48,8 +48,12 @@ public: void record(); void stop(); + void mute(); + void unmute(); + bool isFrozen(); bool isRecording(); + bool isMuted(); // bool isScreenshot(); // void takeScreenshot(); @@ -57,6 +61,7 @@ public: private: bool frozen; bool recording; + bool muted; // bool screenshot; QMutex mutex; diff --git a/client/decoder.cc b/client/decoder.cc index 1a85db7..5421e16 100644 --- a/client/decoder.cc +++ b/client/decoder.cc @@ -28,7 +28,7 @@ #include "info.h" -//#define READ_DV_FROM_FILE +#define READ_DV_FROM_FILE #include "dv.h" #ifdef READ_DV_FROM_FILE diff --git a/client/icons.cc b/client/icons.cc new file mode 100644 index 0000000..8d6f804 --- /dev/null +++ b/client/icons.cc @@ -0,0 +1,147 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * icons.cc + * + * Thu May 4 15:47:51 CEST 2006 + * Copyright 2006 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "icons.h" + +/** + * The image files + */ +#define PIXMAP_MUTE PIXMAPS"/mute" +#define PIXMAP_UNMUTE PIXMAPS"/unmute" + +#define PIXMAP_RECORD PIXMAPS"/record" +#define PIXMAP_STOP PIXMAPS"/stop" + +#define PIXMAP_FREEZE PIXMAPS"/freeze" +#define PIXMAP_UNFREEZE PIXMAPS"/unfreeze" + +#define PIXMAP_CPR PIXMAPS"/cpr" +#define PIXMAP_CLEAR PIXMAPS"/clear" + +#define PIXMAP_SNAPSHOT PIXMAPS"/snapshot" +#define PIXMAP_DUMMY PIXMAPS"/dummy" +#define PIXMAP_LOGO_SMALL PIXMAPS"/miav-logo" + +//#define QT_SVG +#define CAIRO_SVG + +#ifdef QT_SVG +#include <QSvgRenderer> +#include <QPainter> +#endif /*QT_SVG*/ + +#ifdef CAIRO_SVG +#include "svgloader.h" +#endif /*CAIRO_SVG*/ + +#include <QApplication> +#include <QDesktopWidget> +#include <QX11Info> + +QPixmap *loadIcon(char* fname) +{ + QPixmap *pixmap; + + int dpix = qApp->desktop()->x11Info().appDpiX(); + int dpiy = qApp->desktop()->x11Info().appDpiY(); + + printf("DpiX: %d DpiY: %d\n", dpix, dpiy); + +#ifdef CAIRO_SVG + SVGLoader svg; + QString filename = fname; + filename.append(".svg"); + double dpi = (double)(dpix + dpiy) / 2.0; + pixmap = new QPixmap(QPixmap::fromImage(svg.load(filename, 0, 0, 14.0 / dpi, 14.0 / dpi))); +#endif/*CAIRO_SVG*/ + +#ifdef QT_SVG + QSvgRenderer svgrenderer; + QPainter painter; + + pixmap = new QPixmap(w, h); + painter.begin(pixmap); + QString filename = fname; + svgrenderer.load(filename . ".svg"); + svgrenderer.render(&painter); + painter.end(); +#endif/*QT_SVG*/ + +#ifndef QT_SVG +#ifndef CAIRO_SVG + // Load as png + QString filename = fname; + filename.append(".png"); + pixmap = new QPixmap(filename); + Qt::AspectRatioMode aspect = pixmap.width()<pixmap.height()? + Qt::KeepAspectRatio:Qt::KeepAspectRatioByExpanding; + double dpi = (double)(dpix + dpiy) / 2.0; + *pixmap = pixmap->scaled((int)(dpi / 1.5),(int)(dpi / 1.5), aspect, Qt::SmoothTransformation); +#endif/*CAIRO_SVG*/ +#endif/*QT_SVG*/ + + return pixmap; +} + + +bool Icons::loadIcons() +{ + cpr = loadIcon(PIXMAP_CPR); + record = loadIcon(PIXMAP_RECORD); + stop = loadIcon(PIXMAP_STOP); + snapshot = loadIcon(PIXMAP_SNAPSHOT); + freeze = loadIcon(PIXMAP_FREEZE); + unfreeze = loadIcon(PIXMAP_UNFREEZE); + mute = loadIcon(PIXMAP_MUTE); + unmute = loadIcon(PIXMAP_UNMUTE); + clear = loadIcon(PIXMAP_CLEAR); + return true; +} + +bool Icons::unloadIcons() +{ + delete cpr; + delete record; + delete stop; + delete snapshot; + delete freeze; + delete unfreeze; + delete mute; + delete unmute; + delete clear; + return true; +} + +// The pixmaps +QPixmap *Icons::cpr; +QPixmap *Icons::record; +QPixmap *Icons::stop; +QPixmap *Icons::snapshot; +QPixmap *Icons::freeze; +QPixmap *Icons::unfreeze; +QPixmap *Icons::mute; +QPixmap *Icons::unmute; +QPixmap *Icons::clear; diff --git a/client/icons.h b/client/icons.h new file mode 100644 index 0000000..33bc5ef --- /dev/null +++ b/client/icons.h @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * icons.h + * + * Thu May 4 15:47:51 CEST 2006 + * Copyright 2006 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#ifndef __MIAV_ICONS_H__ +#define __MIAV_ICONS_H__ + +#include <QPixmap> + +namespace Icons { + bool loadIcons(); + bool unloadIcons(); + + // Pixmaps + extern QPixmap *cpr; + extern QPixmap *record; + extern QPixmap *stop; + extern QPixmap *snapshot; + extern QPixmap *freeze; + extern QPixmap *unfreeze; + extern QPixmap *mute; + extern QPixmap *unmute; + extern QPixmap *clear; +}; + +#endif/*__MIAV_ICONS_H__*/ diff --git a/client/mainwindow.cc b/client/mainwindow.cc index 645fef4..3680afc 100644 --- a/client/mainwindow.cc +++ b/client/mainwindow.cc @@ -34,69 +34,23 @@ #include "historywidget.h" -#include <QX11Info> -#include <QMoveEvent> +#include <QStatusBar> #include "control.h" -#include <QSvgRenderer> -#include <QPainter> -#include "svgloader.h" +#include "icons.h" -//#define CAIRO_SVG - -QPixmap MainWindow::loadIcon(char* fname) +QPushButton *MainWindow::createButton(QPixmap *pixmap) { - QSvgRenderer svgrenderer; - QPainter painter; - - int dpix = x11Info().appDpiX(); - int dpiy = x11Info().appDpiY(); - - printf("DpiX: %d DpiY: %d\n", dpix, dpiy); - -#ifdef CAIRO_SVG - QPixmap pixmap; - SVGLoader svg; - QString filename = fname; - filename.append(".svg"); - double dpi = (double)(dpix + dpiy) / 2.0; - pixmap = QPixmap::fromImage(svg.load(filename, 0, 0, 12.0 / dpi, 12.0 / dpi)); - return pixmap; -#else/*CAIRO_SVG*/ -#ifdef QT_SVG - QPixmap pixmap(w, h); - painter.begin(&pixmap); - QString filename = fname; - svgrenderer.load(filename . ".svg"); - svgrenderer.render(&painter); - painter.end(); - return pixmap; -#else/*QT_SVG*/ - // Load as png - QString filename = fname; - filename.append(".png"); - QPixmap pixmap(filename); - Qt::AspectRatioMode aspect = pixmap.width()<pixmap.height()? - Qt::KeepAspectRatio:Qt::KeepAspectRatioByExpanding; - pixmap = pixmap.scaled((int)((double)dpix / 1.5),(int)((double)dpix / 1.5), aspect, Qt::SmoothTransformation); - return pixmap; -#endif/*QT_SVG*/ -#endif/*CAIRO_SVG*/ -} - -QPushButton *MainWindow::createButton(char* icon) -{ - QPixmap p = loadIcon(icon); + // QPixmap p = loadIcon(icon); QPushButton *btn = new QPushButton(); - btn->setIconSize(QSize(p.width(), p.height())); - btn->setIcon(p); + btn->setIconSize(QSize(pixmap->width(), pixmap->height())); + btn->setIcon(*pixmap); return btn; } -#include <QApplication> -MainWindow::MainWindow(Decoder *d): QWidget() +MainWindow::MainWindow(Decoder *d) { decoder = d; MIaV::info->log("Starting MIaV v. %s.", VERSION); @@ -112,48 +66,57 @@ MainWindow::MainWindow(Decoder *d): QWidget() */ // Create layout - QGridLayout *layout = new QGridLayout(this); - setLayout(layout); + QGridLayout *outerlayout = new QGridLayout(this); + outerlayout->setMargin(0); + setLayout(outerlayout); + QGridLayout *layout = new QGridLayout(); + outerlayout->addLayout(layout, 0,0,1,1); + outerlayout->setRowStretch(0, 100); + outerlayout->setRowStretch(1, 1); // Create the videoarea video = new VideoWidget(); layout->addWidget(video, 0,0, 1,4); - // Create the control buttons - QPushButton *button; + // Load the icons + Icons::loadIcons(); - button = createButton(PIXMAP_CPR); - layout->addWidget(button, 1,3, 1,1); - connect(button, SIGNAL(clicked()), this, SLOT(cpr_clicked())); + // Create the control buttons + btn_cpr = createButton(Icons::cpr); + layout->addWidget(btn_cpr, 1,3, 1,1); + connect(btn_cpr, SIGNAL(clicked()), this, SLOT(cpr_clicked())); - button = createButton(PIXMAP_RECORD); - layout->addWidget(button, 2,0, 1,1); - connect(button, SIGNAL(clicked()), this, SLOT(record_clicked())); + btn_record = createButton(Icons::record); + layout->addWidget(btn_record, 2,0, 1,1); + connect(btn_record, SIGNAL(clicked()), this, SLOT(record_clicked())); - button = createButton(PIXMAP_SNAPSHOT); - layout->addWidget(button, 2,1, 1,1); - connect(button, SIGNAL(clicked()), this, SLOT(snapshot_clicked())); + btn_snapshot = createButton(Icons::snapshot); + layout->addWidget(btn_snapshot, 2,1, 1,1); + connect(btn_snapshot, SIGNAL(clicked()), this, SLOT(snapshot_clicked())); - button = createButton(PIXMAP_FREEZE); - layout->addWidget(button, 2,2, 1,1); - connect(button, SIGNAL(clicked()), this, SLOT(freeze_clicked())); + btn_freeze = createButton(Icons::freeze); + layout->addWidget(btn_freeze, 2,2, 1,1); + connect(btn_freeze, SIGNAL(clicked()), this, SLOT(freeze_clicked())); - button = createButton(PIXMAP_MUTE); - layout->addWidget(button, 2,3, 1,1); - connect(button, SIGNAL(clicked()), this, SLOT(mute_clicked())); + btn_mute = createButton(Icons::mute); + layout->addWidget(btn_mute, 2,3, 1,1); + connect(btn_mute, SIGNAL(clicked()), this, SLOT(mute_clicked())); - button = createButton(PIXMAP_CLEAR); - layout->addWidget(button, 2,4, 1,1); - connect(button, SIGNAL(clicked()), this, SLOT(clear_clicked())); + btn_clear = createButton(Icons::clear); + layout->addWidget(btn_clear, 2,4, 1,1); + connect(btn_clear, SIGNAL(clicked()), this, SLOT(clear_clicked())); // Create history bar history = new HistoryFrame(); layout->addWidget(history, 0,4, 2,1); // Create statusbar - + QStatusBar *statusbar = new QStatusBar(this); + outerlayout->addWidget(statusbar, 1,0, 1,1); + statusbar->showMessage("Ready!"); + show(); - // setWindowState(Qt::WindowFullScreen); + // setWindowState(Qt::WindowFullScreen); resize(800, 600); MIaV::info->log("MIaV is ready."); @@ -163,6 +126,8 @@ MainWindow::~MainWindow() { MIaV::info->log("MIaV is shutting down."); + Icons::unloadIcons(); + MIaV::info->log("MIaV is shut down."); } @@ -183,10 +148,22 @@ void MainWindow::cpr_clicked() void MainWindow::record_clicked() { + if(MIaV::control.isRecording()) { + MIaV::control.stop(); + btn_record->setIcon(*Icons::record); + } else { + MIaV::control.record(); + btn_record->setIcon(*Icons::stop); + } + } void MainWindow::snapshot_clicked() { + if(MIaV::control.isFrozen()) { + btn_freeze->setIcon(*Icons::freeze); + } + MIaV::control.shoot(); QImage screenshot(720, 576, QImage::Format_RGB32); @@ -202,12 +179,21 @@ void MainWindow::freeze_clicked() { if(MIaV::control.isFrozen()) { MIaV::control.unfreeze(); + btn_freeze->setIcon(*Icons::freeze); } else { MIaV::control.freeze(); + btn_freeze->setIcon(*Icons::unfreeze); } } void MainWindow::mute_clicked() { + if(MIaV::control.isMuted()) { + MIaV::control.unmute(); + btn_mute->setIcon(*Icons::mute); + } else { + MIaV::control.mute(); + btn_mute->setIcon(*Icons::unmute); + } } diff --git a/client/mainwindow.h b/client/mainwindow.h index 762b7f3..742351d 100644 --- a/client/mainwindow.h +++ b/client/mainwindow.h @@ -35,25 +35,6 @@ #include "decoder.h" -/** - * Images - */ -#define PIXMAP_MUTE PIXMAPS"/mute" -#define PIXMAP_UNMUTE PIXMAPS"/unmute" - -#define PIXMAP_RECORD PIXMAPS"/record" -#define PIXMAP_STOP PIXMAPS"/stop" - -#define PIXMAP_FREEZE PIXMAPS"/freeze" -#define PIXMAP_UNFREEZE PIXMAPS"/unfreeze" - -#define PIXMAP_CPR PIXMAPS"/cpr" -#define PIXMAP_CLEAR PIXMAPS"/clear" - -#define PIXMAP_SNAPSHOT PIXMAPS"/snapshot" -#define PIXMAP_DUMMY PIXMAPS"/dummy" -#define PIXMAP_LOGO_SMALL PIXMAPS"/miav-logo" - class MainWindow : public QWidget { Q_OBJECT @@ -78,8 +59,15 @@ private: HistoryFrame *history; VideoWidget *video; - QPushButton *createButton(char* icon); - QPixmap loadIcon(char* fname); + QPushButton *createButton(QPixmap *pixmap); + + // Buttons + QPushButton *btn_cpr; + QPushButton *btn_record; + QPushButton *btn_snapshot; + QPushButton *btn_freeze; + QPushButton *btn_mute; + QPushButton *btn_clear; }; #endif/*__MIAV_MAINWINDOW_H__*/ diff --git a/client/yuv_draw.cc b/client/yuv_draw.cc index 7cc2f4c..a4ffc60 100644 --- a/client/yuv_draw.cc +++ b/client/yuv_draw.cc @@ -27,29 +27,9 @@ #include "yuv_draw.h" #include <string.h> - +#include "icons.h" #define TEXT_MARGIN 10 -#include "mainwindow.h" -static QImage *loadIcon( char *name, int height ) -{ - QImage scaled; - QImage *img; - - img = new QImage(); - img->load( name ); - - int h = height; - int w = (int)((float)img->width() / (float)(img->height() / (float)h)); - - scaled = img->scaled(w, h, Qt::KeepAspectRatio, Qt::SmoothTransformation); - delete img; - img = new QImage(scaled); - - return img; -} - - YUVDraw::YUVDraw() { overlay = NULL; @@ -70,12 +50,15 @@ YUVDraw::YUVDraw() } } - img_muted = loadIcon(PIXMAP_MUTE, ICON_HEIGHT); - img_unmuted = loadIcon(PIXMAP_UNMUTE, ICON_HEIGHT); + img_muted = new QImage(Icons::mute->toImage()); + img_unmuted = new QImage(Icons::unmute->toImage()); } YUVDraw::~YUVDraw() { + delete img_muted; + delete img_unmuted; + delete top_pixmap; delete bottom_pixmap; } |