author | kergoth <kergoth> | 2003-08-09 16:24:58 (UTC) |
---|---|---|
committer | kergoth <kergoth> | 2003-08-09 16:24:58 (UTC) |
commit | e16d333ec2e8509fc665921ca106c25325bae9e0 (patch) (side-by-side diff) | |
tree | 9e9068190a15bc9b2a52ab33b40881128f732c0e /noncore | |
parent | 1c58d1407f9584fedcdae390a04e2b37e5853361 (diff) | |
download | opie-e16d333ec2e8509fc665921ca106c25325bae9e0.zip opie-e16d333ec2e8509fc665921ca106c25325bae9e0.tar.gz opie-e16d333ec2e8509fc665921ca106c25325bae9e0.tar.bz2 |
Merge from BRANCH_1_0
96 files changed, 1386 insertions, 528 deletions
diff --git a/noncore/applets/networkapplet/opie-networkapplet.control b/noncore/applets/networkapplet/opie-networkapplet.control index ae07eb3..f4ee7be 100644 --- a/noncore/applets/networkapplet/opie-networkapplet.control +++ b/noncore/applets/networkapplet/opie-networkapplet.control @@ -1,10 +1,10 @@ Package: opie-networkapplet Files: plugins/applets/libnetworkapplet.so* pics/networkapplet Priority: optional Section: opie/system Maintainer: Michael 'Mickey' Lauer <mickeyl@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal, libopie2 (1.8.1), opie-networksettings Description: Network Applet A taskbar applet for controlling network interfaces +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/applets/notesapplet/opie-notesapplet.control b/noncore/applets/notesapplet/opie-notesapplet.control index da02b44..f19b964 100644 --- a/noncore/applets/notesapplet/opie-notesapplet.control +++ b/noncore/applets/notesapplet/opie-notesapplet.control @@ -1,10 +1,10 @@ Package: opie-notesapplet Files: plugins/applets/libnotesapplet.so* Priority: optional Section: opie/system Maintainer: L. J. Potter <ljp@llornkcor.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal -Description: Screenshot Applet +Description: Notes Applet A simple taskbar applet for making quick notes. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/applets/wirelessapplet/opie-wirelessapplet.control b/noncore/applets/wirelessapplet/opie-wirelessapplet.control index ac7fad2..6dfa214 100644 --- a/noncore/applets/wirelessapplet/opie-wirelessapplet.control +++ b/noncore/applets/wirelessapplet/opie-wirelessapplet.control @@ -1,10 +1,10 @@ Package: opie-wirelessapplet Files: plugins/applets/libwirelessapplet.so* Priority: optional Section: opie/system Maintainer: Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION.1 Depends: task-opie-minimal Description: Wireless Applet A wireless network card status taskbar applet for the Opie environment +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/apps/odict/configdlg.cpp b/noncore/apps/odict/configdlg.cpp index 400298d..2103df9 100644 --- a/noncore/apps/odict/configdlg.cpp +++ b/noncore/apps/odict/configdlg.cpp @@ -24,50 +24,40 @@ #include <qhbox.h> #include <qvbox.h> #include <qlabel.h> #include <qlistview.h> #include <qpushbutton.h> #include <qlineedit.h> #include <qstringlist.h> -#include <opie/otabwidget.h> - ConfigDlg::ConfigDlg(QWidget *parent, const char *name, bool modal) : QDialog(parent, name, modal) { setCaption( tr( "Options" ) ); QVBoxLayout *vbox_layout = new QVBoxLayout( this ); - tab = new OTabWidget( this, "OTabWidget_tab", OTabWidget::Global, OTabWidget::Bottom ); - vbox_layout->addWidget( tab ); - - /*general settings*/ - settings_tab = new QWidget( tab , "settings_tab" ); - - /*searchmethods*/ - search_tab = new QWidget( tab , "search_tab" ); + search_tab = new QWidget( this , "search_tab" ); QVBoxLayout *vbox_layout_searchtab = new QVBoxLayout( search_tab, 4 , 4 ,"blah" ); QHBox *hbox = new QHBox( search_tab ); list = new QListView( hbox ); list->addColumn( tr( "Searchmethod" ) ); loadSearchMethodNames(); QVBox *vbox = new QVBox( hbox ); - new_button = new QPushButton( "New" , vbox ); - change_button = new QPushButton( "Change" , vbox ); - delete_button = new QPushButton( "Delete" , vbox ); + new_button = new QPushButton( tr( "New" ) , vbox ); + change_button = new QPushButton( tr( "Change" ) , vbox ); + delete_button = new QPushButton( tr( "Delete" ) , vbox ); connect( new_button, SIGNAL( clicked() ), this, SLOT( slotNewMethod() ) ); connect( change_button, SIGNAL( clicked() ), this, SLOT( slotChangeMethod() )); connect( delete_button, SIGNAL( clicked() ), this, SLOT( slotDeleteMethod() )); vbox_layout_searchtab->addWidget( hbox ); - /*add the tabs and maximize*/ - tab->addTab( settings_tab, "pass", tr( "General Settings" ) ); - tab->addTab( search_tab, "zoom", tr( "Searchmethods" ) ); + vbox_layout->addWidget( search_tab ); + showMaximized(); } void ConfigDlg::slotNewMethod() { SearchMethodDlg dlg( this, "SearchMethodDlg", true ); if ( dlg.exec() == QDialog::Accepted ) { diff --git a/noncore/apps/odict/configdlg.h b/noncore/apps/odict/configdlg.h index e3ef3ce..6c85989 100644 --- a/noncore/apps/odict/configdlg.h +++ b/noncore/apps/odict/configdlg.h @@ -3,31 +3,29 @@ * This program 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. * * * **************************************************************************/ class QWidget; -class OTabWidget; class QListView; class QPushButton; #include <qdialog.h> class ConfigDlg : public QDialog { Q_OBJECT public: ConfigDlg(QWidget *parent, const char *name, bool modal=FALSE ); private: - OTabWidget *tab; QWidget *settings_tab, *search_tab; QListView *list; QPushButton *new_button, *change_button, *delete_button; void loadSearchMethodNames(); private slots: void slotNewMethod(); diff --git a/noncore/apps/odict/odict.cpp b/noncore/apps/odict/odict.cpp index 2028701..010545e 100644 --- a/noncore/apps/odict/odict.cpp +++ b/noncore/apps/odict/odict.cpp @@ -36,17 +36,17 @@ #include <qpe/resource.h> #include <qpe/config.h> ODict::ODict() : QMainWindow() { activated_name = QString::null; vbox = new QVBox( this ); - setCaption( tr( "OPIE-Dictionary" ) ); + setCaption( tr( "Opie-Dictionary" ) ); setupMenus(); QHBox *hbox = new QHBox( vbox ); QLabel* query_label = new QLabel( tr( "Query:" ) , hbox ); query_label->show(); query_le = new QLineEdit( hbox ); query_co = new QComboBox( hbox ); connect( query_co , SIGNAL( activated(const QString&) ), this, SLOT( slotMethodChanged(const QString&) ) ); @@ -71,17 +71,16 @@ void ODict::loadConfig() /* * the name of the last used dictionary */ QString lastname; Config cfg ( "odict" ); cfg.setGroup( "generalsettings" ); casesens = cfg.readEntry( "casesens" ).toInt(); - regexp = cfg.readEntry( "regexp" ).toInt(); QString lastDict = cfg.readEntry( "lastdict" ); int i = 0, e = 0; QStringList groupListCfg = cfg.groupList().grep( "Method_" ); query_co->clear(); for ( QStringList::Iterator it = groupListCfg.begin() ; it != groupListCfg.end() ; ++it ) { @@ -122,17 +121,16 @@ void ODict::lookupLanguageNames( QString dictname ) bottom_name_content = cfg.readEntry( "Lang2" ); } void ODict::saveConfig() { Config cfg ( "odict" ); cfg.setGroup( "generalsettings" ); cfg.writeEntry( "casesens" , casesens ); - cfg.writeEntry( "regexp" , regexp ); cfg.writeEntry( "lastdict" , query_co->currentText() ); } void ODict::slotStartQuery() { QString querystring = query_le->text(); if ( !querystring.isEmpty() ) { @@ -180,23 +178,16 @@ void ODict::slotSetParameter( int count ) if ( count == 0 ) { if ( casesens ) casesens = false; else casesens = true; } - if ( count == 1 ) - { - if ( regexp ) - regexp = false; - else - regexp = true; - } saveConfig(); } void ODict::slotMethodChanged( const QString& methodnumber ) { activated_name = methodnumber; if ( activated_name != ding->loadedDict() ) @@ -217,14 +208,13 @@ void ODict::setupMenus() setting_a = new QAction(tr( "Configuration" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); connect( setting_a, SIGNAL( activated() ), this, SLOT( slotSettings() ) ); setting_a->addTo( settings ); setting_b = new QAction(tr( "Searchmethods" ), Resource::loadPixmap( "edit" ), QString::null, 0, this, 0 ); parameter = new QPopupMenu( menu ); connect( parameter, SIGNAL( activated( int ) ), this, SLOT( slotSetParameter( int ) ) ); parameter->insertItem( tr( "C&ase sensitive" ), 0 ,0 ); - parameter->insertItem( tr( "Allow ®. expressions" ), 2 ); parameter->insertSeparator(); menu->insertItem( tr( "Settings" ) , settings ); menu->insertItem( tr( "Parameter" ) , parameter ); } diff --git a/noncore/apps/odict/odict.h b/noncore/apps/odict/odict.h index 9c037ea..be2a532 100644 --- a/noncore/apps/odict/odict.h +++ b/noncore/apps/odict/odict.h @@ -44,17 +44,17 @@ class ODict : public QMainWindow QPushButton *ok_button; QVBoxLayout *vbox_layout; QAction *setting_a, *setting_b; void setupMenus(); - bool casesens, completewords, regexp; + bool casesens, completewords; void loadConfig(); void saveConfig(); QString activated_name; QLabel *bottom_name, *top_name; diff --git a/noncore/apps/odict/odict.pro b/noncore/apps/odict/odict.pro index 427a5c6..82f6a41 100644 --- a/noncore/apps/odict/odict.pro +++ b/noncore/apps/odict/odict.pro @@ -1,15 +1,15 @@ TEMPLATE = app CONFIG = qt warn_on debug #CONFIG = qt warn_on release HEADERS = odict.h \ searchmethoddlg.h \ configdlg.h \ - dingwidget.h \ + dingwidget.h SOURCES = main.cpp \ odict.cpp \ searchmethoddlg.cpp \ configdlg.cpp \ dingwidget.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include diff --git a/noncore/apps/odict/opie-odict.control b/noncore/apps/odict/opie-odict.control index 2fa731f..f684716 100644 --- a/noncore/apps/odict/opie-odict.control +++ b/noncore/apps/odict/opie-odict.control @@ -1,10 +1,10 @@ Package: opie-odict Files: bin/odict apps/Applications/odict.desktop pics/odict/odict.png Priority: optional Section: applications Maintainer: Carsten Niehaus <cniehaus@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Dictionarylookupprogram Look up words :) +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/apps/tableviewer/db/xmlsource.cpp b/noncore/apps/tableviewer/db/xmlsource.cpp index 7418a85..94fec36 100644 --- a/noncore/apps/tableviewer/db/xmlsource.cpp +++ b/noncore/apps/tableviewer/db/xmlsource.cpp @@ -16,16 +16,18 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "xmlsource.h" #include <qdict.h> #include <stdlib.h> #include <qtextstream.h> +#include "../xmlencodeattr.h" + DBXml::DBXml(DBStore *d) { dstore = d; } QString DBXml::type() @@ -63,17 +65,17 @@ bool DBXml::saveSource(QIODevice *outDev) k = dstore->getKeys(); KeyListIterator it(*k); while(it.current()) { if (!it.current()->delFlag()) { outstream << "<key name=\"KEYID" << it.currentKey() << "\" "; outstream << "type=\"" << TVVariant::typeToName(it.current()->type()) << "\">"; - outstream << it.current()->name() << "</key>" << endl; + outstream << encodeAttr(it.current()->name()) << "</key>" << endl; } ++it; } outstream << "</header>" << endl; dstore->first(); @@ -89,17 +91,17 @@ bool DBXml::saveSource(QIODevice *outDev) outstream << "<KEYID" << i << ">"; if (dstore->getKeyType(i) == TVVariant::Date) { // dates in files are different from displayed dates QDate date = elem->getField(i).toDate(); outstream << date.day() << "/" << date.month() << "/" << date.year(); } else { - outstream << elem->toQString(i); + outstream << encodeAttr(elem->toQString(i)); } outstream << "</KEYID" << i << ">" << endl; } ++it; } outstream << "</record>" << endl; } while(dstore->next()); diff --git a/noncore/apps/tableviewer/tableviewer.pro b/noncore/apps/tableviewer/tableviewer.pro index 6f73400..f047e0b 100644 --- a/noncore/apps/tableviewer/tableviewer.pro +++ b/noncore/apps/tableviewer/tableviewer.pro @@ -1,27 +1,29 @@ TEMPLATE = app CONFIG = qt warn_on debug DESTDIR = $(OPIEDIR)/bin SUBDIRS = db ui HEADERS = tableviewer.h \ + xmlencodeattr.h \ ui/commonwidgets.h \ ui/tvbrowseview.h \ ui/tvlistview.h \ ui/tvfilterview.h \ ui/tveditview.h \ ui/browsekeyentry.h \ ui/filterkeyentry.h \ ui/tvkeyedit.h \ db/datacache.h \ db/common.h \ db/xmlsource.h \ db/csvsource.h SOURCES = main.cpp \ tableviewer.cpp \ + xmlencodeattr.cpp \ ui/commonwidgets.cpp \ ui/tvbrowseview.cpp \ ui/tvfilterview.cpp \ ui/browsekeyentry.cpp \ ui/filterkeyentry.cpp \ ui/tvlistview.cpp \ ui/tveditview.cpp \ ui/tvkeyedit.cpp \ diff --git a/noncore/apps/tableviewer/ui/tvbrowseview.cpp b/noncore/apps/tableviewer/ui/tvbrowseview.cpp index f5f2555..22bac55 100644 --- a/noncore/apps/tableviewer/ui/tvbrowseview.cpp +++ b/noncore/apps/tableviewer/ui/tvbrowseview.cpp @@ -18,16 +18,17 @@ ** **********************************************************************/ #include "tvbrowseview.h" #include "browsekeyentry.h" #include <qtoolbutton.h> #include <qtextview.h> #include <qtextbrowser.h> #include <qlayout.h> +#include "../xmlencodeattr.h" /*! \class TVBrowseView \brief The widget describing how to draw the browse view user interface This widget allows for the user to browse through the table, one element at a time, or search on a single key. Its main goal is to show a single element in a readable format and make it easy for the user to @@ -97,22 +98,22 @@ void TVBrowseView::setDisplayText(const DataElem *element) QString rep = ""; KeyListIterator it(*ts->kRep); while (it.current()) { if (element->hasValidValue(it.currentKey())) { if(it.currentKey() == ts->current_column) { rep += "<A name=\"ckey\"></A><B><FONT COLOR=#FF0000>" - + it.current()->name() + + encodeAttr(it.current()->name()) + ":</FONT></B> "; } else { - rep += "<B>" + it.current()->name() + ":</B> "; + rep += "<B>" + encodeAttr(it.current()->name()) + ":</B> "; } - rep += element->toQString(it.currentKey()) + "<BR>"; + rep += encodeAttr(element->toQString(it.currentKey())) + "<BR>"; } ++it; } textViewDisplay->setText(rep); textViewDisplay->scrollToAnchor("ckey"); } diff --git a/noncore/apps/tableviewer/xmlencodeattr.cpp b/noncore/apps/tableviewer/xmlencodeattr.cpp new file mode 100644 index 0000000..de264f7 --- a/dev/null +++ b/noncore/apps/tableviewer/xmlencodeattr.cpp @@ -0,0 +1,48 @@ +/* + * xmlencodeattr.h + * + * copyright : (c) 2003 by Joseph Wenninger + * except for a small modification it's identical to qdom.cpp:encodeAttr + * email : jowenn@handhelds.org + * + */ +/*************************************************************************** + * * + * This program 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. * + * * + ***************************************************************************/ + +#include "xmlencodeattr.h" +QString encodeAttr( const QString& str ) +{ + QString tmp( str ); + uint len = tmp.length(); + uint i = 0; + while ( i < len ) { + if ( tmp[(int)i] == '<' ) { + tmp.replace( i, 1, "<" ); + len += 3; + i += 4; + } else if ( tmp[(int)i] == '"' ) { + tmp.replace( i, 1, """ ); + len += 5; + i += 6; + } else if ( tmp[(int)i] == '&' ) { + tmp.replace( i, 1, "&" ); + len += 4; + i += 5; + } else if ( tmp[(int)i] == '>' ) { + tmp.replace( i, 1, ">" ); + len += 3; + i += 4; + } else { + ++i; + } + } + + return tmp; +} + diff --git a/noncore/apps/tableviewer/xmlencodeattr.h b/noncore/apps/tableviewer/xmlencodeattr.h new file mode 100644 index 0000000..5fd3b95 --- a/dev/null +++ b/noncore/apps/tableviewer/xmlencodeattr.h @@ -0,0 +1,26 @@ +/* + * xmlencodeattr.h + * + * copyright : (c) 2003 by Joseph Wenninger + * except for a small modification it's identical to qdom.cpp:encodeAttr + * email : jowenn@handhelds.org + * + */ +/*************************************************************************** + * * + * This program 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. * + * * + ***************************************************************************/ + +#ifndef _XML_ENCODE_ATTR_ +#define _XML_ENCODE_ATTR_ + +#include <qstring.h> + +QString encodeAttr( const QString& str ); + +#endif + diff --git a/noncore/comm/keypebble/keypebble.pro b/noncore/comm/keypebble/keypebble.pro index 04f4b64..7af60f9 100644 --- a/noncore/comm/keypebble/keypebble.pro +++ b/noncore/comm/keypebble/keypebble.pro @@ -6,18 +6,17 @@ HEADERS = d3des.h \ krfbcanvas.h \ krfbconnection.h \ krfbdecoder.h \ krfblogin.h \ krfbserver.h \ krfbserverinfo.h \ kvnc.h \ kvncconndlg.h \ - kvncbookmarkdlg.h \ - version.h \ + kvncbookmarkdlg.h \ vncauth.h SOURCES = d3des.c \ vncauth.c \ krfbbuffer.cpp \ krfbcanvas.cpp \ krfbconnection.cpp \ krfbdecoder.cpp \ krfblogin.cpp \ diff --git a/noncore/comm/keypebble/opie-keypebble.control b/noncore/comm/keypebble/opie-keypebble.control index 123f307..23e4e89 100644 --- a/noncore/comm/keypebble/opie-keypebble.control +++ b/noncore/comm/keypebble/opie-keypebble.control @@ -1,11 +1,11 @@ Package: opie-keypebble Files: bin/keypebble apps/Applications/keypebble.desktop pics/vnc Priority: optional Section: opie/applications Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm Arch: iPAQ -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: VNC Viewer Virtual Network Computing (VNC) viewer +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/comm/mobilemsg/opie-mobilemsg.control b/noncore/comm/mobilemsg/opie-mobilemsg.control index 1713af5..c5fbc7f 100644 --- a/noncore/comm/mobilemsg/opie-mobilemsg.control +++ b/noncore/comm/mobilemsg/opie-mobilemsg.control @@ -1,10 +1,10 @@ Package: opie-mobilemsg Files: bin/mobilemsg apps/Applications/mobilemsg.desktop Priority: optional Section: opie/comm Maintainer: Bruno Rodrigues <bruno.rodrigues@litux.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Mobile Messaging For the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/decorations/flat/opie-deco-flat.control b/noncore/decorations/flat/opie-deco-flat.control index ae64aae..311f37b 100644 --- a/noncore/decorations/flat/opie-deco-flat.control +++ b/noncore/decorations/flat/opie-deco-flat.control @@ -1,10 +1,10 @@ Package: opie-deco-flat Files: plugins/decorations/libflat.so* Priority: optional Section: opie/decorations Maintainer: Robert Griebl <sandman@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION.1 Depends: task-opie-minimal Description: OPIE window decoration style Flat window decoration style for OPIE. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/decorations/liquid/opie-deco-liquid.control b/noncore/decorations/liquid/opie-deco-liquid.control index 2f91612..c14b8bf 100644 --- a/noncore/decorations/liquid/opie-deco-liquid.control +++ b/noncore/decorations/liquid/opie-deco-liquid.control @@ -1,10 +1,10 @@ Package: opie-deco-liquid Files: plugins/decorations/libliquid.so* Priority: optional Section: opie/decorations Maintainer: Robert Griebl <sandman@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION.1 Depends: task-opie-minimal Description: OPIE window decoration style Liquid (KDE3) window decoration style for OPIE. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/decorations/polished/opie-deco-polished.control b/noncore/decorations/polished/opie-deco-polished.control index 4d4b4e3..15afa83 100644 --- a/noncore/decorations/polished/opie-deco-polished.control +++ b/noncore/decorations/polished/opie-deco-polished.control @@ -1,10 +1,10 @@ Package: opie-deco-polished Files: plugins/decorations/libpolished.so* Priority: optional Section: opie/decorations Maintainer: Robert Griebl <sandman@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION.1 Depends: task-opie-minimal Description: OPIE window decoration style Blended window decoration style for OPIE. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/backgammon/backgammon.control b/noncore/games/backgammon/backgammon.control index b75bc60..6468181 100644 --- a/noncore/games/backgammon/backgammon.control +++ b/noncore/games/backgammon/backgammon.control @@ -1,10 +1,10 @@ Package: backgammon Files: bin/backgammon apps/Games/backgammon.desktop pics/backgammon help/en/html/backgammon.html Priority: optional Section: opie/games Maintainer: Ralf Waspe <rwaspe@web.de> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Backgammon Game A Backgammon game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/backgammon/backgammon.cpp b/noncore/games/backgammon/backgammon.cpp index db1a058..06523f1 100644 --- a/noncore/games/backgammon/backgammon.cpp +++ b/noncore/games/backgammon/backgammon.cpp @@ -130,18 +130,16 @@ BackGammon::BackGammon(QWidget* parent, const char* name, WFlags fl) optionmenu->insertItem(tr( "Rules" ),this,SLOT(setrules())); menuBar->insertItem(tr( "Options"),optionmenu); QWidget* mainarea=new QWidget(this); setCentralWidget(mainarea); //the main area QBoxLayout* layout=new QBoxLayout(mainarea,QBoxLayout::TopToBottom); area=new QCanvas(235,235); - QColor bgColor=palette().color(QPalette::Normal,QColorGroup::Background); - area->setBackgroundColor(bgColor); boardview=new BackGammonView(area,mainarea); boardview->setMaximumHeight(240); layout->addWidget(boardview); connect(boardview,SIGNAL(mouse(int,int)),this,SLOT(mouse(int,int))); //status bar message=new QLabel("<b>Backgammon</b>",mainarea); message->setAlignment(AlignHCenter); layout->addWidget(message); diff --git a/noncore/games/backgammon/backgammon.h b/noncore/games/backgammon/backgammon.h index d803489..e3276f1 100644 --- a/noncore/games/backgammon/backgammon.h +++ b/noncore/games/backgammon/backgammon.h @@ -13,16 +13,17 @@ class BackGammon : public QMainWindow { Q_OBJECT private: + //GUI //the "status" bar QLabel* message; //the main drawing area QCanvas* area; BackGammonView* boardview; CanvasImageItem* board; CanvasImageItem* table; CanvasImageItem** p1; diff --git a/noncore/games/bounce/kbounce.cpp b/noncore/games/bounce/kbounce.cpp index 5d8aba3..50f4ef6 100644 --- a/noncore/games/bounce/kbounce.cpp +++ b/noncore/games/bounce/kbounce.cpp @@ -108,26 +108,26 @@ void KJezzball::newGame() createLevel( m_game.level ); startLevel(); } } void KJezzball::about() { - QMessageBox::information( this, "About", - "Written by: Stefan Schimanski\n" + QMessageBox::information( this, tr("About"), + tr("Written by: Stefan Schimanski\n" "Ported by: Martin Imobersteg\n" "\n" "Click to form walls.\n" "Hit space to switch wall direction.\n" "Try to reduce total space by 75%.\n" "\n" "This program is distributed under\n" - "the terms of the GPL v2." ); + "the terms of the GPL v2.") ); } void KJezzball::closeGame() { if ( m_state!=Idle ) { stopLevel(); m_state = Idle; diff --git a/noncore/games/buzzword/buzzword.cpp b/noncore/games/buzzword/buzzword.cpp index b870a59..97a17a1 100644 --- a/noncore/games/buzzword/buzzword.cpp +++ b/noncore/games/buzzword/buzzword.cpp @@ -1,10 +1,10 @@ /* - * Copyright (C) 2002 Martin Imobersteg <imm@gmx.ch> + * Copyright (C) 2002 Martin Imobersteg <imm@gmx.ch> * * This program 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,Life or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -97,24 +97,24 @@ void BuzzWord::drawGrid() while (!t.atEnd()) { l << t.readLine(); } f.close(); grid = new QGrid(gridVal, this); - grid->setFixedSize(240,240); +// grid->setFixedSize( 480, 480 ); for( int c = 0 ; c < gridVal ; c++ ) { for( int r = 0 ; r < gridVal ; r++ ) { uint pos = rand() % l. count(); - + QString word = QStringList::split(" ", l[pos]).join("\n"); BuzzItem* bi = new BuzzItem( c, r, word, grid ); connect( bi, SIGNAL(clicked(int, int)), this, SLOT(clicked(int,int)) ); map[c][r] = 0; l.remove( l.at( pos )); } } @@ -123,17 +123,17 @@ void BuzzWord::drawGrid() void BuzzWord::clicked(int row, int column) { if ( ! gameOver ) { int rowTotal = 0; int columnTotal = 0; map[column][row] = 1; - + for( int c = 0 ; c < gridVal ; c++ ) { for( int r = 0 ; r < gridVal ; r++ ) { if ( map[c][r] == 1 ) rowTotal++; if ( rowTotal == 4 ) diff --git a/noncore/games/fifteen/opie-fifteen.control b/noncore/games/fifteen/opie-fifteen.control index 662fd03..8fa355f 100644 --- a/noncore/games/fifteen/opie-fifteen.control +++ b/noncore/games/fifteen/opie-fifteen.control @@ -1,11 +1,11 @@ Package: opie-fifteen Files: bin/fifteen apps/Games/fifteen.desktop pics/fifteen Priority: optional Section: opie/games Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm Arch: iPAQ -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Fifteen pieces game A game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/go/opie-go.control b/noncore/games/go/opie-go.control index 061c02c..24929de 100644 --- a/noncore/games/go/opie-go.control +++ b/noncore/games/go/opie-go.control @@ -1,10 +1,10 @@ Package: opie-go Files: bin/go apps/Games/go.desktop pics/go Priority: optional Section: opie/games Maintainer: Warwick Allison <warwick@trolltech.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: The game of Go A game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/kpacman/kpacman.cpp b/noncore/games/kpacman/kpacman.cpp index 812e9ea..df27c76 100644 --- a/noncore/games/kpacman/kpacman.cpp +++ b/noncore/games/kpacman/kpacman.cpp @@ -29,17 +29,17 @@ Kpacman::Kpacman(QWidget *parent, const char *name) m_view = new QWidget( this, "m_view" ); m_view->setBackgroundColor( black ); m_layout = new QGridLayout( m_view ); m_layout->setMargin( 7 ); view = new KpacmanWidget( this, QString(name)+"widget"); m_layout->addWidget( view, 0, 0 ); - setCaption( "KPacman" ); + setCaption( tr("KPacman") ); view->referee->setFocus(); connect(view->referee, SIGNAL(setScore(int, int)), view->score, SLOT(setScore(int, int))); connect(view->referee, SIGNAL(setPoints(int)), view->score, SLOT(set(int))); connect(view->referee, SIGNAL(setLifes(int)), diff --git a/noncore/games/mindbreaker/opie-mindbreaker.control b/noncore/games/mindbreaker/opie-mindbreaker.control index 7623d6a..7b5ead6 100644 --- a/noncore/games/mindbreaker/opie-mindbreaker.control +++ b/noncore/games/mindbreaker/opie-mindbreaker.control @@ -1,10 +1,10 @@ Package: opie-mindbreaker Files: bin/mindbreaker apps/Games/mindbreaker.desktop pics/mindbreaker Priority: optional Section: opie/games Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Game: crack the coloured code A game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/minesweep/opie-minesweep.control b/noncore/games/minesweep/opie-minesweep.control index 7236cf8..32f0352 100644 --- a/noncore/games/minesweep/opie-minesweep.control +++ b/noncore/games/minesweep/opie-minesweep.control @@ -1,10 +1,10 @@ Package: opie-minesweep Files: bin/minesweep apps/Games/minesweep.desktop pics/minesweep Priority: optional Section: opie/games Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Game: find the mines A game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/parashoot/opie-parashoot.control b/noncore/games/parashoot/opie-parashoot.control index ad955f5..758d24d 100644 --- a/noncore/games/parashoot/opie-parashoot.control +++ b/noncore/games/parashoot/opie-parashoot.control @@ -1,10 +1,10 @@ Package: opie-parashoot Files: bin/parashoot apps/Games/parashoot.desktop pics/parashoot Priority: optional Section: opie/games Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Game: shoot the parachutists A game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/qasteroids/opie-qasteroids.control b/noncore/games/qasteroids/opie-qasteroids.control index 49cc6b2..25a49b4 100644 --- a/noncore/games/qasteroids/opie-qasteroids.control +++ b/noncore/games/qasteroids/opie-qasteroids.control @@ -1,10 +1,10 @@ Package: opie-qasteroids Files: bin/qasteroids apps/Games/qasteroids.desktop pics/qasteroids/* Priority: optional Section: opie/games Maintainer: Martin Jones <mjones@trolltech.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Game: shoot the asteroids A game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/sfcave-sdl/sfcave-sdl.control b/noncore/games/sfcave-sdl/sfcave-sdl.control index c017280..9bf43ba 100644 --- a/noncore/games/sfcave-sdl/sfcave-sdl.control +++ b/noncore/games/sfcave-sdl/sfcave-sdl.control @@ -1,10 +1,10 @@ Files: bin/sfcave-sdl apps/Games/sfcave-sdl.desktop pics/sfcave-sdl sounds/sfcave-sdl Package: sfcave-sdl Priority: optional Section: Games -Version: $QPE_VERSION-$SUB_VERSION Architecture: arm Maintainer: Andy Qua (andy.qua@blueyonder.co.uk) Depends: libSDL,libSDL_-mixer,libSDL-image,libSDL-gfx Description: SFCave SDL for the Zaurus. Fly though the cave avoiding the walls. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/sfcave/opie-sfcave.control b/noncore/games/sfcave/opie-sfcave.control index 1566959..0ff3e2c 100644 --- a/noncore/games/sfcave/opie-sfcave.control +++ b/noncore/games/sfcave/opie-sfcave.control @@ -1,9 +1,9 @@ Package: opie-sfcave Files: bin/sfcave apps/Games/sfcave.desktop pics/sfcave Priority: optional Section: opie/games Maintainer: Andy Qua <andy.qua@blueyonder.co.uk> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: SFCave for the Zaurus. Fly the dot though the cave avoiding the walls. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/snake/interface.cpp b/noncore/games/snake/interface.cpp index 0f312ac..68e0f14 100644 --- a/noncore/games/snake/interface.cpp +++ b/noncore/games/snake/interface.cpp @@ -95,17 +95,17 @@ void SnakeGame::welcomescreen() QCanvasText* instr = new QCanvasText(tr("Use the arrow keys to guide the\n" "snake to eat the mouse. You must not\n" "crash into the walls, edges or its tail."), &canvas); w = instr->boundingRect().width(); instr->move(canvas.width()/2-w/2, canvas.height()/2-20); instr->setColor(white); instr->show(); - QCanvasText* cont = new QCanvasText(tr("Press Any Key To Start"), &canvas); + QCanvasText* cont = new QCanvasText(tr("Press any key to start"), &canvas); w = cont->boundingRect().width(); cont->move(canvas.width()/2-w/2, canvas.height()-20); cont->setColor(yellow); cont->show(); } void SnakeGame::newGame() @@ -191,17 +191,17 @@ void SnakeGame::gameOver() waitover = false; pauseTimer->start(1500); } void SnakeGame::wait() { waitover = true; pauseTimer->stop(); - QCanvasText* cont = new QCanvasText(tr("Press Any Key to Begin a New Game."), + QCanvasText* cont = new QCanvasText(tr("Press any key to begin a new game."), &canvas); cont->setZ(100); cont->setColor(white); int w = cont->boundingRect().width(); cont->move(canvas.width()/2 -w/2, canvas.height()/2); cont->show(); } diff --git a/noncore/games/snake/opie-snake.control b/noncore/games/snake/opie-snake.control index 3ab6640..ef4fc61 100644 --- a/noncore/games/snake/opie-snake.control +++ b/noncore/games/snake/opie-snake.control @@ -1,10 +1,10 @@ Package: opie-snake Files: bin/snake apps/Games/snake.desktop pics/snake Priority: optional Section: opie/games Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Game: control the snake A game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/solitaire/canvascardwindow.cpp b/noncore/games/solitaire/canvascardwindow.cpp index e836eb2..317a02d 100644 --- a/noncore/games/solitaire/canvascardwindow.cpp +++ b/noncore/games/solitaire/canvascardwindow.cpp @@ -65,18 +65,18 @@ CanvasCardWindow::CanvasCardWindow(QWidget* parent, const char* name, WFlags f) file->insertItem(tr("Chicane"), this, SLOT(initChicane()), CTRL+Key_F); file->insertItem(tr("Harp"), this, SLOT(initHarp()), CTRL+Key_F); file->insertItem(tr("Teeclub"), this, SLOT(initTeeclub()), CTRL+Key_F); menu->insertItem(tr("&Game"), file); menu->insertSeparator(); settings = new QPopupMenu; - settings->insertItem(tr("&Change Card Backs"), this, SLOT(changeCardBacks()), Key_F2); - snap_id = settings->insertItem(tr("&Snap To Position"), this, SLOT(snapToggle()), Key_F3); + settings->insertItem(tr("&Change card backs"), this, SLOT(changeCardBacks()), Key_F2); + snap_id = settings->insertItem(tr("&Snap to position"), this, SLOT(snapToggle()), Key_F3); settings->setCheckable(TRUE); menu->insertItem(tr("&Settings"),settings); menu->insertSeparator(); QPopupMenu* help = new QPopupMenu; help->insertItem(tr("&About"), this, SLOT(help()), Key_F1); help->setItemChecked(dbf_id, TRUE); @@ -91,21 +91,21 @@ CanvasCardWindow::CanvasCardWindow(QWidget* parent, const char* name, WFlags f) file->insertItem(tr("Harp"), this, SLOT(initHarp())); file->insertItem(tr("Teeclub"), this, SLOT(initTeeclub())); menu->insertItem(tr("Play"), file); menu->insertSeparator(); settings = new QPopupMenu; settings->setCheckable(TRUE); - settings->insertItem(tr("Change Card Backs"), this, SLOT(changeCardBacks())); - snap_id = settings->insertItem(tr("Snap To Position"), this, SLOT(snapToggle())); + settings->insertItem(tr("Change card backs"), this, SLOT(changeCardBacks())); + snap_id = settings->insertItem(tr("Snap to position"), this, SLOT(snapToggle())); QString m; - drawId = settings->insertItem(tr("Turn One Card"), this, SLOT(drawnToggle())); + drawId = settings->insertItem(tr("Turn one card"), this, SLOT(drawnToggle())); menu->insertItem(tr("Settings"),settings); settings->setCheckable(TRUE); #endif menu->show(); Config cfg( "Patience" ); @@ -278,19 +278,19 @@ void CanvasCardWindow::drawnToggle() cardGame->toggleCardsDrawn(); updateDraw(); cfg.writeEntry( "DrawThree", drawThree); cfg.write(); } void CanvasCardWindow::updateDraw() { if(cardGame->cardsDrawn() == 3){ - settings->changeItem(drawId, tr("Turn One Card")); + settings->changeItem(drawId, tr("Turn one card")); } else { - settings->changeItem(drawId, tr("Turn Three Cards")); + settings->changeItem(drawId, tr("Turn three cards")); } } void CanvasCardWindow::setCardBacks() { QCanvasItemList l = canvas.allItems(); diff --git a/noncore/games/solitaire/opie-solitaire.control b/noncore/games/solitaire/opie-solitaire.control index 76e7208..5fa521f 100644 --- a/noncore/games/solitaire/opie-solitaire.control +++ b/noncore/games/solitaire/opie-solitaire.control @@ -1,10 +1,10 @@ Package: opie-solitaire Files: bin/patience apps/Games/patience.desktop pics/cards Priority: optional Section: opie/games Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Game: solitaire card games A solitaire game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/tetrix/opie-tetrix.control b/noncore/games/tetrix/opie-tetrix.control index e335507..e901dbf 100644 --- a/noncore/games/tetrix/opie-tetrix.control +++ b/noncore/games/tetrix/opie-tetrix.control @@ -1,11 +1,11 @@ Package: opie-tetrix Files: bin/tetrix apps/Games/tetrix.desktop pics/tetrix/* Priority: optional Section: opie/games Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm Arch: iPAQ -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Game: control falling blocks A game for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/tictac/main.cpp b/noncore/games/tictac/main.cpp index f2ab334..78fb3b7 100644 --- a/noncore/games/tictac/main.cpp +++ b/noncore/games/tictac/main.cpp @@ -20,12 +20,12 @@ int main( int argc, char **argv ) if ( argc == 2 ) // get board size n n = atoi(argv[1]); if ( n < 3 || n > 10 ) { // out of range qWarning( "%s: Board size must be from 3x3 to 10x10", argv[0] ); return 1; } TicTacToe ttt( n ); // create game a.setMainWidget( &ttt ); - ttt.setCaption("TicTac"); + ttt.setCaption( QObject::tr("TicTac") ); ttt.show(); // show widget return a.exec(); // go } diff --git a/noncore/games/tictac/opie-tictac.control b/noncore/games/tictac/opie-tictac.control index c4ee36c..0074505 100644 --- a/noncore/games/tictac/opie-tictac.control +++ b/noncore/games/tictac/opie-tictac.control @@ -1,9 +1,9 @@ Package: opie-tictac Files: bin/tictac apps/Games/tictac.desktop pics/tictac Priority: optional Section: opie/games Maintainer: ljp <ljp@llornkcor.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Tic Tac Toe game. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/wordgame/opie-wordgame.control b/noncore/games/wordgame/opie-wordgame.control index 3be8e8f..c7dc126 100644 --- a/noncore/games/wordgame/opie-wordgame.control +++ b/noncore/games/wordgame/opie-wordgame.control @@ -1,11 +1,11 @@ Package: opie-wordgame Files: bin/wordgame apps/Games/wordgame.desktop pics/wordgame Priority: optional Section: opie/games Maintainer: Martin Imobersteg <imm@gmx.ch> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Crossword game A crossword game for the Opie environment. Play against the computer or human opponents. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/games/wordgame/wordgame.cpp b/noncore/games/wordgame/wordgame.cpp index d3160f4..d46e824 100644 --- a/noncore/games/wordgame/wordgame.cpp +++ b/noncore/games/wordgame/wordgame.cpp @@ -285,17 +285,17 @@ bool WordGame::loadRules(const QString &name) QFile file( filename ); if ( !file.open( IO_ReadOnly ) ) return FALSE; QTextStream ts( &file ); QString title = name; title.truncate( title.length() - 6 ); - setCaption( title ); + //setCaption( title ); QString shapepixmap; ts >> shapepixmap; int htiles,vtiles; ts >> htiles >> vtiles; if ( htiles < 3 || vtiles < 3 ) return FALSE; @@ -309,17 +309,17 @@ bool WordGame::loadRules(const QString &name) static int rule_effects[12]; int re=0,e; ts >> e; while ( e && re < 10 ) { rule_effects[re] = e; if ( re++ < 10 ) ts >> e; } - QImage shim = Resource::loadImage("wordgame/wordgame_shapes.xpm"); + QImage shim = Resource::loadImage("wordgame/wordgame_shapes"); shim = shim.smoothScale((re-1)*TileItem::smallWidth(),TileItem::smallHeight()); QPixmap bgshapes; bgshapes.convertFromImage(shim); rule_effects[re++] = 100; // default bonus board = new Board(bgshapes, htiles, vtiles, vbox); board->setRules(rule_shapes, rule_effects); connect(board, SIGNAL(temporaryScore(int)), scoreinfo, SLOT(showTemporaryScore(int))); diff --git a/noncore/graphics/drawpad/drawpad.cpp b/noncore/graphics/drawpad/drawpad.cpp index 4db6208..aac6bc1 100644 --- a/noncore/graphics/drawpad/drawpad.cpp +++ b/noncore/graphics/drawpad/drawpad.cpp @@ -273,28 +273,34 @@ DrawPad::DrawPad(QWidget* parent, const char* name) connect(brushColorPopupMenu, SIGNAL(colorSelected(const QColor&)), this, SLOT(changeBrushColor(const QColor&))); QToolTip::add(m_pBrushColorToolButton, tr("Fill Color")); m_pBrushColorToolButton->setPopup(brushColorPopupMenu); m_pBrushColorToolButton->setPopupDelay(0); changeBrushColor(Qt::white); +} + + +void DrawPad::finishStartup() +{ // init pages QFile file(Global::applicationFileName("drawpad", "drawpad.xml")); if (file.open(IO_ReadOnly)) { m_pDrawPadCanvas->load(&file); file.close(); } else { m_pDrawPadCanvas->initialPage(); } loadConfig(); + } DrawPad::~DrawPad() { saveConfig(); QFile file(Global::applicationFileName("drawpad", "drawpad.xml")); diff --git a/noncore/graphics/drawpad/drawpad.h b/noncore/graphics/drawpad/drawpad.h index 7306228..2cae700 100644 --- a/noncore/graphics/drawpad/drawpad.h +++ b/noncore/graphics/drawpad/drawpad.h @@ -35,16 +35,17 @@ public: DrawPad(QWidget* parent = 0, const char* name = 0); ~DrawPad(); Tool* tool() { return m_pTool; } QPen pen() { return m_pen; } QBrush brush() { return m_brush; } bool antiAliasing(); + void finishStartup(); private slots: void newPage(); void clearPage(); void deletePage(); void setPointTool(); void setLineTool(); diff --git a/noncore/graphics/drawpad/drawpadcanvas.cpp b/noncore/graphics/drawpad/drawpadcanvas.cpp index 025bebb..dec498b 100644 --- a/noncore/graphics/drawpad/drawpadcanvas.cpp +++ b/noncore/graphics/drawpad/drawpadcanvas.cpp @@ -177,29 +177,35 @@ void DrawPadCanvas::load(QIODevice* ioDevice) DrawPadCanvasXmlHandler drawPadCanvasXmlHandler; xmlSimpleReader.setContentHandler(&drawPadCanvasXmlHandler); xmlSimpleReader.parse(xmlInputSource); m_pages = drawPadCanvasXmlHandler.pages(); if (m_pages.isEmpty()) { - m_pages.append(new Page("", contentsRect().size())); + m_pages.append(new Page("", + clipper()->width()+(verticalScrollBar()->isVisible()?verticalScrollBar()->width():0), + clipper()->height()+(horizontalScrollBar()->isVisible()?horizontalScrollBar()->height():0))); m_pages.current()->pixmap()->fill(Qt::white); } resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); } void DrawPadCanvas::initialPage() { - m_pages.append(new Page("", 236, 232)); + m_pages.append(new Page("", + clipper()->width()+(verticalScrollBar()->isVisible()?verticalScrollBar()->width():0), + clipper()->height()+(horizontalScrollBar()->isVisible()?horizontalScrollBar()->height():0))); + //236, 232)); no more fixed sizes + m_pages.current()->pixmap()->fill(Qt::white); resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); } @@ -344,17 +350,20 @@ void DrawPadCanvas::selectPage(uint pagePosition) emit pagesChanged(); } void DrawPadCanvas::deleteAll() { m_pages.clear(); - m_pages.append(new Page("", contentsRect().size())); + m_pages.append(new Page("", + clipper()->width()+(verticalScrollBar()->isVisible()?verticalScrollBar()->width():0), + clipper()->height()+(horizontalScrollBar()->isVisible()?horizontalScrollBar()->height():0))); + m_pages.current()->pixmap()->fill(Qt::white); resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); } @@ -377,17 +386,20 @@ void DrawPadCanvas::clearPage() viewport()->update(); } void DrawPadCanvas::deletePage() { m_pages.remove(m_pages.current()); if (m_pages.isEmpty()) { - m_pages.append(new Page("", contentsRect().size())); + m_pages.append(new Page("", + clipper()->width()+(verticalScrollBar()->isVisible()?verticalScrollBar()->width():0), + clipper()->height()+(horizontalScrollBar()->isVisible()?horizontalScrollBar()->height():0))); + m_pages.current()->pixmap()->fill(Qt::white); } resizeContents(m_pages.current()->pixmap()->width(), m_pages.current()->pixmap()->height()); viewport()->update(); emit pagesChanged(); } diff --git a/noncore/graphics/drawpad/exportdialog.cpp b/noncore/graphics/drawpad/exportdialog.cpp index 5b11c0e..adbd612 100644 --- a/noncore/graphics/drawpad/exportdialog.cpp +++ b/noncore/graphics/drawpad/exportdialog.cpp @@ -8,17 +8,17 @@ * 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. * * * ***************************************************************************/ #include "exportdialog.h" -#include <qpe/fileselector.h> +#include <opie/ofileselector.h> #include <qbuttongroup.h> #include <qcombobox.h> #include <qgroupbox.h> #include <qimage.h> #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> @@ -61,19 +61,22 @@ ExportDialog::ExportDialog(uint pageAt, uint pageCount, QWidget* parent, const c QLabel* nameLabel = new QLabel(tr("Name:"), exportGroupBox); QLabel* formatLabel = new QLabel(tr("Format:"), exportGroupBox); m_pNameLineEdit = new QLineEdit(exportGroupBox); m_pFormatComboBox = new QComboBox(exportGroupBox); m_pFormatComboBox->insertStrList(QImageIO::outputFormats()); - FileSelector* fileSelector = new FileSelector("image/*", this, "fileselector"); - fileSelector->setNewVisible(false); - fileSelector->setCloseVisible(false); + MimeTypes types; types.insert( tr("All Images"), "image/*" ); + OFileSelector* fileSelector = new OFileSelector(this, OFileSelector::FileSelector, + OFileSelector::Normal, + QString::null, QString::null, + types ); + fileSelector->setNameVisible( false ); QVBoxLayout* mainLayout = new QVBoxLayout(this, 4, 4); selectionButtonGroup->layout()->setSpacing(4); exportGroupBox->layout()->setSpacing(4); QGridLayout* selectionLayout = new QGridLayout(selectionButtonGroup->layout(), 2, 2); QHBoxLayout* rangeLayout = new QHBoxLayout(); QGridLayout* exportLayout = new QGridLayout(exportGroupBox->layout(), 2, 2); diff --git a/noncore/graphics/drawpad/importdialog.cpp b/noncore/graphics/drawpad/importdialog.cpp index 1c447cb..9a59a20 100644 --- a/noncore/graphics/drawpad/importdialog.cpp +++ b/noncore/graphics/drawpad/importdialog.cpp @@ -9,33 +9,37 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "importdialog.h" #include <qpe/applnk.h> -#include <qpe/fileselector.h> +#include <opie/ofileselector.h> #include <qcheckbox.h> #include <qimage.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> ImportDialog::ImportDialog(QWidget* parent, const char* name) : QDialog(parent, name, true) { setCaption(tr("DrawPad - Import")); - m_pFileSelector = new FileSelector("image/*", this, "fileselector"); + MimeTypes types; types.insert( tr("All images"),"image/*" ); + m_pFileSelector = new OFileSelector(this, + OFileSelector::FileSelector, + OFileSelector::Normal, + QString::null, + QString::null, types ); + m_pFileSelector->setNameVisible( false ); connect(m_pFileSelector, SIGNAL(fileSelected(const DocLnk&)), this, SLOT(fileChanged())); - m_pFileSelector->setNewVisible(false); - m_pFileSelector->setCloseVisible(false); m_pPreviewLabel = new QLabel(this); m_pPreviewLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); m_pPreviewLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); m_pPreviewLabel->setFixedSize(114, 114); m_pPreviewLabel->setBackgroundMode(QWidget::PaletteMid); m_pAutomaticPreviewCheckBox = new QCheckBox(tr("Automatic preview"), this); @@ -63,17 +67,17 @@ ImportDialog::ImportDialog(QWidget* parent, const char* name) ImportDialog::~ImportDialog() { } const DocLnk* ImportDialog::selected() { // FIXME change from pointer to reference -zecke - DocLnk *lnk = new DocLnk( m_pFileSelector->selectedDocument() ); + DocLnk *lnk = new DocLnk( m_pFileSelector->selectedDocument() ); return lnk; } void ImportDialog::fileChanged() { if (m_pAutomaticPreviewCheckBox->isChecked()) { preview(); } diff --git a/noncore/graphics/drawpad/importdialog.h b/noncore/graphics/drawpad/importdialog.h index ef51d7c..ed655a5 100644 --- a/noncore/graphics/drawpad/importdialog.h +++ b/noncore/graphics/drawpad/importdialog.h @@ -12,17 +12,17 @@ ***************************************************************************/ #ifndef IMPORTDIALOG_H #define IMPORTDIALOG_H #include <qdialog.h> class DocLnk; -class FileSelector; +class OFileSelector; class QCheckBox; class QLabel; class ImportDialog : public QDialog { Q_OBJECT @@ -32,14 +32,14 @@ public: const DocLnk* selected(); private slots: void fileChanged(); void preview(); private: - FileSelector* m_pFileSelector; + OFileSelector* m_pFileSelector; QLabel* m_pPreviewLabel; QCheckBox* m_pAutomaticPreviewCheckBox; }; #endif // IMPORTDIALOG_H diff --git a/noncore/graphics/drawpad/main.cpp b/noncore/graphics/drawpad/main.cpp index ec628cc..12f8084 100644 --- a/noncore/graphics/drawpad/main.cpp +++ b/noncore/graphics/drawpad/main.cpp @@ -16,12 +16,12 @@ #include <qpe/qpeapplication.h> int main(int argc, char **argv) { QPEApplication a(argc, argv); DrawPad mw; // = new DrawPad();; a.showMainWidget(&mw ); - + mw.finishStartup(); return a.exec(); } diff --git a/noncore/graphics/drawpad/opie-drawpad.control b/noncore/graphics/drawpad/opie-drawpad.control index 1c22186..5095b52 100644 --- a/noncore/graphics/drawpad/opie-drawpad.control +++ b/noncore/graphics/drawpad/opie-drawpad.control @@ -1,12 +1,12 @@ Package: opie-drawpad Files: bin/drawpad apps/1Pim/drawpad.desktop pics/drawpad Priority: optional Section: opie/applications Maintainer: Sébastien Prud'homme <prudhomme@laposte.net> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal, libopie1 Description: A note taking program with basic draw tools DrawPad is an easy note taking program for Zaurus. It can also be used to draw simple images. DrawPad was developed for the Opie project, an alternative to the standard Zaurus environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/graphics/drawpad/texttool.h b/noncore/graphics/drawpad/texttool.h index 3187675..17556a1 100644 --- a/noncore/graphics/drawpad/texttool.h +++ b/noncore/graphics/drawpad/texttool.h @@ -17,16 +17,17 @@ #include "tool.h" #include <qdialog.h> class QLineEdit; class TextToolDialog : public QDialog { + Q_OBJECT public: TextToolDialog(QWidget* parent = 0, const char* name = 0); ~TextToolDialog(); QString text(); private: QLineEdit* m_pLineEdit; diff --git a/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-Pod.control b/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-Pod.control index 2de15e9..faa041b 100644 --- a/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-Pod.control +++ b/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-Pod.control @@ -1,8 +1,8 @@ Package: opie-mediaplayer2-skin-Pod Files: pics/mediaplayer/skins/Pod Priority: optional Section: opie/applications Maintainer: ljp <llornkcor@handhelds.org> -Version: $QPE_VERSION-$SUB_VERSION Description: Opie Mediaplayer's skin. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-default-landscape.control b/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-default-landscape.control index 570b25a..4bc3c60 100644 --- a/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-default-landscape.control +++ b/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-default-landscape.control @@ -1,9 +1,9 @@ Package: opie-mediaplayer2-skin-default-landscape Files: pics/opieplayer2/skins/default_landscape Priority: optional Section: opie/playerskins Maintainer: L.J.Potter <ljp@llornkcor.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Landscape skin for opie mediaplayer's +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-default.control b/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-default.control index 5cd7509..d076fab 100644 --- a/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-default.control +++ b/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-default.control @@ -1,9 +1,9 @@ Package: opie-mediaplayer2-skin-default Files: pics/opieplayer2/skins/default Priority: optional Section: opie/playerskins Maintainer: L.J.Potter <ljp@llornkcor.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Default skin for opie mediaplayer's +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-techno.control b/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-techno.control index 0ff1427..ad8c1f8 100644 --- a/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-techno.control +++ b/noncore/multimedia/mediaplayerskins/opie-mediaplayer2-skin-techno.control @@ -1,8 +1,8 @@ Package: opie-mediaplayer2-skin-techno Files: pics/mediaplayer/skins/techno Priority: optional Section: opie/applications Maintainer: ljp <llornkcor@handhelds.org> -Version: $QPE_VERSION-$SUB_VERSION Description: Techno Opie Mediaplayer's skin. Adapted from Qtopia +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/multimedia/opieplayer2/audiowidget.cpp b/noncore/multimedia/opieplayer2/audiowidget.cpp index 5d929cb..2c54ae6 100644 --- a/noncore/multimedia/opieplayer2/audiowidget.cpp +++ b/noncore/multimedia/opieplayer2/audiowidget.cpp @@ -26,30 +26,16 @@ -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <qpe/qpeapplication.h> -#include <qpe/resource.h> -#include <qpe/config.h> -#include <opie/oticker.h> - -#include <qwidget.h> -#include <qpixmap.h> -#include <qbutton.h> -#include <qpainter.h> -#include <qframe.h> -#include <qlayout.h> -#include <qdir.h> -#include <stdlib.h> -#include <stdio.h> #include "audiowidget.h" #include "mediaplayerstate.h" #include "playlistwidget.h" namespace { @@ -185,17 +171,17 @@ void AudioWidget::loadSkin() slider.setBackgroundPixmap( backgroundPixmap ); // Config cofg("qpe"); // cofg.setGroup("Appearance"); // QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) ); time.setFocusPolicy( QWidget::NoFocus ); time.setAlignment( Qt::AlignCenter ); - + // time.setFrame(FALSE); // changeTextColor( &time ); resizeEvent( 0 ); } void AudioWidget::setSeekable( bool isSeekable ) { diff --git a/noncore/multimedia/opieplayer2/audiowidget.h b/noncore/multimedia/opieplayer2/audiowidget.h index 53dbb88..b436239 100644 --- a/noncore/multimedia/opieplayer2/audiowidget.h +++ b/noncore/multimedia/opieplayer2/audiowidget.h @@ -29,24 +29,17 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef AUDIO_WIDGET_H #define AUDIO_WIDGET_H -#include <qpainter.h> -#include <qdrawutil.h> -#include <qpixmap.h> -#include <qstring.h> -#include <qslider.h> -#include <qframe.h> #include <qlineedit.h> -#include <qimage.h> #include <opie/oticker.h> #include "mediawidget.h" class QPixmap; class AudioWidget : public MediaWidget { diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp index d04af08..11ad745 100644 --- a/noncore/multimedia/opieplayer2/lib.cpp +++ b/noncore/multimedia/opieplayer2/lib.cpp @@ -26,23 +26,19 @@ -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <stdio.h> -#include <stdlib.h> -#include <qimage.h> + #include <qtextstream.h> -#include <qpe/resource.h> -#include <qfile.h> #include <qdir.h> #include <qgfx_qws.h> #include <qdirectpainter_qws.h> #include <assert.h> #include "xinevideowidget.h" @@ -67,32 +63,42 @@ extern "C" { void null_set_videoGamma( const xine_vo_driver_t* self , int value ); void null_display_handler( const xine_vo_driver_t* self, display_xine_frame_t t, void* user_data ); void null_preload_decoders( xine_stream_t *stream ); } using namespace XINE; -Lib::Lib( InitializationMode initMode, XineVideoWidget* widget ) +Lib::Lib( InitializationMode initMode, XineVideoWidget* widget ) { m_initialized = false; m_duringInitialization = false; m_video = false; m_wid = widget; printf("Lib"); QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf"; // get the configuration // not really OO, should be an extra class, later if ( !QFile::exists(configPath) ) { QFile f(configPath); f.open(IO_WriteOnly); QTextStream ts( &f ); ts << "misc.memcpy_method:glibc\n"; + ts << "# uncomment if you experience double speed audio \n #audio.oss_sync_method:softsync\n"; + ts << "codec.ffmpeg_pp_quality:3\n"; + ts << "audio.num_buffers:50\n"; + ts << "audio.size_buffers:4160\n"; + ts << "video.num_buffers:20\n"; + ts << "video.size_buffers:4096\n"; + ts << "audio.out_num_audio_buf:16\n"; + ts << "audio.out_size_audio_buf:8096\n"; + ts << "audio.out_size_zero_buf:1024\n"; + ts << "audio.passthrough_offset:0\n"; f.close(); } if ( initMode == InitializeImmediately ) { initialize(); m_initialized = true; } else @@ -134,17 +140,17 @@ void Lib::initialize() printf( "!0\n" ); setWidget( m_wid ); } m_queue = xine_event_new_queue (m_stream); xine_event_create_listener_thread (m_queue, xine_event_handler, this); - ::null_preload_decoders( m_stream ); + ::null_preload_decoders( m_stream ); m_duringInitialization = false; } Lib::~Lib() { assert( isRunning() == false ); assert( m_initialized ); @@ -186,18 +192,26 @@ int Lib::minorVersion() { int Lib::subVersion() { int major, minor, sub; xine_get_version ( &major, &minor, &sub ); return sub; } int Lib::play( const QString& fileName, int startPos, int start_time ) { assert( m_initialized ); + // FIXME actually a hack imho. Should not be needed to dispose the whole stream + // but without we get wrong media length reads from libxine for the second media + //xine_dispose ( m_stream ); QString str = fileName.stripWhiteSpace(); + + //m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput ); + //m_queue = xine_event_new_queue (m_stream); + //xine_event_create_listener_thread (m_queue, xine_event_handler, this); + if ( !xine_open( m_stream, QFile::encodeName(str.utf8() ).data() ) ) { return 0; } return xine_play( m_stream, startPos, start_time); } void Lib::stop() { assert( m_initialized ); @@ -238,25 +252,46 @@ int Lib::currentPosition() const { return pos; } int Lib::currentTime() const { assert( m_initialized ); int pos, time, length; xine_get_pos_length( m_stream, &pos, &time, &length ); - return time/1000; + if ( time > 0 ) { + return time/1000; + } else { + return 0; + } } int Lib::length() const { assert( m_initialized ); int pos, time, length; - xine_get_pos_length( m_stream, &pos, &time, &length ); - return length/1000; +/* dilb: patch to solve the wrong stream length reported to the GUI*/ + int iRetVal=0, iTestLoop=0; + + do + { + iRetVal = xine_get_pos_length( m_stream, &pos, &time, &length ); + if (iRetVal) + {/* if the function didn't return 0, then pos, time and length are valid.*/ + return length/1000; + } + /*don't poll too much*/ + usleep(100000); + iTestLoop++; + } + while ( iTestLoop < 10 ); /* if after 1s, we still don't have any +valid stream, then return -1 (this value could be used to make the stream +unseekable, but it should never occur!! Mr. Murphy ? :) ) */ + + return -1; } bool Lib::isSeekable() const { assert( m_initialized ); return xine_get_stream_info( m_stream, XINE_STREAM_INFO_SEEKABLE ); } @@ -361,19 +396,17 @@ void Lib::setScaling( bool scale ) { assert( m_initialized ); ::null_set_scaling( m_videoOutput, scale ); } void Lib::setGamma( int value ) { assert( m_initialized ); - //qDebug( QString( "%1").arg(value) ); - /* int gammaValue = ( 100 + value ); */ - ::null_set_videoGamma( m_videoOutput, value ); + ::null_set_videoGamma( m_videoOutput, value ); } bool Lib::isScaling() const { assert( m_initialized ); return ::null_is_scaling( m_videoOutput ); } diff --git a/noncore/multimedia/opieplayer2/lib.h b/noncore/multimedia/opieplayer2/lib.h index 181735c..0ff14d0 100644 --- a/noncore/multimedia/opieplayer2/lib.h +++ b/noncore/multimedia/opieplayer2/lib.h @@ -29,22 +29,17 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ZECKEXINELIB_H #define ZECKEXINELIB_H -#include <qcstring.h> -#include <qstring.h> -#include <qobject.h> - #include <xine.h> -//#include "xine.h" #include "threadutil.h" class XineVideoWidget; namespace XINE { /** diff --git a/noncore/multimedia/opieplayer2/mediadetect.cpp b/noncore/multimedia/opieplayer2/mediadetect.cpp deleted file mode 100644 index 91137db..0000000 --- a/noncore/multimedia/opieplayer2/mediadetect.cpp +++ b/dev/null @@ -1,43 +0,0 @@ -#include <qstring.h> -#include "mediadetect.h" - - -MediaDetect::MediaDetect() { -} - -MediaDetect::~MediaDetect() { -} - -char MediaDetect::videoOrAudio( const QString& fileName ) { - if( (fileName.lower()).right(4) == ".avi" || - (fileName.lower()).right(4) == ".mpg" || - (fileName.lower()).right(4) == ".asf" || - (fileName.lower()).right(4) == ".mov" || - (fileName.lower()).right(5) == ".mpeg" ) { - qDebug("Video out taken"); - return 'v'; - } else if ( (fileName.lower()).right(4) == "·mp1" || - (fileName.lower()).right(4) == ".mp3" || - (fileName.lower()).right(4) == ".ogg" || - (fileName.lower()).right(4) == ".wav" ) { - qDebug("AUDIO out taken"); - return 'a'; - } else if ( (fileName.lower()).left(7) == "http://" && - (fileName.lower()).right(1) == "/" ) { - return 'a'; - } else { - return 'f'; - } -} - -bool MediaDetect::isStreaming( const QString& fileName ) { - // ugly - if( (fileName.lower()).left(4) == "http" ) { - return true; - } else if ( (fileName.lower()).left(3) == "ftp" ) { - return true; - } else { - return false; - } -} - diff --git a/noncore/multimedia/opieplayer2/mediadetect.h b/noncore/multimedia/opieplayer2/mediadetect.h deleted file mode 100644 index bd5ea1d..0000000 --- a/noncore/multimedia/opieplayer2/mediadetect.h +++ b/dev/null @@ -1,31 +0,0 @@ - -#ifndef MEDIADETECT_H -#define MEDIADETECT_H - - -class QString; -class MediaDetect { - -public: - MediaDetect(); - ~MediaDetect(); - - /** - * Look at the filename and decide which gui is to be used - * - * @param filename the filename - * @return the char - a for audio gui, v for video, f for error - */ - char videoOrAudio( const QString& fileName ); - - /** - * Find out if it is a streaming media file - * - * @param filename the filename - * @return if it is a streaming url or not - */ - bool isStreaming( const QString& fileName ); - -}; - -#endif diff --git a/noncore/multimedia/opieplayer2/mediaplayer.cpp b/noncore/multimedia/opieplayer2/mediaplayer.cpp index d4396d2..9f51006 100644 --- a/noncore/multimedia/opieplayer2/mediaplayer.cpp +++ b/noncore/multimedia/opieplayer2/mediaplayer.cpp @@ -1,37 +1,28 @@ #include <qpe/qpeapplication.h> -#include <qpe/qlibrary.h> -#include <qpe/resource.h> #include <qpe/config.h> #include <qpe/qcopenvelope_qws.h> #include <qfileinfo.h> -#include <qmainwindow.h> -#include <qmessagebox.h> -#include <qwidgetstack.h> -#include <qfile.h> - #include "mediaplayer.h" #include "playlistwidget.h" #include "audiowidget.h" #include "videowidget.h" #include "volumecontrol.h" #include "lib.h" #include "mediaplayerstate.h" -// for setBacklight() + // for setBacklight() #include <linux/fb.h> #include <sys/file.h> #include <sys/ioctl.h> - - #define FBIOBLANK 0x4611 MediaPlayer::MediaPlayer( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) : QObject( parent, name ), volumeDirection( 0 ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) { m_audioUI = 0; m_videoUI = 0; m_xineControl = 0; diff --git a/noncore/multimedia/opieplayer2/mediaplayer.h b/noncore/multimedia/opieplayer2/mediaplayer.h index cbe4d86..34ff064 100644 --- a/noncore/multimedia/opieplayer2/mediaplayer.h +++ b/noncore/multimedia/opieplayer2/mediaplayer.h @@ -29,19 +29,16 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef MEDIA_PLAYER_H #define MEDIA_PLAYER_H -#include <qmainwindow.h> -#include <qframe.h> - #include "xinecontrol.h" #include "playlistwidget.h" #include "skin.h" class DocLnk; class VolumeControl; class MediaPlayerState; diff --git a/noncore/multimedia/opieplayer2/mediawidget.cpp b/noncore/multimedia/opieplayer2/mediawidget.cpp index 3953d92..b1f88c9 100644 --- a/noncore/multimedia/opieplayer2/mediawidget.cpp +++ b/noncore/multimedia/opieplayer2/mediawidget.cpp @@ -15,16 +15,18 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <assert.h> + #include "mediawidget.h" #include "playlistwidget.h" #include "skin.h" #include <assert.h> MediaWidget::MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent, const char *name ) : QWidget( parent, name ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) diff --git a/noncore/multimedia/opieplayer2/om3u.cpp b/noncore/multimedia/opieplayer2/om3u.cpp index 841d950..7183fb4 100644 --- a/noncore/multimedia/opieplayer2/om3u.cpp +++ b/noncore/multimedia/opieplayer2/om3u.cpp @@ -69,25 +69,19 @@ void Om3u::readM3u() { s = s.right( s.length() -2 ); QFileInfo f( s ); QString name = f.baseName(); name = name.right( name.length() - name.findRev( "\\", -1, TRUE ) -1 ); s=s.replace( QRegExp( "\\" ), "/" ); append(s); // qDebug(s); } else { // is url - s.replace( QRegExp( "%20" )," " ); QString name; -// if( name.left( 4 ) == "http" ) { -// name = s.right( s.length() - 7 ); -// } else { - name = s; -// } + name = s; append(name); -// qDebug(name); } } } } void Om3u::readPls() { //it's a pls file QTextStream t( &f ); QString s; @@ -142,17 +136,17 @@ void Om3u::add(const QString &filePath) { //adds to m3u file } void Om3u::remove(const QString &filePath) { //removes from m3u list QString list, currentFile; if(count()>0) { for ( QStringList::ConstIterator it = begin(); it != end(); ++it ) { currentFile=*it; // qDebug(*it); - + if( filePath != currentFile) list += currentFile+"\n"; } f.writeBlock( list, list.length() ); } } void Om3u::deleteFile(const QString &/*filePath*/) {//deletes m3u file diff --git a/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.control b/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.control new file mode 100644 index 0000000..0e71fc5 --- a/dev/null +++ b/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.control @@ -0,0 +1,10 @@ +Package: opie-mediaplayer2-codecs +Files: root/usr/lib/libao.so* root/usr/lib/libogg* root/usr/lib/libvorbisidec.so* root/usr/lib/libxine.so* root/usr/lib/xine/* +Section: opie/multimedia +Essential: no +Priority: optional +Version: 0.7-$SUB_VERSION.3 +Architecture: arm +Maintainer: Maximilian Reiss <harlekin@handhelds.org> +Depends: libc6 (>= 2.1), opie-mediaplayer2 +Description: Codecs for opieplayer 2 diff --git a/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.postinst b/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.postinst new file mode 100755 index 0000000..8e60212 --- a/dev/null +++ b/noncore/multimedia/opieplayer2/opie-mediaplayer2-codecs.postinst @@ -0,0 +1,5 @@ +#!/bin/sh + +[ "$1" = "configure" ] || exit 1 + +ldconfig
\ No newline at end of file diff --git a/noncore/multimedia/opieplayer2/opie-mediaplayer2.control b/noncore/multimedia/opieplayer2/opie-mediaplayer2.control index c072308..10c5d19 100644 --- a/noncore/multimedia/opieplayer2/opie-mediaplayer2.control +++ b/noncore/multimedia/opieplayer2/opie-mediaplayer2.control @@ -1,11 +1,11 @@ Package: opie-mediaplayer2 Files: bin/opieplayer2 apps/Applications/mediaplayer.desktop pics/opieplayer2/add_to_playlist.png pics/opieplayer2/cut.png pics/opieplayer2/delete.png pics/opieplayer2/down.png pics/opieplayer2/loop.png pics/opieplayer2/MPEGPlayer.png pics/opieplayer2/musicfile.png pics/opieplayer2/playlist2.png pics/opieplayer2/play.png pics/opieplayer2/remove_from_playlist.png pics/opieplayer2/shuffle.png pics/opieplayer2/up.png pics/opieplayer2/videofile.png Priority: optional Section: opie/applications Maintainer: L.J.Potter <ljp@llornkcor.com>, Maximilian Reiss <harlekin@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION -Depends: task-opie-minimal, libopie1, zlib1g, opie-mediaplayer2-skin-default | opie-mediaplayer2-skin-default-landscape , libxine1 | opie-mediaplayer-codecs +Depends: task-opie-minimal, libopie1, zlib1g, libstdc++2.10-glibc2.2, opie-mediaplayer2-skin-default | opie-mediaplayer2-skin-default-landscape , libxine1 | opie-mediaplayer2-codecs Description: The Opie media player The mediaplayer for Opie. It plays mp3, mpeg, wav, ogg, quicktime, divx and more. Also it is streaming capable. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/multimedia/opieplayer2/opieplayer2.pro b/noncore/multimedia/opieplayer2/opieplayer2.pro index 57cd18f..5dabbab 100644 --- a/noncore/multimedia/opieplayer2/opieplayer2.pro +++ b/noncore/multimedia/opieplayer2/opieplayer2.pro @@ -6,17 +6,17 @@ HEADERS = playlistselection.h mediaplayerstate.h xinecontrol.h \ frame.h lib.h xinevideowidget.h volumecontrol.h playlistwidgetgui.h\ alphablend.h yuv2rgb.h threadutil.h mediawidget.h playlistview.h playlistfileview.h \ skin.h SOURCES = main.cpp \ playlistselection.cpp mediaplayerstate.cpp xinecontrol.cpp \ videowidget.cpp audiowidget.cpp playlistwidget.cpp om3u.cpp mediaplayer.cpp inputDialog.cpp \ frame.cpp lib.cpp nullvideo.c xinevideowidget.cpp volumecontrol.cpp \ playlistwidgetgui.cpp\ - alphablend.c yuv2rgb.c yuv2rgb_arm.c yuv2rgb_arm4l.S \ + alphablend.c yuv2rgb.c yuv2rgb_arm2.c yuv2rgb_arm4l.S \ threadutil.cpp mediawidget.cpp playlistview.cpp playlistfileview.cpp \ skin.cpp TARGET = opieplayer2 INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lpthread -lopie -lxine -lstdc++ MOC_DIR = qpeobj OBJECTS_DIR = qpeobj diff --git a/noncore/multimedia/opieplayer2/playlistwidget.cpp b/noncore/multimedia/opieplayer2/playlistwidget.cpp index 5f750ba..a1a1016 100644 --- a/noncore/multimedia/opieplayer2/playlistwidget.cpp +++ b/noncore/multimedia/opieplayer2/playlistwidget.cpp @@ -26,41 +26,30 @@ -_. . . )=. = General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <qpe/qpetoolbar.h> -#include <qpe/qpeapplication.h> -#include <qpe/storage.h> -#include <qpe/mimetype.h> -#include <qpe/global.h> -#include <qpe/resource.h> -#include <qpe/config.h> +#include <qtoolbar.h> #include <opie/ofiledialog.h> -#include <qdatetime.h> -#include <qdir.h> #include <qmessagebox.h> -#include <qregexp.h> -#include <qtextstream.h> #include "playlistselection.h" #include "playlistwidget.h" #include "mediaplayerstate.h" #include "inputDialog.h" #include "om3u.h" #include "playlistfileview.h" //only needed for the random play -#include <stdlib.h> #include <assert.h> PlayListWidget::PlayListWidget( MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name ) : PlayListWidgetGui( mediaPlayerState, parent, name ) , currentFileListView( 0 ) { d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), "opieplayer2/add_to_playlist", @@ -662,49 +651,51 @@ void PlayListWidget::openFile() { QString filename, name; Config cfg( "OpiePlayer" ); cfg.setGroup("Dialog"); MimeTypes types; QStringList audio, video, all; audio << "audio/*"; audio << "playlist/plain"; + audio << "application/ogg"; audio << "audio/x-mpegurl"; video << "video/*"; video << "playlist/plain"; all += audio; all += video; types.insert("All Media Files", all ); types.insert("Audio", audio ); types.insert("Video", video ); QString str = OFileDialog::getOpenFileName( 1, - cfg.readEntry("LastDirectory",QPEApplication::documentDir()),"", - types, 0 ); - if(str.left(2) == "//") str=str.right(str.length()-1); - cfg.writeEntry("LastDirectory" ,QFileInfo(str).dirPath()); + cfg.readEntry("LastDirectory",QPEApplication::documentDir()),"", + types, 0 ); + if(str.left(2) == "//") { + str=str.right(str.length()-1); + } + cfg.writeEntry( "LastDirectory" ,QFileInfo( str ).dirPath() ); if( !str.isEmpty() ) { + qDebug( "Selected filename is " + str ); filename = str; DocLnk lnk; - Config cfg( "OpiePlayer" ); - cfg.setGroup("PlayList"); if( filename.right( 3) == "m3u" || filename.right(3) == "pls" ) { readListFromFile( filename ); } else { lnk.setName( QFileInfo(filename).baseName() ); //sets name lnk.setFile( filename ); //sets file name - d->selectedFiles->addToSelection( lnk); + d->selectedFiles->addToSelection( lnk ); writeCurrentM3u(); - d->selectedFiles->setSelectedItem( lnk.name()); + d->selectedFiles->setSelectedItem( lnk.name() ); } } } void PlayListWidget::readListFromFile( const QString &filename ) { qDebug( "read list filename " + filename ); QFileInfo fi(filename); diff --git a/noncore/multimedia/opieplayer2/playlistwidget.h b/noncore/multimedia/opieplayer2/playlistwidget.h index 5230b03..fc305cd 100644 --- a/noncore/multimedia/opieplayer2/playlistwidget.h +++ b/noncore/multimedia/opieplayer2/playlistwidget.h @@ -29,28 +29,23 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef PLAY_LIST_WIDGET_H #define PLAY_LIST_WIDGET_H -#include <qmainwindow.h> -#include <qpe/applnk.h> -#include <qtabwidget.h> -#include <qpe/fileselector.h> + #include <qpushbutton.h> #include <qpopupmenu.h> #include <qpe/qcopenvelope_qws.h> #include "playlistwidgetgui.h" - -//class PlayListWidgetPrivate; class Config; class QListViewItem; class QListView; class QPoint; class QAction; class QLabel; class PlayListWidget : public PlayListWidgetGui { diff --git a/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp b/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp index 5fc0c39..293bf45 100644 --- a/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp +++ b/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp @@ -26,61 +26,49 @@ -_. . . )=. = General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <qpe/qpemenubar.h> -#include <qpe/qpetoolbar.h> -#include <qpe/fileselector.h> + +#include <qtoolbar.h> #include <qpe/qpeapplication.h> -#include <qpe/storage.h> -#include <qpe/mimetype.h> -#include <qpe/config.h> -#include <qpe/global.h> -#include <qpe/resource.h> - -#include <qpopupmenu.h> -#include <qaction.h> -#include <qcursor.h> -#include <qdir.h> + #include <qlayout.h> +#include <qmenubar.h> #include "playlistselection.h" #include "playlistwidget.h" #include "mediaplayerstate.h" #include "inputDialog.h" #include "playlistfileview.h" -//only needed for the random play -#include <stdlib.h> - #include "mediaplayerstate.h" PlayListWidgetGui::PlayListWidgetGui( MediaPlayerState &_mediaPlayerState, QWidget* parent, const char* name ) : QMainWindow( parent, name ), mediaPlayerState( _mediaPlayerState ) { d = new PlayListWidgetPrivate; d->setDocumentUsed = FALSE; setBackgroundMode( PaletteButton ); setToolBarsMovable( FALSE ); // Create Toolbar - QPEToolBar *toolbar = new QPEToolBar( this ); + QToolBar *toolbar = new QToolBar( this ); toolbar->setHorizontalStretchable( TRUE ); // Create Menubar - QPEMenuBar *menu = new QPEMenuBar( toolbar ); + QMenuBar *menu = new QMenuBar( toolbar ); menu->setMargin( 0 ); - bar = new QPEToolBar( this ); + bar = new QToolBar( this ); bar->setLabel( tr( "Play Operations" ) ); tbDeletePlaylist = new QPushButton( Resource::loadIconSet( "trash" ), "", bar, "close" ); tbDeletePlaylist->setFlat( TRUE ); tbDeletePlaylist->setFixedSize( 20, 20 ); tbDeletePlaylist->hide(); @@ -143,17 +131,17 @@ PlayListWidgetGui::PlayListWidgetGui( MediaPlayerState &_mediaPlayerState, QWidg QWidget *aTab; aTab = new QWidget( tabWidget, "aTab" ); QGridLayout *Alayout = new QGridLayout( aTab ); Alayout->setSpacing( 2 ); Alayout->setMargin( 2 ); // no m3u's here please - audioView = new PlayListFileView( "audio/mpeg;audio/x-wav;audio/x-ogg", "opieplayer2/musicfile", aTab, "Audioview" ); + audioView = new PlayListFileView( "audio/mpeg;audio/x-wav;application/ogg", "opieplayer2/musicfile", aTab, "Audioview" ); Alayout->addMultiCellWidget( audioView, 0, 0, 0, 1 ); tabWidget->insertTab( aTab, tr( "Audio" ) ); QPEApplication::setStylusOperation( audioView->viewport(), QPEApplication::RightOnHold ); QWidget *vTab; vTab = new QWidget( tabWidget, "vTab" ); diff --git a/noncore/multimedia/opieplayer2/playlistwidgetgui.h b/noncore/multimedia/opieplayer2/playlistwidgetgui.h index c965b0d..c0cd37a 100644 --- a/noncore/multimedia/opieplayer2/playlistwidgetgui.h +++ b/noncore/multimedia/opieplayer2/playlistwidgetgui.h @@ -30,35 +30,32 @@ Boston, MA 02111-1307, USA. */ #ifndef PLAY_LIST_WIDGET_GUI_H #define PLAY_LIST_WIDGET_GUI_H #include <qmainwindow.h> -#include <qpe/applnk.h> #include <qpe/resource.h> -#include <qpe/qpemenubar.h> #include <qtabwidget.h> #include <qpe/fileselector.h> -#include <qpushbutton.h> -#include <qpopupmenu.h> #include <qaction.h> +#include <qtoolbutton.h> #include <qslider.h> #include <qlcdnumber.h> class PlayListWidgetPrivate; class PlayListSelection; class MediaPlayerState; class PlayListFileView; class Config; -class QPEToolBar; +class QToolBar; class QListViewItem; class QListView; class QPoint; class QAction; class QLabel; class PlayListWidgetPrivate { public: @@ -75,17 +72,16 @@ public: ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE ) : QToolButton( parent, name ) { setTextLabel( name ); setPixmap( Resource::loadPixmap( icon ) ); setAutoRaise( TRUE ); setFocusPolicy( QWidget::NoFocus ); setToggleButton( t ); connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot ); - QPEMenuToolFocusManager::manager()->addWidget( this ); } }; class MenuItem : public QAction { public: MenuItem( QWidget *parent, const QString& text, QObject *handler, const QString& slot ) : QAction( text, QString::null, 0, 0 ) { @@ -116,17 +112,17 @@ protected: QPushButton *tbDeletePlaylist; int selected; QPopupMenu *pmPlayList; FileSelector* playLists; QPopupMenu *skinsMenu; PlayListWidgetPrivate *d; // Private implementation data QVBox *vbox1; QVBox *vbox5; - QPEToolBar *bar; + QToolBar *bar; QWidget *playListTab; void setActiveWindow(); // need to handle this to show the right view void setView( char ); MediaPlayerState &mediaPlayerState; }; #endif diff --git a/noncore/multimedia/opieplayer2/videowidget.cpp b/noncore/multimedia/opieplayer2/videowidget.cpp index 755cd22..c829e03 100644 --- a/noncore/multimedia/opieplayer2/videowidget.cpp +++ b/noncore/multimedia/opieplayer2/videowidget.cpp @@ -26,26 +26,16 @@ -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <qpe/qpeapplication.h> -#include <qpe/resource.h> -#include <qpe/config.h> - - -#include <qwidget.h> -#include <qpainter.h> -#include <qpixmap.h> -#include <qslider.h> -#include <qdrawutil.h> #include "videowidget.h" #include "mediaplayerstate.h" #include "playlistwidget.h" #ifdef Q_WS_QWS # define USE_DIRECT_PAINTER # include <qdirectpainter_qws.h> @@ -69,17 +59,17 @@ const MediaWidget::SkinButtonInfo skinInfo[] = { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton }, { MediaWidget::FullScreen, "full", MediaWidget::ToggleButton } }; const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] ); } -VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name ) +VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name ) : MediaWidget( playList, mediaPlayerState, parent, name ), scaledWidth( 0 ), scaledHeight( 0 ), videoSliderBeingMoved( false ) { setCaption( tr("OpiePlayer - Video") ); videoFrame = new XineVideoWidget ( this, "Video frame" ); connect ( videoFrame, SIGNAL( videoResized ( const QSize & )), this, SIGNAL( videoResized ( const QSize & ))); connect ( videoFrame, SIGNAL( clicked () ), this, SLOT ( backToNormal() ) ); @@ -90,17 +80,17 @@ VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlaye setLength( mediaPlayerState.length() ); setPosition( mediaPlayerState.position() ); setFullscreen( mediaPlayerState.isFullscreen() ); setPlaying( mediaPlayerState.isPlaying() ); } -VideoWidget::~VideoWidget() +VideoWidget::~VideoWidget() { } MediaWidget::GUIInfo VideoWidget::guiInfo() { return GUIInfo( "V" /* infix */, ::skinInfo, ::buttonCount ); } diff --git a/noncore/multimedia/opieplayer2/videowidget.h b/noncore/multimedia/opieplayer2/videowidget.h index 84bc964..8c6896b 100644 --- a/noncore/multimedia/opieplayer2/videowidget.h +++ b/noncore/multimedia/opieplayer2/videowidget.h @@ -29,21 +29,17 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef VIDEO_WIDGET_H #define VIDEO_WIDGET_H -#include <qwidget.h> -#include <qimage.h> -#include <qpixmap.h> #include "xinevideowidget.h" - #include "mediawidget.h" class QPixmap; class QSlider; class VideoWidget : public MediaWidget { Q_OBJECT public: diff --git a/noncore/multimedia/opieplayer2/xinecontrol.cpp b/noncore/multimedia/opieplayer2/xinecontrol.cpp index 1c489e3..a392f4a 100644 --- a/noncore/multimedia/opieplayer2/xinecontrol.cpp +++ b/noncore/multimedia/opieplayer2/xinecontrol.cpp @@ -31,32 +31,33 @@ */ #include <qtimer.h> #include <qmessagebox.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpeapplication.h> + #include "xinecontrol.h" #include "mediaplayerstate.h" #include "xinevideowidget.h" -XineControl::XineControl( XineVideoWidget *xineWidget, - MediaPlayerState &_mediaPlayerState, +XineControl::XineControl( XineVideoWidget *xineWidget, + MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) : QObject( parent, name ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) { libXine = new XINE::Lib( XINE::Lib::InitializeImmediately, xineWidget ); init(); } -XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, - MediaPlayerState &_mediaPlayerState, +XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, + MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) { xine->ensureInitialized(); xine->setWidget( xineWidget ); init(); @@ -83,32 +84,32 @@ XineControl::~XineControl() { // Re-enable the suspend mode QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; } #endif delete libXine; } void XineControl::play( const QString& fileName ) { + hasVideoChannel = FALSE; hasAudioChannel = FALSE; m_fileName = fileName; qDebug("<<FILENAME: " + fileName + ">>>>"); if ( !libXine->play( fileName, 0, 0 ) ) { QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() ); // toggle stop so the the play button is reset mediaPlayerState.setPlaying( false ); return; } mediaPlayerState.setPlaying( true ); MediaPlayerState::DisplayType displayType; - // qDebug( QString( "libXine->hasVideo() return : %1 ").arg( libXine->hasVideo() ) ); if ( !libXine->hasVideo() ) { displayType = MediaPlayerState::Audio; qDebug("HAS AUDIO"); libXine->setShowVideo( false ); hasAudioChannel = TRUE; } else { displayType = MediaPlayerState::Video; qDebug("HAS VIDEO"); @@ -192,17 +193,16 @@ long XineControl::position() { m_position = ( currentTime() ); mediaPlayerState.updatePosition( m_position ); long emitPos = (long)m_position; emit positionChanged( emitPos ); if( mediaPlayerState.isPlaying() ) { // needs to be stopped the media is stopped QTimer::singleShot( 1000, this, SLOT( position() ) ); } - // qDebug("POSITION : %d", m_position); return m_position; } /** * Set videoplayback to fullscreen * @param isSet */ void XineControl::setFullscreen( bool isSet ) { diff --git a/noncore/multimedia/opieplayer2/xinecontrol.h b/noncore/multimedia/opieplayer2/xinecontrol.h index 0e985d6..3f44f2e 100644 --- a/noncore/multimedia/opieplayer2/xinecontrol.h +++ b/noncore/multimedia/opieplayer2/xinecontrol.h @@ -30,17 +30,16 @@ Boston, MA 02111-1307, USA. */ #ifndef XINECONTROL_H #define XINECONTROL_H #include "lib.h" -#include <qobject.h> #include "mediaplayerstate.h" class XineControl : public QObject { Q_OBJECT public: XineControl( XineVideoWidget *xineWidget, MediaPlayerState &_mediaPlayerState, diff --git a/noncore/multimedia/opieplayer2/yuv2rgb_arm2.c b/noncore/multimedia/opieplayer2/yuv2rgb_arm2.c new file mode 100644 index 0000000..cbd32e8 --- a/dev/null +++ b/noncore/multimedia/opieplayer2/yuv2rgb_arm2.c @@ -0,0 +1,875 @@ +/* + * yuv2rgb_arm2.c + * Copyright (C) 2002 Frederic 'dilb' Boulay. + * All Rights Reserved. + * + * Author: Frederic Boulay <dilb@handhelds.org> + * + * you can redistribute this file and/or modify + * it under the terms of the GNU General Public License (version 2) + * as published by the Free Software Foundation. + * + * This file 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * The function defined in this file, are derived from work done in the xine + * project. + * In order to improve performance, by strongly reducing memory bandwidth + * needed, the scaling functions are merged with the yuv2rgb function. + */ + +#ifdef __arm__ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <inttypes.h> + +#include "yuv2rgb.h" +#include <xine/xineutils.h> + +/* Prototypes of the "local" functions available here: */ +/* first prototype, function called when no scaling is needed: */ +static void arm_rgb16_noscale(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*); +/* second prototype, function called when no horizontal scaling is needed: */ +static void arm_rgb16_step_dx_32768(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*); +/* third prototype, function called when scaling is needed for zooming in: */ +static void arm_rgb16_step_dx_inf_32768(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*); +/* fourth prototype, function called when scaling is needed for zooming out (between 1x and 2x): */ +static void arm_rgb16_step_dx_bet_32768_65536(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*); +/* fifth prototype, function called when scaling is needed for zooming out (greater than 2x): */ +static void arm_rgb16_step_dx_sup_65536(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*); +/* sixth prototype, function where the decision of the scaling function to use is made.*/ +static void arm_rgb16_2 (yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*); + + + + +/* extern function: */ + +/* Function: */ +void yuv2rgb_init_arm (yuv2rgb_factory_t *this) +/* This function initialise the member yuv2rgb_fun, if everything is right +the function optimised for the arm target should be used.*/ + { + if (this->swapped) + return; /*no swapped pixel output upto now*/ + + switch (this->mode) + { + case MODE_16_RGB: + this->yuv2rgb_fun = arm_rgb16_2; + break; + default: + } + } + + + +/* local functions: */ + +/* Function: */ +static void arm_rgb16_2 (yuv2rgb_t *this, uint8_t * _dst, uint8_t * _py, uint8_t * _pu, uint8_t * _pv) +/* This function takes care of applying the right scaling conversion +(yuv2rgb is included in each scaling function!)*/ + { + if (!this->do_scale) + { + arm_rgb16_noscale(this, _dst, _py, _pu, _pv); + return; + } + if (this->step_dx<32768) + { + arm_rgb16_step_dx_inf_32768(this, _dst, _py, _pu, _pv); + return; + } + if (this->step_dx==32768) + { + arm_rgb16_step_dx_32768(this, _dst, _py, _pu, _pv); + return; + } + if (this->step_dx<65536) + { + arm_rgb16_step_dx_bet_32768_65536(this, _dst, _py, _pu, _pv); + return; + } + arm_rgb16_step_dx_sup_65536(this, _dst, _py, _pu, _pv); + return; + } + + +/* Function: */ +static void arm_rgb16_noscale(yuv2rgb_t *this, uint8_t * _dst, uint8_t * _py, uint8_t * _pu, uint8_t * _pv) +/* This function is called when the source and the destination pictures have the same size. + In this case, scaling part is not needed. + (This code is probably far from being optimised, in particular, the asm + generated is not the most efficient, a pure asm version will probably + emerge sooner or later). But at least, this version is faster than what + was used before.*/ + { + int height; + + height=this->dest_height; + + while (height>0) + { + uint16_t *r, *g, *b; + uint8_t *py, *py2, *pu, *pv; + uint16_t *dst, *dst2; + int width; + register uint8_t p1y, p1u, p1v; + + height-=2; + width=this->dest_width; + dst = _dst; + dst2 = _dst + this->rgb_stride; + py = _py; + py2 = _py + this->y_stride; + pu = _pu; + pv = _pv; + + while (width>0) + { + width-=2; + p1y=*py++; + p1u=*pu++; + p1v=*pv++; + + r = this->table_rV[p1v]; + g = (void *) (((uint8_t *)this->table_gU[p1u]) + this->table_gV[p1v]); + b = this->table_bU[p1u]; + + *dst++ = r[p1y] + g[p1y] + b[p1y]; + p1y=*py++; + *dst++ = r[p1y] + g[p1y] + b[p1y]; + + p1y=*py2++; + + *dst2++ = r[p1y] + g[p1y] + b[p1y]; + p1y=*py2++; + *dst2++ = r[p1y] + g[p1y] + b[p1y]; + } + _dst += (this->rgb_stride)<<1; + _py += (this->y_stride)<<1; + _pu += this->uv_stride; + _pv += this->uv_stride; + } + } + + +/* Function: */ +static void arm_rgb16_step_dx_inf_32768(yuv2rgb_t *this, uint8_t * _dst, uint8_t * _py, uint8_t * _pu, uint8_t * _pv) +/* This function is called when the destination picture is bigger than the size + of the source picture. +*/ + { + int recal_uv, height; /* Note about recal_uv: bit0 is for +applying scale on u and v, bit1 is for increments of u and v pointers.*/ + int dy; + + dy = 0; + height = this->dest_height; + recal_uv=1; // 1 for evaluation of scale_line, needed the first time + + while(1) + { + register int dxy; + register int dxuv; + register uint8_t p1y, p2y; + uint8_t dest1y, dest2y; + register uint8_t p1u, p2u; + register uint8_t p1v, p2v; + uint8_t dest1u; + uint8_t dest1v; + int width; + uint8_t *u_buffer; + uint8_t *v_buffer; + uint16_t *r, *g, *b; + uint8_t *py, *pu, *pv; + uint16_t *dst; + + dxy = 0; + dxuv = 0; + width = this->dest_width; + u_buffer=this->u_buffer; + v_buffer=this->v_buffer; + dst = (uint16_t*)_dst; + py = _py; + pu = _pu; + pv = _pv; + + //proceed with line scaling/conversion + if ((recal_uv&1)!=0) + { + recal_uv^=1; //reset bit0. + // init values: + p1u = *pu++; + p2u = *pu++; + p1v = *pv++; + p2v = *pv++; + p1y = *py++; + p2y = *py++; + + //width loop (compute all data for a line). + while (width>0) + { + // proceed with u and v first (ok, and y too finally :)) [scaling part]: + // evaluate 1u, 1v, and 2y + //block1_uvy + dest1u=p1u + ((dxuv*(p2u-p1u))>>15); + dest1v=p1v + ((dxuv*(p2v-p1v))>>15); + // as u and v are evaluated, better save them now + *u_buffer++ = (uint8_t)dest1u; + *v_buffer++ = (uint8_t)dest1v; + + dest1y=p1y + ((dxy*(p2y-p1y))>>15); + + dxuv += this->step_dx; + dxy += this->step_dx; + if (dxuv > 32768) + { + dxuv -= 32768; + p1u = p2u; + p2u = *pu++; //idee pour asm, cf cas then, un merge est possible!!! + p1v = p2v; + p2v = *pv++; + } + if (dxy > 32768) + { + dxy -= 32768; + p1y = p2y; + p2y = *py++; + } + //end block1_uvy + + //block2_y + dest2y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + if (dxy > 32768) + { + dxy -= 32768; + p1y = p2y; + p2y = *py++; // idee pour asm, cf cas then, un merge est possible!!! + } + //end block2_y + + // proceed now with YUV2RGB [conversion part]: + // u and v are currently in dest1u and dest1v + // the 2 y are in dest1y and dest2y. + // RGB(0),DST1(0), RGB(1), DST1(1) + r = this->table_rV[dest1v]; + g = (void *) (((uint8_t *)this->table_gU[dest1u]) + this->table_gV[dest1v]); + b = this->table_bU[dest1u]; + + *dst++ = r[dest1y] + g[dest1y] + b[dest1y]; + *dst++ = r[dest2y] + g[dest2y] + b[dest2y]; + + width -=2; + } + } + else + { + // this case is simple, u and v are already evaluated, + // Note pour moi: r, g et b pourraient etre reutilises!! + + // init values: + p1y = *py++; + p2y = *py++; + + //width loop (compute all data for a line). + while (width>0) + { + // proceed with y [scaling part]: + // evaluate 2y + //block1_y + dest1y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + if (dxy > 32768) + { + dxy -= 32768; + p1y = p2y; + p2y = *py++; + } + //end block1_uvy + + //block2_y + dest2y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + if (dxy > 32768) + { + dxy -= 32768; + p1y = p2y; + p2y = *py++; // idee pour asm, cf cas then, un merge est possible!!! + } + //end block2_y + + // proceed now with YUV2RGB [conversion part]: + // u and v are currently in dest1u and dest1v + // the 2 y are in dest1y and dest2y. + // RGB(0),DST1(0) + dest1u=*u_buffer++; + dest1v=*v_buffer++; + r = this->table_rV[dest1v]; + g = (void *) (((uint8_t *)this->table_gU[dest1u]) + this->table_gV[dest1v]); + b = this->table_bU[dest1u]; + + *dst++ = r[dest1y] + g[dest1y] + b[dest1y]; + *dst++ = r[dest2y] + g[dest2y] + b[dest2y]; + + width -=2; + } + } + // end of line scaling/conversion + dy += this->step_dy; + _dst += this->rgb_stride; + + while (--height > 0 && dy < 32768) + { + xine_fast_memcpy (_dst, (uint8_t*)_dst-this->rgb_stride, this->dest_width*2); // *2 because of int8 cast! + dy += this->step_dy; + _dst += this->rgb_stride; + } + + + if (height <= 0) + break; + + do + { + dy -= 32768; + _py += this->y_stride; + + recal_uv^=2; /*bit 0 for reevaluation of scanline, bit 1 for offset.*/ + + if ((recal_uv&2)==0) + { + _pu += this->uv_stride; + _pv += this->uv_stride; + recal_uv|=1; // if update, then reevaluate scanline! + } + } + while( dy>=32768); + } + } + + + +/* Function: */ +static void arm_rgb16_step_dx_32768(yuv2rgb_t *this, uint8_t * _dst, uint8_t * _py, uint8_t * _pu, uint8_t * _pv) +/* This function is called when the widht of the destination picture is the + same as the size of the source picture. +*/ + { + int recal_uv, height; + int dy; + + dy = 0; + height=this->dest_height; + recal_uv=0; + + while (1) + { + uint16_t *r, *g, *b; + uint8_t *py, *pu, *pv; + uint16_t *dst; + int width; + register uint8_t p1y, p1u, p1v; + + width=this->dest_width; + dst = (uint16_t*)_dst; + py = _py; + pu = _pu; + pv = _pv; + + while (width>0) + { + width-=2; + p1y=*py++; + p1u=*pu++; + p1v=*pv++; + + r = this->table_rV[p1v]; + g = (void *) (((uint8_t *)this->table_gU[p1u]) + this->table_gV[p1v]); + b = this->table_bU[p1u]; + + *dst++ = r[p1y] + g[p1y] + b[p1y]; + p1y=*py++; + *dst++ = r[p1y] + g[p1y] + b[p1y]; + } + + + + // end of line scaling/conversion + dy += this->step_dy; + _dst += this->rgb_stride; + + while (--height > 0 && dy < 32768) + { + xine_fast_memcpy (_dst, (uint8_t*)_dst-this->rgb_stride, this->dest_width*2); // *2 because of int8 cast! + dy += this->step_dy; + _dst += this->rgb_stride; + } + + + if (height <= 0) + break; + + do + { + dy -= 32768; + _py += this->y_stride; + + recal_uv^=2; /*bit 0 for reevaluation of scanline, bit 1 for offset.*/ + + if ((recal_uv&2)==0) + { + _pu += this->uv_stride; + _pv += this->uv_stride; + recal_uv|=1; // if update, then reevaluate scanline! + } + } + while( dy>=32768); + } + } + + + +/* Function: */ +static void arm_rgb16_step_dx_bet_32768_65536(yuv2rgb_t *this, uint8_t * _dst, uint8_t * _py, uint8_t * _pu, uint8_t * _pv) +/* This function is called when the destination picture is between the size + of the source picture, and half its size. +*/ + { + int recal_uv, height; /* Note about recal_uv: bit0 is for +applying scale on u and v, bit1 is for increments of u and v pointers.*/ + int dy; + + dy = 0; + height = this->dest_height; + recal_uv=1; // 1 for evaluation of scale_line, needed the first time + + while(1) + { + register int dxy; + register int dxuv; + register uint8_t p1y, p2y; + uint8_t dest1y, dest2y; + register uint8_t p1u, p2u; + register uint8_t p1v, p2v; + uint8_t dest1u; + uint8_t dest1v; + int width; + uint8_t *u_buffer; + uint8_t *v_buffer; + uint16_t *r, *g, *b; + uint8_t *py, *pu, *pv; + uint16_t *dst; + + dxy = 0; + dxuv = 0; + width = this->dest_width; + u_buffer=this->u_buffer; + v_buffer=this->v_buffer; + dst = (uint16_t*)_dst; + py = _py; + pu = _pu; + pv = _pv; + + //proceed with line scaling/conversion + if ((recal_uv&1)!=0) + { + recal_uv^=1; //reset bit0. + // init values: + p1u = *pu++; + p2u = *pu++; + p1v = *pv++; + p2v = *pv++; + p1y = *py++; + p2y = *py++; + + //width loop (compute all data for a line). + while (width>0) + { + // proceed with u and v first (ok, and y too finally :)) [scaling part]: + // evaluate 1u, 1v, and 2y + //block1_uvy + dest1u=p1u + ((dxuv*(p2u-p1u))>>15); + dest1v=p1v + ((dxuv*(p2v-p1v))>>15); + // as u and v are evaluated, better save them now + *u_buffer++ = (uint8_t)dest1u; + *v_buffer++ = (uint8_t)dest1v; + + dest1y=p1y + ((dxy*(p2y-p1y))>>15); + + dxuv += this->step_dx; + dxy += this->step_dx; + if (dxuv > 65536) + { + dxuv -= 65536; + p1u = *pu++; + p2u = *pu++; + p1v = *pv++; + p2v = *pv++; + } + else + { + dxuv -= 32768; + p1u = p2u; + p2u = *pu++; //idee pour asm, cf cas then, un merge est possible!!! + p1v = p2v; + p2v = *pv++; + } + if (dxy > 65536) + { + dxy -= 65536; + p1y = *py++; + p2y = *py++; + } + else + { + dxy -= 32768; + p1y = p2y; + p2y = *py++; + } + //end block1_uvy + + //block2_y + dest2y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + if (dxy > 65536) + { + dxy -= 65536; + p1y = *py++; + p2y = *py++; + } + else + { + dxy -= 32768; + p1y = p2y; + p2y = *py++; // idee pour asm, cf cas then, un merge est possible!!! + } + //end block2_y + + // proceed now with YUV2RGB [conversion part]: + // u and v are currently in dest1u and dest1v + // the 2 y are in dest1y and dest2y. + // RGB(0),DST1(0), RGB(1), DST1(1) + r = this->table_rV[dest1v]; + g = (void *) (((uint8_t *)this->table_gU[dest1u]) + this->table_gV[dest1v]); + b = this->table_bU[dest1u]; + + *dst++ = r[dest1y] + g[dest1y] + b[dest1y]; + *dst++ = r[dest2y] + g[dest2y] + b[dest2y]; + + width -=2; + } + } + else + { + // this case is simple, u and v are already evaluated, + // Note pour moi: r, g et b pourraient etre reutilises!! + + // init values: + p1y = *py++; + p2y = *py++; + + //width loop (compute all data for a line). + while (width>0) + { + // proceed with y [scaling part]: + // evaluate 2y + //block1_y + dest1y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + if (dxy > 65536) + { + dxy -= 65536; + p1y = *py++; + p2y = *py++; + } + else + { + dxy -= 32768; + p1y = p2y; + p2y = *py++; + } + //end block1_uvy + + //block2_y + dest2y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + if (dxy > 65536) + { + dxy -= 65536; + p1y = *py++; + p2y = *py++; + } + else + { + dxy -= 32768; + p1y = p2y; + p2y = *py++; // idee pour asm, cf cas then, un merge est possible!!! + } + //end block2_y + + // proceed now with YUV2RGB [conversion part]: + // u and v are currently in dest1u and dest1v + // the 2 y are in dest1y and dest2y. + // RGB(0),DST1(0) + dest1u=*u_buffer++; + dest1v=*v_buffer++; + r = this->table_rV[dest1v]; + g = (void *) (((uint8_t *)this->table_gU[dest1u]) + this->table_gV[dest1v]); + b = this->table_bU[dest1u]; + + *dst++ = r[dest1y] + g[dest1y] + b[dest1y]; + *dst++ = r[dest2y] + g[dest2y] + b[dest2y]; + + width -=2; + } + } + // end of line scaling/conversion + dy += this->step_dy; + _dst += this->rgb_stride; + + while (--height > 0 && dy < 32768) + { + xine_fast_memcpy (_dst, (uint8_t*)_dst-this->rgb_stride, this->dest_width*2); // *2 because of int8 cast! + dy += this->step_dy; + _dst += this->rgb_stride; + } + + + if (height <= 0) + break; + + do + { + dy -= 32768; + _py += this->y_stride; + + recal_uv^=2; /*bit 0 for reevaluation of scanline, bit 1 for offset.*/ + + if ((recal_uv&2)==0) + { + _pu += this->uv_stride; + _pv += this->uv_stride; + recal_uv|=1; // if update, then reevaluate scanline! + } + } + while( dy>=32768); + } + } + + + +/* Function: */ +static void arm_rgb16_step_dx_sup_65536(yuv2rgb_t *this, uint8_t * _dst, uint8_t * _py, uint8_t * _pu, uint8_t * _pv) +/* This function is called when the destination picture is smaller than half + the size of the source picture, and half its size. +*/ + { + int recal_uv, height; /* Note about recal_uv: bit0 is for +applying scale on u and v, bit1 is for increments of u and v pointers.*/ + int dy; + + dy = 0; + height = this->dest_height; + recal_uv=1; // 1 for evaluation of scale_line, needed the first time + + while(1) + { + register int dxy; + register int dxuv; + int offdxy, offdxuv; + register uint8_t p1y, p2y; + uint8_t dest1y, dest2y; + register uint8_t p1u, p2u; + register uint8_t p1v, p2v; + uint8_t dest1u; + uint8_t dest1v; + int width; + uint8_t *u_buffer; + uint8_t *v_buffer; + uint16_t *r, *g, *b; + uint8_t *py, *pu, *pv; + uint16_t *dst; + + dxy = 0; + dxuv = 0; + width = this->dest_width; + u_buffer=this->u_buffer; + v_buffer=this->v_buffer; + dst = (uint16_t*)_dst; + py = _py; + pu = _pu; + pv = _pv; + + //proceed with line scaling/conversion + if ((recal_uv&1)!=0) + { + recal_uv^=1; //reset bit0. + // init values: + p1u = *pu++; + p2u = *pu++; + p1v = *pv++; + p2v = *pv++; + p1y = *py++; + p2y = *py++; + + //width loop (compute all data for a line). + while (width>0) + { + // proceed with u and v first (ok, and y too finally :)) [scaling part]: + // evaluate 1u, 1v, and 2y + //block1_uvy + dest1u=p1u + ((dxuv*(p2u-p1u))>>15); + dest1v=p1v + ((dxuv*(p2v-p1v))>>15); + // as u and v are evaluated, better save them now + *u_buffer++ = (uint8_t)dest1u; + *v_buffer++ = (uint8_t)dest1v; + + dest1y=p1y + ((dxy*(p2y-p1y))>>15); + + dxuv += this->step_dx; + dxy += this->step_dx; + + offdxuv=((dxuv-1)>>15); + dxuv-=offdxuv<<15; + pu+=offdxuv-2; + pv+=offdxuv-2; + p1u = *pu++; + p2u = *pu++; + p1v = *pv++; + p2v = *pv++; + offdxy=((dxy-1)>>15); + dxy-=offdxy<<15; + py+=offdxy-2; + p1y = *py++; + p2y = *py++; + + //block2_y + dest2y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + offdxy=((dxy-1)>>15); + dxy-=offdxy<<15; + py+=offdxy-2; + p1y = *py++; + p2y = *py++; + + // proceed now with YUV2RGB [conversion part]: + // u and v are currently in dest1u and dest1v + // the 2 y are in dest1y and dest2y. + // RGB(0),DST1(0), RGB(1), DST1(1) + r = this->table_rV[dest1v]; + g = (void *) (((uint8_t *)this->table_gU[dest1u]) + this->table_gV[dest1v]); + b = this->table_bU[dest1u]; + + *dst++ = r[dest1y] + g[dest1y] + b[dest1y]; + *dst++ = r[dest2y] + g[dest2y] + b[dest2y]; + + width -=2; + } + } + else + { + // this case is simple, u and v are already evaluated, + // Note pour moi: r, g et b pourraient etre reutilises!! + + // init values: + p1y = *py++; + p2y = *py++; + + //width loop (compute all data for a line). + while (width>0) + { + // proceed with y [scaling part]: + // evaluate 2y + //block1_y + dest1y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + offdxy=((dxy-1)>>15); + dxy-=offdxy<<15; + py+=offdxy-2; + p1y = *py++; + p2y = *py++; + + //end block1_uvy + + //block2_y + dest2y=p1y + ((dxy*(p2y-p1y))>>15); + + dxy += this->step_dx; + offdxy=((dxy-1)>>15); + dxy-=offdxy<<15; + py+=offdxy-2; + p1y = *py++; + p2y = *py++; + //end block2_y + + // proceed now with YUV2RGB [conversion part]: + // u and v are currently in dest1u and dest1v + // the 2 y are in dest1y and dest2y. + // RGB(0),DST1(0) + dest1u=*u_buffer++; + dest1v=*v_buffer++; + r = this->table_rV[dest1v]; + g = (void *) (((uint8_t *)this->table_gU[dest1u]) + this->table_gV[dest1v]); + b = this->table_bU[dest1u]; + + *dst++ = r[dest1y] + g[dest1y] + b[dest1y]; + *dst++ = r[dest2y] + g[dest2y] + b[dest2y]; + + width -=2; + } + } + // end of line scaling/conversion + dy += this->step_dy; + _dst += this->rgb_stride; + + while (--height > 0 && dy < 32768) + { + xine_fast_memcpy (_dst, (uint8_t*)_dst-this->rgb_stride, this->dest_width*2); // *2 because of int8 cast! + dy += this->step_dy; + _dst += this->rgb_stride; + } + + + if (height <= 0) + break; + + do + { + dy -= 32768; + _py += this->y_stride; + + recal_uv^=2; /*bit 0 for reevaluation of scanline, bit 1 for offset.*/ + + if ((recal_uv&2)==0) + { + _pu += this->uv_stride; + _pv += this->uv_stride; + recal_uv|=1; // if update, then reevaluate scanline! + } + } + while( dy>=32768); + } + } + + +#endif diff --git a/noncore/multimedia/opierec/opierec.control b/noncore/multimedia/opierec/opierec.control index 96c1b69..a1a2b7e 100644 --- a/noncore/multimedia/opierec/opierec.control +++ b/noncore/multimedia/opierec/opierec.control @@ -1,10 +1,10 @@ -Package: opie-rec +Package: opierec Files: bin/opierec pics/opierec apps/Applications/opierec.desktop Priority: optional Section: multimedia/applications Maintainer: L.J. Potter <ljp@llornkcor.com> Architecture: arm -Version: 1.5-2 -Depends: task-opie-minimal +Depends: opie ($QPE_VERSION) Description: audio sampling recorder A simple audio recording/playing application. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp index 0307d99..147f63d 100644 --- a/noncore/multimedia/opierec/qtrec.cpp +++ b/noncore/multimedia/opierec/qtrec.cpp @@ -444,17 +444,17 @@ void QtRec::init() { // timeSlider->setFixedWidth(150); layout1->addMultiCellWidget( timeSlider, 1, 1, 0, 3); // timeSlider->setTickmarks(QSlider::Above); timeLabel = new QLabel( tab, "TimeLabel" ); layout1->addMultiCellWidget( timeLabel, 0, 0, 0, 3); playLabel2 = new QLabel(tab, "PlayLabel2" ); - playLabel2->setText("Play"); + playLabel2->setText(tr("Play") ); playLabel2->setFixedHeight(18); layout1->addMultiCellWidget( playLabel2, 0, 0, 4, 4); Stop_PushButton = new QPushButton( tab, "Stop_PushButton" ); layout1->addMultiCellWidget( Stop_PushButton, 1, 1, 4, 4); Stop_PushButton->setFixedSize(22,22); Stop_PushButton->setPixmap( image4 ); @@ -465,17 +465,17 @@ void QtRec::init() { toEndButton = new QPushButton( tab, "End_PushButton" ); layout1->addMultiCellWidget( toEndButton, 1, 1, 6, 6); toEndButton->setFixedSize(22,22); toEndButton->setPixmap( Resource::loadPixmap( "fastforward" ) ); QLabel *recLabel2; recLabel2 = new QLabel( tab, "recLabel2" ); - recLabel2->setText("Rec"); + recLabel2->setText(tr("Rec")); recLabel2->setFixedHeight(18); layout1->addMultiCellWidget( recLabel2, 0, 0, 7, 7); Rec_PushButton = new QPushButton( tab, "Rec_PushButton" ); layout1->addMultiCellWidget( Rec_PushButton, 1, 1, 7, 7); Rec_PushButton->setFixedSize(22,22); Rec_PushButton->setPixmap( image6 ); @@ -495,19 +495,19 @@ void QtRec::init() { ListView1 = new QListView( tab, "IconView1" ); layout1->addMultiCellWidget( ListView1, 2, 2, 0, 8); ListView1->addColumn( tr( "Name" ) ); ListView1->setColumnWidth(0,140); ListView1->setSorting( 1, false); ListView1->addColumn( tr( "Time" ) ); //in seconds ListView1->setColumnWidth(1,50); - ListView1->addColumn( "Location"); + ListView1->addColumn( tr("Location") ); ListView1->setColumnWidth(2,50); - ListView1->addColumn( "Date"); + ListView1->addColumn( tr("Date") ); ListView1->setColumnWidth(3,63); ListView1->setColumnWidthMode(0,QListView::Manual); ListView1->setColumnAlignment(1,QListView::AlignCenter); ListView1->setColumnAlignment(2,QListView::AlignRight); ListView1->setColumnAlignment(3,QListView::AlignLeft); ListView1->setAllColumnsShowFocus( true ); QPEApplication::setStylusOperation( ListView1->viewport(),QPEApplication::RightOnHold); @@ -589,20 +589,20 @@ void QtRec::init() { bitRateComboBox = new QComboBox( false, bitGroup, "BitRateComboBox" ); bitRateComboBox->insertItem( tr( "16" ) ); bitRateComboBox->insertItem( tr( "8" ) ); bitRateComboBox->setGeometry( QRect( 5, 20, 50, 25 ) ); Layout18->addWidget( bitGroup ); - compressionCheckBox = new QCheckBox ( "Wave Compression (smaller files)", tab_3 ); + compressionCheckBox = new QCheckBox ( tr("Wave Compression (smaller files)"), tab_3 ); Layout18->addWidget( compressionCheckBox ); - autoMuteCheckBox= new QCheckBox ( "auto Mute", tab_3 ); + autoMuteCheckBox= new QCheckBox ( tr("auto Mute"), tab_3 ); Layout18->addWidget( autoMuteCheckBox ); Layout19->addLayout( Layout18 ); QWidget *d = QApplication::desktop(); int width=d->width(); int height=d->height(); @@ -639,20 +639,20 @@ void QtRec::init() { InputSlider->setTickmarks(QSlider::Both); Layout15->addWidget( InputSlider); OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_5,(const char *) "OutputSlider" ); OutputSlider->setTickmarks(QSlider::Both); Layout15b->addWidget( OutputSlider ); - outMuteCheckBox = new QCheckBox ( "mute", tab_5 ); + outMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); Layout15->addWidget( outMuteCheckBox ); - inMuteCheckBox = new QCheckBox ( "mute", tab_5 ); + inMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); inMuteCheckBox-> setFocusPolicy ( QWidget::NoFocus ); Layout15b->addWidget( inMuteCheckBox ); Layout19a->addLayout( Layout15 ); Layout19a->addLayout( Layout15b ); fillDirectoryCombo(); @@ -686,20 +686,20 @@ void QtRec::init() { // InputSlider->setTickmarks(QSlider::Both); Layout15->addWidget( InputSlider); OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_3,(const char *) "OutputSlider" ); // OutputSlider->setTickmarks(QSlider::Both); Layout15b->addWidget( OutputSlider ); - outMuteCheckBox = new QCheckBox ( "mute", tab_3 ); + outMuteCheckBox = new QCheckBox ( tr("mute"), tab_3 ); Layout15->addWidget( outMuteCheckBox ); - inMuteCheckBox = new QCheckBox ( "mute", tab_3 ); + inMuteCheckBox = new QCheckBox ( tr("mute"), tab_3 ); inMuteCheckBox-> setFocusPolicy ( QWidget::NoFocus ); Layout15b->addWidget( inMuteCheckBox ); Layout19->addLayout( Layout15 ); Layout19->addLayout( Layout15b ); fillDirectoryCombo(); @@ -870,21 +870,21 @@ void QtRec::stop() { endRecording(); timeSlider->setValue(0); // QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << true; // mute device } void QtRec::doPlayBtn() { if(!stopped) { - playLabel2->setText("Play"); + playLabel2->setText(tr("Play")); stop(); } else { if(ListView1->currentItem() == 0) return; - playLabel2->setText("Stop"); + playLabel2->setText(tr("Stop")); currentFile = ListView1->currentItem()->text(0); start(); } } void QtRec::start() { //play if(stopped) { qDebug("start::"); @@ -905,17 +905,17 @@ bool QtRec::rec() { //record qDebug("rec()"); if(!stopped) { qDebug("rec:: !stopped"); monitoring=true; return false; } else { qDebug("go ahead and record"); secCount=1; - playLabel2->setText("Stop"); + playLabel2->setText(tr("Stop")); monitoring=false; setRecordButton(true); stopped=false; if( setupAudio( true)) if(setUpFile()) { qDebug("Ok to start recording"); int fileSize=0; @@ -2154,25 +2154,25 @@ void QtRec::setRecordButton(bool b) { if(b) { //about to record or play Rec_PushButton->setDown(true); QPixmap image3( ( const char** ) image3_data ); Stop_PushButton->setPixmap( image3 ); if(Stop_PushButton->isDown()) Stop_PushButton->setDown(true); - playLabel2->setText("Stop"); + playLabel2->setText(tr("Stop") ); } else { //about to stop QPixmap image4( ( const char** ) image4_data ); Stop_PushButton->setPixmap( image4); if(Stop_PushButton->isDown()) Stop_PushButton->setDown(false); - playLabel2->setText("Play"); + playLabel2->setText(tr("Play") ); if(Rec_PushButton->isDown()) Rec_PushButton->setDown( false); } } void QtRec::fillDirectoryCombo() { if( directoryComboBox->count() > 0) directoryComboBox->clear(); diff --git a/noncore/multimedia/showimg/opie-showimg.control b/noncore/multimedia/showimg/opie-showimg.control index 9dacd94..c543335 100644 --- a/noncore/multimedia/showimg/opie-showimg.control +++ b/noncore/multimedia/showimg/opie-showimg.control @@ -1,11 +1,11 @@ Package: opie-showimg Files: bin/showimg apps/Applications/showimg.desktop pics/imageviewer Priority: optional Section: opie/applications Maintainer: Warwick Allison <warwick@trolltech.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Image Viewer The image viewer for the Opie environment. Supports Whichever formats are compiled into Qt/Embedded (eg. PNG). +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/net/ftplib/ftplib.control b/noncore/net/ftplib/ftplib.control index 3dcb02a..918bcd2 100644 --- a/noncore/net/ftplib/ftplib.control +++ b/noncore/net/ftplib/ftplib.control @@ -1,10 +1,10 @@ Package: ftplib Files: $OPIEDIR/lib/libftplib.* Priority: optional Section: Communications Maintainer: L.J. Potter <ljp@llornkcor.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal Description: Libftp The ftp library for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/net/mailit/opie-mailit.control b/noncore/net/mailit/opie-mailit.control index 65b5b36..77d4102 100644 --- a/noncore/net/mailit/opie-mailit.control +++ b/noncore/net/mailit/opie-mailit.control @@ -1,9 +1,9 @@ Package: opie-mailit Files: bin/mailit apps/1Pim/mailit.desktop pics/mailit Priority: optional Section: opie Maintainer: L.J. Potter <llornkcor@handhelds.org> Architecture: arm -Version: $OPIE_VERSION-$SUB_VERSION +Version: $QPE_VERSION$EXTRAVERSION Description: EMail A simple POP3 email client for the Opie environment. diff --git a/noncore/net/opieftp/opie-ftp.control b/noncore/net/opieftp/opie-ftp.control index 090e9a8..1e82523 100644 --- a/noncore/net/opieftp/opie-ftp.control +++ b/noncore/net/opieftp/opie-ftp.control @@ -1,11 +1,11 @@ Package: opie-ftp Files: bin/opieftp pics/opieftp apps/Applications/opieftp.desktop Priority: optional Section: Communications Maintainer: L.J. Potter <ljp@llornkcor.com> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal, ftplib Replaces: opieftp Description: Opie-Ftp The ftp client for the Opie environment. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/net/opieirc/opie-irc.control b/noncore/net/opieirc/opie-irc.control index f1e6ff8..51a8049 100644 --- a/noncore/net/opieirc/opie-irc.control +++ b/noncore/net/opieirc/opie-irc.control @@ -1,9 +1,9 @@ Package: opie-irc Files: bin/opieirc pics/opieirc apps/Applications/opieirc.desktop help/en/html/opieirc.html help/en/html/opieirc Priority: optional Section: Communications Maintainer: Wenzel Jakob <root@wazlaf.de> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal, libopie1 Description: The Opie IRC client lets you chat on your favorite IRC server using your handheld computer +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/net/opietooth/applet/opie-bluetoothapplet.control b/noncore/net/opietooth/applet/opie-bluetoothapplet.control index b9bd63c..55b9ab0 100644 --- a/noncore/net/opietooth/applet/opie-bluetoothapplet.control +++ b/noncore/net/opietooth/applet/opie-bluetoothapplet.control @@ -1,10 +1,10 @@ Package: opie-bluetoothapplet Files: plugins/applets/libbluetoothapplet.so* pics/bluetoothapplet/* Priority: optional Section: opie/system Maintainer: Maximilian Reiss <max.reiss@gmx.de> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION.1 Depends: task-opie-minimal, libopietooth1 Description: Bluetooth Applet An bluetooth taskbar applet for the Opie environment +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/net/opietooth/lib/libopietooth1.control b/noncore/net/opietooth/lib/libopietooth1.control index 041c9d5..850f0dc 100644 --- a/noncore/net/opietooth/lib/libopietooth1.control +++ b/noncore/net/opietooth/lib/libopietooth1.control @@ -1,10 +1,10 @@ Package: libopietooth1 Files: $OPIEDIR/lib/libopietooth.so.1.0.0 $OPIEDIR/lib/libopietooth.so.1.0 $OPIEDIR/lib/libopietooth.so.1 Priority: optional Section: opie/system Maintainer: Maximilian Reiß <max.reiss@gmx.de> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Replaces: libopietooth Depends: libqte2 (>=2.3.4), libopie, task-bluez Description: Opie bluetooth library +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/unsupported/gsmtool/gsmtool.pro b/noncore/unsupported/gsmtool/gsmtool.pro index 180195f..40d5942 100644 --- a/noncore/unsupported/gsmtool/gsmtool.pro +++ b/noncore/unsupported/gsmtool/gsmtool.pro @@ -2,17 +2,17 @@ TEMPLATE = app #CONFIG = qt warn_on debug CONFIG = qt warn_on release DESTDIR = $(OPIEDIR)/bin HEADERS = gsmtool.h SOURCES = main.cpp gsmtool.cpp # This doesn't actually work... TMAKE_CXXFLAGS += -fexceptions INCLUDEPATH += $(OPIEDIR)/include -INCLUDEPATH += $(GSMLIBDIR) +#INCLUDEPATH += $(GSMLIBDIR) DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -L$(GSMLIBDIR)/gsmlib/.libs -lgsmme INTERFACES = gsmtoolbase.ui TARGET = gsmtool TRANSLATIONS = ../../../i18n/de/gsmtool.ts \ ../../../i18n/nl/gsmtool.ts \ ../../../i18n/da/gsmtool.ts \ diff --git a/noncore/unsupported/mail2/addresspicker.cpp b/noncore/unsupported/mail2/addresspicker.cpp index 7f32725..a97b33f 100644 --- a/noncore/unsupported/mail2/addresspicker.cpp +++ b/noncore/unsupported/mail2/addresspicker.cpp @@ -19,16 +19,17 @@ AddressPicker::AddressPicker(QWidget *parent, const char *name, bool modal, connect(okButton, SIGNAL(clicked()), SLOT(accept())); connect(cancelButton, SIGNAL(clicked()), SLOT(close())); QFile f((QString) getenv("HOME") + "/Applications/" + "addressbook/addressbook.xml"); if (f.open(IO_ReadOnly)) { QTextStream stream(&f); + stream.setEncoding( QTextStream::UnicodeUTF8 ); QString content; while (!f.atEnd()) content += stream.readLine() + "\n"; QStringList lines = QStringList::split(QRegExp("\\n"), content); QStringList::Iterator it; for (it = lines.begin(); it != lines.end(); it++) { if ((*it).find(QRegExp("^<Contact.*")) != -1) { int pos = (*it).find("FirstName=\""); QString fname; diff --git a/noncore/unsupported/mail2/bend/opie-mailapplet.control b/noncore/unsupported/mail2/bend/opie-mailapplet.control index e5d3c6e..d618643 100644 --- a/noncore/unsupported/mail2/bend/opie-mailapplet.control +++ b/noncore/unsupported/mail2/bend/opie-mailapplet.control @@ -1,10 +1,10 @@ Package: opie-mailapplet Files: plugins/applets/libbend.so* Priority: optional Section: opie/applications Maintainer: Constantin Bergemann <cbergemann@lisa.de> Architecture: arm -Version: 0.0.9-$SUB_VERSION -Depends: task-opie-minimal libopie1 opie-mail2 +Version: $QPE_VERSION$EXTRAVERSION +Depends: task-opie-minimal, libopie1, opie-mail2 Description: A Biff-Like mailchecker License: LGPL diff --git a/noncore/unsupported/mail2/opie-mail2.control b/noncore/unsupported/mail2/opie-mail2.control index 7f8aeb6..976dc0b 100644 --- a/noncore/unsupported/mail2/opie-mail2.control +++ b/noncore/unsupported/mail2/opie-mail2.control @@ -1,10 +1,10 @@ Package: opie-mail2 Files: bin/mail $OPIEDIR/lib/libmail.so* apps/1Pim/mail.desktop pics/mail/*.png sounds/mail/*.wav Priority: optional Section: opie/applications Maintainer: Constantin Bergemann <cbergemann@lisa.de> Architecture: arm -Version: 0.0.9-$SUB_VERSION +Version: $QPE_VERSION$EXTRAVERSION Depends: task-opie-minimal, libopie1 Description: An IMAP mail client License: LGPL diff --git a/noncore/unsupported/mailit/opie-mailit.control b/noncore/unsupported/mailit/opie-mailit.control index 65b5b36..77d4102 100644 --- a/noncore/unsupported/mailit/opie-mailit.control +++ b/noncore/unsupported/mailit/opie-mailit.control @@ -1,9 +1,9 @@ Package: opie-mailit Files: bin/mailit apps/1Pim/mailit.desktop pics/mailit Priority: optional Section: opie Maintainer: L.J. Potter <llornkcor@handhelds.org> Architecture: arm -Version: $OPIE_VERSION-$SUB_VERSION +Version: $QPE_VERSION$EXTRAVERSION Description: EMail A simple POP3 email client for the Opie environment. diff --git a/noncore/unsupported/qpdf/QOutputDev.cpp b/noncore/unsupported/qpdf/QOutputDev.cpp index 52237f5..022d938 100644 --- a/noncore/unsupported/qpdf/QOutputDev.cpp +++ b/noncore/unsupported/qpdf/QOutputDev.cpp @@ -81,472 +81,485 @@ static QOutFontSubst qStdFonts [] = { { "Times-BoldItalic", "Times", true, true, QFont::Times }, { "Courier", "Courier", false, false, QFont::Courier }, { "Courier-Oblique", "Courier", false, true, QFont::Courier }, { "Courier-Bold", "Courier", true, false, QFont::Courier }, { "Courier-BoldOblique", "Courier", true, true, QFont::Courier }, { "Symbol", 0, false, false, QFont::AnyStyle }, { "Zapf-Dingbats", 0, false, false, QFont::AnyStyle }, - + { 0, 0, false, false, QFont::AnyStyle } }; -QFont QOutputDev::matchFont ( GfxFont *gfxFont, fp_t m11, fp_t m12, fp_t m21, fp_t m22 ) +QFont QOutputDev::matchFont ( GfxFont *gfxFont, fp_t m11, fp_t m12, fp_t m21, fp_t m22 ) { static QDict<QOutFontSubst> stdfonts; - - // build dict for std. fonts on first invocation + + // build dict for std. fonts on first invocation if ( stdfonts. isEmpty ( )) { for ( QOutFontSubst *ptr = qStdFonts; ptr-> m_name; ptr++ ) { stdfonts. insert ( QString ( ptr-> m_name ), ptr ); - } + } } // compute size and normalized transform matrix int size = lrint ( sqrt ( m21 * m21 + m22 * m22 )); QPDFDBG( printf ( "SET FONT: Name=%s, Size=%d, Bold=%d, Italic=%d, Mono=%d, Serif=%d, Symbol=%d, CID=%d, EmbFN=%s, M=(%f,%f,%f,%f)\n", (( gfxFont-> getName ( )) ? gfxFont-> getName ( )-> getCString ( ) : "<n/a>" ), size, gfxFont-> isBold ( ), gfxFont-> isItalic ( ), gfxFont-> isFixedWidth ( ), gfxFont-> isSerif ( ), gfxFont-> isSymbolic ( ), gfxFont-> isCIDFont ( ), - ( gfxFont-> getEmbeddedFontName ( ) ? gfxFont-> getEmbeddedFontName ( ) : "<n/a>" ), - (double) m11, (double) m12, (double) m21, (double) m22 )); + ( gfxFont-> getEmbeddedFontName ( ) ? gfxFont-> getEmbeddedFontName()-> getCString ( ) : "<n/a>" ), + (double) m11, (double) m12, (double) m21, (double) m22 ) ); QString fname (( gfxFont-> getName ( )) ? gfxFont-> getName ( )-> getCString ( ) : "<n/a>" ); QFont f; f. setPixelSize ( size > 0 ? size : 8 ); // type3 fonts misbehave sometimes // fast lookup for std. fonts QOutFontSubst *subst = stdfonts [fname]; - + if ( subst ) { if ( subst-> m_sname ) f. setFamily ( subst-> m_sname ); - f. setStyleHint ( subst-> m_hint, (QFont::StyleStrategy) ( QFont::PreferOutline | QFont::PreferQuality )); + f. setStyleHint ( subst-> m_hint, (QFont::StyleStrategy) ( QFont::PreferOutline | QFont::PreferQuality )); f. setBold ( subst-> m_bold ); f. setItalic ( subst-> m_italic ); } else { QFont::StyleHint sty; - + if ( gfxFont-> isSerif ( )) sty = QFont::Serif; else if ( gfxFont-> isFixedWidth ( )) sty = QFont::TypeWriter; else sty = QFont::Helvetica; - - f. setStyleHint ( sty, (QFont::StyleStrategy) ( QFont::PreferOutline | QFont::PreferQuality )); + + f. setStyleHint ( sty, (QFont::StyleStrategy) ( QFont::PreferOutline | QFont::PreferQuality )); f. setBold ( gfxFont-> isBold ( ) > 0 ); f. setItalic ( gfxFont-> isItalic ( ) > 0 ); f. setFixedPitch ( gfxFont-> isFixedWidth ( ) > 0 ); - - // common specifiers in font names + + // common specifiers in font names if ( fname. contains ( "Oblique" ) || fname. contains ( "Italic" )) - f. setItalic ( true ); + f. setItalic ( true ); if ( fname. contains ( "Bold" )) f. setWeight ( QFont::Bold ); if ( fname. contains ( "Demi" )) f. setWeight ( QFont::DemiBold ); if ( fname. contains ( "Light" )) f. setWeight ( QFont::Light ); if ( fname. contains ( "Black" )) f. setWeight ( QFont::Black ); - } + } // Treat x-sheared fonts as italic if (( m12 > -0.1 ) && ( m12 < 0.1 ) && ((( m21 > -5.0 ) && ( m21 < -0.1 )) || (( m21 > 0.1 ) && ( m21 < 5.0 )))) { - f. setItalic ( true ); - } + f. setItalic ( true ); + } return f; } //------------------------------------------------------------------------ // QOutputDev //------------------------------------------------------------------------ QOutputDev::QOutputDev ( QWidget *parent, const char *name, int flags ) : QScrollView ( parent, name, WRepaintNoErase | WResizeNoErase | flags ) { m_pixmap = 0; m_painter = 0; - + // create text object m_text = new TextPage ( gFalse ); } -QOutputDev::~QOutputDev ( ) +QOutputDev::~QOutputDev ( ) { delete m_painter; delete m_pixmap; delete m_text; } -void QOutputDev::startPage ( int /*pageNum*/, GfxState *state ) +void QOutputDev::startPage ( int /*pageNum*/, GfxState *state ) { delete m_pixmap; delete m_painter; - + m_pixmap = new QPixmap ( lrint ( state-> getPageWidth ( )), lrint ( state-> getPageHeight ( ))); m_painter = new QPainter ( m_pixmap ); QPDFDBG( printf ( "NEW PIXMAP (%ld x %ld)\n", lrint ( state-> getPageWidth ( )), lrint ( state-> getPageHeight ( )))); - + resizeContents ( m_pixmap-> width ( ), m_pixmap-> height ( )); setContentsPos ( 0, 0 ); m_pixmap-> fill ( white ); // clear window - m_text-> clear ( ); // cleat text object - viewport ( )-> repaint ( ); + m_text-> clear ( ); // cleat text object + viewport ( )-> repaint ( ); } -void QOutputDev::endPage ( ) +void QOutputDev::endPage ( ) { + QPDFDBG( printf("End page\n") ); m_text-> coalesce ( ); - + + /* + * I get stupid crashes after endPage is called and then we do clipping + * and other stuff..... + */ +#if 0 delete m_painter; m_painter = 0; - +#endif + updateContents ( 0, 0, contentsWidth ( ), contentsHeight ( )); } -void QOutputDev::drawLink ( Link *link, Catalog */*catalog*/ ) +void QOutputDev::drawLink ( Link *link, Catalog */*catalog*/ ) { fp_t x1, y1, x2, y2, w; link-> getBorder ( &x1, &y1, &x2, &y2, &w ); - + if ( w > 0 ) { int x, y, dx, dy; - + cvtUserToDev ( x1, y1, &x, &y ); cvtUserToDev ( x2, y2, &dx, &dy ); - + QPen oldpen = m_painter-> pen ( ); m_painter-> setPen ( blue ); m_painter-> drawRect ( x, y, dx, dy ); m_painter-> setPen ( oldpen ); } } -void QOutputDev::saveState ( GfxState */*state*/ ) +void QOutputDev::saveState ( GfxState */*state*/ ) { + if ( ! m_painter ) + return; + QPDFDBG( printf ( "SAVE (CLIP=%d/%d)\n", m_painter-> hasClipping ( ), !m_painter-> clipRegion ( ). isEmpty ( ))); - m_painter-> save ( ); + m_painter-> save ( ); } -void QOutputDev::restoreState ( GfxState */*state*/ ) +void QOutputDev::restoreState ( GfxState */*state*/ ) { + if( ! m_painter ) + return; + m_painter-> restore ( ); - + // m_painter-> setClipRegion ( QRect ( 0, 0, m_pixmap-> width ( ), m_pixmap-> height ( ))); // m_painter-> setClipping ( false ); QPDFDBG ( printf ( "RESTORE (CLIP=%d/%d)\n", m_painter-> hasClipping ( ), !m_painter-> clipRegion ( ). isEmpty ( ))); } -void QOutputDev::updateAll ( GfxState *state ) +void QOutputDev::updateAll ( GfxState *state ) { updateLineAttrs ( state, gTrue ); // updateFlatness ( state ); // updateMiterLimit ( state ); updateFillColor ( state ); updateStrokeColor ( state ); updateFont ( state ); } -void QOutputDev::updateCTM ( GfxState *state, fp_t /*m11*/, fp_t /*m12*/, fp_t /*m21*/, fp_t /*m22*/, fp_t /*m31*/, fp_t /*m32*/ ) +void QOutputDev::updateCTM ( GfxState *state, fp_t /*m11*/, fp_t /*m12*/, fp_t /*m21*/, fp_t /*m22*/, fp_t /*m31*/, fp_t /*m32*/ ) { updateLineAttrs ( state, gTrue ); } -void QOutputDev::updateLineDash ( GfxState *state ) +void QOutputDev::updateLineDash ( GfxState *state ) { updateLineAttrs ( state, gTrue ); } -void QOutputDev::updateFlatness ( GfxState */*state*/ ) +void QOutputDev::updateFlatness ( GfxState */*state*/ ) { // not supported QPDFDBG( printf ( "updateFlatness not supported !\n" )); } -void QOutputDev::updateLineJoin ( GfxState *state ) +void QOutputDev::updateLineJoin ( GfxState *state ) { updateLineAttrs ( state, gFalse ); } -void QOutputDev::updateLineCap ( GfxState *state ) +void QOutputDev::updateLineCap ( GfxState *state ) { updateLineAttrs ( state, gFalse ); } // unimplemented -void QOutputDev::updateMiterLimit ( GfxState */*state*/ ) +void QOutputDev::updateMiterLimit ( GfxState */*state*/ ) { QPDFDBG( printf ( "updateMiterLimit not supported !\n" )); } -void QOutputDev::updateLineWidth ( GfxState *state ) +void QOutputDev::updateLineWidth ( GfxState *state ) { updateLineAttrs ( state, gFalse ); } -void QOutputDev::updateLineAttrs ( GfxState *state, GBool updateDash ) +void QOutputDev::updateLineAttrs ( GfxState *state, GBool updateDash ) { fp_t *dashPattern; int dashLength; fp_t dashStart; Qt::PenCapStyle cap; Qt::PenJoinStyle join; int width; width = lrint ( state-> getTransformedLineWidth ( )); - + switch ( state-> getLineCap ( )) { case 0: cap = FlatCap; break; case 1: cap = RoundCap; break; case 2: cap = SquareCap; break; default: qWarning ( "Bad line cap style (%d)\n", state-> getLineCap ( )); cap = FlatCap; break; } - + switch (state->getLineJoin()) { case 0: join = MiterJoin; break; case 1: join = RoundJoin; break; case 2: join = BevelJoin; break; default: qWarning ( "Bad line join style (%d)\n", state->getLineJoin ( )); join = MiterJoin; break; } - + state-> getLineDash ( &dashPattern, &dashLength, &dashStart ); QColor oldcol = m_painter-> pen ( ). color ( ); GfxRGB rgb; state-> getStrokeRGB ( &rgb ); oldcol = q_col ( rgb ); m_painter-> setPen ( QPen ( oldcol, width, dashLength > 0 ? DashLine : SolidLine, cap, join )); if ( updateDash && ( dashLength > 0 )) { // Not supported by QT -/* +/* char dashList[20]; if (dashLength > 20) dashLength = 20; for ( int i = 0; i < dashLength; ++i ) { dashList[i] = xoutRound(state->transformWidth(dashPattern[i])); if (dashList[i] == 0) dashList[i] = 1; } XSetDashes(display, strokeGC, xoutRound(dashStart), dashList, dashLength); */ } } -void QOutputDev::updateFillColor ( GfxState *state ) +void QOutputDev::updateFillColor ( GfxState *state ) { GfxRGB rgb; state-> getFillRGB ( &rgb ); m_painter-> setBrush ( q_col ( rgb )); } -void QOutputDev::updateStrokeColor ( GfxState *state ) +void QOutputDev::updateStrokeColor ( GfxState *state ) { GfxRGB rgb; state-> getStrokeRGB ( &rgb ); - + QPen pen = m_painter-> pen ( ); pen. setColor ( q_col ( rgb )); m_painter-> setPen ( pen ); } -void QOutputDev::updateFont ( GfxState *state ) +void QOutputDev::updateFont ( GfxState *state ) { fp_t m11, m12, m21, m22; GfxFont *gfxFont = state-> getFont ( ); - + if ( !gfxFont ) return; - + state-> getFontTransMat ( &m11, &m12, &m21, &m22 ); m11 *= state-> getHorizScaling ( ); m12 *= state-> getHorizScaling ( ); - + QFont font = matchFont ( gfxFont, m11, m12, m21, m22 ); - + m_painter-> setFont ( font ); m_text-> updateFont ( state ); } -void QOutputDev::stroke ( GfxState *state ) +void QOutputDev::stroke ( GfxState *state ) { QPointArray points; QArray<int> lengths; // transform points int n = convertPath ( state, points, lengths ); QPDFDBG( printf ( "DRAWING: %d POLYS\n", n )); - + // draw each subpath int j = 0; for ( int i = 0; i < n; i++ ) { int len = lengths [i]; - + if ( len >= 2 ) { QPDFDBG( printf ( " - POLY %d: ", i )); QPDFDBG( for ( int ii = 0; ii < len; ii++ )) QPDFDBG( printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); QPDFDBG( printf ( "\n" )); - + m_painter-> drawPolyline ( points, j, len ); - } + } j += len; } qApp-> processEvents ( ); } -void QOutputDev::fill ( GfxState *state ) +void QOutputDev::fill ( GfxState *state ) { doFill ( state, true ); } -void QOutputDev::eoFill ( GfxState *state ) +void QOutputDev::eoFill ( GfxState *state ) { doFill ( state, false ); } // // X doesn't color the pixels on the right-most and bottom-most // borders of a polygon. This means that one-pixel-thick polygons // are not colored at all. I think this is supposed to be a // feature, but I can't figure out why. So after it fills a // polygon, it also draws lines around the border. This is done // only for single-component polygons, since it's not very // compatible with the compound polygon kludge (see convertPath()). // -void QOutputDev::doFill ( GfxState *state, bool winding ) +void QOutputDev::doFill ( GfxState *state, bool winding ) { QPointArray points; QArray<int> lengths; // transform points int n = convertPath ( state, points, lengths ); QPDFDBG( printf ( "FILLING: %d POLYS\n", n )); - + QPen oldpen = m_painter-> pen ( ); m_painter-> setPen ( QPen ( NoPen )); - + // draw each subpath int j = 0; for ( int i = 0; i < n; i++ ) { int len = lengths [i]; - + if ( len >= 3 ) { QPDFDBG( printf ( " - POLY %d: ", i )); QPDFDBG( for ( int ii = 0; ii < len; ii++ )) QPDFDBG( printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); QPDFDBG( printf ( "\n" )); - + m_painter-> drawPolygon ( points, winding, j, len ); - } + } j += len; } m_painter-> setPen ( oldpen ); qApp-> processEvents ( ); } -void QOutputDev::clip ( GfxState *state ) +void QOutputDev::clip ( GfxState *state ) { doClip ( state, true ); } -void QOutputDev::eoClip ( GfxState *state ) +void QOutputDev::eoClip ( GfxState *state ) { doClip ( state, false ); } -void QOutputDev::doClip ( GfxState *state, bool winding ) +void QOutputDev::doClip ( GfxState *state, bool winding ) { QPointArray points; QArray<int> lengths; // transform points int n = convertPath ( state, points, lengths ); QRegion region; - + QPDFDBG( printf ( "CLIPPING: %d POLYS\n", n )); - + // draw each subpath int j = 0; for ( int i = 0; i < n; i++ ) { int len = lengths [i]; - - if ( len >= 3 ) { + + if ( len >= 3 ) { QPointArray dummy; dummy. setRawData ( points. data ( ) + j, len ); - + QPDFDBG( printf ( " - POLY %d: ", i )); QPDFDBG( for ( int ii = 0; ii < len; ii++ ) printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); QPDFDBG( printf ( "\n" )); - + region |= QRegion ( dummy, winding ); - + dummy. resetRawData ( points. data ( ) + j, len ); - } + } j += len; } - - if ( m_painter-> hasClipping ( )) + + if ( m_painter && m_painter-> hasClipping ( )) region &= m_painter-> clipRegion ( ); // m_painter-> setClipRegion ( region ); // m_painter-> setClipping ( true ); - + // m_painter-> fillRect ( 0, 0, m_pixmap-> width ( ), m_pixmap-> height ( ), red ); // m_painter-> drawText ( points [0]. x ( ) + 10, points [0]. y ( ) + 10, "Bla bla" ); qApp-> processEvents ( ); } // // Transform points in the path and convert curves to line segments. // Builds a set of subpaths and returns the number of subpaths. // If <fillHack> is set, close any unclosed subpaths and activate a // kludge for polygon fills: First, it divides up the subpaths into // non-overlapping polygons by simply comparing bounding rectangles. // Then it connects subaths within a single compound polygon to a single // point so that X can fill the polygon (sort of). // -int QOutputDev::convertPath ( GfxState *state, QPointArray &points, QArray<int> &lengths ) +int QOutputDev::convertPath ( GfxState *state, QPointArray &points, QArray<int> &lengths ) { GfxPath *path = state-> getPath ( ); int n = path-> getNumSubpaths ( ); lengths. resize ( n ); // do each subpath for ( int i = 0; i < n; i++ ) { @@ -564,69 +577,69 @@ int QOutputDev::convertPath ( GfxState *state, QPointArray &points, QArray<int> int QOutputDev::convertSubpath ( GfxState *state, GfxSubpath *subpath, QPointArray &points ) { int oldcnt = points. count ( ); fp_t x0, y0, x1, y1, x2, y2, x3, y3; int m = subpath-> getNumPoints ( ); int i = 0; - + while ( i < m ) { if ( i >= 1 && subpath-> getCurve ( i )) { state-> transform ( subpath-> getX ( i - 1 ), subpath-> getY ( i - 1 ), &x0, &y0 ); state-> transform ( subpath-> getX ( i ), subpath-> getY ( i ), &x1, &y1 ); state-> transform ( subpath-> getX ( i + 1 ), subpath-> getY ( i + 1 ), &x2, &y2 ); state-> transform ( subpath-> getX ( i + 2 ), subpath-> getY ( i + 2 ), &x3, &y3 ); - + QPointArray tmp; tmp. setPoints ( 4, lrint ( x0 ), lrint ( y0 ), lrint ( x1 ), lrint ( y1 ), lrint ( x2 ), lrint ( y2 ), lrint ( x3 ), lrint ( y3 )); #if QT_VERSION < 300 tmp = tmp. quadBezier ( ); - + for ( uint loop = 0; loop < tmp. count ( ); loop++ ) { QPoint p = tmp. point ( loop ); points. putPoints ( points. count ( ), 1, p. x ( ), p. y ( )); } #else tmp = tmp. cubicBezier ( ); - points. putPoints ( points. count ( ), tmp. count ( ), tmp ); + points. putPoints ( points. count ( ), tmp. count ( ), tmp ); #endif i += 3; - } + } else { state-> transform ( subpath-> getX ( i ), subpath-> getY ( i ), &x1, &y1 ); - - points. putPoints ( points. count ( ), 1, lrint ( x1 ), lrint ( y1 )); + + points. putPoints ( points. count ( ), 1, lrint ( x1 ), lrint ( y1 )); ++i; } } return points. count ( ) - oldcnt; } -void QOutputDev::beginString ( GfxState *state, GString */*s*/ ) +void QOutputDev::beginString ( GfxState *state, GString */*s*/ ) { m_text-> beginString ( state ); } -void QOutputDev::endString ( GfxState */*state*/ ) +void QOutputDev::endString ( GfxState */*state*/ ) { m_text-> endString ( ); } void QOutputDev::drawChar ( GfxState *state, fp_t x, fp_t y, fp_t dx, fp_t dy, fp_t originX, fp_t originY, - CharCode code, Unicode *u, int uLen ) + CharCode code, Unicode *u, int uLen ) { fp_t x1, y1, dx1, dy1; - + if ( uLen > 0 ) m_text-> addChar ( state, x, y, dx, dy, u, uLen ); // check for invisible text -- this is used by Acrobat Capture if (( state-> getRender ( ) & 3 ) == 3 ) { return; } @@ -634,159 +647,159 @@ void QOutputDev::drawChar ( GfxState *state, fp_t x, fp_t y, y -= originY; state-> transform ( x, y, &x1, &y1 ); state-> transformDelta ( dx, dy, &dx1, &dy1 ); if ( uLen > 0 ) { QString str; QFontMetrics fm = m_painter-> fontMetrics ( ); - + for ( int i = 0; i < uLen; i++ ) { QChar c = QChar ( u [i] ); - + if ( fm. inFont ( c )) { str [i] = QChar ( u [i] ); } else { str [i] = ' '; QPDFDBG( printf ( "CHARACTER NOT IN FONT: %hx\n", c. unicode ( ))); } } - + if (( uLen == 1 ) && ( str [0] == ' ' )) return; - - + + fp_t m11, m12, m21, m22; - + state-> getFontTransMat ( &m11, &m12, &m21, &m22 ); m11 *= state-> getHorizScaling ( ); m12 *= state-> getHorizScaling ( ); - + fp_t fsize = m_painter-> font ( ). pixelSize ( ); #ifndef QT_NO_TRANSFORMATIONS QWMatrix oldmat; - - bool dorot = (( m12 < -0.1 ) || ( m12 > 0.1 )) && (( m21 < -0.1 ) || ( m21 > 0.1 )); - if ( dorot ) { + bool dorot = (( m12 < -0.1 ) || ( m12 > 0.1 )) && (( m21 < -0.1 ) || ( m21 > 0.1 )); + + if ( dorot ) { oldmat = m_painter-> worldMatrix ( ); std::cerr << std::endl << "ROTATED: " << m11 << ", " << m12 << ", " << m21 << ", " << m22 << " / SIZE: " << fsize << " / TEXT: " << str. local8Bit ( ) << endl << endl; - + QWMatrix mat ( lrint ( m11 / fsize ), lrint ( m12 / fsize ), -lrint ( m21 / fsize ), -lrint ( m22 / fsize ), lrint ( x1 ), lrint ( y1 )); - + m_painter-> setWorldMatrix ( mat ); x1 = 0; - y1 = 0; + y1 = 0; } #endif - + QPen oldpen = m_painter-> pen ( ); - + if (!( state-> getRender ( ) & 1 )) { QPen fillpen = oldpen; - + fillpen. setColor ( m_painter-> brush ( ). color ( )); m_painter-> setPen ( fillpen ); - } + } if ( fsize > 5 ) m_painter-> drawText ( lrint ( x1 ), lrint ( y1 ), str ); else m_painter-> fillRect ( lrint ( x1 ), lrint ( y1 ), lrint ( QMAX( fp_t(1), dx1 )), lrint ( QMAX( fsize, dy1 )), m_painter-> pen ( ). color ( )); - + m_painter-> setPen ( oldpen ); - + #ifndef QT_NO_TRANSFORMATIONS if ( dorot ) m_painter-> setWorldMatrix ( oldmat ); -#endif - +#endif + QPDFDBG( printf ( "DRAW TEXT: \"%s\" at (%ld/%ld)\n", str. local8Bit ( ). data ( ), lrint ( x1 ), lrint ( y1 ))); - } + } else if ( code != 0 ) { // some PDF files use CID 0, which is .notdef, so just ignore it qWarning ( "Unknown character (CID=%d Unicode=%hx)\n", code, (unsigned short) ( uLen > 0 ? u [0] : (Unicode) 0 )); } qApp-> processEvents ( ); } -void QOutputDev::drawImageMask ( GfxState *state, Object */*ref*/, Stream *str, int width, int height, GBool invert, GBool inlineImg ) +void QOutputDev::drawImageMask ( GfxState *state, Object */*ref*/, Stream *str, int width, int height, GBool invert, GBool inlineImg ) { // get CTM, check for singular matrix fp_t *ctm = state-> getCTM ( ); - + if ( fabs ( ctm [0] * ctm [3] - ctm [1] * ctm [2] ) < 0.000001 ) { qWarning ( "Singular CTM in drawImage\n" ); - + if ( inlineImg ) { str-> reset ( ); int j = height * (( width + 7 ) / 8 ); for ( int i = 0; i < j; i++ ) str->getChar(); str->close(); } return; } - - GfxRGB rgb; + + GfxRGB rgb; state-> getFillRGB ( &rgb ); uint val = ( lrint ( rgb. r * 255 ) & 0xff ) << 16 | ( lrint ( rgb. g * 255 ) & 0xff ) << 8 | ( lrint ( rgb. b * 255 ) & 0xff ); - - - QImage img ( width, height, 32 ); + + + QImage img ( width, height, 32 ); img. setAlphaBuffer ( true ); QPDFDBG( printf ( "IMAGE MASK (%dx%d)\n", width, height )); // initialize the image stream ImageStream *imgStr = new ImageStream ( str, width, 1, 1 ); imgStr-> reset ( ); uchar **scanlines = img. jumpTable ( ); - + if ( ctm [3] > 0 ) scanlines += ( height - 1 ); - + for ( int y = 0; y < height; y++ ) { QRgb *scanline = (QRgb *) *scanlines; - + if ( ctm [0] < 0 ) scanline += ( width - 1 ); - + for ( int x = 0; x < width; x++ ) { Guchar alpha; - + imgStr-> getPixel ( &alpha ); - + if ( invert ) alpha ^= 1; - + *scanline = ( alpha == 0 ) ? 0xff000000 | val : val; - + ctm [0] < 0 ? scanline-- : scanline++; } ctm [3] > 0 ? scanlines-- : scanlines++; qApp-> processEvents ( ); } - -#ifndef QT_NO_TRANSFORMATIONS + +#ifndef QT_NO_TRANSFORMATIONS QWMatrix mat ( ctm [0] / width, ctm [1], ctm [2], ctm [3] / height, ctm [4], ctm [5] ); - - std::cerr << "MATRIX T=" << mat. dx ( ) << "/" << mat. dy ( ) << std::endl + + std::cerr << "MATRIX T=" << mat. dx ( ) << "/" << mat. dy ( ) << std::endl << " - M=" << mat. m11 ( ) << "/" << mat. m12 ( ) << "/" << mat. m21 ( ) << "/" << mat. m22 ( ) << std::endl; - + QWMatrix oldmat = m_painter-> worldMatrix ( ); m_painter-> setWorldMatrix ( mat, true ); #ifdef QWS QPixmap pm; pm. convertFromImage ( img ); m_painter-> drawPixmap ( 0, 0, pm ); #else @@ -797,166 +810,166 @@ void QOutputDev::drawImageMask ( GfxState *state, Object */*ref*/, Stream *str, #else if (( ctm [1] < -0.1 ) || ( ctm [1] > 0.1 ) || ( ctm [2] < -0.1 ) || ( ctm [2] > 0.1 )) { QPDFDBG( printf ( "### ROTATED / SHEARED / ETC -- CANNOT DISPLAY THIS IMAGE\n" )); } else { int x = lrint ( ctm [4] ); int y = lrint ( ctm [5] ); - + int w = lrint ( ctm [0] ); int h = lrint ( ctm [3] ); - + if ( w < 0 ) { x += w; w = -w; } if ( h < 0 ) { y += h; h = -h; } - + QPDFDBG( printf ( "DRAWING IMAGE MASKED: %d/%d - %dx%d\n", x, y, w, h )); img = img. smoothScale ( w, h ); - qApp-> processEvents ( ); + qApp-> processEvents ( ); m_painter-> drawImage ( x, y, img ); } #endif - - delete imgStr; + + delete imgStr; qApp-> processEvents ( ); } -void QOutputDev::drawImage(GfxState *state, Object */*ref*/, Stream *str, int width, int height, GfxImageColorMap *colorMap, int *maskColors, GBool inlineImg ) +void QOutputDev::drawImage(GfxState *state, Object */*ref*/, Stream *str, int width, int height, GfxImageColorMap *colorMap, int *maskColors, GBool inlineImg ) { int nComps, nVals, nBits; - + // image parameters nComps = colorMap->getNumPixelComps ( ); nVals = width * nComps; nBits = colorMap-> getBits ( ); // get CTM, check for singular matrix fp_t *ctm = state-> getCTM ( ); - + if ( fabs ( ctm [0] * ctm [3] - ctm [1] * ctm [2] ) < 0.000001 ) { qWarning ( "Singular CTM in drawImage\n" ); - + if ( inlineImg ) { str-> reset ( ); int j = height * (( nVals * nBits + 7 ) / 8 ); for ( int i = 0; i < j; i++ ) str->getChar(); str->close(); } return; } QImage img ( width, height, 32 ); - + if ( maskColors ) img. setAlphaBuffer ( true ); QPDFDBG( printf ( "IMAGE (%dx%d)\n", width, height )); // initialize the image stream ImageStream *imgStr = new ImageStream ( str, width, nComps, nBits ); imgStr-> reset ( ); Guchar pixBuf [gfxColorMaxComps]; GfxRGB rgb; - + uchar **scanlines = img. jumpTable ( ); - + if ( ctm [3] > 0 ) scanlines += ( height - 1 ); - + for ( int y = 0; y < height; y++ ) { QRgb *scanline = (QRgb *) *scanlines; - + if ( ctm [0] < 0 ) scanline += ( width - 1 ); - + for ( int x = 0; x < width; x++ ) { imgStr-> getPixel ( pixBuf ); colorMap-> getRGB ( pixBuf, &rgb ); - + uint val = ( lrint ( rgb. r * 255 ) & 0xff ) << 16 | ( lrint ( rgb. g * 255 ) & 0xff ) << 8 | ( lrint ( rgb. b * 255 ) & 0xff ); - + if ( maskColors ) { for ( int k = 0; k < nComps; ++k ) { - if (( pixBuf [k] < maskColors [2 * k] ) || ( pixBuf [k] > maskColors [2 * k] )) { + if (( pixBuf [k] < maskColors [2 * k] ) || ( pixBuf [k] > maskColors [2 * k] )) { val |= 0xff000000; break; } } } *scanline = val; - + ctm [0] < 0 ? scanline-- : scanline++; } ctm [3] > 0 ? scanlines-- : scanlines++; - + qApp-> processEvents ( ); } -#ifndef QT_NO_TRANSFORMATIONS +#ifndef QT_NO_TRANSFORMATIONS QWMatrix mat ( ctm [0] / width, ctm [1], ctm [2], ctm [3] / height, ctm [4], ctm [5] ); - std::cerr << "MATRIX T=" << mat. dx ( ) << "/" << mat. dy ( ) << std::endl + std::cerr << "MATRIX T=" << mat. dx ( ) << "/" << mat. dy ( ) << std::endl << " - M=" << mat. m11 ( ) << "/" << mat. m12 ( ) << "/" << mat. m21 ( ) << "/" << mat. m22 ( ) << std::endl; QWMatrix oldmat = m_painter-> worldMatrix ( ); m_painter-> setWorldMatrix ( mat, true ); #ifdef QWS QPixmap pm; pm. convertFromImage ( img ); m_painter-> drawPixmap ( 0, 0, pm ); -#else - m_painter-> drawImage ( QPoint ( 0, 0 ), img ); +#else + m_painter-> drawImage ( QPoint ( 0, 0 ), img ); #endif m_painter-> setWorldMatrix ( oldmat ); #else // QT_NO_TRANSFORMATIONS if (( ctm [1] < -0.1 ) || ( ctm [1] > 0.1 ) || ( ctm [2] < -0.1 ) || ( ctm [2] > 0.1 )) { QPDFDBG( printf ( "### ROTATED / SHEARED / ETC -- CANNOT DISPLAY THIS IMAGE\n" )); } else { int x = lrint ( ctm [4] ); int y = lrint ( ctm [5] ); - + int w = lrint ( ctm [0] ); int h = lrint ( ctm [3] ); - + if ( w < 0 ) { x += w; w = -w; } if ( h < 0 ) { y += h; h = -h; } - + QPDFDBG( printf ( "DRAWING IMAGE: %d/%d - %dx%d\n", x, y, w, h )); - img = img. smoothScale ( w, h ); - qApp-> processEvents ( ); + img = img. smoothScale ( w, h ); + qApp-> processEvents ( ); m_painter-> drawImage ( x, y, img ); } - + #endif delete imgStr; qApp-> processEvents ( ); } @@ -972,69 +985,69 @@ bool QOutputDev::findText ( const QString &str, QRect &r, bool top, bool bottom return res; } bool QOutputDev::findText ( const QString &str, int &l, int &t, int &w, int &h, bool top, bool bottom ) { bool found = false; uint len = str. length ( ); Unicode *s = new Unicode [len]; - + for ( uint i = 0; i < len; i++ ) s [i] = str [i]. unicode ( ); fp_t x1 = (fp_t) l; fp_t y1 = (fp_t) t; fp_t x2 = (fp_t) l + w - 1; fp_t y2 = (fp_t) t + h - 1; - if ( m_text-> findText ( s, len, top, bottom, &x1, &y1, &x2, &y2 )) { + if ( m_text-> findText ( s, len, top, bottom, &x1, &y1, &x2, &y2 )) { l = lrint ( x1 ); t = lrint ( y1 ); w = lrint ( x2 ) - l + 1; h = lrint ( y2 ) - t + 1; found = true; } delete [] s; - + return found; } GBool QOutputDev::findText ( Unicode *s, int len, GBool top, GBool bottom, int *xMin, int *yMin, int *xMax, int *yMax ) { bool found = false; fp_t xMin1 = (double) *xMin; fp_t yMin1 = (double) *yMin; fp_t xMax1 = (double) *xMax; fp_t yMax1 = (double) *yMax; - + if ( m_text-> findText ( s, len, top, bottom, &xMin1, &yMin1, &xMax1, &yMax1 )) { *xMin = lrint ( xMin1 ); *xMax = lrint ( xMax1 ); *yMin = lrint ( yMin1 ); *yMax = lrint ( yMax1 ); found = true; } return found; } QString QOutputDev::getText ( int l, int t, int w, int h ) { GString *gstr = m_text-> getText ( l, t, l + w - 1, t + h - 1 ); QString str = gstr-> getCString ( ); delete gstr; - return str; + return str; } -QString QOutputDev::getText ( const QRect &r ) +QString QOutputDev::getText ( const QRect &r ) { return getText ( r. left ( ), r. top ( ), r. width ( ), r. height ( )); } void QOutputDev::drawContents ( QPainter *p, int clipx, int clipy, int clipw, int cliph ) { if ( m_pixmap ) p-> drawPixmap ( clipx, clipy, *m_pixmap, clipx, clipy, clipw, cliph ); - else + else p-> fillRect ( clipx, clipy, clipw, cliph, white ); } diff --git a/noncore/unsupported/qpdf/opie-qpdf.control b/noncore/unsupported/qpdf/opie-qpdf.control index 33df3e1..208dcb1 100644 --- a/noncore/unsupported/qpdf/opie-qpdf.control +++ b/noncore/unsupported/qpdf/opie-qpdf.control @@ -1,9 +1,9 @@ Package: opie-qpdf Files: bin/qpdf apps/Applications/qpdf.desktop pics/qpdf/qpdf_icon.png Priority: optional Section: opie/applications Maintainer: Robert Griebl <sandman@handhelds.org> Architecture: arm -Version: $QPE_VERSION-$SUB_VERSION Depends: task-opie-minimal, gzip Description: A PDF viewer for OPIE. +Version: $QPE_VERSION$EXTRAVERSION diff --git a/noncore/unsupported/qpdf/qpdf.cpp b/noncore/unsupported/qpdf/qpdf.cpp index 61f097b..de1dcf3 100644 --- a/noncore/unsupported/qpdf/qpdf.cpp +++ b/noncore/unsupported/qpdf/qpdf.cpp @@ -502,17 +502,17 @@ void QPdfDlg::openFile ( const DocLnk &f ) m_doc = 0; m_currentdoc = QString::null; } updateCaption ( ); } else - QMessageBox::warning ( this, tr( "Error" ), tr( "File does not exist !" )); + QMessageBox::warning ( this, tr( "Error" ), tr( "File does not exist!" )); } void QPdfDlg::setDocument ( const QString &f ) { if ( f. find ( ".desktop", 0, true ) == -1 ) openFile ( f ); else openFile ( DocLnk ( f )); |