int loadPNGTexture(char* filePath) { int texture; Image* pngImage = loadPNGImage(filePath); glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); if (pngImage->colorType == PNG_COLOR_TYPE_RGB) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pngImage->width, pngImage->height, 0, GL_RGB, GL_UNSIGNED_BYTE, pngImage->data); else if (pngImage->colorType == PNG_COLOR_TYPE_RGBA) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pngImage->width, pngImage->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pngImage->data); free(pngImage->data); free(pngImage); return texture; }
bool GenericSkin::init() { const char *dir = getenv("MOSYNCDIR"); if(!dir) return false; if(!sSkinImage) sSkinImage = loadPNGImage((std::string(dir)+"/skins/skinImage.png").c_str()); if(!sSkinImage) return false; if(!sSelectedKeypad) sSelectedKeypad = loadPNGImage((std::string(dir)+"/skins/keypadSelected.png").c_str()); if(!sSelectedKeypad) return false; if(!sUnselectedKeypad) sUnselectedKeypad = loadPNGImage((std::string(dir)+"/skins/keypadUnselected.png").c_str()); if(!sUnselectedKeypad) return false; if(!sMultiTouchImage) sMultiTouchImage = loadPNGImage((std::string(dir)+"/skins/multitouchMarker.png").c_str()); if(!sMultiTouchImage) return false; int w = getWindowWidth(); int h = getWindowHeight(); unselectedPhone = createSurface(w, h); selectedPhone = createSurface(w, h); generatePhone(); int keysX=0, keysY=0; if(mProfile->mKeyboardType == DeviceProfile::DKT_KEYPAD) { keysX = w/2 - sUnselectedKeypad->w/2; keysY = h - sUnselectedKeypad->h - 24; } else if(mProfile->mKeyboardType == DeviceProfile::DKT_JOYSTICK) { keysX = w/2 - sUnselectedKeypad->w/2; keysY = h - 74 - 24; } #define OFFSET_X (27-keysX) #define OFFSET_Y (368-keysY) if(mProfile->mKeyboardType == DeviceProfile::DKT_JOYSTICK || mProfile->mKeyboardType == DeviceProfile::DKT_KEYPAD) { keyRects.push_back(KeyRect(MAK_UP, 132-OFFSET_X, 369-OFFSET_Y, 20, 20)); keyRects.push_back(KeyRect(MAK_RIGHT, 159-OFFSET_X, 399-OFFSET_Y, 10, 20)); keyRects.push_back(KeyRect(MAK_DOWN, 132-OFFSET_X, 426-OFFSET_Y, 12, 10)); keyRects.push_back(KeyRect(MAK_LEFT, 107-OFFSET_X, 399-OFFSET_Y, 10, 20)); keyRects.push_back(KeyRect(MAK_SOFTLEFT, 32-OFFSET_X, 378-OFFSET_Y, 80, 23)); keyRects.push_back(KeyRect(MAK_SOFTRIGHT, 164-OFFSET_X, 378-OFFSET_Y, 80, 23)); keyRects.push_back(KeyRect(MAK_FIRE, 120-OFFSET_X, 387-OFFSET_Y, 36, 36)); keyRects.push_back(KeyRect(MAK_CLEAR, 222-OFFSET_X, 500-OFFSET_Y, 26, 60)); } if(mProfile->mKeyboardType == DeviceProfile::DKT_KEYPAD) { keyRects.push_back(KeyRect(MAK_1, 54-OFFSET_X, 451-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_2, 110-OFFSET_X, 451-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_3, 166-OFFSET_X, 451-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_4, 54-OFFSET_X, 476-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_5, 110-OFFSET_X, 476-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_6, 166-OFFSET_X, 476-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_7, 54-OFFSET_X, 501-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_8, 110-OFFSET_X, 501-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_9, 166-OFFSET_X, 501-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_STAR, 54-OFFSET_X, 526-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_0, 110-OFFSET_X, 526-OFFSET_Y, 55, 23)); keyRects.push_back(KeyRect(MAK_HASH, 166-OFFSET_X, 526-OFFSET_Y, 55, 23)); } screenRect.x = w/2 - mProfile->mScreenWidth/2; screenRect.y = 24; screenRect.w = mProfile->mScreenWidth; screenRect.h = mProfile->mScreenHeight; windowRect.x = 0; windowRect.y = 0; windowRect.w = w; windowRect.h = h; return true; }