Some more re-styling.

Fixed a crash with SVGResource (durr).
This commit is contained in:
Aloshi 2014-03-22 19:48:48 -05:00
parent cf836c0f8a
commit c3d6933298
5 changed files with 58 additions and 37 deletions

View file

@ -63,6 +63,7 @@ public:
inline int getCursorId() const { return mCursor; } inline int getCursorId() const { return mCursor; }
float getTotalRowHeight() const; float getTotalRowHeight() const;
inline float getRowHeight(int row) const { return getRowHeight(mEntries.at(row).data); }
protected: protected:
void onCursorChanged(const CursorState& state) override; void onCursorChanged(const CursorState& state) override;
@ -72,9 +73,9 @@ private:
void updateElementPosition(const ComponentListRow& row); void updateElementPosition(const ComponentListRow& row);
void updateElementSize(const ComponentListRow& row); void updateElementSize(const ComponentListRow& row);
float getRowHeight(const ComponentListRow& row) const;
float getRowHeight(const ComponentListRow& row) const;
float mSelectorBarOffset; float mSelectorBarOffset;
float mCameraOffset; float mCameraOffset;
}; };

View file

@ -15,7 +15,7 @@
using namespace Eigen; using namespace Eigen;
GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(window), GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(window),
mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 4)) mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5))
{ {
mHoldingConfig = NULL; mHoldingConfig = NULL;
mHoldTime = 0; mHoldTime = 0;
@ -30,28 +30,31 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun) : GuiComponent(w
}; };
} }
mTitle = std::make_shared<TextComponent>(mWindow, firstRun ? "WELCOME TO EMULATIONSTATION" : "SELECT A DEVICE", // title
mTitle = std::make_shared<TextComponent>(mWindow, firstRun ? "WELCOME" : "CONFIGURE INPUT",
Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER); Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true, Vector2i(1, 1), GridFlags::BORDER_BOTTOM);
std::string msg = (firstRun ? "FIRST, WE NEED TO CONFIGURE YOUR INPUT DEVICE!\n" : "");
msg += "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT.\n"
"PRESS F4 TO QUIT AT ANY TIME.";
mMsg = std::make_shared<TextComponent>(mWindow, msg, Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mMsg, Vector2i(0, 1), false, true);
// device info
std::stringstream deviceInfo; std::stringstream deviceInfo;
int numDevices = mWindow->getInputManager()->getNumJoysticks(); int numDevices = mWindow->getInputManager()->getNumJoysticks();
if(numDevices > 0) if(numDevices > 0)
deviceInfo << "(" << numDevices << " JOYSTICK" << (numDevices > 1 ? "S" : "") << " DETECTED)"; deviceInfo << numDevices << " GAMEPAD" << (numDevices > 1 ? "S" : "") << " DETECTED";
else else
deviceInfo << "(NO JOYSTICKS DETECTED)"; deviceInfo << "NO GAMEPADS DETECTED";
mDeviceInfo = std::make_shared<TextComponent>(mWindow, deviceInfo.str(), Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); mDeviceInfo = std::make_shared<TextComponent>(mWindow, deviceInfo.str(), Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mDeviceInfo, Vector2i(0, 2), false, true); mGrid.setEntry(mDeviceInfo, Vector2i(0, 1), false, true);
// message
mMsg1 = std::make_shared<TextComponent>(mWindow, "HOLD A BUTTON ON YOUR DEVICE TO CONFIGURE IT", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mMsg1, Vector2i(0, 2), false, true);
mMsg2 = std::make_shared<TextComponent>(mWindow, "PRESS F4 TO QUIT AT ANY TIME", Font::get(FONT_SIZE_SMALL), 0x777777FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mMsg2, Vector2i(0, 3), false, true);
// currently held device
mDeviceHeld = std::make_shared<TextComponent>(mWindow, "", Font::get(FONT_SIZE_MEDIUM), 0xFFFFFFFF, TextComponent::ALIGN_CENTER); mDeviceHeld = std::make_shared<TextComponent>(mWindow, "", Font::get(FONT_SIZE_MEDIUM), 0xFFFFFFFF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mDeviceHeld, Vector2i(0, 3), false, true); mGrid.setEntry(mDeviceHeld, Vector2i(0, 4), false, true);
setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.5f); setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.5f);
setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2);
@ -64,8 +67,10 @@ void GuiDetectDevice::onSizeChanged()
// grid // grid
mGrid.setSize(mSize); mGrid.setSize(mSize);
mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y()); mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y());
mGrid.setRowHeightPerc(2, mDeviceInfo->getFont()->getHeight() / mSize.y()); //mGrid.setRowHeightPerc(1, mDeviceInfo->getFont()->getHeight() / mSize.y());
mGrid.setRowHeightPerc(3, mDeviceHeld->getFont()->getHeight() / mSize.y()); mGrid.setRowHeightPerc(2, mMsg1->getFont()->getHeight() / mSize.y());
mGrid.setRowHeightPerc(3, mMsg2->getFont()->getHeight() / mSize.y());
//mGrid.setRowHeightPerc(4, mDeviceHeld->getFont()->getHeight() / mSize.y());
} }
bool GuiDetectDevice::input(InputConfig* config, Input input) bool GuiDetectDevice::input(InputConfig* config, Input input)

View file

@ -23,7 +23,8 @@ private:
ComponentGrid mGrid; ComponentGrid mGrid;
std::shared_ptr<TextComponent> mTitle; std::shared_ptr<TextComponent> mTitle;
std::shared_ptr<TextComponent> mMsg; std::shared_ptr<TextComponent> mMsg1;
std::shared_ptr<TextComponent> mMsg2;
std::shared_ptr<TextComponent> mDeviceInfo; std::shared_ptr<TextComponent> mDeviceInfo;
std::shared_ptr<TextComponent> mDeviceHeld; std::shared_ptr<TextComponent> mDeviceHeld;

View file

@ -20,7 +20,7 @@ static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_
using namespace Eigen; using namespace Eigen;
GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function<void()>& okCallback) : GuiComponent(window), GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function<void()>& okCallback) : GuiComponent(window),
mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 7)),
mTargetConfig(target) mTargetConfig(target)
{ {
LOG(LogInfo) << "Configuring device " << target->getDeviceId() << " (" << target->getDeviceName() << ")."; LOG(LogInfo) << "Configuring device " << target->getDeviceId() << " (" << target->getDeviceName() << ").";
@ -34,17 +34,28 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi
addChild(&mBackground); addChild(&mBackground);
addChild(&mGrid); addChild(&mGrid);
mTitle = std::make_shared<TextComponent>(mWindow, "PLEASE CONFIGURE INPUT FOR", Font::get(FONT_SIZE_SMALL), 0x555555FF, TextComponent::ALIGN_CENTER); // 0 is a spacer row
mGrid.setEntry(mTitle, Vector2i(0, 0), false, true); mGrid.setEntry(std::make_shared<GuiComponent>(mWindow), Vector2i(0, 0), false);
mSubtitle1 = std::make_shared<TextComponent>(mWindow, strToUpper(target->getDeviceName()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mSubtitle1, Vector2i(0, 1), false, true);
mSubtitle2 = std::make_shared<TextComponent>(mWindow, /*"(HOLD ANY BUTTON TO SKIP)"*/ "", Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER); mTitle = std::make_shared<TextComponent>(mWindow, "CONFIGURING", Font::get(FONT_SIZE_LARGE), 0x555555FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mSubtitle2, Vector2i(0, 2), false, true); mGrid.setEntry(mTitle, Vector2i(0, 1), false, true);
std::stringstream ss;
if(target->getDeviceId() == DEVICE_KEYBOARD)
ss << "KEYBOARD";
else
ss << "GAMEPAD " << (target->getDeviceId() + 1);
mSubtitle1 = std::make_shared<TextComponent>(mWindow, strToUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mSubtitle1, Vector2i(0, 2), false, true);
mSubtitle2 = std::make_shared<TextComponent>(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x999999FF, TextComponent::ALIGN_CENTER);
mGrid.setEntry(mSubtitle2, Vector2i(0, 3), false, true);
// 4 is a spacer row
mGrid.setEntry(std::make_shared<GuiComponent>(mWindow), Vector2i(4, 0), false);
mList = std::make_shared<ComponentList>(mWindow); mList = std::make_shared<ComponentList>(mWindow);
mGrid.setEntry(mList, Vector2i(0, 3), true, true); mGrid.setEntry(mList, Vector2i(0, 5), true, true);
for(int i = 0; i < inputCount; i++) for(int i = 0; i < inputCount; i++)
{ {
ComponentListRow row; ComponentListRow row;
@ -52,7 +63,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi
// icon // icon
auto icon = std::make_shared<ImageComponent>(mWindow); auto icon = std::make_shared<ImageComponent>(mWindow);
icon->setImage(inputIcon[i]); icon->setImage(inputIcon[i]);
icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight() * ((i < 4) ? 1.2f : 1.0f)); // hack to enlarge dpad icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight() * ((i < 4) ? 1.25f : 1.0f)); // hack to enlarge dpad
row.addElement(icon, false); row.addElement(icon, false);
// spacer between icon and text // spacer between icon and text
@ -122,9 +133,9 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi
delete this; delete this;
})); }));
mButtonGrid = makeButtonGrid(mWindow, buttons); mButtonGrid = makeButtonGrid(mWindow, buttons);
mGrid.setEntry(mButtonGrid, Vector2i(0, 4), true, false); mGrid.setEntry(mButtonGrid, Vector2i(0, 6), true, false);
setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.7f); setSize(Renderer::getScreenWidth() * 0.6f, Renderer::getScreenHeight() * 0.75f);
setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2);
} }
@ -135,10 +146,13 @@ void GuiInputConfig::onSizeChanged()
// update grid // update grid
mGrid.setSize(mSize); mGrid.setSize(mSize);
mGrid.setRowHeightPerc(0, mTitle->getFont()->getHeight() / mSize.y()); //mGrid.setRowHeightPerc(0, 0.025f);
mGrid.setRowHeightPerc(1, mSubtitle1->getFont()->getHeight() / mSize.y()); mGrid.setRowHeightPerc(1, mTitle->getFont()->getHeight()*0.75f / mSize.y());
mGrid.setRowHeightPerc(2, mSubtitle2->getFont()->getHeight() / mSize.y()); mGrid.setRowHeightPerc(2, mSubtitle1->getFont()->getHeight() / mSize.y());
mGrid.setRowHeightPerc(4, mButtonGrid->getSize().y() / mSize.y()); mGrid.setRowHeightPerc(3, mSubtitle2->getFont()->getHeight() / mSize.y());
//mGrid.setRowHeightPerc(4, 0.03f);
mGrid.setRowHeightPerc(5, (mList->getRowHeight(0) * 5 + 2) / mSize.y());
mGrid.setRowHeightPerc(6, mButtonGrid->getSize().y() / mSize.y());
} }
void GuiInputConfig::setPress(const std::shared_ptr<TextComponent>& text) void GuiInputConfig::setPress(const std::shared_ptr<TextComponent>& text)

View file

@ -50,15 +50,15 @@ void SVGResource::initFromMemory(const char* file, size_t length)
void SVGResource::rasterizeAt(size_t width, size_t height) void SVGResource::rasterizeAt(size_t width, size_t height)
{ {
if(!mSVGImage)
return;
if(width != (int)round(mSVGImage->width) && height != (int)round(mSVGImage->height)) if(width != (int)round(mSVGImage->width) && height != (int)round(mSVGImage->height))
{ {
mLastWidth = width; mLastWidth = width;
mLastHeight = height; mLastHeight = height;
} }
if(!mSVGImage)
return;
unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); unsigned char* imagePx = (unsigned char*)malloc(width * height * 4);
NSVGrasterizer* rast = nsvgCreateRasterizer(); NSVGrasterizer* rast = nsvgCreateRasterizer();