mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-07-01 22:06:10 -04:00
--User changes
-Add Summary tab to the info dock, place existing bounds related info in a new Bounds tab. -Add a toolbar with the most common actions on it. -Remove old toolbar at the top of the library tab. --Code changes -Refactor code to make a color visible on a background into VisibleColor() in FractoriumCommon.h -Add IsXformLinked() to determine if an xform is linked to another. -Remove SetPaletteRefTable() and GetQRgbFromPaletteIndex() from FractoriumEmberControllerBase and its derivations, unused. -Add FillSummary() to FractoriumEmberController. Call in Update(), UpdateXform() and other places where values are changed to force an update of the summary view. -Add export statements to FractoriumInfo.cpp. -Remove image parameter from SetPaletteTableItem(), it was a bad design. -InitToolbarUI() is now empty since toolbar initialization happens automatically. Leave as a placeholder. -Refactor code to get a palette color at a given index and convert it to a QColor to ColorIndexToQColor().
This commit is contained in:
@ -111,3 +111,78 @@ static bool Exists(const QString& s)
|
||||
{
|
||||
return s != "" && QDir(s).exists();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert a color to one that is displayable on any background.
|
||||
/// </summary>
|
||||
/// <param name="color">The color to convert</param>
|
||||
/// <returns>The converted color</returns>
|
||||
static QColor VisibleColor(const QColor& color)
|
||||
{
|
||||
int threshold = 105;
|
||||
int delta = (color.red() * 0.299) + //Magic numbers gotten from a Stack Overflow post.
|
||||
(color.green() * 0.587) +
|
||||
(color.blue() * 0.114);
|
||||
|
||||
QColor textColor = (255 - delta < threshold) ? QColor(0, 0, 0) : QColor(255, 255, 255);
|
||||
return textColor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine whether an xform in an ember is linked to any other xform
|
||||
/// in the ember.
|
||||
/// </summary>
|
||||
/// <param name="ember">The ember which contains the xform</param>
|
||||
/// <param name="xform">The xform to inspect</param>
|
||||
/// <returns>The index of the xform that the xform argument is linked to, else -1</returns>
|
||||
template <typename T>
|
||||
static intmax_t IsXformLinked(Ember<T>& ember, Xform<T>* xform)
|
||||
{
|
||||
auto count = ember.XformCount();
|
||||
auto index = ember.GetXformIndex(xform);
|
||||
intmax_t linked = -1;
|
||||
size_t toOneCount = 0;
|
||||
size_t toZeroCount = 0;
|
||||
size_t toOneIndex = 0;
|
||||
size_t fromOneCount = 0;
|
||||
size_t fromZeroCount = 0;
|
||||
size_t fromOneIndex = 0;
|
||||
|
||||
if (index >= 0)
|
||||
{
|
||||
for (auto i = 0; i < count; i++)
|
||||
{
|
||||
if (xform->Xaos(i) == 0)
|
||||
toZeroCount++;
|
||||
else if (xform->Xaos(i) == 1)
|
||||
{
|
||||
toOneIndex = i;
|
||||
toOneCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if ((toZeroCount == (count - 1)) && toOneCount == 1)
|
||||
{
|
||||
for (auto i = 0; i < count; i++)
|
||||
{
|
||||
if (auto fromXform = ember.GetXform(i))
|
||||
{
|
||||
if (fromXform->Xaos(toOneIndex) == 0)
|
||||
fromZeroCount++;
|
||||
else if (fromXform->Xaos(toOneIndex) == 1)
|
||||
{
|
||||
fromOneIndex = i;
|
||||
fromOneCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((fromZeroCount == (count - 1)) && fromOneCount == 1)
|
||||
{
|
||||
linked = toOneIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return linked;
|
||||
}
|
Reference in New Issue
Block a user