diff --git a/desmume/src/frontend/cocoa/ClientDisplayView.cpp b/desmume/src/frontend/cocoa/ClientDisplayView.cpp index de73f8790..708e7b9e7 100644 --- a/desmume/src/frontend/cocoa/ClientDisplayView.cpp +++ b/desmume/src/frontend/cocoa/ClientDisplayView.cpp @@ -481,6 +481,16 @@ void ClientDisplayView::ClearHUDNeedsUpdate() } // NDS GPU Interface +void ClientDisplayView::_FetchNativeDisplayByID(const NDSDisplayID displayID) +{ + // Do nothing. This is implementation dependent. +} + +void ClientDisplayView::_FetchCustomDisplayByID(const NDSDisplayID displayID) +{ + // Do nothing. This is implementation dependent. +} + void ClientDisplayView::_LoadNativeDisplayByID(const NDSDisplayID displayID) { // Do nothing. This is implementation dependent. @@ -491,6 +501,36 @@ void ClientDisplayView::_LoadCustomDisplayByID(const NDSDisplayID displayID) // Do nothing. This is implementation dependent. } +void ClientDisplayView::FetchDisplays() +{ + const bool loadMainScreen = this->_emuDisplayInfo.isDisplayEnabled[NDSDisplayID_Main] && ((this->_renderProperty.mode == ClientDisplayMode_Main) || (this->_renderProperty.mode == ClientDisplayMode_Dual)); + const bool loadTouchScreen = this->_emuDisplayInfo.isDisplayEnabled[NDSDisplayID_Touch] && ((this->_renderProperty.mode == ClientDisplayMode_Touch) || (this->_renderProperty.mode == ClientDisplayMode_Dual)); + + if (loadMainScreen) + { + if (!this->_emuDisplayInfo.didPerformCustomRender[NDSDisplayID_Main]) + { + this->_FetchNativeDisplayByID(NDSDisplayID_Main); + } + else + { + this->_FetchCustomDisplayByID(NDSDisplayID_Main); + } + } + + if (loadTouchScreen) + { + if (!this->_emuDisplayInfo.didPerformCustomRender[NDSDisplayID_Touch]) + { + this->_FetchNativeDisplayByID(NDSDisplayID_Touch); + } + else + { + this->_FetchCustomDisplayByID(NDSDisplayID_Touch); + } + } +} + void ClientDisplayView::LoadDisplays() { const bool loadMainScreen = this->_emuDisplayInfo.isDisplayEnabled[NDSDisplayID_Main] && ((this->_renderProperty.mode == ClientDisplayMode_Main) || (this->_renderProperty.mode == ClientDisplayMode_Dual)); @@ -536,7 +576,7 @@ const NDSDisplayInfo& ClientDisplayView::GetEmuDisplayInfo() const return this->_emuDisplayInfo; } -void ClientDisplayView::HandleGPUFrameEndEvent(const NDSDisplayInfo &ndsDisplayInfo) +void ClientDisplayView::SetEmuDisplayInfo(const NDSDisplayInfo &ndsDisplayInfo) { this->_emuDisplayInfo = ndsDisplayInfo; } diff --git a/desmume/src/frontend/cocoa/ClientDisplayView.h b/desmume/src/frontend/cocoa/ClientDisplayView.h index f5206305c..edcfc1c3a 100644 --- a/desmume/src/frontend/cocoa/ClientDisplayView.h +++ b/desmume/src/frontend/cocoa/ClientDisplayView.h @@ -27,6 +27,7 @@ #include FT_FREETYPE_H #define HUD_MAX_CHARACTERS 2048 +#define HUD_VERTEX_ATTRIBUTE_BUFFER_SIZE (sizeof(float) * HUD_MAX_CHARACTERS * (2 * 4)) #define HUD_TEXTBOX_BASEGLYPHSIZE 64.0 #define HUD_TEXTBOX_BASE_SCALE (1.0/3.0) #define HUD_TEXTBOX_MIN_SCALE 0.70 @@ -150,6 +151,8 @@ protected: virtual void _UpdateClientSize(); virtual void _UpdateViewScale(); + virtual void _FetchNativeDisplayByID(const NDSDisplayID displayID); + virtual void _FetchCustomDisplayByID(const NDSDisplayID displayID); virtual void _LoadNativeDisplayByID(const NDSDisplayID displayID); virtual void _LoadCustomDisplayByID(const NDSDisplayID displayID); @@ -215,6 +218,7 @@ public: void ClearHUDNeedsUpdate(); // Client view interface + virtual void FetchDisplays(); virtual void LoadDisplays(); virtual void ProcessDisplays(); virtual void UpdateView(); @@ -222,7 +226,7 @@ public: // Emulator interface const NDSDisplayInfo& GetEmuDisplayInfo() const; - virtual void HandleGPUFrameEndEvent(const NDSDisplayInfo &ndsDisplayInfo); + void SetEmuDisplayInfo(const NDSDisplayInfo &ndsDisplayInfo); virtual void HandleEmulatorFrameEndEvent(const NDSFrameInfo &frameInfo); // Touch screen input handling diff --git a/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj b/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj index 4aff9a4a0..50f55f513 100644 --- a/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj +++ b/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj @@ -5597,7 +5597,7 @@ ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-I./../../"; PRODUCT_NAME = "DeSmuME (Debug)"; - SDKROOT = macosx; + SDKROOT = ""; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; }; @@ -5651,7 +5651,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.5; OTHER_CFLAGS = "-I./../../"; PRODUCT_NAME = DeSmuME; - SDKROOT = macosx; + SDKROOT = ""; STRIP_INSTALLED_PRODUCT = NO; VALIDATE_PRODUCT = YES; }; diff --git a/desmume/src/frontend/cocoa/OGLDisplayOutput.cpp b/desmume/src/frontend/cocoa/OGLDisplayOutput.cpp index d3ab04061..0e8358970 100644 --- a/desmume/src/frontend/cocoa/OGLDisplayOutput.cpp +++ b/desmume/src/frontend/cocoa/OGLDisplayOutput.cpp @@ -4880,6 +4880,16 @@ void OGLVideoOutput::_UpdateViewport() } } +void OGLVideoOutput::_FetchNativeDisplayByID(const NDSDisplayID displayID) +{ + this->GetDisplayLayer()->CopyNativeDisplayByID_OGL(displayID); +} + +void OGLVideoOutput::_FetchCustomDisplayByID(const NDSDisplayID displayID) +{ + this->GetDisplayLayer()->CopyCustomDisplayByID_OGL(displayID); +} + void OGLVideoOutput::_LoadNativeDisplayByID(const NDSDisplayID displayID) { this->GetDisplayLayer()->LoadNativeDisplayByID_OGL(displayID); @@ -6137,10 +6147,6 @@ OGLHUDLayer::OGLHUDLayer(OGLVideoOutput *oglVO) _needUpdateViewport = true; _output = oglVO; - _glyphInfo = NULL; - _glyphSize = 0.0f; - _glyphTileSize = 0.0f; - if (_output->GetContextInfo()->IsShaderSupported()) { _program = new OGLShaderProgram; @@ -6236,10 +6242,6 @@ void OGLHUDLayer::CopyHUDFont(const FT_Face &fontFace, const size_t glyphSize, c { FT_Error error = FT_Err_Ok; - this->_glyphInfo = glyphInfo; - this->_glyphSize = (GLfloat)glyphSize; - this->_glyphTileSize = (GLfloat)glyphTileSize; - glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, this->_texCharMap); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); @@ -6548,7 +6550,7 @@ OGLDisplayLayer::OGLDisplayLayer(OGLVideoOutput *oglVO) shaderFilterProgram->SetVertexAndFragmentShaderOGL(Sample1x1_VertShader_110, PassthroughFragShader_110, _useShader150); } - UploadHQnxLUTs(); + _UploadHQnxLUTs(); } else { @@ -6600,7 +6602,7 @@ OGLDisplayLayer::~OGLDisplayLayer() _vfMasterDstBufferSize = 0; } -void OGLDisplayLayer::UploadHQnxLUTs() +void OGLDisplayLayer::_UploadHQnxLUTs() { InitHQnxLUTs(); @@ -6642,7 +6644,7 @@ void OGLDisplayLayer::UploadHQnxLUTs() glActiveTexture(GL_TEXTURE0); } -void OGLDisplayLayer::DetermineTextureStorageHints(GLint &videoSrcTexStorageHint, GLint &cpuFilterTexStorageHint) +void OGLDisplayLayer::_DetermineTextureStorageHints(GLint &videoSrcTexStorageHint, GLint &cpuFilterTexStorageHint) { const bool isUsingCPUPixelScaler = (this->_output->GetPixelScaler() != VideoFilterTypeID_None) && !this->_output->WillFilterOnGPU(); videoSrcTexStorageHint = GL_STORAGE_PRIVATE_APPLE; @@ -6691,12 +6693,12 @@ void OGLDisplayLayer::SetVideoBuffers(const uint32_t colorFormat, this->_videoColorFormat = glColorFormat; this->_videoSrcBufferHead = videoBufferHead; this->_videoSrcBufferSize = (GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT * 2 * pixelBytes) + (customWidth0 * customHeight0 * pixelBytes) + (customWidth1 * customHeight1 * pixelBytes); - this->_videoSrcNativeBuffer[0] = nativeBuffer0; - this->_videoSrcNativeBuffer[1] = nativeBuffer1; - this->_videoSrcCustomBuffer[0] = customBuffer0; - this->_videoSrcCustomBuffer[1] = customBuffer1; + this->_videoSrcNativeBuffer[0] = (void *)nativeBuffer0; + this->_videoSrcNativeBuffer[1] = (void *)nativeBuffer1; + this->_videoSrcCustomBuffer[0] = (void *)customBuffer0; + this->_videoSrcCustomBuffer[1] = (void *)customBuffer1; - this->DetermineTextureStorageHints(videoSrcTexStorageHint, cpuFilterTexStorageHint); + this->_DetermineTextureStorageHints(videoSrcTexStorageHint, cpuFilterTexStorageHint); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, this->_texCPUFilterDstID[0]); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_STORAGE_HINT_APPLE, cpuFilterTexStorageHint); @@ -6737,7 +6739,7 @@ void OGLDisplayLayer::SetFiltersPreferGPUOGL() { GLint videoSrcTexStorageHint = GL_STORAGE_PRIVATE_APPLE; GLint cpuFilterTexStorageHint = GL_STORAGE_PRIVATE_APPLE; - this->DetermineTextureStorageHints(videoSrcTexStorageHint, cpuFilterTexStorageHint); + this->_DetermineTextureStorageHints(videoSrcTexStorageHint, cpuFilterTexStorageHint); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, this->_texCPUFilterDstID[0]); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_STORAGE_HINT_APPLE, cpuFilterTexStorageHint); @@ -6791,7 +6793,7 @@ void OGLDisplayLayer::_UpdateVerticesOGL() this->_needUpdateVertices = false; } -void OGLDisplayLayer::ResizeCPUPixelScalerOGL(const size_t srcWidthMain, const size_t srcHeightMain, const size_t srcWidthTouch, const size_t srcHeightTouch, const size_t scaleMultiply, const size_t scaleDivide) +void OGLDisplayLayer::_ResizeCPUPixelScalerOGL(const size_t srcWidthMain, const size_t srcHeightMain, const size_t srcWidthTouch, const size_t srcHeightTouch, const size_t scaleMultiply, const size_t scaleDivide) { this->FinishOGL(); @@ -6808,7 +6810,7 @@ void OGLDisplayLayer::ResizeCPUPixelScalerOGL(const size_t srcWidthMain, const s GLint videoSrcTexStorageHint = GL_STORAGE_PRIVATE_APPLE; GLint cpuFilterTexStorageHint = GL_STORAGE_PRIVATE_APPLE; - this->DetermineTextureStorageHints(videoSrcTexStorageHint, cpuFilterTexStorageHint); + this->_DetermineTextureStorageHints(videoSrcTexStorageHint, cpuFilterTexStorageHint); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, this->_texCPUFilterDstID[0]); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_STORAGE_HINT_APPLE, cpuFilterTexStorageHint); @@ -7198,13 +7200,42 @@ void OGLDisplayLayer::SetCPUPixelScalerOGL(const VideoFilterTypeID filterID) if (oldDstBufferWidth != newDstBufferWidth || oldDstBufferHeight != newDstBufferHeight) { - this->ResizeCPUPixelScalerOGL(this->_vf[0]->GetSrcWidth(), this->_vf[0]->GetSrcHeight(), this->_vf[1]->GetSrcWidth(), this->_vf[1]->GetSrcHeight(), newFilterAttr.scaleMultiply, newFilterAttr.scaleDivide); + this->_ResizeCPUPixelScalerOGL(this->_vf[0]->GetSrcWidth(), this->_vf[0]->GetSrcHeight(), this->_vf[1]->GetSrcWidth(), this->_vf[1]->GetSrcHeight(), newFilterAttr.scaleMultiply, newFilterAttr.scaleDivide); } this->_vf[0]->ChangeFilterByID(filterID); this->_vf[1]->ChangeFilterByID(filterID); } +void OGLDisplayLayer::CopyNativeDisplayByID_OGL(const NDSDisplayID displayID) +{ + const NDSDisplayInfo &emuDisplayInfo = this->_output->GetEmuDisplayInfo(); + const bool useDeposterize = this->_output->GetSourceDeposterize(); + const bool isUsingCPUPixelScaler = (this->_output->GetPixelScaler() != VideoFilterTypeID_None) && !this->_output->WillFilterOnGPU(); + + if (!isUsingCPUPixelScaler || useDeposterize) + { + memcpy(this->_videoSrcNativeBuffer[displayID], emuDisplayInfo.nativeBuffer[displayID], GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT * emuDisplayInfo.pixelBytes); + } + else + { + if (this->_videoColorFormat == GL_UNSIGNED_SHORT_1_5_5_5_REV) + { + ColorspaceConvertBuffer555To8888Opaque((const uint16_t *)emuDisplayInfo.nativeBuffer[displayID], this->_vf[displayID]->GetSrcBufferPtr(), GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT); + } + else + { + ColorspaceConvertBuffer888XTo8888Opaque((const uint32_t *)emuDisplayInfo.nativeBuffer[displayID], this->_vf[displayID]->GetSrcBufferPtr(), GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT); + } + } +} + +void OGLDisplayLayer::CopyCustomDisplayByID_OGL(const NDSDisplayID displayID) +{ + const NDSDisplayInfo &emuDisplayInfo = this->_output->GetEmuDisplayInfo(); + memcpy(this->_videoSrcCustomBuffer[displayID], emuDisplayInfo.customBuffer[displayID], emuDisplayInfo.customWidth * emuDisplayInfo.customHeight * emuDisplayInfo.pixelBytes); +} + void OGLDisplayLayer::LoadNativeDisplayByID_OGL(const NDSDisplayID displayID) { const bool useDeposterize = this->_output->GetSourceDeposterize(); @@ -7217,17 +7248,6 @@ void OGLDisplayLayer::LoadNativeDisplayByID_OGL(const NDSDisplayID displayID) glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); glFlush(); } - else - { - if (this->_videoColorFormat == GL_UNSIGNED_SHORT_1_5_5_5_REV) - { - ColorspaceConvertBuffer555To8888Opaque((const uint16_t *)this->_videoSrcNativeBuffer[displayID], this->_vf[displayID]->GetSrcBufferPtr(), GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT); - } - else - { - ColorspaceConvertBuffer888XTo8888Opaque((const uint32_t *)this->_videoSrcNativeBuffer[displayID], this->_vf[displayID]->GetSrcBufferPtr(), GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT); - } - } } void OGLDisplayLayer::LoadCustomDisplayByID_OGL(const NDSDisplayID displayID) @@ -7318,7 +7338,9 @@ void OGLDisplayLayer::ProcessOGL() glBufferDataARB(GL_ARRAY_BUFFER_ARB, (4 * 8) * sizeof(GLfloat), NULL, GL_STREAM_DRAW_ARB); float *texCoordPtr = (float *)glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); - this->_output->SetScreenTextureCoordinates((float)width[NDSDisplayID_Main], (float)height[NDSDisplayID_Main], (float)width[NDSDisplayID_Touch], (float)height[NDSDisplayID_Touch], texCoordPtr); + this->_output->SetScreenTextureCoordinates((float)width[NDSDisplayID_Main], (float)height[NDSDisplayID_Main], + (float)width[NDSDisplayID_Touch], (float)height[NDSDisplayID_Touch], + texCoordPtr); glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); diff --git a/desmume/src/frontend/cocoa/OGLDisplayOutput.h b/desmume/src/frontend/cocoa/OGLDisplayOutput.h index 12f48e7c8..f5f714305 100644 --- a/desmume/src/frontend/cocoa/OGLDisplayOutput.h +++ b/desmume/src/frontend/cocoa/OGLDisplayOutput.h @@ -34,7 +34,6 @@ #include "ClientDisplayView.h" -#define HUD_VERTEX_ATTRIBUTE_BUFFER_SIZE (sizeof(GLfloat) * HUD_MAX_CHARACTERS * (2 * 4)) class OGLVideoOutput; struct NDSFrameInfo; @@ -286,11 +285,6 @@ protected: GLuint _vboElementID; GLuint _texCharMap; - GlyphInfo *_glyphInfo; - GLfloat _glyphSize; - GLfloat _glyphTileSize; - - void _SetShowInfoItemOGL(bool &infoItemFlag, const bool visibleState); void _UpdateVerticesOGL(); public: @@ -320,8 +314,8 @@ protected: GLenum _videoColorFormat; const void *_videoSrcBufferHead; - const void *_videoSrcNativeBuffer[2]; - const void *_videoSrcCustomBuffer[2]; + void *_videoSrcNativeBuffer[2]; + void *_videoSrcCustomBuffer[2]; size_t _videoSrcBufferSize; uint32_t *_vfMasterDstBuffer; @@ -342,10 +336,10 @@ protected: GLint _uniformFinalOutputScalar; GLint _uniformFinalOutputViewSize; - void UploadHQnxLUTs(); - void DetermineTextureStorageHints(GLint &videoSrcTexStorageHint, GLint &cpuFilterTexStorageHint); + void _UploadHQnxLUTs(); + void _DetermineTextureStorageHints(GLint &videoSrcTexStorageHint, GLint &cpuFilterTexStorageHint); - void ResizeCPUPixelScalerOGL(const size_t srcWidthMain, const size_t srcHeightMain, const size_t srcWidthTouch, const size_t srcHeightTouch, const size_t scaleMultiply, const size_t scaleDivide); + void _ResizeCPUPixelScalerOGL(const size_t srcWidthMain, const size_t srcHeightMain, const size_t srcWidthTouch, const size_t srcHeightTouch, const size_t scaleMultiply, const size_t scaleDivide); void _UpdateRotationScaleOGL(); void _UpdateVerticesOGL(); @@ -373,6 +367,8 @@ public: bool SetGPUPixelScalerOGL(const VideoFilterTypeID filterID); void SetCPUPixelScalerOGL(const VideoFilterTypeID filterID); + void CopyNativeDisplayByID_OGL(const NDSDisplayID displayID); + void CopyCustomDisplayByID_OGL(const NDSDisplayID displayID); void LoadNativeDisplayByID_OGL(const NDSDisplayID displayID); void LoadCustomDisplayByID_OGL(const NDSDisplayID displayID); @@ -398,6 +394,8 @@ protected: virtual void _UpdateClientSize(); virtual void _UpdateViewScale(); + virtual void _FetchNativeDisplayByID(const NDSDisplayID displayID); + virtual void _FetchCustomDisplayByID(const NDSDisplayID displayID); virtual void _LoadNativeDisplayByID(const NDSDisplayID displayID); virtual void _LoadCustomDisplayByID(const NDSDisplayID displayID); diff --git a/desmume/src/frontend/cocoa/cocoa_output.mm b/desmume/src/frontend/cocoa/cocoa_output.mm index 432ce378a..5e11acabf 100644 --- a/desmume/src/frontend/cocoa/cocoa_output.mm +++ b/desmume/src/frontend/cocoa/cocoa_output.mm @@ -1043,34 +1043,13 @@ pthread_rwlock_rdlock(self.rwlockProducer); const NDSDisplayInfo &dispInfo = GPU->GetDisplayInfo(); - const bool isMainSizeNative = !dispInfo.didPerformCustomRender[NDSDisplayID_Main]; - const bool isTouchSizeNative = !dispInfo.didPerformCustomRender[NDSDisplayID_Touch]; - - if (isMainSizeNative && isTouchSizeNative) - { - memcpy(_nativeBuffer[NDSDisplayID_Main], dispInfo.masterNativeBuffer, GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT * 2 * dispInfo.pixelBytes); - } - else - { - if (!isMainSizeNative && !isTouchSizeNative) - { - memcpy(_customBuffer[NDSDisplayID_Main], dispInfo.masterCustomBuffer, dispInfo.customWidth * dispInfo.customHeight * 2 * dispInfo.pixelBytes); - } - else if (isTouchSizeNative) - { - memcpy(_customBuffer[NDSDisplayID_Main], dispInfo.customBuffer[NDSDisplayID_Main], dispInfo.customWidth * dispInfo.customHeight * dispInfo.pixelBytes); - memcpy(_nativeBuffer[NDSDisplayID_Touch], dispInfo.nativeBuffer[NDSDisplayID_Touch], GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT * dispInfo.pixelBytes); - } - else - { - memcpy(_nativeBuffer[NDSDisplayID_Main], dispInfo.nativeBuffer[NDSDisplayID_Main], GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT * dispInfo.pixelBytes); - memcpy(_customBuffer[NDSDisplayID_Touch], dispInfo.customBuffer[NDSDisplayID_Touch], dispInfo.customWidth * dispInfo.customHeight * dispInfo.pixelBytes); - } - } + _cdv->SetEmuDisplayInfo(dispInfo); + _cdv->FetchDisplays(); pthread_rwlock_unlock(self.rwlockProducer); - _cdv->HandleGPUFrameEndEvent(dispInfo); + _cdv->LoadDisplays(); + _cdv->ProcessDisplays(); } - (void) handleReloadReprocessRedraw diff --git a/desmume/src/frontend/cocoa/translations/English.lproj/DisplayWindow.xib b/desmume/src/frontend/cocoa/translations/English.lproj/DisplayWindow.xib index 8a128f3ab..fa141a220 100644 --- a/desmume/src/frontend/cocoa/translations/English.lproj/DisplayWindow.xib +++ b/desmume/src/frontend/cocoa/translations/English.lproj/DisplayWindow.xib @@ -1,3076 +1,3061 @@ - - 1050 - 13F1808 - 851 - 1265.21 - 698.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 851 - - - YES - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - YES - - DisplayWindowController - - - FirstResponder - - - NSApplication - - - 271 - 2 - {{830, 370}, {256, 408}} - 74973184 - DeSmuME - NSWindow - - - D5552DCE-722B-4ECB-8E0A-8B7CF76EAC70 - - - YES - YES - YES - YES - 1 - 2 - - YES - - YES - 0135754F-463F-4625-9D27-DEF701AEF50E - 039A3D54-15EA-4743-88B7-60517113C193 - 2E728430-6055-404B-944F-25594ACBEC39 - 321036F9-6034-47B1-9CC5-2461D98700F0 - 41A299FB-4A95-4FA3-9982-8523FF04ACDE - 8A505B61-7B2E-49ED-B6A0-DBE0A72DB48D - C626F2C1-4353-4288-AD59-40FB7F4C1A58 - D3628D4D-C39F-4CC3-B82F-7CC0F699B953 - EDBFD998-E031-4AC5-A86A-7114D66FF847 - NSToolbarFlexibleSpaceItem - NSToolbarSpaceItem - - - YES - - - 0135754F-463F-4625-9D27-DEF701AEF50E - - Open ROM - Open ROM - - - - NSImage - Icon_OpenROM_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 039A3D54-15EA-4743-88B7-60517113C193 - - Toggle Displays - Toggle Displays - - - - NSImage - Icon_DisplayToggle_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 2E728430-6055-404B-944F-25594ACBEC39 - - Execute - Execute/Pause - - - - NSImage - Icon_Execute_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 321036F9-6034-47B1-9CC5-2461D98700F0 - - Reset - Reset - - - - NSImage - Icon_Reset_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 41A299FB-4A95-4FA3-9982-8523FF04ACDE - - Rotate Right - Rotate Right - - - - NSImage - Icon_RotateCW_420x420 - - - - {0, 0} - {0, 0} - YES - YES - 90 - YES - 0 - - - - 8A505B61-7B2E-49ED-B6A0-DBE0A72DB48D - - Enable HUD - Enable/Disable HUD - - - - NSImage - Icon_ShowHUD_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - C626F2C1-4353-4288-AD59-40FB7F4C1A58 - - Rotate Left - Rotate Left - - - - NSImage - Icon_RotateCCW_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -90 - YES - 0 - - - - D3628D4D-C39F-4CC3-B82F-7CC0F699B953 - - Frame Advance - Frame Advance - - - - NSImage - Icon_FrameAdvance_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - EDBFD998-E031-4AC5-A86A-7114D66FF847 - - Speed 2x - Speed 1x/2x - - - - NSImage - Icon_Speed2x_420x420 - - - - {0, 0} - {0, 0} - YES - YES - 200 - YES - 0 - - - NSToolbarFlexibleSpaceItem - - Flexible Space - - - - - - {1, 5} - {20000, 32} - YES - YES - -1 - YES - 0 - - YES - YES - - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - - - - NSToolbarSpaceItem - - Space - - - - - - {32, 5} - {32, 32} - YES - YES - -1 - YES - 0 - - YES - YES - - - 1048576 - 2147483647 - - - - - - - - YES - - - - - - - - - - - - - - YES - - - - - - - - - YES - - - - {1.7976931348623157e+308, 1.7976931348623157e+308} - {256, 408} - - - 256 - - YES - - - 5156 - {{2, 3}, {16, 16}} - - - 28938 - 100 - - - - 294 - {{17, 5}, {137, 14}} - - - YES - - 68157504 - 272634880 - - - LucidaGrande - 11 - 3088 - - Status Text - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - NO - 1 - - - - 45 - - YES - - {{0, 24}, {256, 384}} - - - YES - DisplayView - - - - 289 - {{192, -1}, {40, 26}} - - - _NS:791 - YES - - -2076180416 - 134219776 - - LucidaGrande - 13 - 1040 - - _NS:791 - - -2043002880 - 34 - - LucidaGrande - 13 - 16 - - - - 400 - 75 - - - YES - - - 2147483647 - 1 - - NSImage - Icon_VolumeFull_16x16 - - - - _popUpItemAction: - - - YES - - OtherViews - - YES - - - - Volume - - 2147483647 - - - _popUpItemAction: - - - - - - YES - 1 - YES - YES - 2 - - NO - - - - 289 - {{151, -1}, {42, 26}} - - - _NS:791 - YES - - -2076180416 - 134219776 - - _NS:791 - - -2043002880 - 162 - - - - 400 - 75 - - - YES - - - 2147483647 - 1 - - NSImage - Icon_MicrophoneBlack_256x256 - - - - _popUpItemAction: - - - YES - - OtherViews - - YES - - - - Gain - - 2147483647 - - - _popUpItemAction: - - - - - - YES - 1 - YES - YES - 2 - - NO - - - {256, 408} - - - - {{0, 0}, {1920, 1177}} - {256, 477} - {1.7976931348623157e+308, 1.7976931348623157e+308} - NO - - - - 268 - - YES - - - 268 - {{176, 5}, {126, 26}} - - YES - - -2076180416 - 2048 - - - 109199360 - 1 - - - 400 - 75 - - - TIFF - - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - YES - - - - BMP - - 2147483647 - - - _popUpItemAction: - 1 - - - - - GIF - - 2147483647 - - - _popUpItemAction: - 2 - - - - - JPEG - - 2147483647 - - - _popUpItemAction: - 3 - - - - - PNG - - 2147483647 - - - _popUpItemAction: - 4 - - - - - JPEG 2000 - - 2147483647 - - - _popUpItemAction: - 5 - - - - - - 1 - YES - YES - 2 - - NO - - - - 268 - {{38, 11}, {136, 17}} - - YES - - 68157504 - 71304192 - Select Image Format: - - - - - - NO - 1 - - - {350, 35} - NSView - - - - 268 - - YES - - - 268 - {{2, 0}, {49, 18}} - - _NS:682 - YES - - 67108864 - 131072 - Mute - - _NS:682 - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - NO - - - - 268 - {{-3, 20}, {66, 11}} - - - YES - - 68157504 - 138679296 - - LucidaGrande - 9 - 3600 - - - - YES - - YES - allowsFloats - alwaysShowsDecimalSeparator - formatterBehavior - lenient - locale - maximumFractionDigits - minimumFractionDigits - multiplier - negativeInfinitySymbol - nilSymbol - numberStyle - positiveInfinitySymbol - usesGroupingSeparator - - - YES - - - - - - - - - - - -∞ - - - +∞ - - - - #0.0% - #0.0% - - - - - - - - NaN - - YES - - - YES - - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - , - NO - NO - YES - - %1.1f%% - - - - - NO - 1 - - - - 268 - {{17, 31}, {21, 105}} - - - _NS:768 - YES - - 604242176 - 0 - - _NS:768 - - 100 - 0.0 - 0.0 - 0.0 - 0 - 0 - NO - YES - - NO - - - {55, 139} - - _NS:1109 - NSView - - - - 268 - - YES - - - 268 - {{-1, 6}, {51, 11}} - - YES - - 68157504 - 138679296 - - - - YES - - YES - allowsFloats - alwaysShowsDecimalSeparator - formatterBehavior - lenient - locale - maximumFractionDigits - maximumIntegerDigits - minimumFractionDigits - minimumIntegerDigits - multiplier - nilSymbol - numberStyle - usesGroupingSeparator - - - YES - - - - - - - - - - - - - - - - #0.0% - #0.0% - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - NO - NO - YES - - %1.1f%% - - - - - NO - 1 - - - - 268 - {{12, 17}, {21, 105}} - - - _NS:768 - YES - - 67371264 - 0 - - _NS:768 - - 100 - 0.0 - 100 - 0.0 - 0 - 0 - NO - YES - - NO - - - {45, 125} - - _NS:1109 - NSView - - - - - YES - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 54 - - - - changeCoreSpeed: - - - - 56 - - - - changeRotationRelative: - - - - 57 - - - - changeRotationRelative: - - - - 58 - - - - openRom: - - - - 60 - - - - delegate - - - - 62 - - - - view - - - - 64 - - - - value: emuControl.statusText - - - - - - value: emuControl.statusText - value - emuControl.statusText - - YES - - YES - NSAllowsEditingMultipleValuesSelection - NSRaisesForNotApplicableKeys - NSValidatesImmediately - - - YES - - - - - - 2 - - - 67 - - - - animate: emuControl.isWorking - - - - - - animate: emuControl.isWorking - animate - emuControl.isWorking - 2 - - - 68 - - - - saveScreenshotPanelAccessoryView - - - - 105 - - - - selectedTag: screenshotFileFormat - - - - - - selectedTag: screenshotFileFormat - selectedTag - screenshotFileFormat - 2 - - - 106 - - - - reset: - - - - 107 - - - - toggleExecutePause: - - - - 108 - - - - window - - - - 109 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 131 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 133 - - - - image: emuControl.currentVolumeIcon - - - - - - image: emuControl.currentVolumeIcon - image - emuControl.currentVolumeIcon - 2 - - - 135 - - - - value: emuControl.currentVolumeValue - - - - - - value: emuControl.currentVolumeValue - value - emuControl.currentVolumeValue - 2 - - - 138 - - - - changeVolume: - - - - 141 - - - - outputVolumeMenuItem - - - - 142 - - - - microphoneGainMenuItem - - - - 144 - - - - value: emuControl.currentVolumeValue - - - - - - value: emuControl.currentVolumeValue - value - emuControl.currentVolumeValue - - YES - - YES - NSRaisesForNotApplicableKeys - NSValidatesImmediately - - - YES - - - - - 2 - - - 157 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 159 - - - - outputVolumeControlView - - - - 160 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 167 - - - - microphoneGainControlView - - - - 183 - - - - image: emuControl.currentMicStatusIcon - - - - - - image: emuControl.currentMicStatusIcon - image - emuControl.currentMicStatusIcon - 2 - - - 184 - - - - microphoneGainSlider - - - - 203 - - - - microphoneMuteButton - - - - 204 - - - - changeHardwareMicGain: - - - - 207 - - - - enabled: emuControl.isHardwareMicAvailable - - - - - - enabled: emuControl.isHardwareMicAvailable - enabled - emuControl.isHardwareMicAvailable - 2 - - - 218 - - - - enabled: emuControl.isHardwareMicAvailable - - - - - - enabled: emuControl.isHardwareMicAvailable - enabled - emuControl.isHardwareMicAvailable - 2 - - - 220 - - - - value: emuControl.cdsCoreController.content.cdsController.hardwareMicMute - - - - - - value: emuControl.cdsCoreController.content.cdsController.hardwareMicMute - value - emuControl.cdsCoreController.content.cdsController.hardwareMicMute - 2 - - - 224 - - - - toolTip: emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString - - - - - - toolTip: emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString - toolTip - emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString - 2 - - - 226 - - - - value: emuControl.currentMicGainValue - - - - - - value: emuControl.currentMicGainValue - value - emuControl.currentMicGainValue - 2 - - - 230 - - - - value: emuControl.currentMicGainValue - - - - - - value: emuControl.currentMicGainValue - value - emuControl.currentMicGainValue - - YES - - YES - NSRaisesForNotApplicableKeys - NSValidatesImmediately - - - YES - - - - - 2 - - - 232 - - - - changeHardwareMicMute: - - - - 233 - - - - frameAdvance: - - - - 243 - - - - toggleNDSDisplays: - - - - 244 - - - - toggleHUDVisibility: - - - - 245 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 248 - - - - - YES - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 3 - - - YES - - - - - - - 4 - - - YES - - - - - - - - - - - - - - - - 5 - - - YES - - - - - - - - - - 6 - - - YES - - - - - - 10 - - - - - 13 - - - - - 14 - - - - - 15 - - - - - 16 - - - - - 17 - - - - - 18 - - - - - 19 - - - - - 20 - - - - - 21 - - - - - 63 - - - YES - - - - - 93 - - - YES - - - - - Screenshot Save Panel Accessory - - - 94 - - - YES - - - - - - 95 - - - YES - - - - - - 96 - - - - - 97 - - - YES - - - - - - 98 - - - YES - - - - - - - - - - - 99 - - - - - 100 - - - - - 101 - - - - - 102 - - - - - 103 - - - - - 104 - - - - - 116 - - - YES - - - - - - 117 - - - YES - - - - - - 118 - - - YES - - - - - - - 120 - - - - - 119 - - - - - 122 - - - YES - - - - - - 123 - - - YES - - - - - - 124 - - - YES - - - - - - - 125 - - - - - 126 - - - - - 151 - - - YES - - - - - Sound Output Volume Menu Item - - - 136 - - - YES - - - - - - 137 - - - - - 152 - - - YES - - - - - - 153 - - - YES - - - - - - 154 - - - - - 161 - - - YES - - - - - - Microphone Input Gain Menu Item - - - 162 - - - YES - - - - - - 165 - - - YES - - - - - - 166 - - - - - 145 - - - YES - - - - - - 146 - - - - - 185 - - - YES - - - - - - 186 - - - - - 234 - - - - - 237 - - - - - 238 - - - - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 10.IBPluginDependency - 100.IBPluginDependency - 101.IBPluginDependency - 102.IBPluginDependency - 103.IBPluginDependency - 104.IBPluginDependency - 116.IBPluginDependency - 117.IBPluginDependency - 118.IBPluginDependency - 119.IBPluginDependency - 120.IBPluginDependency - 122.IBPluginDependency - 123.IBPluginDependency - 124.IBPluginDependency - 125.IBPluginDependency - 126.IBPluginDependency - 13.IBPluginDependency - 136.IBPluginDependency - 137.IBPluginDependency - 14.IBPluginDependency - 145.IBPluginDependency - 146.IBPluginDependency - 15.IBPluginDependency - 151.IBPersistedLastKnownCanvasPosition - 151.IBPluginDependency - 152.IBPluginDependency - 153.IBPluginDependency - 154.IBNumberFormatterBehaviorMetadataKey - 154.IBNumberFormatterLocalizesFormatMetadataKey - 154.IBNumberFormatterSampleNumberKey - 154.IBPluginDependency - 16.IBPluginDependency - 161.IBNSViewMetadataGestureRecognizers - 161.IBPersistedLastKnownCanvasPosition - 161.IBPluginDependency - 162.IBPluginDependency - 165.IBPluginDependency - 166.IBNumberFormatterBehaviorMetadataKey - 166.IBNumberFormatterLocalizesFormatMetadataKey - 166.IBPluginDependency - 17.IBPluginDependency - 18.IBPluginDependency - 185.IBPluginDependency - 186.IBPluginDependency - 19.IBPluginDependency - 20.IBPluginDependency - 21.IBPluginDependency - 234.IBPluginDependency - 237.IBPluginDependency - 238.IBPluginDependency - 3.IBEditorWindowLastContentRect - 3.IBPluginDependency - 3.IBWindowTemplateEditedContentRect - 3.NSWindowTemplate.visibleAtLaunch - 3.windowTemplate.hasMinSize - 3.windowTemplate.minSize - 4.IBEditorWindowLastContentRect - 4.IBPluginDependency - 5.IBPluginDependency - 6.IBPluginDependency - 63.IBPluginDependency - 93.IBPluginDependency - 94.IBPluginDependency - 95.IBPluginDependency - 96.IBPluginDependency - 97.IBPluginDependency - 98.IBPluginDependency - 99.IBPluginDependency - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {183.5, 317.5} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {84.5, 324.5} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{514, 401}, {256, 408}} - com.apple.InterfaceBuilder.CocoaPlugin - {{514, 401}, {256, 408}} - - - {256, 408} - {{334, 998}, {616, 0}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 248 - - - - YES - - DisplayView - NSView - - IBProjectSource - userinterface/DisplayWindowController.h - - - - DisplayWindowController - NSWindowController - - YES - - YES - changeCoreSpeed: - changeDisplayGap: - changeDisplayMode: - changeDisplayOrder: - changeDisplayOrientation: - changeHardwareMicGain: - changeHardwareMicMute: - changeRotation: - changeRotationRelative: - changeScale: - changeVideoOutputFilter: - changeVideoPixelScaler: - changeVolume: - copy: - frameAdvance: - openRom: - reset: - saveScreenshotAs: - toggleExecutePause: - toggleFullScreenDisplay: - toggleHUDVisibility: - toggleKeepMinDisplaySizeAtNormal: - toggleNDSDisplays: - toggleShowHUDCPULoadAverage: - toggleShowHUDFrameIndex: - toggleShowHUDInput: - toggleShowHUDLagFrameCount: - toggleShowHUDRealTimeClock: - toggleShowHUDRender3DFPS: - toggleShowHUDVideoFPS: - toggleStatusBar: - toggleVerticalSync: - toggleVideoFiltersPreferGPU: - toggleVideoSourceDeposterize: - writeDefaultsDisplayGap: - writeDefaultsDisplayRotation: - writeDefaultsDisplayVideoSettings: - writeDefaultsHUDSettings: - - - YES - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - - - - YES - - YES - changeCoreSpeed: - changeDisplayGap: - changeDisplayMode: - changeDisplayOrder: - changeDisplayOrientation: - changeHardwareMicGain: - changeHardwareMicMute: - changeRotation: - changeRotationRelative: - changeScale: - changeVideoOutputFilter: - changeVideoPixelScaler: - changeVolume: - copy: - frameAdvance: - openRom: - reset: - saveScreenshotAs: - toggleExecutePause: - toggleFullScreenDisplay: - toggleHUDVisibility: - toggleKeepMinDisplaySizeAtNormal: - toggleNDSDisplays: - toggleShowHUDCPULoadAverage: - toggleShowHUDFrameIndex: - toggleShowHUDInput: - toggleShowHUDLagFrameCount: - toggleShowHUDRealTimeClock: - toggleShowHUDRender3DFPS: - toggleShowHUDVideoFPS: - toggleStatusBar: - toggleVerticalSync: - toggleVideoFiltersPreferGPU: - toggleVideoSourceDeposterize: - writeDefaultsDisplayGap: - writeDefaultsDisplayRotation: - writeDefaultsDisplayVideoSettings: - writeDefaultsHUDSettings: - - - YES - - changeCoreSpeed: - id - - - changeDisplayGap: - id - - - changeDisplayMode: - id - - - changeDisplayOrder: - id - - - changeDisplayOrientation: - id - - - changeHardwareMicGain: - id - - - changeHardwareMicMute: - id - - - changeRotation: - id - - - changeRotationRelative: - id - - - changeScale: - id - - - changeVideoOutputFilter: - id - - - changeVideoPixelScaler: - id - - - changeVolume: - id - - - copy: - id - - - frameAdvance: - id - - - openRom: - id - - - reset: - id - - - saveScreenshotAs: - id - - - toggleExecutePause: - id - - - toggleFullScreenDisplay: - id - - - toggleHUDVisibility: - id - - - toggleKeepMinDisplaySizeAtNormal: - id - - - toggleNDSDisplays: - id - - - toggleShowHUDCPULoadAverage: - id - - - toggleShowHUDFrameIndex: - id - - - toggleShowHUDInput: - id - - - toggleShowHUDLagFrameCount: - id - - - toggleShowHUDRealTimeClock: - id - - - toggleShowHUDRender3DFPS: - id - - - toggleShowHUDVideoFPS: - id - - - toggleStatusBar: - id - - - toggleVerticalSync: - id - - - toggleVideoFiltersPreferGPU: - id - - - toggleVideoSourceDeposterize: - id - - - writeDefaultsDisplayGap: - id - - - writeDefaultsDisplayRotation: - id - - - writeDefaultsDisplayVideoSettings: - id - - - writeDefaultsHUDSettings: - id - - - - - YES - - YES - microphoneGainControlView - microphoneGainMenuItem - microphoneGainSlider - microphoneMuteButton - outputVolumeControlView - outputVolumeMenuItem - saveScreenshotPanelAccessoryView - view - - - YES - NSView - NSMenuItem - NSSlider - NSButton - NSView - NSMenuItem - NSView - DisplayView - - - - YES - - YES - microphoneGainControlView - microphoneGainMenuItem - microphoneGainSlider - microphoneMuteButton - outputVolumeControlView - outputVolumeMenuItem - saveScreenshotPanelAccessoryView - view - - - YES - - microphoneGainControlView - NSView - - - microphoneGainMenuItem - NSMenuItem - - - microphoneGainSlider - NSSlider - - - microphoneMuteButton - NSButton - - - outputVolumeControlView - NSView - - - outputVolumeMenuItem - NSMenuItem - - - saveScreenshotPanelAccessoryView - NSView - - - view - DisplayView - - - - - - - - YES - - NSActionCell - NSCell - - IBFrameworkSource - AppKit.framework/Headers/NSActionCell.h - - - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSApplicationScripting.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSColorPanel.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSHelpManager.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSPageLayout.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSUserInterfaceItemSearching.h - - - - NSButton - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSButton.h - - - - NSButtonCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSButtonCell.h - - - - NSCell - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSCell.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSMenuItemCell - NSButtonCell - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItemCell.h - - - - NSNumberFormatter - NSFormatter - - IBFrameworkSource - Foundation.framework/Headers/NSNumberFormatter.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAccessibility.h - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDictionaryController.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDragging.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontPanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSKeyValueBinding.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSNibLoading.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSOutlineView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSPasteboard.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSavePanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbarItem.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObjectScripting.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSPortCoder.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptObjectSpecifiers.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptWhoseTests.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLDownload.h - - - - NSPopUpButton - NSButton - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButton.h - - - - NSPopUpButtonCell - NSMenuItemCell - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButtonCell.h - - - - NSProgressIndicator - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSProgressIndicator.h - - - - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSInterfaceStyle.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSSlider - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSSlider.h - - - - NSSliderCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSSliderCell.h - - - - NSTextField - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTextField.h - - - - NSTextFieldCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSTextFieldCell.h - - - - NSToolbar - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbar.h - - - - NSToolbarItem - NSObject - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSClipView.h - - - - NSView - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSRulerView.h - - - - NSView - NSResponder - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSDrawer.h - - - - NSWindow - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSWindowScripting.h - - - - NSWindowController - NSResponder - - showWindow: - id - - - showWindow: - - showWindow: - id - - - - IBFrameworkSource - AppKit.framework/Headers/NSWindowController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - ../../DeSmuME (XCode 3).xcodeproj - 3 - - YES - - YES - Icon_DisplayToggle_420x420 - Icon_Execute_420x420 - Icon_FrameAdvance_420x420 - Icon_MicrophoneBlack_256x256 - Icon_OpenROM_420x420 - Icon_Reset_420x420 - Icon_RotateCCW_420x420 - Icon_RotateCW_420x420 - Icon_ShowHUD_420x420 - Icon_Speed2x_420x420 - Icon_VolumeFull_16x16 - NSMenuCheckmark - NSMenuMixedState - NSSwitch - - - YES - {420, 420} - {420, 420} - {420, 420} - {256, 256} - {420, 420} - {420, 420} - {420, 420} - {420, 420} - {420, 420} - {420, 420} - {16, 16} - {11, 11} - {10, 3} - {15, 15} - - - + + 1050 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 851 + + + YES + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + YES + + DisplayWindowController + + + FirstResponder + + + NSApplication + + + 271 + 2 + {{830, 370}, {256, 408}} + 74973184 + DeSmuME + NSWindow + + + D5552DCE-722B-4ECB-8E0A-8B7CF76EAC70 + + + YES + YES + YES + YES + 1 + 2 + + YES + + YES + 0135754F-463F-4625-9D27-DEF701AEF50E + 039A3D54-15EA-4743-88B7-60517113C193 + 2E728430-6055-404B-944F-25594ACBEC39 + 321036F9-6034-47B1-9CC5-2461D98700F0 + 41A299FB-4A95-4FA3-9982-8523FF04ACDE + 8A505B61-7B2E-49ED-B6A0-DBE0A72DB48D + C626F2C1-4353-4288-AD59-40FB7F4C1A58 + D3628D4D-C39F-4CC3-B82F-7CC0F699B953 + EDBFD998-E031-4AC5-A86A-7114D66FF847 + NSToolbarFlexibleSpaceItem + NSToolbarSpaceItem + + + YES + + + 0135754F-463F-4625-9D27-DEF701AEF50E + + Open ROM + Open ROM + + + + NSImage + Icon_OpenROM_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 039A3D54-15EA-4743-88B7-60517113C193 + + Toggle Displays + Toggle Displays + + + + NSImage + Icon_DisplayToggle_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 2E728430-6055-404B-944F-25594ACBEC39 + + Execute + Execute/Pause + + + + NSImage + Icon_Execute_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 321036F9-6034-47B1-9CC5-2461D98700F0 + + Reset + Reset + + + + NSImage + Icon_Reset_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 41A299FB-4A95-4FA3-9982-8523FF04ACDE + + Rotate Right + Rotate Right + + + + NSImage + Icon_RotateCW_420x420 + + + + {0, 0} + {0, 0} + YES + YES + 90 + YES + 0 + + + + 8A505B61-7B2E-49ED-B6A0-DBE0A72DB48D + + Enable HUD + Enable/Disable HUD + + + + NSImage + Icon_ShowHUD_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + C626F2C1-4353-4288-AD59-40FB7F4C1A58 + + Rotate Left + Rotate Left + + + + NSImage + Icon_RotateCCW_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -90 + YES + 0 + + + + D3628D4D-C39F-4CC3-B82F-7CC0F699B953 + + Frame Advance + Frame Advance + + + + NSImage + Icon_FrameAdvance_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + EDBFD998-E031-4AC5-A86A-7114D66FF847 + + Speed 2x + Speed 1x/2x + + + + NSImage + Icon_Speed2x_420x420 + + + + {0, 0} + {0, 0} + YES + YES + 200 + YES + 0 + + + NSToolbarFlexibleSpaceItem + + Flexible Space + + + + + + {1, 5} + {20000, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + NSToolbarSpaceItem + + Space + + + + + + {32, 5} + {32, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + + + + + + + YES + + + + + + + + + + + + + + YES + + + + + + + + + YES + + + {1.79769e+308, 1.79769e+308} + {256, 408} + + + 256 + + YES + + + 5156 + {{2, 3}, {16, 16}} + + + 28938 + 100 + + + + 294 + {{17, 5}, {137, 14}} + + + YES + + 68157504 + 272634880 + + + LucidaGrande + 11 + 3100 + + Status Text + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 45 + {{0, 24}, {256, 384}} + + + DisplayView + + + + 289 + {{192, -1}, {40, 26}} + + + YES + + -2076049856 + 134219776 + + LucidaGrande + 13 + 1044 + + + -2043002880 + 34 + + LucidaGrande + 13 + 16 + + + + 400 + 75 + + + YES + + + 2147483647 + 1 + + NSImage + Icon_VolumeFull_16x16 + + + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + Volume + + 2147483647 + + + _popUpItemAction: + + + + + + YES + 1 + YES + YES + 2 + + + + + 289 + {{151, -1}, {42, 26}} + + + YES + + -2076049856 + 134219776 + + + -2043002880 + 162 + + + + 400 + 75 + + + YES + + + 2147483647 + 1 + + NSImage + Icon_MicrophoneBlack_256x256 + + + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + Gain + + 2147483647 + + + _popUpItemAction: + + + + + + YES + 1 + YES + YES + 2 + + + + {256, 408} + + + + {{0, 0}, {1920, 1177}} + {256, 476} + {1.79769e+308, 1.79769e+308} + + + + 268 + + YES + + + 268 + {{176, 5}, {126, 26}} + + YES + + -2076049856 + 2048 + + + 109199360 + 1 + + + 400 + 75 + + + TIFF + + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + BMP + + 2147483647 + + + _popUpItemAction: + 1 + + + + + GIF + + 2147483647 + + + _popUpItemAction: + 2 + + + + + JPEG + + 2147483647 + + + _popUpItemAction: + 3 + + + + + PNG + + 2147483647 + + + _popUpItemAction: + 4 + + + + + JPEG 2000 + + 2147483647 + + + _popUpItemAction: + 5 + + + + + + 1 + YES + YES + 2 + + + + + 268 + {{38, 11}, {136, 17}} + + YES + + 68157504 + 71304192 + Select Image Format: + + + + + + + + {350, 35} + NSView + + + + 268 + + YES + + + 268 + {{2, 0}, {49, 18}} + + YES + + 67108864 + 131072 + Mute + + + 1211912448 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 268 + {{-3, 20}, {66, 11}} + + + YES + + 68157504 + 138679296 + + LucidaGrande + 9 + 3614 + + + + YES + + YES + allowsFloats + alwaysShowsDecimalSeparator + formatterBehavior + lenient + locale + maximumFractionDigits + minimumFractionDigits + multiplier + negativeInfinitySymbol + nilSymbol + numberStyle + positiveInfinitySymbol + usesGroupingSeparator + + + YES + + + + + + + + + + + -∞ + + + +∞ + + + + #0.0% + #0.0% + + + + + + + + NaN + + YES + + + YES + + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + %1.1f%% + + + + + + + + 268 + {{17, 31}, {21, 105}} + + + YES + + 604242176 + 0 + + + 100 + 0.0 + 0.0 + 0.0 + 0 + 0 + NO + YES + + + + {55, 139} + + NSView + + + + 268 + + YES + + + 268 + {{-1, 6}, {51, 11}} + + YES + + 68157504 + 138679296 + + + + YES + + YES + allowsFloats + alwaysShowsDecimalSeparator + formatterBehavior + lenient + locale + maximumFractionDigits + maximumIntegerDigits + minimumFractionDigits + minimumIntegerDigits + multiplier + nilSymbol + numberStyle + usesGroupingSeparator + + + YES + + + + + + + + + + + + + + + + #0.0% + #0.0% + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + %1.1f%% + + + + + + + + 268 + {{12, 17}, {21, 105}} + + + YES + + 67371264 + 0 + + + 100 + 0.0 + 100 + 0.0 + 0 + 0 + NO + YES + + + + {45, 125} + + NSView + + + + + YES + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 54 + + + + changeCoreSpeed: + + + + 56 + + + + changeRotationRelative: + + + + 57 + + + + changeRotationRelative: + + + + 58 + + + + openRom: + + + + 60 + + + + delegate + + + + 62 + + + + view + + + + 64 + + + + value: emuControl.statusText + + + + + + value: emuControl.statusText + value + emuControl.statusText + + YES + + YES + NSAllowsEditingMultipleValuesSelection + NSRaisesForNotApplicableKeys + NSValidatesImmediately + + + YES + + + + + + 2 + + + 67 + + + + animate: emuControl.isWorking + + + + + + animate: emuControl.isWorking + animate + emuControl.isWorking + 2 + + + 68 + + + + saveScreenshotPanelAccessoryView + + + + 105 + + + + selectedTag: screenshotFileFormat + + + + + + selectedTag: screenshotFileFormat + selectedTag + screenshotFileFormat + 2 + + + 106 + + + + reset: + + + + 107 + + + + toggleExecutePause: + + + + 108 + + + + window + + + + 109 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 131 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 133 + + + + image: emuControl.currentVolumeIcon + + + + + + image: emuControl.currentVolumeIcon + image + emuControl.currentVolumeIcon + 2 + + + 135 + + + + value: emuControl.currentVolumeValue + + + + + + value: emuControl.currentVolumeValue + value + emuControl.currentVolumeValue + 2 + + + 138 + + + + changeVolume: + + + + 141 + + + + outputVolumeMenuItem + + + + 142 + + + + microphoneGainMenuItem + + + + 144 + + + + value: emuControl.currentVolumeValue + + + + + + value: emuControl.currentVolumeValue + value + emuControl.currentVolumeValue + + YES + + YES + NSRaisesForNotApplicableKeys + NSValidatesImmediately + + + YES + + + + + 2 + + + 157 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 159 + + + + outputVolumeControlView + + + + 160 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 167 + + + + microphoneGainControlView + + + + 183 + + + + image: emuControl.currentMicStatusIcon + + + + + + image: emuControl.currentMicStatusIcon + image + emuControl.currentMicStatusIcon + 2 + + + 184 + + + + microphoneGainSlider + + + + 203 + + + + microphoneMuteButton + + + + 204 + + + + changeHardwareMicGain: + + + + 207 + + + + enabled: emuControl.isHardwareMicAvailable + + + + + + enabled: emuControl.isHardwareMicAvailable + enabled + emuControl.isHardwareMicAvailable + 2 + + + 218 + + + + enabled: emuControl.isHardwareMicAvailable + + + + + + enabled: emuControl.isHardwareMicAvailable + enabled + emuControl.isHardwareMicAvailable + 2 + + + 220 + + + + value: emuControl.cdsCoreController.content.cdsController.hardwareMicMute + + + + + + value: emuControl.cdsCoreController.content.cdsController.hardwareMicMute + value + emuControl.cdsCoreController.content.cdsController.hardwareMicMute + 2 + + + 224 + + + + toolTip: emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString + + + + + + toolTip: emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString + toolTip + emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString + 2 + + + 226 + + + + value: emuControl.currentMicGainValue + + + + + + value: emuControl.currentMicGainValue + value + emuControl.currentMicGainValue + 2 + + + 230 + + + + value: emuControl.currentMicGainValue + + + + + + value: emuControl.currentMicGainValue + value + emuControl.currentMicGainValue + + YES + + YES + NSRaisesForNotApplicableKeys + NSValidatesImmediately + + + YES + + + + + 2 + + + 232 + + + + changeHardwareMicMute: + + + + 233 + + + + frameAdvance: + + + + 243 + + + + toggleNDSDisplays: + + + + 244 + + + + toggleHUDVisibility: + + + + 245 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 248 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 3 + + + YES + + + + + + + 4 + + + YES + + + + + + + + + + + + + + + + 5 + + + YES + + + + + + + + + + 6 + + + YES + + + + + + 10 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 16 + + + + + 17 + + + + + 18 + + + + + 19 + + + + + 20 + + + + + 21 + + + + + 63 + + + YES + + + + + 93 + + + YES + + + + + Screenshot Save Panel Accessory + + + 94 + + + YES + + + + + + 95 + + + YES + + + + + + 96 + + + + + 97 + + + YES + + + + + + 98 + + + YES + + + + + + + + + + + 99 + + + + + 100 + + + + + 101 + + + + + 102 + + + + + 103 + + + + + 104 + + + + + 116 + + + YES + + + + + + 117 + + + YES + + + + + + 118 + + + YES + + + + + + + 120 + + + + + 119 + + + + + 122 + + + YES + + + + + + 123 + + + YES + + + + + + 124 + + + YES + + + + + + + 125 + + + + + 126 + + + + + 151 + + + YES + + + + + Sound Output Volume Menu Item + + + 136 + + + YES + + + + + + 137 + + + + + 152 + + + YES + + + + + + 153 + + + YES + + + + + + 154 + + + + + 161 + + + YES + + + + + + Microphone Input Gain Menu Item + + + 162 + + + YES + + + + + + 165 + + + YES + + + + + + 166 + + + + + 145 + + + YES + + + + + + 146 + + + + + 185 + + + YES + + + + + + 186 + + + + + 234 + + + + + 237 + + + + + 238 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 10.IBPluginDependency + 100.IBPluginDependency + 101.IBPluginDependency + 102.IBPluginDependency + 103.IBPluginDependency + 104.IBPluginDependency + 116.IBPluginDependency + 117.IBPluginDependency + 118.IBPluginDependency + 119.IBPluginDependency + 120.IBPluginDependency + 122.IBPluginDependency + 123.IBPluginDependency + 124.IBPluginDependency + 125.IBPluginDependency + 126.IBPluginDependency + 13.IBPluginDependency + 136.IBPluginDependency + 137.IBPluginDependency + 14.IBPluginDependency + 145.IBPluginDependency + 146.IBPluginDependency + 15.IBPluginDependency + 151.IBPersistedLastKnownCanvasPosition + 151.IBPluginDependency + 152.IBPluginDependency + 153.IBPluginDependency + 154.IBNumberFormatterBehaviorMetadataKey + 154.IBNumberFormatterLocalizesFormatMetadataKey + 154.IBNumberFormatterSampleNumberKey + 154.IBPluginDependency + 16.IBPluginDependency + 161.IBNSViewMetadataGestureRecognizers + 161.IBPersistedLastKnownCanvasPosition + 161.IBPluginDependency + 162.IBPluginDependency + 165.IBPluginDependency + 166.IBNumberFormatterBehaviorMetadataKey + 166.IBNumberFormatterLocalizesFormatMetadataKey + 166.IBPluginDependency + 17.IBPluginDependency + 18.IBPluginDependency + 185.IBPluginDependency + 186.IBPluginDependency + 19.IBPluginDependency + 20.IBPluginDependency + 21.IBPluginDependency + 234.IBPluginDependency + 237.IBPluginDependency + 238.IBPluginDependency + 3.IBEditorWindowLastContentRect + 3.IBPluginDependency + 3.IBWindowTemplateEditedContentRect + 3.NSWindowTemplate.visibleAtLaunch + 3.windowTemplate.hasMinSize + 3.windowTemplate.minSize + 4.IBEditorWindowLastContentRect + 4.IBPluginDependency + 5.IBPluginDependency + 6.IBPluginDependency + 63.IBPluginDependency + 93.IBPluginDependency + 94.IBPluginDependency + 95.IBPluginDependency + 96.IBPluginDependency + 97.IBPluginDependency + 98.IBPluginDependency + 99.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {183.5, 317.5} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + {84.5, 324.5} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{666, 269}, {256, 408}} + com.apple.InterfaceBuilder.CocoaPlugin + {{666, 269}, {256, 408}} + + + {256, 408} + {{334, 998}, {616, 0}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 248 + + + + YES + + DisplayView + NSView + + IBProjectSource + userinterface/DisplayWindowController.h + + + + DisplayWindowController + NSWindowController + + YES + + YES + changeCoreSpeed: + changeDisplayGap: + changeDisplayMode: + changeDisplayOrder: + changeDisplayOrientation: + changeHardwareMicGain: + changeHardwareMicMute: + changeRotation: + changeRotationRelative: + changeScale: + changeVideoOutputFilter: + changeVideoPixelScaler: + changeVolume: + copy: + frameAdvance: + openRom: + reset: + saveScreenshotAs: + toggleExecutePause: + toggleFullScreenDisplay: + toggleHUDVisibility: + toggleKeepMinDisplaySizeAtNormal: + toggleNDSDisplays: + toggleShowHUDCPULoadAverage: + toggleShowHUDFrameIndex: + toggleShowHUDInput: + toggleShowHUDLagFrameCount: + toggleShowHUDRealTimeClock: + toggleShowHUDRender3DFPS: + toggleShowHUDVideoFPS: + toggleStatusBar: + toggleVerticalSync: + toggleVideoFiltersPreferGPU: + toggleVideoSourceDeposterize: + writeDefaultsDisplayGap: + writeDefaultsDisplayRotation: + writeDefaultsDisplayVideoSettings: + writeDefaultsHUDSettings: + + + YES + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + YES + + YES + changeCoreSpeed: + changeDisplayGap: + changeDisplayMode: + changeDisplayOrder: + changeDisplayOrientation: + changeHardwareMicGain: + changeHardwareMicMute: + changeRotation: + changeRotationRelative: + changeScale: + changeVideoOutputFilter: + changeVideoPixelScaler: + changeVolume: + copy: + frameAdvance: + openRom: + reset: + saveScreenshotAs: + toggleExecutePause: + toggleFullScreenDisplay: + toggleHUDVisibility: + toggleKeepMinDisplaySizeAtNormal: + toggleNDSDisplays: + toggleShowHUDCPULoadAverage: + toggleShowHUDFrameIndex: + toggleShowHUDInput: + toggleShowHUDLagFrameCount: + toggleShowHUDRealTimeClock: + toggleShowHUDRender3DFPS: + toggleShowHUDVideoFPS: + toggleStatusBar: + toggleVerticalSync: + toggleVideoFiltersPreferGPU: + toggleVideoSourceDeposterize: + writeDefaultsDisplayGap: + writeDefaultsDisplayRotation: + writeDefaultsDisplayVideoSettings: + writeDefaultsHUDSettings: + + + YES + + changeCoreSpeed: + id + + + changeDisplayGap: + id + + + changeDisplayMode: + id + + + changeDisplayOrder: + id + + + changeDisplayOrientation: + id + + + changeHardwareMicGain: + id + + + changeHardwareMicMute: + id + + + changeRotation: + id + + + changeRotationRelative: + id + + + changeScale: + id + + + changeVideoOutputFilter: + id + + + changeVideoPixelScaler: + id + + + changeVolume: + id + + + copy: + id + + + frameAdvance: + id + + + openRom: + id + + + reset: + id + + + saveScreenshotAs: + id + + + toggleExecutePause: + id + + + toggleFullScreenDisplay: + id + + + toggleHUDVisibility: + id + + + toggleKeepMinDisplaySizeAtNormal: + id + + + toggleNDSDisplays: + id + + + toggleShowHUDCPULoadAverage: + id + + + toggleShowHUDFrameIndex: + id + + + toggleShowHUDInput: + id + + + toggleShowHUDLagFrameCount: + id + + + toggleShowHUDRealTimeClock: + id + + + toggleShowHUDRender3DFPS: + id + + + toggleShowHUDVideoFPS: + id + + + toggleStatusBar: + id + + + toggleVerticalSync: + id + + + toggleVideoFiltersPreferGPU: + id + + + toggleVideoSourceDeposterize: + id + + + writeDefaultsDisplayGap: + id + + + writeDefaultsDisplayRotation: + id + + + writeDefaultsDisplayVideoSettings: + id + + + writeDefaultsHUDSettings: + id + + + + + YES + + YES + microphoneGainControlView + microphoneGainMenuItem + microphoneGainSlider + microphoneMuteButton + outputVolumeControlView + outputVolumeMenuItem + saveScreenshotPanelAccessoryView + view + + + YES + NSView + NSMenuItem + NSSlider + NSButton + NSView + NSMenuItem + NSView + DisplayView + + + + YES + + YES + microphoneGainControlView + microphoneGainMenuItem + microphoneGainSlider + microphoneMuteButton + outputVolumeControlView + outputVolumeMenuItem + saveScreenshotPanelAccessoryView + view + + + YES + + microphoneGainControlView + NSView + + + microphoneGainMenuItem + NSMenuItem + + + microphoneGainSlider + NSSlider + + + microphoneMuteButton + NSButton + + + outputVolumeControlView + NSView + + + outputVolumeMenuItem + NSMenuItem + + + saveScreenshotPanelAccessoryView + NSView + + + view + DisplayView + + + + + + + + YES + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSApplicationScripting.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSColorPanel.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSHelpManager.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSPageLayout.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSUserInterfaceItemSearching.h + + + + NSButton + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSButton.h + + + + NSButtonCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSButtonCell.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSMenuItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSMenuItemCell + NSButtonCell + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItemCell.h + + + + NSNumberFormatter + NSFormatter + + IBFrameworkSource + Foundation.framework/Headers/NSNumberFormatter.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAccessibility.h + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDictionaryController.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDragging.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontPanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSKeyValueBinding.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSNibLoading.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSOutlineView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSPasteboard.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSavePanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbarItem.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObjectScripting.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPortCoder.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptObjectSpecifiers.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptWhoseTests.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLDownload.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CIImageProvider.h + + + + NSPopUpButton + NSButton + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButton.h + + + + NSPopUpButtonCell + NSMenuItemCell + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButtonCell.h + + + + NSProgressIndicator + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSProgressIndicator.h + + + + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSInterfaceStyle.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSSlider + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSSlider.h + + + + NSSliderCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSSliderCell.h + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSToolbar + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbar.h + + + + NSToolbarItem + NSObject + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSClipView.h + + + + NSView + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSRulerView.h + + + + NSView + NSResponder + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSDrawer.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSWindowScripting.h + + + + NSWindowController + NSResponder + + showWindow: + id + + + showWindow: + + showWindow: + id + + + + IBFrameworkSource + AppKit.framework/Headers/NSWindowController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../../DeSmuME (XCode 3).xcodeproj + 3 + + YES + + YES + Icon_DisplayToggle_420x420 + Icon_Execute_420x420 + Icon_FrameAdvance_420x420 + Icon_MicrophoneBlack_256x256 + Icon_OpenROM_420x420 + Icon_Reset_420x420 + Icon_RotateCCW_420x420 + Icon_RotateCW_420x420 + Icon_ShowHUD_420x420 + Icon_Speed2x_420x420 + Icon_VolumeFull_16x16 + NSMenuCheckmark + NSMenuMixedState + NSSwitch + + + YES + {420, 420} + {420, 420} + {420, 420} + {256, 256} + {420, 420} + {420, 420} + {420, 420} + {420, 420} + {420, 420} + {420, 420} + {16, 16} + {9, 8} + {7, 2} + {15, 15} + + + diff --git a/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.h b/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.h index d2b132178..055c78b1e 100644 --- a/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.h +++ b/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.h @@ -60,6 +60,8 @@ class OGLVideoOutput; @property (assign) NSInteger outputFilter; @property (assign) NSInteger pixelScaler; +- (void) reassignLocalCALayer; + - (BOOL) handleKeyPress:(NSEvent *)theEvent keyPressed:(BOOL)keyPressed; - (BOOL) handleMouseButton:(NSEvent *)theEvent buttonPressed:(BOOL)buttonPressed; - (void) requestScreenshot:(NSURL *)fileURL fileType:(NSBitmapImageFileType)fileType; diff --git a/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.mm b/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.mm index e5688430f..56f14da41 100644 --- a/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.mm +++ b/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.mm @@ -27,11 +27,13 @@ #import "cocoa_util.h" #include "MacOGLDisplayView.h" -/* -#if defined(MAC_OS_X_VERSION_10_11) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) + +//#define ENABLE_APPLE_METAL + +#if defined(MAC_OS_X_VERSION_10_11) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) && defined(ENABLE_APPLE_METAL) #include "MacMetalDisplayView.h" #endif -*/ + #include #if defined(__ppc__) || defined(__ppc64__) @@ -652,9 +654,9 @@ static std::unordered_map _screenMap; // defer:NO screen:targetScreen] autorelease]; [newFullScreenWindow setHasShadow:NO]; - [newFullScreenWindow setInitialFirstResponder:view]; [view setFrame:screenRect]; [[newFullScreenWindow contentView] addSubview:view]; + [newFullScreenWindow setInitialFirstResponder:view]; [newFullScreenWindow setDelegate:self]; // If the target screen is the main screen (index 0), then autohide the menu bar and dock. @@ -690,8 +692,10 @@ static std::unordered_map _screenMap; // NSRect viewFrame = [[masterWindow contentView] frame]; viewFrame.size.height -= _statusBarHeight; viewFrame.origin.y = _statusBarHeight; + [view setFrame:viewFrame]; [[masterWindow contentView] addSubview:view]; + [masterWindow setInitialFirstResponder:view]; [masterWindow makeKeyAndOrderFront:self]; [masterWindow display]; } @@ -1268,6 +1272,7 @@ static std::unordered_map _screenMap; // [[emuControl windowList] addObject:self]; [emuControl updateAllWindowTitles]; + [view reassignLocalCALayer]; [view setInputManager:[emuControl inputManager]]; // Set up the scaling factor if this is a Retina window @@ -1620,8 +1625,8 @@ static std::unordered_map _screenMap; // cdsVideoOutput = nil; localLayer = nil; localOGLContext = nil; -/* -#if defined(MAC_OS_X_VERSION_10_11) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) + +#if defined(MAC_OS_X_VERSION_10_11) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) && defined(ENABLE_APPLE_METAL) if (IsOSXVersionSupported(10, 11, 0)) { localLayer = [[DisplayViewMetalLayer alloc] init]; @@ -1631,37 +1636,20 @@ static std::unordered_map _screenMap; // [localLayer release]; localLayer = nil; } - else - { - [self setLayer:localLayer]; - [self setWantsLayer:YES]; - - if ([self respondsToSelector:@selector(setLayerContentsRedrawPolicy:)]) - { - [self setLayerContentsRedrawPolicy:NSViewLayerContentsRedrawNever]; - } - } } #endif -*/ + if (localLayer == nil) { localLayer = [[DisplayViewOpenGLLayer alloc] init]; MacOGLDisplayView *macOGLCDV = (MacOGLDisplayView *)[(id)localLayer clientDisplay3DView]; + // For macOS 10.8 Mountain Lion and later, we can use the CAOpenGLLayer directly. But for + // earlier versions of macOS, using the CALayer directly will cause too many strange issues, + // so we'll just keep using the old-school NSOpenGLContext for these older macOS versions. if (IsOSXVersionSupported(10, 8, 0)) { macOGLCDV->SetRenderToCALayer(true); - - [self setLayer:localLayer]; - [self setWantsLayer:YES]; - -#if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - if ([self respondsToSelector:@selector(setLayerContentsRedrawPolicy:)]) - { - [self setLayerContentsRedrawPolicy:NSViewLayerContentsRedrawNever]; - } -#endif } else { @@ -1671,7 +1659,8 @@ static std::unordered_map _screenMap; // [self setWantsBestResolutionOpenGLSurface:YES]; } #endif - localOGLContext = [[NSOpenGLContext alloc] initWithCGLContextObj:macOGLCDV->GetContext()]; + localOGLContext = macOGLCDV->GetNSContext(); + [localOGLContext retain]; macOGLCDV->SetRenderToCALayer(false); } } @@ -1828,6 +1817,29 @@ static std::unordered_map _screenMap; // return [[self cdsVideoOutput] pixelScaler]; } +#pragma mark Class Methods +- (void) reassignLocalCALayer +{ + if (localOGLContext != nil) + { + // If localOGLContext isn't nil, then we will not assign the local layer + // directly to the view, since the OpenGL context will already be what + // is assigned. + return; + } + + [localLayer setNeedsDisplay]; + [self setLayer:localLayer]; + [self setWantsLayer:YES]; + +#if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + if ([self respondsToSelector:@selector(setLayerContentsRedrawPolicy:)]) + { + [self setLayerContentsRedrawPolicy:NSViewLayerContentsRedrawNever]; + } +#endif +} + #pragma mark InputHIDManagerTarget Protocol - (BOOL) handleHIDQueue:(IOHIDQueueRef)hidQueue hidManager:(InputHIDManager *)hidManager { @@ -1959,7 +1971,6 @@ static std::unordered_map _screenMap; // return NO; } -#if defined(MAC_OS_X_VERSION_10_8) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8) - (BOOL)wantsUpdateLayer { return YES; @@ -1970,7 +1981,6 @@ static std::unordered_map _screenMap; // ClientDisplay3DView *cdv = [(id)localLayer clientDisplay3DView]; cdv->UpdateView(); } -#endif - (void)drawRect:(NSRect)dirtyRect { @@ -1985,11 +1995,6 @@ static std::unordered_map _screenMap; // if (rect.size.width != oldFrame.size.width || rect.size.height != oldFrame.size.height) { - if (localOGLContext != nil) - { - [localOGLContext update]; - } - DisplayWindowController *windowController = (DisplayWindowController *)[[self window] delegate]; ClientDisplayViewProperties &props = [windowController localViewProperties]; NSRect newViewportRect = rect; @@ -2010,6 +2015,21 @@ static std::unordered_map _screenMap; // props.clientHeight = newViewportRect.size.height; props.viewScale = ClientDisplayView::GetMaxScalarWithinBounds(checkWidth, checkHeight, props.clientWidth, props.clientHeight); + if (localOGLContext != nil) + { + [localOGLContext update]; + } + else if ([localLayer isKindOfClass:[CAOpenGLLayer class]]) + { + [localLayer setBounds:CGRectMake(0.0f, 0.0f, props.clientWidth, props.clientHeight)]; + } +#if defined(MAC_OS_X_VERSION_10_11) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) && defined(ENABLE_APPLE_METAL) + else if ([[self layer] isKindOfClass:[CAMetalLayer class]]) + { + [(CAMetalLayer *)localLayer setDrawableSize:CGSizeMake(props.clientWidth, props.clientHeight)]; + } +#endif + [[self cdsVideoOutput] commitViewProperties:props]; } } diff --git a/desmume/src/frontend/cocoa/userinterface/MacOGLDisplayView.h b/desmume/src/frontend/cocoa/userinterface/MacOGLDisplayView.h index 69a5cc884..b21839a2e 100644 --- a/desmume/src/frontend/cocoa/userinterface/MacOGLDisplayView.h +++ b/desmume/src/frontend/cocoa/userinterface/MacOGLDisplayView.h @@ -42,18 +42,20 @@ class MacOGLDisplayView; class MacOGLDisplayView : public OGLVideoOutput, public DisplayViewCALayerInterface { protected: - CGLPixelFormatObj _pixelFormat; + NSOpenGLContext *_nsContext; + NSOpenGLPixelFormat *_nsPixelFormat; CGLContextObj _context; + CGLPixelFormatObj _pixelFormat; bool _willRenderToCALayer; - - void _FrameRenderAndFlush(); - + public: void operator delete(void *ptr); MacOGLDisplayView(); virtual void Init(); + NSOpenGLPixelFormat* GetNSPixelFormat() const; + NSOpenGLContext* GetNSContext() const; CGLPixelFormatObj GetPixelFormat() const; CGLContextObj GetContext() const; @@ -78,11 +80,10 @@ public: virtual void SetPixelScaler(const VideoFilterTypeID filterID); // Client view interface + virtual void LoadDisplays(); + virtual void ProcessDisplays(); virtual void UpdateView(); virtual void FrameFinish(); - - // Emulator interface - virtual void HandleGPUFrameEndEvent(const NDSDisplayInfo &ndsDisplayInfo); }; #endif // _MAC_OGLDISPLAYOUTPUT_H_ diff --git a/desmume/src/frontend/cocoa/userinterface/MacOGLDisplayView.mm b/desmume/src/frontend/cocoa/userinterface/MacOGLDisplayView.mm index d459d9cec..10bf7f1fa 100644 --- a/desmume/src/frontend/cocoa/userinterface/MacOGLDisplayView.mm +++ b/desmume/src/frontend/cocoa/userinterface/MacOGLDisplayView.mm @@ -32,6 +32,7 @@ _cdv->SetFrontendLayer(self); _cdv->Init(); + [self setBounds:CGRectMake(0.0f, 0.0f, (float)GPU_FRAMEBUFFER_NATIVE_WIDTH, (float)GPU_FRAMEBUFFER_NATIVE_HEIGHT)]; [self setAsynchronous:NO]; [self setOpaque:YES]; @@ -72,15 +73,17 @@ - (void)drawInCGLContext:(CGLContextObj)glContext pixelFormat:(CGLPixelFormatObj)pixelFormat forLayerTime:(CFTimeInterval)timeInterval displayTime:(const CVTimeStamp *)timeStamp { + CGLSetCurrentContext(glContext); + CGLLockContext(glContext); _cdv->RenderViewOGL(); [super drawInCGLContext:glContext pixelFormat:pixelFormat forLayerTime:timeInterval displayTime:timeStamp]; + CGLUnlockContext(glContext); } @end void MacOGLDisplayView::operator delete(void *ptr) { - CGLPixelFormatObj pixelFormat = ((MacOGLDisplayView *)ptr)->GetPixelFormat(); CGLContextObj context = ((MacOGLDisplayView *)ptr)->GetContext(); OGLContextInfo *contextInfo = ((MacOGLDisplayView *)ptr)->GetContextInfo(); @@ -92,23 +95,28 @@ void MacOGLDisplayView::operator delete(void *ptr) CGLSetCurrentContext(prevContext); delete contextInfo; - CGLReleaseContext(context); - CGLReleasePixelFormat(pixelFormat); + [((MacOGLDisplayView *)ptr)->GetNSContext() release]; + [((MacOGLDisplayView *)ptr)->GetNSPixelFormat() release]; } } MacOGLDisplayView::MacOGLDisplayView() { - // Initialize the OpenGL context + // Initialize the OpenGL context. + // + // We create an NSOpenGLContext and extract the CGLContextObj from it because + // [NSOpenGLContext CGLContextObj] is available on macOS 10.5 Leopard, but + // [NSOpenGLContext initWithCGLContextObj:] is only available on macOS 10.6 + // Snow Leopard. bool useContext_3_2 = false; - CGLPixelFormatAttribute attributes[] = { - kCGLPFAColorSize, (CGLPixelFormatAttribute)24, - kCGLPFAAlphaSize, (CGLPixelFormatAttribute)8, - kCGLPFADepthSize, (CGLPixelFormatAttribute)0, - kCGLPFAStencilSize, (CGLPixelFormatAttribute)0, - kCGLPFADoubleBuffer, - (CGLPixelFormatAttribute)0, (CGLPixelFormatAttribute)0, - (CGLPixelFormatAttribute)0 + NSOpenGLPixelFormatAttribute attributes[] = { + NSOpenGLPFAColorSize, (NSOpenGLPixelFormatAttribute)24, + NSOpenGLPFAAlphaSize, (NSOpenGLPixelFormatAttribute)8, + NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)0, + NSOpenGLPFAStencilSize, (NSOpenGLPixelFormatAttribute)0, + NSOpenGLPFADoubleBuffer, + (NSOpenGLPixelFormatAttribute)0, (NSOpenGLPixelFormatAttribute)0, + (NSOpenGLPixelFormatAttribute)0 }; #ifdef _OGLDISPLAYOUTPUT_3_2_H_ @@ -117,25 +125,25 @@ MacOGLDisplayView::MacOGLDisplayView() useContext_3_2 = IsOSXVersionSupported(10, 7, 0); if (useContext_3_2) { - attributes[9] = kCGLPFAOpenGLProfile; - attributes[10] = (CGLPixelFormatAttribute)kCGLOGLPVersion_3_2_Core; + attributes[9] = NSOpenGLPFAOpenGLProfile; + attributes[10] = (NSOpenGLPixelFormatAttribute)NSOpenGLProfileVersion3_2Core; } #endif - GLint virtualScreenCount = 0; - CGLChoosePixelFormat(attributes, &_pixelFormat, &virtualScreenCount); - - if (_pixelFormat == NULL) + _nsPixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; + if (_nsPixelFormat == nil) { // If we can't get a 3.2 Core Profile context, then switch to using a // legacy context instead. useContext_3_2 = false; - attributes[9] = (CGLPixelFormatAttribute)0; - attributes[10] = (CGLPixelFormatAttribute)0; - CGLChoosePixelFormat(attributes, &_pixelFormat, &virtualScreenCount); + attributes[9] = (NSOpenGLPixelFormatAttribute)0; + attributes[10] = (NSOpenGLPixelFormatAttribute)0; + _nsPixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; } - CGLCreateContext(_pixelFormat, NULL, &_context); + _nsContext = [[NSOpenGLContext alloc] initWithFormat:_nsPixelFormat shareContext:nil]; + _context = (CGLContextObj)[_nsContext CGLContextObj]; + _pixelFormat = (CGLPixelFormatObj)[_nsPixelFormat CGLPixelFormatObj]; CGLContextObj prevContext = CGLGetCurrentContext(); CGLSetCurrentContext(_context); @@ -164,17 +172,14 @@ void MacOGLDisplayView::Init() CGLSetCurrentContext(prevContext); } -void MacOGLDisplayView::_FrameRenderAndFlush() +NSOpenGLPixelFormat* MacOGLDisplayView::GetNSPixelFormat() const { - if (this->_willRenderToCALayer) - { - this->CALayerDisplay(); - } - else - { - this->RenderViewOGL(); - CGLFlushDrawable(this->_context); - } + return this->_nsPixelFormat; +} + +NSOpenGLContext* MacOGLDisplayView::GetNSContext() const +{ + return this->_nsContext; } CGLPixelFormatObj MacOGLDisplayView::GetPixelFormat() const @@ -268,14 +273,39 @@ void MacOGLDisplayView::SetPixelScaler(const VideoFilterTypeID filterID) CGLUnlockContext(this->_context); } -void MacOGLDisplayView::UpdateView() +// NDS GPU Interface +void MacOGLDisplayView::LoadDisplays() { CGLLockContext(this->_context); CGLSetCurrentContext(this->_context); - this->_FrameRenderAndFlush(); + this->OGLVideoOutput::LoadDisplays(); CGLUnlockContext(this->_context); } +void MacOGLDisplayView::ProcessDisplays() +{ + CGLLockContext(this->_context); + CGLSetCurrentContext(this->_context); + this->OGLVideoOutput::ProcessDisplays(); + CGLUnlockContext(this->_context); +} + +void MacOGLDisplayView::UpdateView() +{ + if (this->_willRenderToCALayer) + { + this->CALayerDisplay(); + } + else + { + CGLLockContext(this->_context); + CGLSetCurrentContext(this->_context); + this->RenderViewOGL(); + CGLFlushDrawable(this->_context); + CGLUnlockContext(this->_context); + } +} + void MacOGLDisplayView::FrameFinish() { CGLLockContext(this->_context); @@ -283,14 +313,3 @@ void MacOGLDisplayView::FrameFinish() this->OGLVideoOutput::FrameFinish(); CGLUnlockContext(this->_context); } - -void MacOGLDisplayView::HandleGPUFrameEndEvent(const NDSDisplayInfo &ndsDisplayInfo) -{ - this->OGLVideoOutput::HandleGPUFrameEndEvent(ndsDisplayInfo); - - CGLLockContext(this->_context); - CGLSetCurrentContext(this->_context); - this->LoadDisplays(); - this->ProcessDisplays(); - CGLUnlockContext(this->_context); -}