⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osdhandler.cc

📁 Linux下比较早的基于命令行的DVD播放器
💻 CC
字号:
//// Copyright (c) 2005 by Istv醤 V醨adi//// This file is part of dxr3Player, a DVD player written specifically // for the DXR3 (aka Hollywood+) decoder card.// 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.//// This program 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//------------------------------------------------------------------------------#include "OSDHandler.h"#include "output/unichrome/osd/DVDInfoFrame.h"#include "output/unichrome/osd/VolumeFrame.h"#include "output/osd/DVDPosition.h"#include "unichrome/Unichrome.h"#include "unichrome/Icon.h"#include "unichrome/Font.h"#include "unichrome/MemoryBlock.h"#include "unichrome/LogicalWindow.h"#include "util/Util.h"#include "util/Config.h"//------------------------------------------------------------------------------using output::unichrome::OSDHandler;using output::unichrome::osd::Frame;using output::unichrome::osd::DVDInfoFrame;using output::unichrome::osd::VolumeFrame;using output::unichrome::osd::RoundedField;using output::osd::DVDPosition;using output::osd::SimpleCommand;using unichrome::Unichrome;using unichrome::Icon;using unichrome::Font;using unichrome::Window;using unichrome::LogicalWindow;//------------------------------------------------------------------------------OSDHandler::OSDHandler(Unichrome& videoDevice) :    CommandBasedOSDHandler("output::unichrome::OSDHandler"),    videoDevice(videoDevice),    normalFont(videoDevice, "normal.fnt", Config::get().dataDirectory),    dvdInfoFrame(0),    volumeFrame(0),    frameTimeouts(2){}//------------------------------------------------------------------------------OSDHandler::~OSDHandler(){}//------------------------------------------------------------------------------void OSDHandler::disableDVDInfo(){    CommandBasedOSDHandler::disableDVDInfo();    dvdInfoFrame->hide();    dvdInfoFrame->resetFireTime();    videoDevice.flush();}//------------------------------------------------------------------------------void OSDHandler::run(){    Frame::Config frameConfig(videoDevice, normalFont);    RoundedField::Config numericFieldConfig(videoDevice, normalFont,                                             fieldBackgroundColor, "0123456789:/");    RoundedField::Config capitalFieldConfig(videoDevice, normalFont,                                             fieldBackgroundColor, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");    Window& mainWindow = videoDevice.getFrameBufferWindow();    char iconDirectory[256];    snprintf(iconDirectory, sizeof(iconDirectory),             "%s/icons", Config::get().dataDirectory);        dvdInfoFrame =         new DVDInfoFrame(frameConfig, mainWindow,                          numericFieldConfig, capitalFieldConfig,                         iconDirectory);    dvdInfoFrame->setDisplayPosition((mainWindow.getWidth() - DVDInfoFrame::width) / 2,                                     mainWindow.getHeight() - DVDInfoFrame::height -                                      DVDInfoFrame::bottomOffset);    frameTimeouts.setTimeout(1, dvdInfoFrame);        volumeFrame = new VolumeFrame(frameConfig, mainWindow, numericFieldConfig);    volumeFrame->setDisplayPosition((mainWindow.getWidth() - VolumeFrame::width) / 2,                                    mainWindow.getHeight() - VolumeFrame::height -                                     VolumeFrame::bottomOffset);    frameTimeouts.setTimeout(0, volumeFrame);    videoDevice.flush();        CommandBasedOSDHandler::run();}//------------------------------------------------------------------------------void OSDHandler::handleUpdateDVDPosition(const DVDPosition& dvdPosition){    dvdInfoFrame->setPosition(dvdPosition);}//------------------------------------------------------------------------------void OSDHandler::handleUpdateDVDLanguages(unsigned audioLanguageCode,                                          unsigned spuLanguageCode){    dvdInfoFrame->setLanguages(audioLanguageCode, spuLanguageCode);}//------------------------------------------------------------------------------void OSDHandler::handleUpdateVolume(unsigned volume){    volumeFrame->setVolume(volume);    showVolumeFrame(Util::currentTimeMillis() + 5000);}//------------------------------------------------------------------------------void OSDHandler::handleSimpleCommand(SimpleCommand::type_t type){    switch(type) {      case SimpleCommand::SHOW:        if (dvdInfoFrame->isVisible()) {            if (dvdInfoFrame->getFireTime()==INVALID_MILLIS) {                dvdInfoFrame->hide();            } else {                dvdInfoFrame->resetFireTime();             }        } else {            showDVDInfoFrame(Util::currentTimeMillis() + 5000);        }        break;      case SimpleCommand::PLAYMODE_PLAY:        dvdInfoFrame->setPlayMode(FORWARD);        showDVDInfoFrame(Util::currentTimeMillis() + 5000);        break;      case SimpleCommand::PLAYMODE_PAUSE:        dvdInfoFrame->setPlayMode(PAUSED);        showDVDInfoFrame(INVALID_MILLIS);        break;      case SimpleCommand::PLAYMODE_FAST_FORWARD_1:        dvdInfoFrame->setPlayMode(FAST_FORWARD_1);        showDVDInfoFrame(INVALID_MILLIS);        break;      case SimpleCommand::PLAYMODE_FAST_FORWARD_2:        dvdInfoFrame->setPlayMode(FAST_FORWARD_2);        showDVDInfoFrame(INVALID_MILLIS);        break;      case SimpleCommand::PLAYMODE_FAST_FORWARD_3:        dvdInfoFrame->setPlayMode(FAST_FORWARD_3);        showDVDInfoFrame(INVALID_MILLIS);        break;      case SimpleCommand::PLAYMODE_FAST_BACKWARD_1:        dvdInfoFrame->setPlayMode(FAST_BACKWARD_1);        showDVDInfoFrame(INVALID_MILLIS);        break;      case SimpleCommand::PLAYMODE_FAST_BACKWARD_2:        dvdInfoFrame->setPlayMode(FAST_BACKWARD_2);        showDVDInfoFrame(INVALID_MILLIS);        break;      case SimpleCommand::PLAYMODE_FAST_BACKWARD_3:        dvdInfoFrame->setPlayMode(FAST_BACKWARD_3);        showDVDInfoFrame(INVALID_MILLIS);        break;    }}//------------------------------------------------------------------------------millis_t OSDHandler::finalizeUpdates(){    millis_t nextTime = frameTimeouts.fire(Util::currentTimeMillis());    if (dvdInfoFrame->isVisible()) dvdInfoFrame->show();    if (volumeFrame->isVisible()) volumeFrame->show();    videoDevice.flush();    return nextTime;}//------------------------------------------------------------------------------millis_t OSDHandler::handleTimeout(){    millis_t nextTime = frameTimeouts.fire(Util::currentTimeMillis());    videoDevice.flush();    return nextTime;}//------------------------------------------------------------------------------void OSDHandler::showDVDInfoFrame(millis_t timeout){    if (!dvdInfoEnabled) return;    if (!dvdInfoFrame->isVisible()) {        if (volumeFrame->isVisible() &&             volumeFrame->getDisplayY() >= dvdInfoFrame->getDisplayY())        {            volumeFrame->hide();            volumeFrame->resetFireTime();        }    }    dvdInfoFrame->show();    dvdInfoFrame->setFireTime(timeout);}//------------------------------------------------------------------------------void OSDHandler::showVolumeFrame(millis_t timeout){    if (!volumeFrame->isVisible()) {        size_t y = 0;        if (dvdInfoFrame->isVisible()) {            y = dvdInfoFrame->getDisplayY() - VolumeFrame::height - 10;        } else {            Window& mainWindow = videoDevice.getFrameBufferWindow();            y = mainWindow.getHeight() - VolumeFrame::height -                 VolumeFrame::bottomOffset;        }        volumeFrame->setDisplayPosition(volumeFrame->getDisplayX(), y);    }    volumeFrame->show();    volumeFrame->setFireTime(timeout);}//------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -