📄 dvdinfoframe.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 "DVDInfoFrame.h"#include "output/osd/DVDPosition.h"#include "util/Util.h"#include <cstdio>//------------------------------------------------------------------------------using output::unichrome::osd::DVDInfoFrame;using output::osd::DVDPosition;using unichrome::Icon;using unichrome::Window;//------------------------------------------------------------------------------DVDInfoFrame::DVDInfoFrame(Config& config, Window& displayWindow, RoundedField::Config& numericFieldConfig, RoundedField::Config& capitalFieldConfig, const char* iconDirectory) : Frame(config, displayWindow, width, height, "DVD", backgroundColor), iconDirectory(strdup(iconDirectory)), titleIcon(config.videoDevice, "title.ico", iconDirectory, 0x20), chapterIcon(config.videoDevice, "chapter.ico", iconDirectory, 0x20), audioLanguageIcon(config.videoDevice, "audioLanguage.ico", iconDirectory, 0x20), spuLanguageIcon(config.videoDevice, "spuLanguage.ico", iconDirectory, 0x20), playModePlayIcon(config.videoDevice, "play.ico", iconDirectory, config.alpha), playModePauseIcon(config.videoDevice, "pause.ico", iconDirectory, config.alpha), playModeFF1Icon(config.videoDevice, "ff1.ico", iconDirectory, config.alpha), playModeFF2Icon(config.videoDevice, "ff2.ico", iconDirectory, config.alpha), playModeFF3Icon(config.videoDevice, "ff3.ico", iconDirectory, config.alpha), playModeREW1Icon(config.videoDevice, "rew1.ico", iconDirectory, config.alpha), playModeREW2Icon(config.videoDevice, "rew2.ico", iconDirectory, config.alpha), playModeREW3Icon(config.videoDevice, "rew3.ico", iconDirectory, config.alpha), titleField(numericFieldConfig, *innerWindow, 35, 10, 100, titleIcon, fieldValueColor), chapterField(numericFieldConfig, *innerWindow, 190, 10, 100, chapterIcon, fieldValueColor), audioLanguageField(capitalFieldConfig, *innerWindow, 35, 50, 100, audioLanguageIcon, fieldValueColor), spuLanguageField(capitalFieldConfig, *innerWindow, 190, 50, 100, spuLanguageIcon, fieldValueColor), progressWindow(*innerWindow, numericFieldConfig, 35, 90, width - 2*35, fieldValueColor, progressBarColor, (((uint32_t)config.alpha)<<24)|backgroundColor), playModeWindow(*innerWindow, 400, 10, 61, 61), currentPosition(0, 0, 0, 0, 0), currentAudioLanguageCode(0xffff), currentSPULanguageCode(0xffff), currentPlayMode(FORWARD){ titleField.setValue("-", true); chapterField.setValue("-", true); audioLanguageField.setValue("-", true); spuLanguageField.setValue("-", true); playModePlayIcon.display(playModeWindow, 0, 0);}//------------------------------------------------------------------------------DVDInfoFrame::~DVDInfoFrame(){ free(iconDirectory);}//------------------------------------------------------------------------------void DVDInfoFrame::setPosition(const DVDPosition& dvdPosition){ setPosition(titleField, currentPosition.titleNumber, dvdPosition.titleNumber); setPosition(chapterField, currentPosition.partNumber, dvdPosition.partNumber); if (dvdPosition.playedFrames!=currentPosition.playedFrames || dvdPosition.totalFrames!=currentPosition.totalFrames || dvdPosition.fps!=currentPosition.fps) { progressWindow.setValue(dvdPosition.playedFrames, dvdPosition.totalFrames, dvdPosition.fps); currentPosition.playedFrames = dvdPosition.playedFrames; currentPosition.totalFrames = dvdPosition.totalFrames; currentPosition.fps = dvdPosition.fps; }}//------------------------------------------------------------------------------void DVDInfoFrame::setLanguages(unsigned audioLanguageCode, unsigned spuLanguageCode){ setLanguageCode(audioLanguageField, currentAudioLanguageCode, audioLanguageCode); setLanguageCode(spuLanguageField, currentSPULanguageCode, spuLanguageCode);}//------------------------------------------------------------------------------void DVDInfoFrame::setPlayMode(playMode_t playMode){ if (playMode==currentPlayMode) return; Icon* playModeIcon = 0; switch(playMode) { case FORWARD: playModeIcon = &playModePlayIcon; break; case PAUSED: playModeIcon = &playModePauseIcon; break; case FAST_FORWARD_1: playModeIcon = &playModeFF1Icon; break; case FAST_FORWARD_2: playModeIcon = &playModeFF2Icon; break; case FAST_FORWARD_3: playModeIcon = &playModeFF3Icon; break; case FAST_BACKWARD_1: playModeIcon = &playModeREW1Icon; break; case FAST_BACKWARD_2: playModeIcon = &playModeREW2Icon; break; case FAST_BACKWARD_3: playModeIcon = &playModeREW3Icon; break; } if (playModeIcon!=0) { uint32_t bgColor = config.alpha; bgColor <<= 24; bgColor |= backgroundColor & 0x00ffffff; playModeWindow.fill(bgColor); playModeIcon->display(playModeWindow, 0, 0); } currentPlayMode = playMode;}//------------------------------------------------------------------------------void DVDInfoFrame::setPosition(IconField& positionField, unsigned& currentPosition, unsigned newPosition){ static const char* noPositionValue = "-"; if (newPosition==currentPosition) return; if (newPosition==0) { positionField.setValue(noPositionValue, true); } else { char buf[8]; snprintf(buf, sizeof(buf), "%u", newPosition); positionField.setValue(buf, true); } currentPosition = newPosition;}//------------------------------------------------------------------------------void DVDInfoFrame::setLanguageCode(IconField& languageField, unsigned& currentCode, unsigned newCode){ static const char* noLanguageValue = "-"; if (newCode==currentCode) return; if (newCode==0xffff) { languageField.setValue(noLanguageValue, true); } else { char code0 = (newCode>>8)&0xff; if (code0>='a' && code0<='z') code0 -= 'a' - 'A'; char code1 = (newCode>>0)&0xff; if (code1>='a' && code1<='z') code1 -= 'a' - 'A'; char flagIconName[256]; snprintf(flagIconName, sizeof(flagIconName), "%s/flag_%c%c.ico", iconDirectory, code0, code1); FILE* iconFile = fopen(flagIconName, "rb"); if (iconFile!=0) { Icon flagIcon(config.videoDevice, iconFile, config.alpha); fclose(iconFile); languageField.setValue(flagIcon, true); config.videoDevice.flush(); } else { char buf[3] = { code0, code1, '\0' }; languageField.setValue(buf, true); } } currentCode = newCode;}//------------------------------------------------------------------------------//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -