Olav SørensenPushed v1.62 code4188e803 years agoHistory
160 lines · 4.1 KB · C
RawDownload
#include <stdint.h>#include <stdbool.h>#include "pt2_textout.h"#include "pt2_visuals.h"#include "pt2_helpers.h"#include "pt2_replayer.h"#include "pt2_bmp.h"#include "pt2_mouse.h"#include "pt2_edit.h"#include "pt2_textedit.h"#include "pt2_posed.h" static char posEdNames[MAX_PATTERNS][16]; void posEdClearNames(void){	memset(posEdNames, 0, sizeof (posEdNames)); 	if (ui.posEdScreenShown)		ui.updatePosEd = true;} void posEdEditName(void){	if (editor.currMode == MODE_IDLE || editor.currMode == MODE_EDIT)	{		const uint8_t pattern = (uint8_t)song->header.patternTable[song->currPos & 0x7F]; 		textEdit.textStartPtr = posEdNames[pattern];		textEdit.textEndPtr = posEdNames[pattern] + 15;		textEdit.numBlocks = 15;		textEdit.cursorStartX = 184;		textEdit.cursorStartY = 58;		textEdit.scrollable = true;		enterTextEditMode(PTB_PE_PATTNAME);	}} void posEdInsert(void){	if ((editor.currMode == MODE_IDLE || editor.currMode == MODE_EDIT) && song->header.songLength < 128)	{		for (int32_t i = 0; i < 127-song->currPos; i++)			song->header.patternTable[127-i] = song->header.patternTable[(127-i)-1];		song->header.patternTable[song->currPos] = 0; 		song->header.songLength++;		if (song->currPos > song->header.songLength-1)			editor.currPosEdPattDisp = &song->header.patternTable[song->header.songLength-1]; 		updateWindowTitle(MOD_IS_MODIFIED); 		ui.updateSongSize = true;		ui.updateSongLength = true;		ui.updateSongPattern = true; 		if (ui.posEdScreenShown)			ui.updatePosEd = true;	}} void posEdDelete(void){	if ((editor.currMode == MODE_IDLE || editor.currMode == MODE_EDIT) && song->header.songLength > 1)	{		for (int32_t i = 0; i < 128-song->currPos; i++)			song->header.patternTable[song->currPos+i] = song->header.patternTable[song->currPos+i+1];		song->header.patternTable[127] = 0; 		song->header.songLength--;		if (song->currPos > song->header.songLength-1)			editor.currPosEdPattDisp = &song->header.patternTable[song->header.songLength-1]; 		updateWindowTitle(MOD_IS_MODIFIED); 		ui.updateSongSize = true;		ui.updateSongLength = true;		ui.updateSongPattern = true; 		if (ui.posEdScreenShown)			ui.updatePosEd = true;	}} void posEdToggle(void){	ui.posEdScreenShown ^= 1;	if (ui.posEdScreenShown)	{		renderPosEdScreen();		ui.updatePosEd = true;	}	else	{		displayMainScreen();	}} void renderPosEdScreen(void){	blit32(120, 0, 200, 99, posEdBMP);	ui.updatePosEd = true;} static void drawPosEdName(int32_t entry, int32_t y, bool selected){	const uint8_t pattern = (uint8_t)song->header.patternTable[entry & 0x7F];	for (int32_t i = 0; i < 15; i++)	{		const int32_t x = 184 + (i * FONT_CHAR_W); 		char ch;				if (ui.editTextFlag)			ch = posEdNames[pattern][textEdit.scrollOffset + i];		else			ch = posEdNames[pattern][i]; 		if (ch == '\0')			break; 		if (selected)			charOut(x, y, ch, video.palette[PAL_GENTXT]);		else			charOut(x, y, ch, video.palette[PAL_QADSCP]);	}} void updatePosEd(void){	if (!ui.updatePosEd || !ui.posEdScreenShown || ui.askBoxShown)		return; 	ui.updatePosEd = false; 	// clear entries first	fillRect(128, 23, (22*FONT_CHAR_W)-1, ((FONT_CHAR_H+1)*5)-1, video.palette[PAL_BACKGRD]);	fillRect(128, 53, (22*FONT_CHAR_W)-1, FONT_CHAR_H, video.palette[PAL_GENBKG]);	fillRect(128, 59, (22*FONT_CHAR_W)-1, ((FONT_CHAR_H+1)*6)-1, video.palette[PAL_BACKGRD]); 	for (int32_t i = 0; i < POSED_LIST_SIZE; i++)	{		const int32_t entry = song->currPos - (5 - i);		if (entry < 0 || entry >= song->header.songLength)			continue; 		const int32_t pattern = song->header.patternTable[entry];		const int32_t yPos = 23 + (i * (FONT_CHAR_H+1));		const bool selected = (i == 5);		const uint32_t textColor = selected ? video.palette[PAL_GENTXT] : video.palette[PAL_QADSCP]; 		printThreeDecimals(128, yPos, entry, textColor);		printTwoDecimals(160, yPos, selected ? *editor.currPosEdPattDisp : pattern, textColor);		drawPosEdName(entry, yPos, selected);	} 	// kludge to fix bottom part of text edit marker	if (ui.editTextFlag && (textEdit.object == PTB_PE_PATT || textEdit.object == PTB_PE_PATTNAME))		renderTextEditCursor();}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t