Merge branch 'master' of github.com:hrydgard/native

This commit is contained in:
Henrik Rydgard 2012-10-31 10:15:38 +01:00
commit b3ad7d4584
5 changed files with 35 additions and 26 deletions

View file

@ -29,6 +29,9 @@ static JNIEnv *jniEnvUI;
std::string frameCommand; std::string frameCommand;
std::string frameCommandParam; std::string frameCommandParam;
static uint32_t pad_buttons_async_set;
static uint32_t pad_buttons_async_clear;
// Android implementation of callbacks to the Java part of the app // Android implementation of callbacks to the Java part of the app
void SystemToast(const char *text) { void SystemToast(const char *text) {
frameCommand = "toast"; frameCommand = "toast";
@ -107,6 +110,9 @@ extern "C" void Java_com_turboviking_libnative_NativeApp_init
renderer_inited = false; renderer_inited = false;
first_lost = true; first_lost = true;
pad_buttons_async_set = 0;
pad_buttons_async_clear = 0;
std::string apkPath = GetJavaString(env, japkpath); std::string apkPath = GetJavaString(env, japkpath);
ILOG("APK path: %s", apkPath.c_str()); ILOG("APK path: %s", apkPath.c_str());
VFSRegister("", new ZipAssetReader(apkPath.c_str(), "assets/")); VFSRegister("", new ZipAssetReader(apkPath.c_str(), "assets/"));
@ -202,9 +208,11 @@ extern "C" void Java_com_turboviking_libnative_NativeRenderer_displayResize(JNIE
extern "C" void Java_com_turboviking_libnative_NativeRenderer_displayRender(JNIEnv *env, jobject obj) { extern "C" void Java_com_turboviking_libnative_NativeRenderer_displayRender(JNIEnv *env, jobject obj) {
if (renderer_inited) { if (renderer_inited) {
UpdateInputState(&input_state);
{ {
lock_guard guard(input_state.lock); lock_guard guard(input_state.lock);
input_state.pad_buttons |= pad_buttons_async_set;
input_state.pad_buttons &= ~pad_buttons_async_clear;
UpdateInputState(&input_state);
NativeUpdate(input_state); NativeUpdate(input_state);
EndInputState(&input_state); EndInputState(&input_state);
} }
@ -266,38 +274,36 @@ extern "C" void JNICALL Java_com_turboviking_libnative_NativeApp_touch
input_state.mouse_valid = true; input_state.mouse_valid = true;
} }
extern "C" void Java_com_turboviking_libnative_NativeApp_keyDown extern "C" void Java_com_turboviking_libnative_NativeApp_keyDown(JNIEnv *, jclass, jint key) {
(JNIEnv *, jclass, jint key) {
ILOG("Keydown %i", key);
lock_guard guard(input_state.lock);
// Need a mechanism to release these.
switch (key) { switch (key) {
case 1: // Back case 1: // Back
input_state.pad_buttons |= PAD_BUTTON_BACK; pad_buttons_async_set |= PAD_BUTTON_BACK;
pad_buttons_async_clear &= ~PAD_BUTTON_BACK;
break; break;
case 2: // Menu case 2: // Menu
input_state.pad_buttons |= PAD_BUTTON_MENU; pad_buttons_async_set |= PAD_BUTTON_MENU;
pad_buttons_async_clear &= ~PAD_BUTTON_MENU;
break; break;
case 3: // Search case 3: // Search
input_state.pad_buttons |= PAD_BUTTON_A; pad_buttons_async_set |= PAD_BUTTON_A;
pad_buttons_async_clear &= ~PAD_BUTTON_A;
break; break;
} }
} }
extern "C" void Java_com_turboviking_libnative_NativeApp_keyUp extern "C" void Java_com_turboviking_libnative_NativeApp_keyUp(JNIEnv *, jclass, jint key) {
(JNIEnv *, jclass, jint key) {
ILOG("Keyup %i", key);
lock_guard guard(input_state.lock);
// Need a mechanism to release these.
switch (key) { switch (key) {
case 1: // Back case 1: // Back
input_state.pad_buttons &= ~PAD_BUTTON_BACK; pad_buttons_async_set &= ~PAD_BUTTON_BACK;
pad_buttons_async_clear |= PAD_BUTTON_BACK;
break; break;
case 2: // Menu case 2: // Menu
input_state.pad_buttons &= ~PAD_BUTTON_MENU; pad_buttons_async_set &= ~PAD_BUTTON_MENU;
pad_buttons_async_clear |= PAD_BUTTON_MENU;
break; break;
case 3: // Search case 3: // Search
input_state.pad_buttons &= ~PAD_BUTTON_A; pad_buttons_async_set &= ~PAD_BUTTON_A;
pad_buttons_async_clear |= PAD_BUTTON_A;
break; break;
} }
} }

View file

@ -140,7 +140,7 @@ int UIButton(int id, const LayoutManager &layout, float w, const char *text, int
// Render button // Render button
ui_draw2d.DrawImage2GridH(theme.buttonImage, x, y, x + w); ui_draw2d.DrawImage2GridH((txOffset && theme.buttonSelected) ? theme.buttonSelected : theme.buttonImage, x, y, x + w);
ui_draw2d.DrawTextShadow(theme.uiFont, text, x + w/2, y + h/2 + txOffset, 0xFFFFFFFF, ALIGN_HCENTER | ALIGN_VCENTER); ui_draw2d.DrawTextShadow(theme.uiFont, text, x + w/2, y + h/2 + txOffset, 0xFFFFFFFF, ALIGN_HCENTER | ALIGN_VCENTER);
uistate.lastwidget = id; uistate.lastwidget = id;
@ -361,14 +361,15 @@ int UIList::Do(int id, int x, int y, int w, int h, UIListAdapter *adapter) {
} else if (scrollY < 0.0f) { } else if (scrollY < 0.0f) {
scrollY += 0.3f * -scrollY; scrollY += 0.3f * -scrollY;
} }
lastX = uistate.mousex[0];
lastY = uistate.mousey[0];
uistate.lastwidget = id;
} else { } else {
scrollY = 0.0f; scrollY = 0.0f;
scrolling = false; inertiaY = 0.0f;
} }
lastX = uistate.mousex[0];
lastY = uistate.mousey[0];
uistate.lastwidget = id;
// Drawing and item hittesting // Drawing and item hittesting
// render items // render items
@ -384,7 +385,7 @@ int UIList::Do(int id, int x, int y, int w, int h, UIListAdapter *adapter) {
selected == -1 && selected == -1 &&
UIRegionHit(k, x, item_y, w, itemHeight, 0)) { UIRegionHit(k, x, item_y, w, itemHeight, 0)) {
selected = i; selected = i;
} else if (scrolling) { } else if (scrolling && canScroll) {
selected = -1; selected = -1;
} }
} }

View file

@ -125,6 +125,7 @@ struct UITheme {
int uiFontSmall; int uiFontSmall;
int uiFontSmaller; int uiFontSmaller;
int buttonImage; int buttonImage;
int buttonSelected;
int checkOn; int checkOn;
int checkOff; int checkOff;
}; };

View file

@ -29,17 +29,18 @@ void TouchButton::update(InputState &input_state)
} }
} }
void TouchButton::draw(DrawBuffer &db, uint32_t color) void TouchButton::draw(DrawBuffer &db, uint32_t color, uint32_t colorOverlay)
{ {
float scale = 1.0f; float scale = 1.0f;
if (isDown_) { if (isDown_) {
color |= 0xFF000000; color |= 0xFF000000;
colorOverlay |= 0xFF000000;
scale = 2.0f; scale = 2.0f;
} }
// We only mirror background // We only mirror background
db.DrawImageRotated(imageIndex_, x_ + w_/2, y_ + h_/2, scale, rotationAngle_, color, mirror_h_); db.DrawImageRotated(imageIndex_, x_ + w_/2, y_ + h_/2, scale, rotationAngle_, color, mirror_h_);
if (overlayImageIndex_ != -1) if (overlayImageIndex_ != -1)
db.DrawImageRotated(overlayImageIndex_, x_ + w_/2, y_ + h_/2, scale, rotationAngle_, color); db.DrawImageRotated(overlayImageIndex_, x_ + w_/2, y_ + h_/2, scale, rotationAngle_, colorOverlay);
} }
TouchStick::TouchStick(const Atlas *atlas, int bgImageIndex, int stickImageIndex, int stick) TouchStick::TouchStick(const Atlas *atlas, int bgImageIndex, int stickImageIndex, int stick)

View file

@ -13,7 +13,7 @@ public:
TouchButton(const Atlas *atlas, int imageIndex, int overlayImageIndex, int button, int rotationAngle = 0, bool mirror_h = false); TouchButton(const Atlas *atlas, int imageIndex, int overlayImageIndex, int button, int rotationAngle = 0, bool mirror_h = false);
void update(InputState &input_state); void update(InputState &input_state);
void draw(DrawBuffer &db, uint32_t color); void draw(DrawBuffer &db, uint32_t color, uint32_t colorOverlay);
void setPos(float x, float y) { void setPos(float x, float y) {
x_ = x - w_ / 2; x_ = x - w_ / 2;