mirror of
https://github.com/libretro/ppsspp.git
synced 2024-12-14 04:28:42 +00:00
90 lines
1.9 KiB
C++
90 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "Common/CommonWindows.h"
|
|
#include "Globals.h"
|
|
#include "GPU/Common/GPUDebugInterface.h"
|
|
#include <algorithm>
|
|
|
|
class CtrlDisplayListView
|
|
{
|
|
HWND wnd;
|
|
RECT rect;
|
|
static const PTCHAR windowClass;
|
|
DisplayList list;
|
|
|
|
HFONT font;
|
|
HFONT boldfont;
|
|
u32 windowStart;
|
|
u32 curAddress;
|
|
u32 selectRangeStart;
|
|
u32 selectRangeEnd;
|
|
|
|
int visibleRows;
|
|
int charWidth;
|
|
int rowHeight;
|
|
int instructionSize;
|
|
bool hasFocus;
|
|
bool validDisplayList;
|
|
|
|
struct {
|
|
int addressStart;
|
|
int opcodeStart;
|
|
} pixelPositions;
|
|
|
|
void toggleBreakpoint();
|
|
public:
|
|
CtrlDisplayListView(HWND _wnd);
|
|
~CtrlDisplayListView();
|
|
static void registerClass();
|
|
static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
static CtrlDisplayListView * getFrom(HWND wnd);
|
|
|
|
HWND GetHWND() {
|
|
return wnd;
|
|
}
|
|
|
|
void onPaint(WPARAM wParam, LPARAM lParam);
|
|
void onKeyDown(WPARAM wParam, LPARAM lParam);
|
|
void onMouseDown(WPARAM wParam, LPARAM lParam, int button);
|
|
void onMouseUp(WPARAM wParam, LPARAM lParam, int button);
|
|
void onVScroll(WPARAM wParam, LPARAM lParam);
|
|
|
|
void redraw();
|
|
void setDisplayList(DisplayList& displayList)
|
|
{
|
|
validDisplayList = true;
|
|
list = displayList;
|
|
gotoAddr(list.pc);
|
|
}
|
|
|
|
void scrollWindow(int lines)
|
|
{
|
|
windowStart += lines*instructionSize;
|
|
redraw();
|
|
}
|
|
|
|
void gotoAddr(unsigned int addr)
|
|
{
|
|
u32 windowEnd = windowStart+visibleRows*instructionSize;
|
|
u32 newAddress = addr&(~(instructionSize-1));
|
|
|
|
if (newAddress < windowStart || newAddress >= windowEnd)
|
|
{
|
|
windowStart = newAddress-visibleRows/2*instructionSize;
|
|
}
|
|
|
|
setCurAddress(newAddress);
|
|
redraw();
|
|
}
|
|
|
|
void setCurAddress(u32 newAddress, bool extend = false)
|
|
{
|
|
u32 after = newAddress + instructionSize;
|
|
curAddress = newAddress;
|
|
selectRangeStart = extend ? std::min(selectRangeStart, newAddress) : newAddress;
|
|
selectRangeEnd = extend ? std::max(selectRangeEnd, after) : after;
|
|
}
|
|
|
|
void scrollAddressIntoView();
|
|
bool curAddressIsVisible();
|
|
}; |