diff --git a/desmume/src/GPU_osd.cpp b/desmume/src/GPU_osd.cpp index 7853b428d..cd876a425 100644 --- a/desmume/src/GPU_osd.cpp +++ b/desmume/src/GPU_osd.cpp @@ -562,9 +562,8 @@ void DrawHUD() if (CommonSettings.hud.ShowRTC) { - DateTime tm = rtcGetTime(); - static const char *wday[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; - osd->addFixed(Hud.RTCDisplay.x, Hud.RTCDisplay.y, "%04d-%03s-%02d %s %02d:%02d:%02d", tm.get_Year(), DateTime::GetNameOfMonth(tm.get_Month()), tm.get_Day(), wday[tm.get_DayOfWeek()%7], tm.get_Hour(), tm.get_Minute(), tm.get_Second()); + rtcGetTimeAsString(Hud.rtcString); + osd->addFixed(Hud.RTCDisplay.x, Hud.RTCDisplay.y, Hud.rtcString); } DrawStateSlots(); diff --git a/desmume/src/GPU_osd.h b/desmume/src/GPU_osd.h index 6a63dfa40..1ada7c20a 100644 --- a/desmume/src/GPU_osd.h +++ b/desmume/src/GPU_osd.h @@ -55,6 +55,7 @@ public: fps3d = 0; cpuload[0] = cpuload[1] = 0; cpuloopIterationCount = 0; + memset(rtcString, 0, sizeof(rtcString)); clicked = false; } @@ -72,6 +73,7 @@ public: void reset(); int fps, fps3d, cpuload[2], cpuloopIterationCount; + char rtcString[25]; bool clicked; }; diff --git a/desmume/src/cocoa/OGLDisplayOutput.cpp b/desmume/src/cocoa/OGLDisplayOutput.cpp index 37146702d..d6c5fca04 100644 --- a/desmume/src/cocoa/OGLDisplayOutput.cpp +++ b/desmume/src/cocoa/OGLDisplayOutput.cpp @@ -5708,11 +5708,13 @@ OGLHUDLayer::OGLHUDLayer(OGLVideoOutput *oglVO) _showRender3DFPS = false; _showFrameIndex = false; _showLagFrameCount = false; + _showRTC = false; _lastVideoFPS = 0; _lastRender3DFPS = 0; _lastFrameIndex = 0; _lastLagFrameCount = 0; + memset(_lastRTCString, 0, sizeof(_lastRTCString)); _textBoxLines = 0; _textBoxWidth = 0; @@ -5921,12 +5923,13 @@ void OGLHUDLayer::SetFontUsingPath(const char *filePath) glBindTexture(GL_TEXTURE_2D, 0); } -void OGLHUDLayer::SetInfo(const uint32_t videoFPS, const uint32_t render3DFPS, const uint32_t frameIndex, const uint32_t lagFrameCount) +void OGLHUDLayer::SetInfo(const uint32_t videoFPS, const uint32_t render3DFPS, const uint32_t frameIndex, const uint32_t lagFrameCount, const char *rtcString) { this->_lastVideoFPS = videoFPS; this->_lastRender3DFPS = render3DFPS; this->_lastFrameIndex = frameIndex; this->_lastLagFrameCount = lagFrameCount; + memcpy(this->_lastRTCString, rtcString, sizeof(this->_lastRTCString)); this->RefreshInfo(); } @@ -5978,6 +5981,17 @@ void OGLHUDLayer::RefreshInfo() } } + if (this->_showRTC) + { + ss << "RTC: " << this->_lastRTCString << "\n"; + + const GLint newTextBoxWidth = (charSize * 10.3f) + 6.5f; + if (newTextBoxWidth > this->_textBoxWidth) + { + this->_textBoxWidth = newTextBoxWidth; + } + } + this->_statusString = ss.str(); } @@ -6042,6 +6056,16 @@ bool OGLHUDLayer::GetShowLagFrameCount() const return this->_showLagFrameCount; } +void OGLHUDLayer::SetShowRTC(const bool visibleState) +{ + this->_SetShowInfoItemOGL(this->_showRTC, visibleState); +} + +bool OGLHUDLayer::GetShowRTC() const +{ + return this->_showRTC; +} + void OGLHUDLayer::_ProcessVerticesOGL() { if (this->_textBoxLines <= 0) diff --git a/desmume/src/cocoa/OGLDisplayOutput.h b/desmume/src/cocoa/OGLDisplayOutput.h index a3c3a7da6..973d129b5 100644 --- a/desmume/src/cocoa/OGLDisplayOutput.h +++ b/desmume/src/cocoa/OGLDisplayOutput.h @@ -318,11 +318,13 @@ protected: bool _showRender3DFPS; bool _showFrameIndex; bool _showLagFrameCount; + bool _showRTC; uint32_t _lastVideoFPS; uint32_t _lastRender3DFPS; uint32_t _lastFrameIndex; uint32_t _lastLagFrameCount; + char _lastRTCString[25]; GLint _textBoxLines; GLint _textBoxWidth; @@ -336,7 +338,7 @@ public: void SetFontUsingPath(const char *filePath); - void SetInfo(const uint32_t videoFPS, const uint32_t render3DFPS, const uint32_t frameIndex, const uint32_t lagFrameCount); + void SetInfo(const uint32_t videoFPS, const uint32_t render3DFPS, const uint32_t frameIndex, const uint32_t lagFrameCount, const char *rtcString); void RefreshInfo(); void SetShowVideoFPS(const bool visibleState); @@ -347,6 +349,8 @@ public: bool GetShowFrameIndex() const; void SetShowLagFrameCount(const bool visibleState); bool GetShowLagFrameCount() const; + void SetShowRTC(const bool visibleState); + bool GetShowRTC() const; virtual void SetViewportSizeOGL(GLsizei w, GLsizei h); virtual void ProcessOGL(); diff --git a/desmume/src/cocoa/cocoa_core.h b/desmume/src/cocoa/cocoa_core.h index 7e16e4ef6..b39e0b5bd 100644 --- a/desmume/src/cocoa/cocoa_core.h +++ b/desmume/src/cocoa/cocoa_core.h @@ -52,6 +52,7 @@ struct NDSFrameInfo uint32_t render3DFPS; uint32_t frameIndex; uint32_t lagFrameCount; + char rtcString[25]; }; typedef struct NDSFrameInfo NDSFrameInfo; diff --git a/desmume/src/cocoa/cocoa_output.mm b/desmume/src/cocoa/cocoa_output.mm index 718ff7dfd..a321cbbb1 100644 --- a/desmume/src/cocoa/cocoa_output.mm +++ b/desmume/src/cocoa/cocoa_output.mm @@ -29,6 +29,7 @@ #include "../SPU.h" #include "../movie.h" #include "../metaspu/metaspu.h" +#include "../rtc.h" #import @@ -832,6 +833,7 @@ frameInfo.render3DFPS = Render3DFramesPerSecond; frameInfo.frameIndex = currFrameCounter; frameInfo.lagFrameCount = TotalLagFrames; + rtcGetTimeAsString(frameInfo.rtcString); [(id)delegate doProcessVideoFrameWithInfo:frameInfo]; } diff --git a/desmume/src/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/cocoa/translations/English.lproj/MainMenu.xib index 677130e81..e149463dd 100644 --- a/desmume/src/cocoa/translations/English.lproj/MainMenu.xib +++ b/desmume/src/cocoa/translations/English.lproj/MainMenu.xib @@ -13,7 +13,7 @@ YES - + YES @@ -1671,7 +1671,6 @@ - YES Real-Time Clock 2147483647 @@ -5842,7 +5841,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 _NS:682 YES - -2080374784 + 67108864 0 Enable Heads-Up Display @@ -5892,7 +5891,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 _NS:682 YES - -2080374784 + 67108864 0 Show 3D Renderer FPS @@ -5917,7 +5916,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 _NS:682 YES - -2080374784 + 67108864 0 Show Frame Index @@ -5942,7 +5941,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 _NS:682 YES - -2080374784 + 67108864 0 Show Lag Counter @@ -5992,7 +5991,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 _NS:682 YES - 603979776 + 67108864 0 Show Real Time Clock @@ -21054,7 +21053,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 YES - 603979776 + 67108864 131072 Real Time Clock @@ -29814,6 +29813,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 mainWindow.view.isHUDRender3DFPSVisible mainWindow.view.isHUDFrameIndexVisible mainWindow.view.isHUDLagFrameCountVisible + mainWindow.view.isHUDRealTimeClockVisible EmuControllerDelegate @@ -30083,6 +30083,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 YES + + YES + HUD_ShowRTC + YES @@ -42648,6 +42652,46 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10186 + + + value: selection.mainWindow.view.isHUDRealTimeClockVisible + + + + + + value: selection.mainWindow.view.isHUDRealTimeClockVisible + value + selection.mainWindow.view.isHUDRealTimeClockVisible + 2 + + + 10187 + + + + value: values.HUD_ShowRTC + + + + + + value: values.HUD_ShowRTC + value + values.HUD_ShowRTC + 2 + + + 10188 + + + + toggleShowHUDRealTimeClock: + + + + 10189 + @@ -43180,14 +43224,14 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 YES - - + + @@ -57617,9 +57661,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - - + + @@ -62905,7 +62949,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - P4AAAL+AAABBkAAAwsYAAA + P4AAAL+AAABBgAAAwsYAAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -62944,7 +62988,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - P4AAAL+AAABBkAAAwmwAAA + P4AAAL+AAABBgAAAwmwAAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -63708,7 +63752,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - 10186 + 10189 @@ -67079,7 +67123,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 YES - + ../../DeSmuME (XCode 3).xcodeproj 3 YES diff --git a/desmume/src/cocoa/userinterface/DisplayWindowController.h b/desmume/src/cocoa/userinterface/DisplayWindowController.h index 54f5c3940..6fce7a689 100644 --- a/desmume/src/cocoa/userinterface/DisplayWindowController.h +++ b/desmume/src/cocoa/userinterface/DisplayWindowController.h @@ -60,6 +60,7 @@ class OGLVideoOutput; @property (assign) BOOL isHUDRender3DFPSVisible; @property (assign) BOOL isHUDFrameIndexVisible; @property (assign) BOOL isHUDLagFrameCountVisible; +@property (assign) BOOL isHUDRealTimeClockVisible; @property (assign) BOOL useVerticalSync; @property (assign) BOOL videoFiltersPreferGPU; @property (assign) BOOL sourceDeposterize; diff --git a/desmume/src/cocoa/userinterface/DisplayWindowController.mm b/desmume/src/cocoa/userinterface/DisplayWindowController.mm index a45b7a7b8..96a8dc613 100644 --- a/desmume/src/cocoa/userinterface/DisplayWindowController.mm +++ b/desmume/src/cocoa/userinterface/DisplayWindowController.mm @@ -494,9 +494,9 @@ static std::unordered_map _screenMap; // [[self view] setIsHUDRender3DFPSVisible:[[NSUserDefaults standardUserDefaults] boolForKey:@"HUD_ShowRender3DFPS"]]; [[self view] setIsHUDFrameIndexVisible:[[NSUserDefaults standardUserDefaults] boolForKey:@"HUD_ShowFrameIndex"]]; [[self view] setIsHUDLagFrameCountVisible:[[NSUserDefaults standardUserDefaults] boolForKey:@"HUD_ShowLagFrameCount"]]; - // TODO: Show HUD Input and RTC. + [[self view] setIsHUDRealTimeClockVisible:[[NSUserDefaults standardUserDefaults] boolForKey:@"HUD_ShowRTC"]]; + // TODO: Show HUD Input. //[[self view] setIsHUDInputVisible:[[NSUserDefaults standardUserDefaults] boolForKey:@"HUD_ShowInput"]]; - //[[self view] setIsHUDRealTimeClockVisible:[[NSUserDefaults standardUserDefaults] boolForKey:@"HUD_ShowRTC"]]; } - (NSSize) normalSize @@ -742,7 +742,7 @@ static std::unordered_map _screenMap; // - (IBAction) toggleShowHUDRealTimeClock:(id)sender { - //[[self view] setIsHUDRealTimeClockVisible:![[self view] isHUDRealTimeClockVisible]]; + [[self view] setIsHUDRealTimeClockVisible:![[self view] isHUDRealTimeClockVisible]]; } - (IBAction) toggleKeepMinDisplaySizeAtNormal:(id)sender @@ -935,9 +935,9 @@ static std::unordered_map _screenMap; // [[NSUserDefaults standardUserDefaults] setBool:[[self view] isHUDRender3DFPSVisible] forKey:@"HUD_ShowRender3DFPS"]; [[NSUserDefaults standardUserDefaults] setBool:[[self view] isHUDFrameIndexVisible] forKey:@"HUD_ShowFrameIndex"]; [[NSUserDefaults standardUserDefaults] setBool:[[self view] isHUDLagFrameCountVisible] forKey:@"HUD_ShowLagFrameCount"]; - // TODO: Show HUD Input and RTC. + [[NSUserDefaults standardUserDefaults] setBool:[[self view] isHUDRealTimeClockVisible] forKey:@"HUD_ShowRTC"]; + // TODO: Show HUD Input. //[[NSUserDefaults standardUserDefaults] setBool:[[self view] isHUDInputVisible] forKey:@"HUD_ShowInput"]; - //[[NSUserDefaults standardUserDefaults] setBool:[[self view] isHUDRealTimeClockVisible] forKey:@"HUD_ShowRTC"]; } - (IBAction) writeDefaultsDisplayVideoSettings:(id)sender @@ -1122,6 +1122,13 @@ static std::unordered_map _screenMap; // [(NSMenuItem *)theItem setState:([[self view] isHUDLagFrameCountVisible]) ? NSOnState : NSOffState]; } } + else if (theAction == @selector(toggleShowHUDRealTimeClock:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + [(NSMenuItem *)theItem setState:([[self view] isHUDRealTimeClockVisible]) ? NSOnState : NSOffState]; + } + } else if (theAction == @selector(toggleStatusBar:)) { if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) @@ -1371,6 +1378,7 @@ static std::unordered_map _screenMap; // @dynamic isHUDRender3DFPSVisible; @dynamic isHUDFrameIndexVisible; @dynamic isHUDLagFrameCountVisible; +@dynamic isHUDRealTimeClockVisible; @dynamic useVerticalSync; @dynamic videoFiltersPreferGPU; @dynamic sourceDeposterize; @@ -1585,6 +1593,28 @@ static std::unordered_map _screenMap; // return theState; } +- (void) setIsHUDRealTimeClockVisible:(BOOL)theState +{ + OSSpinLockLock(&spinlockIsHUDVisible); + + CGLLockContext(cglDisplayContext); + CGLSetCurrentContext(cglDisplayContext); + oglv->GetHUDLayer()->SetShowRTC((theState) ? true : false); + [self drawVideoFrame]; + CGLUnlockContext(cglDisplayContext); + + OSSpinLockUnlock(&spinlockIsHUDVisible); +} + +- (BOOL) isHUDRealTimeClockVisible +{ + OSSpinLockLock(&spinlockIsHUDVisible); + const BOOL theState = (oglv->GetHUDLayer()->GetShowRTC()) ? YES : NO; + OSSpinLockUnlock(&spinlockIsHUDVisible); + + return theState; +} + - (void) setUseVerticalSync:(BOOL)theState { OSSpinLockLock(&spinlockUseVerticalSync); @@ -2045,7 +2075,8 @@ static std::unordered_map _screenMap; // hudLayer->SetInfo(frameInfo.videoFPS, frameInfo.render3DFPS, frameInfo.frameIndex, - frameInfo.lagFrameCount); + frameInfo.lagFrameCount, + frameInfo.rtcString); hudLayer->ProcessOGL(); } diff --git a/desmume/src/cocoa/userinterface/appDelegate.mm b/desmume/src/cocoa/userinterface/appDelegate.mm index 116f007ee..3dca10d2d 100644 --- a/desmume/src/cocoa/userinterface/appDelegate.mm +++ b/desmume/src/cocoa/userinterface/appDelegate.mm @@ -632,9 +632,9 @@ const BOOL hudShowRender3DFPS = [(NSNumber *)[windowProperties valueForKey:@"hudShowRender3DFPS"] boolValue]; const BOOL hudShowFrameIndex = [(NSNumber *)[windowProperties valueForKey:@"hudShowFrameIndex"] boolValue]; const BOOL hudShowLagFrameCount = [(NSNumber *)[windowProperties valueForKey:@"hudShowLagFrameCount"] boolValue]; - // TODO: Show HUD Input and RTC. + const BOOL hudShowRTC = [(NSNumber *)[windowProperties valueForKey:@"hudShowRTC"] boolValue]; + // TODO: Show HUD Input. //const BOOL hudShowInput = [(NSNumber *)[windowProperties valueForKey:@"hudShowInput"] boolValue]; - //const BOOL hudShowRTC = [(NSNumber *)[windowProperties valueForKey:@"hudShowRTC"] boolValue]; const NSInteger screenshotFileFormat = [(NSNumber *)[windowProperties valueForKey:@"screenshotFileFormat"] integerValue]; const BOOL useVerticalSync = [(NSNumber *)[windowProperties valueForKey:@"useVerticalSync"] boolValue]; @@ -670,6 +670,7 @@ [[windowController view] setIsHUDRender3DFPSVisible:hudShowRender3DFPS]; [[windowController view] setIsHUDFrameIndexVisible:hudShowFrameIndex]; [[windowController view] setIsHUDLagFrameCountVisible:hudShowLagFrameCount]; + [[windowController view] setIsHUDRealTimeClockVisible:hudShowRTC]; [[windowController masterWindow] setFrameOrigin:NSMakePoint(frameX, frameY)]; @@ -741,6 +742,7 @@ [NSNumber numberWithBool:[[windowController view] isHUDRender3DFPSVisible]], @"hudShowRender3DFPS", [NSNumber numberWithBool:[[windowController view] isHUDFrameIndexVisible]], @"hudShowFrameIndex", [NSNumber numberWithBool:[[windowController view] isHUDLagFrameCountVisible]], @"hudShowLagFrameCount", + [NSNumber numberWithBool:[[windowController view] isHUDRealTimeClockVisible]], @"hudShowRTC", [NSNumber numberWithBool:[windowController isMinSizeNormal]], @"isMinSizeNormal", [NSNumber numberWithBool:[windowController isShowingStatusBar]], @"isShowingStatusBar", [NSNumber numberWithBool:isInFullScreenMode], @"isInFullScreenMode", @@ -748,9 +750,8 @@ windowFrameStr, @"windowFrame", nil]; - // TODO: Show HUD Input and RTC. + // TODO: Show HUD Input. //[NSNumber numberWithBool:[[windowController view] isHUDInputVisible]], @"hudShowInput", - //[NSNumber numberWithBool:[[windowController view] isHUDRealTimeClockVisible]], @"hudShowRTC", [windowPropertiesList addObject:windowProperties]; } diff --git a/desmume/src/rtc.cpp b/desmume/src/rtc.cpp index 077d9b734..2f5eac80c 100644 --- a/desmume/src/rtc.cpp +++ b/desmume/src/rtc.cpp @@ -116,6 +116,21 @@ DateTime rtcGetTime(void) } } +void rtcGetTimeAsString(char *buffer) +{ + static const char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; + + const DateTime rtcTime = rtcGetTime(); + snprintf(buffer, 25, "%04d-%3s-%02d %s %02d:%02d:%02d", + rtcTime.get_Year(), + DateTime::GetNameOfMonth(rtcTime.get_Month()), + rtcTime.get_Day(), + wday[rtcTime.get_DayOfWeek()%7], + rtcTime.get_Hour(), + rtcTime.get_Minute(), + rtcTime.get_Second()); +} + static void rtcRecv() { //INFO("RTC Read command 0x%02X\n", (rtc.cmd >> 1)); diff --git a/desmume/src/rtc.h b/desmume/src/rtc.h index c2762f766..1872c6d96 100644 --- a/desmume/src/rtc.h +++ b/desmume/src/rtc.h @@ -25,6 +25,7 @@ #include "utils/datetime.h" DateTime rtcGetTime(void); +void rtcGetTimeAsString(char *buffer); extern void rtcInit(); extern u16 rtcRead();