From cfae658b6aa175ff1dfe2362e90c4949b14aeed6 Mon Sep 17 00:00:00 2001 From: shenlei Date: Wed, 30 Sep 2026 14:21:57 +0900 Subject: [PATCH] audit: GrpTextInstance port-map (verbatim, Render draws via UI commands) Co-Authored-By: Claude Opus 5.5 --- audit/history.jsonl | 1 + .../port-map/EterLib/GrpTextInstance.cpp.json | 419 ++++++++++++++++++ 2 files changed, 420 insertions(+) create mode 100644 audit/port-map/EterLib/GrpTextInstance.cpp.json diff --git a/audit/history.jsonl b/audit/history.jsonl index 2d40ef49..029be66c 100644 --- a/audit/history.jsonl +++ b/audit/history.jsonl @@ -634,3 +634,4 @@ {"date": "2026-09-30", "unit": "EterLib/GrpImageInstance.cpp", "action": "port", "evidence": "verbatim; draw via UIRenderAddImage; port.grp_resource quad/uv/colour"} {"date": "2026-09-30", "unit": "EterLib/GrpExpandedImageInstance.cpp", "action": "port", "evidence": "verbatim; draw + blend mode via UIRenderAddImage, SCREEN/COLOR_DODGE blend fixed to INVDESTCOLOR (0x2A); OnIsType recursion avoided; port.grp_resource"} {"date": "2026-09-30", "unit": "EterLib/GrpFontTexture.cpp", "action": "port", "evidence": "40250 bodies over Win32Gdi; HiDPI oversample adaptations noted; port.text"} +{"date": "2026-09-30", "unit": "EterLib/GrpTextInstance.cpp", "action": "port", "evidence": "verbatim except Render draw calls -> UIRender commands; port.text, port.app_loop"} diff --git a/audit/port-map/EterLib/GrpTextInstance.cpp.json b/audit/port-map/EterLib/GrpTextInstance.cpp.json new file mode 100644 index 00000000..2293f3d4 --- /dev/null +++ b/audit/port-map/EterLib/GrpTextInstance.cpp.json @@ -0,0 +1,419 @@ +{ + "reference": "EterLib/GrpTextInstance.cpp", + "reference_sha256": "e6b66bc43e678e02dae1625facec67a67d6e245f4aa0d5adf9f9d570272e98d8", + "priority": "P4", + "contracts": [], + "functions": { + "CGraphicTextInstance::Hyperlink_UpdateMousePos": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::Hyperlink_UpdateMousePos" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::Hyperlink_GetText": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::Hyperlink_GetText" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::__DrawCharacter": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::__DrawCharacter" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::__GetTextPos": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::__GetTextPos" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "isNumberic": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:isNumberic" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "IsValidToken": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:IsValidToken" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "FindToken": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:FindToken" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "ReadToken": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:ReadToken" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::Update": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::Update" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::Render": { + "status": "ADAPTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::Render" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ], + "note": "40250: saves SRCALPHA/INVSRCALPHA blend, disables fog/lighting, texture*diffuse modulate, draws each glyph as a PDT triangle strip and the cursor/IME underline as FILL_RECT quads. Port: the verbatim layout loop emits one UIRenderAddImage per glyph (page texture, same corners/UVs/colour) and a Bar per fill quad; the UI pipeline is alpha-blended with texture*vertex colour. Invariant: same glyph quads, order and colours." + }, + "CGraphicTextInstance::CreateSystem": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::CreateSystem" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::DestroySystem": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::DestroySystem" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::New": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::New" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::Delete": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::Delete" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::ShowCursor": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::ShowCursor" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::HideCursor": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::HideCursor" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::ShowOutLine": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::ShowOutLine" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::HideOutLine": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::HideOutLine" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetColor": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetColor" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetOutLineColor": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetOutLineColor" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetSecret": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetSecret" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetOutline": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetOutline" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetFeather": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetFeather" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetMultiLine": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetMultiLine" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetHorizonalAlign": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetHorizonalAlign" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetVerticalAlign": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetVerticalAlign" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetMax": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetMax" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetLimitWidth": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetLimitWidth" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetValueString": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetValueString" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetValue": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetValue" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetPosition": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetPosition" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::SetTextPointer": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::SetTextPointer" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::GetValueStringReference": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::GetValueStringReference" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::GetTextLineCount": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::GetTextLineCount" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::GetTextSize": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::GetTextSize" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::PixelPositionToCharacterPosition": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::PixelPositionToCharacterPosition" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::GetHorizontalAlign": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::GetHorizontalAlign" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::__Initialize": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::__Initialize" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::Destroy": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::Destroy" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::CGraphicTextInstance": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::CGraphicTextInstance" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + }, + "CGraphicTextInstance::~CGraphicTextInstance": { + "status": "PORTED", + "impl": [ + "src/platform/EterLib/GrpTextInstance.cpp:CGraphicTextInstance::~CGraphicTextInstance" + ], + "test": [ + "tests/port/port_text_test.cpp", + "tests/port/port_app_loop_test.cpp" + ] + } + } +}