Files
wagic/projects/mtg/src/InteractiveButton.cpp
Anthony Calosa c617ede243 First set of Graphic changes
TODO: generate a graph/stats on deck menu to the right, update other
graphics, move detailed info on the right of deck menu...
2016-07-16 09:16:07 +08:00

114 lines
3.5 KiB
C++

//
// InteractiveButton.cpp
// wagic
//
// Created by Michael Nguyen on 1/23/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#include <iostream>
#include "PrecompiledHeader.h"
#include "InteractiveButton.h"
#include "Translate.h"
#include "JTypes.h"
#include "WResourceManager.h"
#include "WFont.h"
const int kButtonHeight = 30;
InteractiveButton::InteractiveButton(JGuiController* _parent, int id, int fontId, string text, float x, float y, JButton actionKey, bool hasFocus, bool autoTranslate) :
SimpleButton( _parent, id, fontId, text, x, y, hasFocus, autoTranslate)
{
setIsSelectionValid(false); // by default it's turned off since you can't auto select it.
mActionKey = actionKey;
}
void InteractiveButton::Entering()
{
}
void InteractiveButton::checkUserClick()
{
int x1 = -1, y1 = -1;
if (mEngine->GetLeftClickCoordinates(x1, y1))
{
setIsSelectionValid(false);
int buttonImageWidth = static_cast<int>(GetWidth());
int x2 = static_cast<int>(getX()), y2 = static_cast<int>(getY() + mYOffset);
int buttonHeight = kButtonHeight;
if ( (x1 >= x2) && (x1 <= (x2 + buttonImageWidth)) && (y1 >= y2) && (y1 < (y2 + buttonHeight)))
setIsSelectionValid( true );
}
else
setIsSelectionValid( false );
}
bool InteractiveButton::ButtonPressed()
{
checkUserClick();
if (isSelectionValid())
{
mEngine->ReadButton();
mEngine->LeftClickedProcessed();
mEngine->HoldKey_NoRepeat( mActionKey );
setIsSelectionValid(false);
return true;
}
return false;
}
void InteractiveButton::Render()
{
if (!isSelectionValid()) return;
JRenderer *renderer = JRenderer::GetInstance();
WFont *mainFont = WResourceManager::Instance()->GetWFont(Fonts::MAIN_FONT);
const string detailedInfoString = _(getText());
float stringWidth = mainFont->GetStringWidth(detailedInfoString.c_str());
float pspIconsSize = 0.5;
float mainFontHeight = mainFont->GetHeight();
float boxStartX = getX() - 4;
mXOffset = 0;
mYOffset = 0;
#ifndef TOUCH_ENABLED
renderer->FillRoundRect(boxStartX, getY(), stringWidth - 3, mainFontHeight - 9, 5, ARGB(0, 0, 0, 0));
#else
renderer->FillRoundRect(boxStartX+1, getY()+1, stringWidth - 3, mainFontHeight - 4, 5, ARGB(220, 5, 5, 5));
renderer->FillRoundRect(boxStartX, getY(), stringWidth - 3, mainFontHeight - 4, 5, ARGB(255, 140, 23, 23));
renderer->DrawRoundRect(boxStartX, getY(), stringWidth - 3, mainFontHeight - 4, 5, ARGB(255, 5, 5, 5));
mYOffset += 2;
#endif
float buttonXOffset = getX() - mXOffset;
float buttonYOffset = getY() + mYOffset;
if (buttonImage != NULL)
{
renderer->RenderQuad(buttonImage.get(), buttonXOffset - buttonImage.get()->mWidth/2, buttonYOffset + mainFontHeight/2, 0, pspIconsSize, pspIconsSize);
}
//mainFont->SetColor(ARGB(255, 0, 0, 0));
mainFont->DrawString(detailedInfoString, buttonXOffset, buttonYOffset);
}
void InteractiveButton::setImage( const JQuadPtr imagePtr )
{
buttonImage = imagePtr;
float imageXOffset = getX() - buttonImage.get()->mWidth;
if (imageXOffset < 0)
setX( getX() - imageXOffset/2 + 5 );
}
/* Accessors */
ostream& InteractiveButton::toString(ostream& out) const
{
return out << "InteractiveButton ::: mHasFocus : " << hasFocus()
<< " ; parent : " << getParent()
<< " ; mText : " << getText()
<< " ; mScale : " << getScale()
<< " ; mTargetScale : " << getTargetScale()
<< " ; mX,mY : " << getX() << "," << getY();
}