📄 textcontrol.java
字号:
private static final int STRING_EASY = 84;
private static final int STRING_NORMAL = 85;
private static final int STRING_HARD = 86;
private static final int STRING_NATION0 = 87;
private static final int STRING_NATION1 = 88;
private static final int STRING_NATION2 = 89;
private static final int STRING_NATION3 = 90;
private static final int STRING_NATION4 = 91;
private static final int STRING_NATION5 = 92;
private static final int STRING_NATION6 = 93;
private static final int STRING_NATION7 = 94;
private static final int STRING_NATION8 = 95;
private static final int STRING_NATION9 = 96;
private static final int STRING_NATION10 = 97;
private static final int STRING_ATHLETE0 = 98;
private static final int STRING_ATHLETE1 = 99;
private static final int STRING_ATHLETE2 = 100;
private static final int STRING_ATHLETE3 = 101;
private static final int STRING_ATHLETE4 = 102;
private static final int STRING_ATHLETE5 = 103;
private static final int STRING_ATHLETE6 = 104;
private static final int STRING_ATHLETE7 = 105;
private static final int STRING_ATHLETE8 = 106;
private static final int STRING_ATHLETE9 = 107;
private static final int STRING_ATHLETE10 = 108;
private static final int STRING_GAME_TITLE = 109;
private static final int STRING_VERSION = 110;
private static final int STRING_COPYRIGHT_TEXT = 111;
private static final int STRING_CREDITS = 112;
private static final int STRING_SELECT_LANGUAGE = 113;
private static final int STRING_LANG0 = 114;
private static final int STRING_LANG1 = 115;
private static final int STRING_LANG2 = 116;
private static final int STRING_LANG3 = 117;
private static final int STRING_LANG4 = 118;
private static final int STRING_GAME_IN_PROGRESS = 119;
private static final int STRING_RESUME_GAME = 120;
private static final int STRING_ABORT_GAME = 121;
private static final int STRING_BACK = 122;
private static final int STRING_OK = 123;
private static final int STRING_CANCEL = 124;
private static final int STRING_MENU = 125;
private static final int STRING_LOADING = 126;
private static final int STRING_GUEST = 127;
private static final int STRING_LOGGING_IN = 128;
private static final int STRING_GAME_LOBBY = 129;
private static final int STRING_RATE_GAME = 130;
private static final int STRING_LEADERBOARD = 131;
private static final int STRING_REGISTER_ON = 132;
private static final int STRING_GAME_LOBBY_Q = 133;
private static final int STRING_TO_GAME_LOBBY = 134;
private static final int STRING_WELCOME = 135;
private static final int RESFILE_COMMON = 136;
private static final int RESFILE_COUNTRY = 137;
private static final int RESFILE_GFX = 138;
private static final int RESFILE_AUDIO = 139;
// defines from GameData
// we never have more than a few gates on the screen at once
// we're only going to store animation data for a few gates
// we'll pad it a bit to take into account the fact that the
// skier still moves while the gates animate.
//#ifdef _HIRES_GRAPHICS
////#define HURDLE_XOFF 12
////#define HURDLE_HEIGHT 31 // in pixels
////#define SHOOTINGREF_HEIGHT 54
////#define PIXEL_PER_M 24
////#define M_PER_PIXEL 2731
//#else
//#endif
//#define MAX_PLAYERS 4
//#ifndef _MAX_HUMAN_PLAYERS
//#endif
// Virtual key codes
// COLORS (RGB)
//#ifdef _LOW_DETAIL
//#else
////#define COLOR_SKY 0xc1ccf5
//#endif
//#ifdef _MULTI_LANG
////#define LANG_COUNT 5
//#else
//#endif
//#ifndef _LIMITED_EVENTS
//
////#define EVENT_SKI_JUMP 1
////#define EVENT_BIATHLON 2
////#define EVENT_SKIING 3
////#define EVENT_COUNT 4
////#define EVENT_COMPETITION 4
//
//#else
//#endif
//#ifdef _IS_NokiaS40
//// #define SOUND_COUNT 5
//#elif defined(_IS_NokiaS60) && !defined(_MMAPI)
//// #define SOUND_CROWD 5
//// #define SOUND_CRASH 6
//// #define SOUND_COUNT 7
//#elif defined(_LIMITED_SOUNDS)
//// #define SOUND_CRASH 5
//// #define SOUND_COUNT 6
//#else
//#endif
//#endif
//#ifdef _DEBUG
////#define DUMP_EXCEPTION(e) { //System.out.println( e.getMessage()); e.printStackTrace(); }
////#define DUMP_EXCEPTION_MSG(e,msg) { //System.out.println( msg + "\n" + e.getMessage()); e.printStackTrace(); }
////#define DEBUG_MSG(msg) //System.out.println(msg)
//#else
//#endif
//#ifdef _PROFILE
////#define START_TIMER(a) a = System.currentTimeMillis();
////#define STOP_TIMER(a) a = System.currentTimeMillis() - a;
//#else
//#endif
public final static int RESIZE_LEFT = 0;
public final static int RESIZE_CENTERED = 1;
public final static int FULL_SCROLL = 2;
private final static int MAX_LINES = 100;
//********************************************************************
private final static int INVALID_PAGE = -1;
private Window m_page;
private int m_iCurrentPage;
private int m_iPageCount;
private int m_iLineCount;
private int m_iTextWidth;
private int m_iTextColor;
private int m_iTextStyle;
private int m_iType;
private String m_asTextLines[] = new String[MAX_LINES];
private int m_aiStartLines[] = new int[MAX_LINES];
//********************************************************************
public TextControl( TorinoCanvas canvas )
{
super( canvas );
}
public void init( String sText, int iType, int iTextStyle, int iTextColor ) throws IOException
{
m_iTextColor = iTextColor;
m_iType = iType;
m_iTextStyle = iTextStyle;
m_iTextWidth = m_iWidth;
switch (m_iType)
{
case RESIZE_LEFT:
case RESIZE_CENTERED:
m_iTextWidth -= 4;
break;
case FULL_SCROLL:
m_iTextWidth -= 7/*@ARROW_WIDTH*/ + 6;
break;
}
m_iLineCount = 0;
// split the text
String sTemp = null;
String sPara = new String(sText);
int index1 = -1;
int iBreak = -1;
iBreak = sPara.indexOf( '$' );
while ( m_canvas.m_menuFont.stringWidth( sPara ) > m_iTextWidth || iBreak != -1)
{
int iStart = 0;
int iEnd = 0;
while ( m_canvas.m_menuFont.substringWidth( sPara, 0, iEnd ) <= m_iTextWidth
&& (iBreak == -1 || iBreak >= iStart ))
{
iStart = iEnd;
index1 = sPara.indexOf( ' ', iStart );
if (index1 == -1 && iBreak == -1)
iEnd = sPara.length();
else if ( iBreak >= 0 && iBreak < index1 )
iEnd = iBreak+1;
else
iEnd = index1+1;
}
if (iStart == 0)
iStart = iEnd;
sTemp = sPara.substring( 0, iStart-1 );
m_asTextLines[m_iLineCount] = sTemp;
m_iLineCount++;
if (iStart < sPara.length())
sPara = sPara.substring( iStart );
iBreak = sPara.indexOf( '$' );
}
if ( sPara.length() > 0 )
{
m_asTextLines[m_iLineCount] = sPara;
m_iLineCount++;
}
m_aiStartLines[0] = 0;
m_iPageCount = 1;
if ( m_iType == FULL_SCROLL )
{
int iFontHeight = m_canvas.m_menuFont.getHeight()+2;
//#ifdef _IS_NOKIA
// HACK! - The Nokia 7210 incorrectly returns 9 for the
// height of the small font, when it should be 12.
// If you give us back a number this low, we think you're lying
if (iFontHeight < 14)
iFontHeight = 14;
//#endif
int iLines = (m_iHeight+(-3)/*@FONT_PADDING*/)/(iFontHeight+(-3)/*@FONT_PADDING*/);
while(true)
{
if (m_iLineCount - m_aiStartLines[m_iPageCount-1] <= iLines)
break;
else
{
m_aiStartLines[m_iPageCount] = m_aiStartLines[m_iPageCount-1] + iLines - 1;
m_iPageCount++;
}
}
}
m_iCurrentPage = INVALID_PAGE;
setPage( 0 );
if ( m_iType == RESIZE_LEFT || m_iType == RESIZE_CENTERED )
{
// resize
int iWidth = m_iWidth;
sizeToChildren();
setDimensions( iWidth, m_iHeight );
}
}
public void setPage( int iPage ) throws IOException
{
if (iPage < 0 || iPage >= m_iPageCount || iPage == m_iCurrentPage)
return;
if (m_page != null)
{
remove(m_page);
m_page = null;
}
m_page = new Window( m_canvas );
m_page.m_iContainerType = CONTAINER_SHELF;
m_page.setAlignment( Drawable.ALIGNH_CENTER | Drawable.ALIGNV_MIDDLE );
m_page.setDimensions( m_iWidth-4, m_iHeight );
m_page.setPadding(2);
addToFront( m_page );
Window stack = new Window( m_canvas );
stack.m_iContainerType = CONTAINER_STACK;
stack.setAlignment( Drawable.ALIGNV_MIDDLE );
stack.setDimensions( m_iTextWidth, m_iHeight );
stack.setPadding((-3)/*@FONT_PADDING*/);
m_page.addToBack( stack );
// create labels and stack them
int iLine = m_aiStartLines[iPage];
int iEnd;
if (iPage==m_iPageCount-1)
iEnd = m_iLineCount;
else
iEnd = m_aiStartLines[iPage+1] + 1;
while ( iLine < iEnd )
{
// create a label and add it to the stack
Label label = new Label(m_canvas.m_menuFont,0,0,0,m_iTextColor,0x000000/*@COLOR_BLACK*/,m_iTextStyle);
label.setAlignment( (m_iType == RESIZE_CENTERED)?Drawable.ALIGNH_CENTER:Drawable.ALIGNH_LEFT );
stack.addToBack( label );
label.setText( m_asTextLines[iLine] );
iLine++;
}
// add arrows if necessary
if (m_iPageCount > 1 && m_iType == FULL_SCROLL)
{
Window container = new Window( m_canvas );
container.setDimensions(m_page.m_iWidth-m_iTextWidth,m_page.m_iHeight - 4);
container.setAlignment( Drawable.ALIGNV_MIDDLE );
m_page.addToBack( container );
//#ifdef _DRAW_PIXELS_SUPPORT
// short[] image = TorinoCanvas.loadPackedPalPixels( RESFILE_MENU, 6/*@RES_ARROWSUD*/,
// RESFILE_MENU, 6/*@RES_ARROWSUD*/+1 );
//#else
Image image = TorinoCanvas.loadPackedImage( RESFILE_COMMON, 6/*@RES_ARROWSUD*/ );
//#endif
if (iPage > 0)
{
Sprite arrow = new Sprite( image, 7/*@ARROW_WIDTH*/, 5/*@ARROW_HEIGHT*/ );
arrow.setAlignment( Drawable.ALIGNH_CENTER | Drawable.ALIGNV_TOP );
container.addToFront( arrow );
}
if (iPage < m_iPageCount-1)
{
Sprite arrow = new Sprite( image, 7/*@ARROW_WIDTH*/, 5/*@ARROW_HEIGHT*/ );
arrow.setFrame(1);
arrow.setAlignment( Drawable.ALIGNH_CENTER | Drawable.ALIGNV_BOTTOM );
container.addToFront( arrow );
}
}
else if ( m_iType == RESIZE_LEFT || m_iType == RESIZE_CENTERED )
{
stack.sizeToChildren();
stack.setDimensions( m_iTextWidth, stack.m_iHeight );
m_page.sizeToChildren();
m_page.setDimensions( m_iWidth-4, m_page.m_iHeight );
}
m_iCurrentPage = iPage;
}
public void nextPage() throws IOException
{
if (m_iCurrentPage < m_iPageCount-1)
setPage( m_iCurrentPage+1 );
}
public void prevPage() throws IOException
{
if (m_iCurrentPage > 0)
setPage( m_iCurrentPage-1 );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -