mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-14 13:21:34 +00:00
Replace MID() macro with base::clamp() function
In the future we will replace base::clamp() with std::clamp().
This commit is contained in:
parent
fd651c4189
commit
86259a64fc
2
laf
2
laf
@ -1 +1 @@
|
||||
Subproject commit 5c0fa215cd6fba21d9bf230d2da62d2890b21baf
|
||||
Subproject commit 4f0acaa1ffb456b335201ca457b09f3cb99369cc
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -23,6 +23,7 @@
|
||||
#include "app/filename_formatter.h"
|
||||
#include "app/restore_visible_layers.h"
|
||||
#include "app/ui_context.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/convert_to.h"
|
||||
#include "base/fs.h"
|
||||
#include "base/split_string.h"
|
||||
@ -642,8 +643,8 @@ bool CliProcessor::openFile(Context* ctx, CliOpenFile& cof)
|
||||
// --frame-range with --frame-tag
|
||||
if (tag) {
|
||||
selFrames.insert(
|
||||
tag->fromFrame()+MID(0, cof.fromFrame, tag->frames()-1),
|
||||
tag->fromFrame()+MID(0, cof.toFrame, tag->frames()-1));
|
||||
tag->fromFrame()+base::clamp(cof.fromFrame, 0, tag->frames()-1),
|
||||
tag->fromFrame()+base::clamp(cof.toFrame, 0, tag->frames()-1));
|
||||
}
|
||||
// --frame-range without --frame-tag
|
||||
else {
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -17,6 +18,7 @@
|
||||
#include "app/cmd/set_cel_opacity.h"
|
||||
#include "app/cmd/set_cel_position.h"
|
||||
#include "app/doc.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/cel.h"
|
||||
#include "doc/image.h"
|
||||
#include "doc/layer.h"
|
||||
@ -62,7 +64,7 @@ void BackgroundFromLayer::onExecute()
|
||||
bg_image.get(), cel_image,
|
||||
sprite->palette(cel->frame()),
|
||||
cel->x(), cel->y(),
|
||||
MID(0, cel->opacity(), 255),
|
||||
base::clamp(cel->opacity(), 0, 255),
|
||||
static_cast<LayerImage*>(layer)->blendMode());
|
||||
|
||||
// now we have to copy the new image (bg_image) to the cel...
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
#include "app/color_utils.h"
|
||||
#include "app/modules/palettes.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/debug.h"
|
||||
#include "doc/image.h"
|
||||
#include "doc/palette.h"
|
||||
@ -203,8 +204,8 @@ std::string Color::toString() const
|
||||
<< std::setprecision(2)
|
||||
<< std::fixed
|
||||
<< m_value.hsv.h << ","
|
||||
<< MID(0.0, m_value.hsv.s*100.0, 100.0) << ","
|
||||
<< MID(0.0, m_value.hsv.v*100.0, 100.0) << ","
|
||||
<< base::clamp(m_value.hsv.s*100.0, 0.0, 100.0) << ","
|
||||
<< base::clamp(m_value.hsv.v*100.0, 0.0, 100.0) << ","
|
||||
<< m_value.hsv.a << "}";
|
||||
break;
|
||||
|
||||
@ -213,8 +214,8 @@ std::string Color::toString() const
|
||||
<< std::setprecision(2)
|
||||
<< std::fixed
|
||||
<< m_value.hsl.h << ","
|
||||
<< MID(0.0, m_value.hsl.s*100.0, 100.0) << ","
|
||||
<< MID(0.0, m_value.hsl.l*100.0, 100.0) << ","
|
||||
<< base::clamp(m_value.hsl.s*100.0, 0.0, 100.0) << ","
|
||||
<< base::clamp(m_value.hsl.l*100.0, 0.0, 100.0) << ","
|
||||
<< m_value.hsl.a << "}";
|
||||
break;
|
||||
|
||||
@ -267,8 +268,8 @@ std::string Color::toHumanReadableString(PixelFormat pixelFormat, HumanReadableS
|
||||
else {
|
||||
result << "HSV "
|
||||
<< int(m_value.hsv.h) << "\xc2\xb0 "
|
||||
<< MID(0, int(m_value.hsv.s*100.0), 100) << "% "
|
||||
<< MID(0, int(m_value.hsv.v*100.0), 100) << "%";
|
||||
<< base::clamp(int(m_value.hsv.s*100.0), 0, 100) << "% "
|
||||
<< base::clamp(int(m_value.hsv.v*100.0), 0, 100) << "%";
|
||||
|
||||
if (pixelFormat == IMAGE_INDEXED)
|
||||
result << " Index " << color_utils::color_for_image(*this, IMAGE_INDEXED);
|
||||
@ -287,8 +288,8 @@ std::string Color::toHumanReadableString(PixelFormat pixelFormat, HumanReadableS
|
||||
else {
|
||||
result << "HSL "
|
||||
<< int(m_value.hsl.h) << "\xc2\xb0 "
|
||||
<< MID(0, int(m_value.hsl.s*100.0), 100) << "% "
|
||||
<< MID(0, int(m_value.hsl.l*100.0), 100) << "%";
|
||||
<< base::clamp(int(m_value.hsl.s*100.0), 0, 100) << "% "
|
||||
<< base::clamp(int(m_value.hsl.l*100.0), 0, 100) << "%";
|
||||
|
||||
if (pixelFormat == IMAGE_INDEXED)
|
||||
result << " Index " << color_utils::color_for_image(*this, IMAGE_INDEXED);
|
||||
@ -357,8 +358,8 @@ std::string Color::toHumanReadableString(PixelFormat pixelFormat, HumanReadableS
|
||||
}
|
||||
else {
|
||||
result << int(m_value.hsv.h) << "\xc2\xb0"
|
||||
<< MID(0, int(m_value.hsv.s*100.0), 100) << ","
|
||||
<< MID(0, int(m_value.hsv.v*100.0), 100);
|
||||
<< base::clamp(int(m_value.hsv.s*100.0), 0, 100) << ","
|
||||
<< base::clamp(int(m_value.hsv.v*100.0), 0, 100);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -368,8 +369,8 @@ std::string Color::toHumanReadableString(PixelFormat pixelFormat, HumanReadableS
|
||||
}
|
||||
else {
|
||||
result << int(m_value.hsl.h) << "\xc2\xb0"
|
||||
<< MID(0, int(m_value.hsl.s*100.0), 100) << ","
|
||||
<< MID(0, int(m_value.hsl.l*100.0), 100);
|
||||
<< base::clamp(int(m_value.hsl.s*100.0), 0, 100) << ","
|
||||
<< base::clamp(int(m_value.hsl.l*100.0), 0, 100);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -907,7 +908,7 @@ int Color::getAlpha() const
|
||||
|
||||
void Color::setAlpha(int alpha)
|
||||
{
|
||||
alpha = MID(0, alpha, 255);
|
||||
alpha = base::clamp(alpha, 0, 255);
|
||||
|
||||
switch (getType()) {
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -24,6 +24,7 @@
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "app/ui_context.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/image.h"
|
||||
#include "doc/mask.h"
|
||||
#include "doc/sprite.h"
|
||||
@ -368,8 +369,8 @@ void CanvasSizeCommand::onExecute(Context* context)
|
||||
|
||||
api.cropSprite(sprite,
|
||||
gfx::Rect(x1, y1,
|
||||
MID(1, x2-x1, DOC_SPRITE_MAX_WIDTH),
|
||||
MID(1, y2-y1, DOC_SPRITE_MAX_HEIGHT)),
|
||||
base::clamp(x2-x1, 1, DOC_SPRITE_MAX_WIDTH),
|
||||
base::clamp(y2-y1, 1, DOC_SPRITE_MAX_HEIGHT)),
|
||||
params.trimOutside());
|
||||
tx.commit();
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2020 Igara Studio S.A.
|
||||
// Copyright (C) 2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -18,6 +19,7 @@
|
||||
#include "app/modules/gui.h"
|
||||
#include "app/tx.h"
|
||||
#include "app/ui/timeline/timeline.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/cel.h"
|
||||
#include "doc/cels_range.h"
|
||||
#include "doc/sprite.h"
|
||||
@ -51,7 +53,7 @@ CelOpacityCommand::CelOpacityCommand()
|
||||
void CelOpacityCommand::onLoadParams(const Params& params)
|
||||
{
|
||||
m_opacity = params.get_as<int>("opacity");
|
||||
m_opacity = MID(0, m_opacity, 255);
|
||||
m_opacity = base::clamp(m_opacity, 0, 255);
|
||||
}
|
||||
|
||||
bool CelOpacityCommand::onEnabled(Context* context)
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -18,6 +18,7 @@
|
||||
#include "app/ui/editor/editor.h"
|
||||
#include "app/ui/editor/editor_customization_delegate.h"
|
||||
#include "app/ui/search_entry.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/sprite.h"
|
||||
#include "doc/tag.h"
|
||||
#include "ui/combobox.h"
|
||||
@ -256,7 +257,9 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
return MID(0, m_frame-docPref.timeline.firstFrame(), editor->sprite()->lastFrame());
|
||||
return base::clamp(
|
||||
m_frame-docPref.timeline.firstFrame(),
|
||||
0, editor->sprite()->lastFrame());
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2020 Igara Studio S.A.
|
||||
// Copyright (C) 2016-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -18,6 +19,7 @@
|
||||
#include "app/modules/gui.h"
|
||||
#include "app/tx.h"
|
||||
#include "app/ui/timeline/timeline.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/layer.h"
|
||||
#include "fmt/format.h"
|
||||
|
||||
@ -49,7 +51,7 @@ LayerOpacityCommand::LayerOpacityCommand()
|
||||
void LayerOpacityCommand::onLoadParams(const Params& params)
|
||||
{
|
||||
m_opacity = params.get_as<int>("opacity");
|
||||
m_opacity = MID(0, m_opacity, 255);
|
||||
m_opacity = base::clamp(m_opacity, 0, 255);
|
||||
}
|
||||
|
||||
bool LayerOpacityCommand::onEnabled(Context* context)
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2015-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -18,6 +18,7 @@
|
||||
#include "app/modules/gui.h"
|
||||
#include "app/pref/preferences.h"
|
||||
#include "app/tx.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/convert_to.h"
|
||||
#include "doc/algorithm/modify_selection.h"
|
||||
#include "doc/brush_type.h"
|
||||
@ -112,7 +113,7 @@ void ModifySelectionCommand::onExecute(Context* context)
|
||||
return;
|
||||
|
||||
quantity = window.quantity()->textInt();
|
||||
quantity = MID(1, quantity, 100);
|
||||
quantity = base::clamp(quantity, 1, 100);
|
||||
|
||||
brush = (window.circle()->isSelected() ? doc::kCircleBrushType:
|
||||
doc::kSquareBrushType);
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -129,7 +129,7 @@ void NewFileCommand::onExecute(Context* ctx)
|
||||
int w = pref.newFile.width();
|
||||
int h = pref.newFile.height();
|
||||
int bg = pref.newFile.backgroundColor();
|
||||
bg = MID(0, bg, 2);
|
||||
bg = base::clamp(bg, 0, 2);
|
||||
|
||||
// If the clipboard contains an image, we can show the size of the
|
||||
// clipboard as default image size.
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "app/ui/separator_in_view.h"
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/convert_to.h"
|
||||
#include "base/fs.h"
|
||||
#include "base/string.h"
|
||||
@ -620,7 +621,7 @@ public:
|
||||
|
||||
int undo_size_limit_value;
|
||||
undo_size_limit_value = undoSizeLimit()->textInt();
|
||||
undo_size_limit_value = MID(0, undo_size_limit_value, 999999);
|
||||
undo_size_limit_value = base::clamp(undo_size_limit_value, 0, 999999);
|
||||
|
||||
m_pref.undo.sizeLimit(undo_size_limit_value);
|
||||
m_pref.undo.gotoModified(undoGotoModified()->isSelected());
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -14,6 +14,7 @@
|
||||
#include "app/commands/params.h"
|
||||
#include "app/context_access.h"
|
||||
#include "app/tx.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/palette.h"
|
||||
#include "doc/sprite.h"
|
||||
|
||||
@ -69,7 +70,7 @@ void PaletteSizeCommand::onExecute(Context* context)
|
||||
if (ncolors == palette.size())
|
||||
return;
|
||||
|
||||
palette.resize(MID(1, ncolors, std::numeric_limits<int>::max()));
|
||||
palette.resize(base::clamp(ncolors, 1, std::numeric_limits<int>::max()));
|
||||
|
||||
ContextWriter writer(reader);
|
||||
Tx tx(context, "Palette Size", ModifyDocument);
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "app/ui/timeline/timeline.h"
|
||||
#include "app/util/freetype_utils.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/fs.h"
|
||||
#include "base/string.h"
|
||||
#include "doc/image.h"
|
||||
@ -80,7 +81,7 @@ public:
|
||||
|
||||
int sizeValue() const {
|
||||
int size = fontSize()->textInt();
|
||||
size = MID(1, size, 5000);
|
||||
size = base::clamp(size, 1, 5000);
|
||||
return size;
|
||||
}
|
||||
|
||||
@ -165,7 +166,7 @@ void PasteTextCommand::onExecute(Context* ctx)
|
||||
bool antialias = window.antialias()->isSelected();
|
||||
std::string faceName = window.faceValue();
|
||||
int size = window.sizeValue();
|
||||
size = MID(1, size, 999);
|
||||
size = base::clamp(size, 1, 999);
|
||||
pref.textTool.fontFace(faceName);
|
||||
pref.textTool.fontSize(size);
|
||||
pref.textTool.antialias(antialias);
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -21,6 +21,7 @@
|
||||
#include "app/sprite_job.h"
|
||||
#include "app/util/resize_image.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/convert_to.h"
|
||||
#include "doc/algorithm/resize_image.h"
|
||||
#include "doc/cel.h"
|
||||
@ -382,8 +383,8 @@ void SpriteSizeCommand::onExecute(Context* context)
|
||||
}
|
||||
#endif // ENABLE_UI
|
||||
|
||||
new_width = MID(1, new_width, DOC_SPRITE_MAX_WIDTH);
|
||||
new_height = MID(1, new_height, DOC_SPRITE_MAX_HEIGHT);
|
||||
new_width = base::clamp(new_width, 1, DOC_SPRITE_MAX_WIDTH);
|
||||
new_height = base::clamp(new_height, 1, DOC_SPRITE_MAX_HEIGHT);
|
||||
|
||||
{
|
||||
SpriteSizeJob job(reader, new_width, new_height, resize_method);
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -11,6 +11,7 @@
|
||||
|
||||
#include "app/commands/filters/color_curve_editor.h"
|
||||
|
||||
#include "base/clamp.h"
|
||||
#include "filters/color_curve.h"
|
||||
#include "ui/alert.h"
|
||||
#include "ui/entry.h"
|
||||
@ -139,8 +140,8 @@ bool ColorCurveEditor::onProcessMessage(Message* msg)
|
||||
if (m_editPoint) {
|
||||
gfx::Point mousePos = static_cast<MouseMessage*>(msg)->position();
|
||||
*m_editPoint = screenToView(mousePos);
|
||||
m_editPoint->x = MID(m_viewBounds.x, m_editPoint->x, m_viewBounds.x+m_viewBounds.w-1);
|
||||
m_editPoint->y = MID(m_viewBounds.y, m_editPoint->y, m_viewBounds.y+m_viewBounds.h-1);
|
||||
m_editPoint->x = base::clamp(m_editPoint->x, m_viewBounds.x, m_viewBounds.x2()-1);
|
||||
m_editPoint->y = base::clamp(m_editPoint->y, m_viewBounds.y, m_viewBounds.y2()-1);
|
||||
|
||||
// TODO this should be optional
|
||||
CurveEditorChange();
|
||||
@ -208,9 +209,9 @@ void ColorCurveEditor::onPaint(ui::PaintEvent& ev)
|
||||
// Draw curve
|
||||
for (c = client.x; c < client.x+client.w; ++c) {
|
||||
pt = clientToView(gfx::Point(c, 0));
|
||||
pt.x = MID(m_viewBounds.x, pt.x, m_viewBounds.x+m_viewBounds.w-1);
|
||||
pt.x = base::clamp(pt.x, m_viewBounds.x, m_viewBounds.x2()-1);
|
||||
pt.y = values[pt.x - m_viewBounds.x];
|
||||
pt.y = MID(m_viewBounds.y, pt.y, m_viewBounds.y+m_viewBounds.h-1);
|
||||
pt.y = base::clamp(pt.y, m_viewBounds.y, m_viewBounds.y2()-1);
|
||||
pt = viewToClient(pt);
|
||||
|
||||
g->putPixel(gfx::rgba(255, 255, 255), c, pt.y);
|
||||
@ -269,8 +270,8 @@ bool ColorCurveEditor::editNodeManually(gfx::Point& viewPt)
|
||||
if (window.closer() == window.ok()) {
|
||||
viewPt.x = window.x()->textInt();
|
||||
viewPt.y = window.y()->textInt();
|
||||
viewPt.x = MID(0, viewPt.x, 255);
|
||||
viewPt.y = MID(0, viewPt.y, 255);
|
||||
viewPt.x = base::clamp(viewPt.x, 0, 255);
|
||||
viewPt.y = base::clamp(viewPt.y, 0, 255);
|
||||
return true;
|
||||
}
|
||||
else if (window.closer() == window.deleteButton()) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -14,6 +14,7 @@
|
||||
#include "app/console.h"
|
||||
#include "app/crash/internals.h"
|
||||
#include "app/doc.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/convert_to.h"
|
||||
#include "base/exception.h"
|
||||
#include "base/fs.h"
|
||||
@ -516,8 +517,8 @@ Doc* read_document_with_raw_images(const std::string& dir,
|
||||
info.height = 256;
|
||||
info.filename = "Unknown";
|
||||
}
|
||||
info.width = MID(1, info.width, 99999);
|
||||
info.height = MID(1, info.height, 99999);
|
||||
info.width = base::clamp(info.width, 1, 99999);
|
||||
info.height = base::clamp(info.height, 1, 99999);
|
||||
Sprite* spr = new Sprite(ImageSpec(info.mode, info.width, info.height), 256);
|
||||
|
||||
// Load each image as a new frame
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "app/restore_visible_layers.h"
|
||||
#include "app/snap_to_grid.h"
|
||||
#include "app/util/autocrop.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/convert_to.h"
|
||||
#include "base/fs.h"
|
||||
#include "base/fstream_path.h"
|
||||
@ -125,7 +126,7 @@ int DocExporter::Item::frames() const
|
||||
return selFrames->size();
|
||||
else if (tag) {
|
||||
int result = tag->toFrame() - tag->fromFrame() + 1;
|
||||
return MID(1, result, doc->sprite()->totalFrames());
|
||||
return base::clamp(result, 1, doc->sprite()->totalFrames());
|
||||
}
|
||||
else
|
||||
return doc->sprite()->totalFrames();
|
||||
@ -138,8 +139,8 @@ doc::SelectedFrames DocExporter::Item::getSelectedFrames() const
|
||||
|
||||
doc::SelectedFrames frames;
|
||||
if (tag) {
|
||||
frames.insert(MID(0, tag->fromFrame(), doc->sprite()->lastFrame()),
|
||||
MID(0, tag->toFrame(), doc->sprite()->lastFrame()));
|
||||
frames.insert(base::clamp(tag->fromFrame(), 0, doc->sprite()->lastFrame()),
|
||||
base::clamp(tag->toFrame(), 0, doc->sprite()->lastFrame()));
|
||||
}
|
||||
else {
|
||||
frames.insert(0, doc->sprite()->lastFrame());
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "app/file/format_options.h"
|
||||
#include "app/pref/preferences.h"
|
||||
#include "base/cfile.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/exception.h"
|
||||
#include "base/file_handle.h"
|
||||
#include "base/fs.h"
|
||||
@ -962,8 +963,8 @@ static void ase_file_write_tags_chunk(FILE* f,
|
||||
tag->toFrame() < fromFrame)
|
||||
continue;
|
||||
|
||||
frame_t from = MID(0, tag->fromFrame()-fromFrame, toFrame-fromFrame);
|
||||
frame_t to = MID(from, tag->toFrame()-fromFrame, toFrame-fromFrame);
|
||||
frame_t from = base::clamp(tag->fromFrame()-fromFrame, 0, toFrame-fromFrame);
|
||||
frame_t to = base::clamp(tag->toFrame()-fromFrame, from, toFrame-fromFrame);
|
||||
|
||||
fputw(from, f);
|
||||
fputw(to, f);
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "app/find_widget.h"
|
||||
#include "app/load_widget.h"
|
||||
#include "app/pref/preferences.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/file_handle.h"
|
||||
#include "base/memory.h"
|
||||
#include "doc/doc.h"
|
||||
@ -356,7 +357,7 @@ bool JpegFormat::onSave(FileOp* fop)
|
||||
JSAMPARRAY buffer;
|
||||
JDIMENSION buffer_height;
|
||||
const auto jpeg_options = std::static_pointer_cast<JpegOptions>(fop->formatOptions());
|
||||
const int qualityValue = (int)MID(0, 100.0f * jpeg_options->quality, 100);
|
||||
const int qualityValue = (int)base::clamp(100.0f * jpeg_options->quality, 0.f, 100.f);
|
||||
|
||||
int c;
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "app/file/file.h"
|
||||
#include "app/file/file_format.h"
|
||||
#include "app/file/file_formats_manager.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/fs.h"
|
||||
#include "base/string.h"
|
||||
#include "dio/detect_format.h"
|
||||
@ -149,7 +150,7 @@ bool save_palette(const char* filename, const Palette* pal, int columns)
|
||||
if (!ff || !ff->support(FILE_SUPPORT_SAVE))
|
||||
break;
|
||||
|
||||
int w = (columns > 0 ? MID(0, columns, pal->size()): pal->size());
|
||||
int w = (columns > 0 ? base::clamp(columns, 0, pal->size()): pal->size());
|
||||
int h = (pal->size() / w) + (pal->size() % w > 0 ? 1: 0);
|
||||
|
||||
Context tmpContext;
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -16,6 +16,7 @@
|
||||
#include "app/file/format_options.h"
|
||||
#include "app/file/png_format.h"
|
||||
#include "app/file/png_options.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/file_handle.h"
|
||||
#include "doc/doc.h"
|
||||
#include "gfx/color_space.h"
|
||||
@ -613,7 +614,7 @@ bool PngFormat::onSave(FileOp* fop)
|
||||
if (color_type == PNG_COLOR_TYPE_PALETTE) {
|
||||
int c, r, g, b;
|
||||
int pal_size = fop->sequenceGetNColors();
|
||||
pal_size = MID(1, pal_size, PNG_MAX_PALETTE_LENGTH);
|
||||
pal_size = base::clamp(pal_size, 1, PNG_MAX_PALETTE_LENGTH);
|
||||
|
||||
#if PNG_MAX_PALETTE_LENGTH != 256
|
||||
#error PNG_MAX_PALETTE_LENGTH should be 256
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (c) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (c) 2018-2020 Igara Studio S.A.
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
// the End-User License Agreement for Aseprite.
|
||||
@ -17,6 +17,7 @@
|
||||
#include "app/file/format_options.h"
|
||||
#include "app/pref/preferences.h"
|
||||
#include "base/cfile.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/file_handle.h"
|
||||
#include "doc/doc.h"
|
||||
#include "ui/window.h"
|
||||
@ -81,7 +82,7 @@ bool SvgFormat::onSave(FileOp* fop)
|
||||
const Image* image = fop->sequenceImage();
|
||||
int x, y, c, r, g, b, a, alpha;
|
||||
const auto svg_options = std::static_pointer_cast<SvgOptions>(fop->formatOptions());
|
||||
const int pixelScaleValue = MID(0, svg_options->pixelScale, 10000);
|
||||
const int pixelScaleValue = base::clamp(svg_options->pixelScale, 0, 10000);
|
||||
FileHandle handle(open_file_with_exception_sync_on_close(fop->filename(), "wb"));
|
||||
FILE* f = handle.get();
|
||||
auto printcol = [f](int x, int y,int r, int g, int b, int a, int pxScale) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2015-2018 David Capello
|
||||
// Copyright (C) 2015 Gabriel Rauter
|
||||
//
|
||||
@ -21,6 +21,7 @@
|
||||
#include "app/ini_file.h"
|
||||
#include "app/pref/preferences.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/convert_to.h"
|
||||
#include "base/file_handle.h"
|
||||
#include "doc/doc.h"
|
||||
@ -242,8 +243,8 @@ static int progress_report(int percent, const WebPPicture* pic)
|
||||
FileOp* fop = wd->fop;
|
||||
|
||||
double newProgress = (double(wd->f) + double(percent)/100.0) / double(wd->n);
|
||||
wd->progress = MAX(wd->progress, newProgress);
|
||||
wd->progress = MID(0.0, wd->progress, 1.0);
|
||||
wd->progress = std::max(wd->progress, newProgress);
|
||||
wd->progress = base::clamp(wd->progress, 0.0, 1.0);
|
||||
|
||||
fop->setProgress(wd->progress);
|
||||
if (fop->isStop())
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -121,7 +121,7 @@ static bool create_main_display(bool gpuAccel,
|
||||
try {
|
||||
if (w > 0 && h > 0) {
|
||||
main_display = os::instance()->createDisplay(
|
||||
w, h, (scale == 0 ? 2: MID(1, scale, 4)));
|
||||
w, h, (scale == 0 ? 2: base::clamp(scale, 1, 4)));
|
||||
}
|
||||
}
|
||||
catch (const os::DisplayCreationException& e) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -12,7 +12,7 @@
|
||||
#include "app/site.h"
|
||||
|
||||
#include "app/pref/preferences.h"
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/cel.h"
|
||||
#include "doc/layer.h"
|
||||
#include "doc/sprite.h"
|
||||
@ -57,7 +57,7 @@ Image* Site::image(int* x, int* y, int* opacity) const
|
||||
image = cel->image();
|
||||
if (x) *x = cel->x();
|
||||
if (y) *y = cel->y();
|
||||
if (opacity) *opacity = MID(0, cel->opacity(), 255);
|
||||
if (opacity) *opacity = base::clamp(cel->opacity(), 0, 255);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -17,6 +17,7 @@
|
||||
#include "app/file/file.h"
|
||||
#include "app/file_system.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/scoped_lock.h"
|
||||
#include "base/thread.h"
|
||||
#include "doc/algorithm/rotate.h"
|
||||
@ -124,8 +125,8 @@ private:
|
||||
thumb_w = w;
|
||||
thumb_h = h;
|
||||
}
|
||||
thumb_w = MID(1, thumb_w, MAX_THUMBNAIL_SIZE);
|
||||
thumb_h = MID(1, thumb_h, MAX_THUMBNAIL_SIZE);
|
||||
thumb_w = base::clamp(thumb_w, 1, MAX_THUMBNAIL_SIZE);
|
||||
thumb_h = base::clamp(thumb_h, 1, MAX_THUMBNAIL_SIZE);
|
||||
|
||||
// Stretch the 'image'
|
||||
thumbnailImage.reset(
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "app/modules/palettes.h"
|
||||
#include "app/util/wrap_point.h"
|
||||
#include "app/util/wrap_value.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/blend_funcs.h"
|
||||
#include "doc/blend_internals.h"
|
||||
#include "doc/image_impl.h"
|
||||
@ -651,8 +652,8 @@ private:
|
||||
m_srcImageHeight),
|
||||
pt, false);
|
||||
|
||||
pt.x = MID(0, pt.x, m_srcImageWidth-1);
|
||||
pt.y = MID(0, pt.y, m_srcImageHeight-1);
|
||||
pt.x = base::clamp(pt.x, 0, m_srcImageWidth-1);
|
||||
pt.y = base::clamp(pt.y, 0, m_srcImageHeight-1);
|
||||
|
||||
m_color = get_pixel(m_srcImage, pt.x, pt.y);
|
||||
}
|
||||
|
@ -27,8 +27,8 @@
|
||||
#include "app/commands/quick_command.h"
|
||||
#include "app/console.h"
|
||||
#include "app/context_access.h"
|
||||
#include "app/doc_undo.h"
|
||||
#include "app/doc_api.h"
|
||||
#include "app/doc_undo.h"
|
||||
#include "app/i18n/strings.h"
|
||||
#include "app/ini_file.h"
|
||||
#include "app/modules/editors.h"
|
||||
@ -51,6 +51,7 @@
|
||||
#include "app/ui_context.h"
|
||||
#include "app/util/clipboard.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/scoped_value.h"
|
||||
#include "doc/cel.h"
|
||||
#include "doc/cels_range.h"
|
||||
@ -1216,7 +1217,7 @@ void ColorBar::fixColorIndex(ColorButton& colorButton)
|
||||
|
||||
if (color.getType() == Color::IndexType) {
|
||||
int oldIndex = color.getIndex();
|
||||
int newIndex = MID(0, oldIndex, get_current_palette()->size()-1);
|
||||
int newIndex = base::clamp(oldIndex, 0, get_current_palette()->size()-1);
|
||||
if (oldIndex != newIndex) {
|
||||
color = Color::fromIndex(newIndex);
|
||||
colorButton.setColor(color);
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -22,6 +23,7 @@
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "app/ui/status_bar.h"
|
||||
#include "app/ui_context.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/layer.h"
|
||||
#include "doc/sprite.h"
|
||||
#include "gfx/rect_io.h"
|
||||
@ -302,7 +304,7 @@ void ColorButton::openPopup(const bool forcePinned)
|
||||
if (!pinned || (forcePinned && m_hiddenPopupBounds.isEmpty())) {
|
||||
winBounds = gfx::Rect(m_window->bounds().origin(),
|
||||
m_window->sizeHint());
|
||||
winBounds.x = MID(0, bounds().x, ui::display_w()-winBounds.w);
|
||||
winBounds.x = base::clamp(bounds().x, 0, ui::display_w()-winBounds.w);
|
||||
if (bounds().y2() <= ui::display_h()-winBounds.h)
|
||||
winBounds.y = MAX(0, bounds().y2());
|
||||
else
|
||||
@ -314,8 +316,8 @@ void ColorButton::openPopup(const bool forcePinned)
|
||||
else {
|
||||
winBounds = m_windowDefaultBounds;
|
||||
}
|
||||
winBounds.x = MID(0, winBounds.x, ui::display_w()-winBounds.w);
|
||||
winBounds.y = MID(0, winBounds.y, ui::display_h()-winBounds.h);
|
||||
winBounds.x = base::clamp(winBounds.x, 0, ui::display_w()-winBounds.w);
|
||||
winBounds.y = base::clamp(winBounds.y, 0, ui::display_h()-winBounds.h);
|
||||
m_window->setBounds(winBounds);
|
||||
|
||||
m_window->manager()->dispatchMessages();
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "app/modules/gfx.h"
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "app/ui/status_bar.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/concurrent_queue.h"
|
||||
#include "base/scoped_value.h"
|
||||
#include "base/thread.h"
|
||||
@ -282,7 +283,7 @@ app::Color ColorSelector::getAlphaBarColor(const int u, const int umax)
|
||||
{
|
||||
int alpha = (255 * u / umax);
|
||||
app::Color color = m_color;
|
||||
color.setAlpha(MID(0, alpha, 255));
|
||||
color.setAlpha(base::clamp(alpha, 0, 255));
|
||||
return color;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -185,7 +185,7 @@ namespace {
|
||||
else
|
||||
++value;
|
||||
|
||||
setTextf("%d", MID(minValue(), value, maxValue()));
|
||||
setTextf("%d", base::clamp(value, minValue(), maxValue()));
|
||||
selectAllText();
|
||||
|
||||
onChange();
|
||||
@ -459,7 +459,7 @@ void ColorSliders::onEntryChange(const Channel i)
|
||||
Slider* slider = (m_mode == Mode::Absolute ?
|
||||
m_items[i].absSlider:
|
||||
m_items[i].relSlider);
|
||||
value = MID(slider->getMinValue(), value, slider->getMaxValue());
|
||||
value = base::clamp(value, slider->getMinValue(), slider->getMaxValue());
|
||||
slider->setValue(value);
|
||||
|
||||
onControlChange(i);
|
||||
|
@ -14,12 +14,13 @@
|
||||
#include "app/color_utils.h"
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "app/ui/status_bar.h"
|
||||
#include "base/clamp.h"
|
||||
#include "os/surface.h"
|
||||
#include "ui/graphics.h"
|
||||
#include "ui/message.h"
|
||||
#include "ui/paint_event.h"
|
||||
#include "ui/size_hint_event.h"
|
||||
#include "ui/resize_event.h"
|
||||
#include "ui/size_hint_event.h"
|
||||
#include "ui/system.h"
|
||||
|
||||
namespace app {
|
||||
@ -38,9 +39,9 @@ app::Color ColorSpectrum::getMainAreaColor(const int u, const int umax,
|
||||
double hue = 360.0 * u / umax;
|
||||
double lit = 1.0 - (double(v)/double(vmax));
|
||||
return app::Color::fromHsl(
|
||||
MID(0.0, hue, 360.0),
|
||||
base::clamp(hue, 0.0, 360.0),
|
||||
m_color.getHslSaturation(),
|
||||
MID(0.0, lit, 1.0),
|
||||
base::clamp(lit, 0.0, 1.0),
|
||||
getCurrentAlphaForNewColor());
|
||||
}
|
||||
|
||||
@ -49,7 +50,7 @@ app::Color ColorSpectrum::getBottomBarColor(const int u, const int umax)
|
||||
double sat = double(u) / double(umax);
|
||||
return app::Color::fromHsl(
|
||||
m_color.getHslHue(),
|
||||
MID(0.0, sat, 1.0),
|
||||
base::clamp(sat, 0.0, 1.0),
|
||||
m_color.getHslLightness(),
|
||||
getCurrentAlphaForNewColor());
|
||||
}
|
||||
@ -97,9 +98,9 @@ void ColorSpectrum::onPaintSurfaceInBgThread(
|
||||
|
||||
gfx::Color color = color_utils::color_for_ui(
|
||||
app::Color::fromHsl(
|
||||
MID(0.0, hue, 360.0),
|
||||
base::clamp(hue, 0.0, 360.0),
|
||||
sat,
|
||||
MID(0.0, lit, 1.0)));
|
||||
base::clamp(lit, 0.0, 1.0)));
|
||||
|
||||
s->putPixel(color, main.x+x, main.y+y);
|
||||
}
|
||||
|
@ -90,8 +90,8 @@ void ColorTintShadeTone::onPaintSurfaceInBgThread(
|
||||
gfx::Color color = color_utils::color_for_ui(
|
||||
app::Color::fromHsv(
|
||||
hue,
|
||||
MID(0.0, sat, 1.0),
|
||||
MID(0.0, val, 1.0)));
|
||||
base::clamp(sat, 0.0, 1.0),
|
||||
base::clamp(val, 0.0, 1.0)));
|
||||
|
||||
s->putPixel(color, main.x+x, main.y+y);
|
||||
}
|
||||
|
@ -97,9 +97,9 @@ app::Color ColorWheel::getMainAreaColor(const int _u, const int umax,
|
||||
int b = 255 - di;
|
||||
if (d < m_wheelRadius+2*guiscale()) {
|
||||
return app::Color::fromRgb(
|
||||
MID(0, r, 255),
|
||||
MID(0, g, 255),
|
||||
MID(128, b, 255));
|
||||
base::clamp(r, 0, 255),
|
||||
base::clamp(g, 0, 255),
|
||||
base::clamp(b, 128, 255));
|
||||
}
|
||||
else {
|
||||
return app::Color::fromRgb(128, 128, 255);
|
||||
@ -190,7 +190,7 @@ void ColorWheel::onPaintMainArea(ui::Graphics* g, const gfx::Rect& rc)
|
||||
double angle = std::atan2(m_color.getGreen()-128,
|
||||
m_color.getRed()-128);
|
||||
double dist = (255-m_color.getBlue()) / 128.0;
|
||||
dist = MID(0.0, dist, 1.0);
|
||||
dist = base::clamp(dist, 0.0, 1.0);
|
||||
|
||||
gfx::Point pos =
|
||||
m_wheelBounds.center() +
|
||||
@ -334,18 +334,18 @@ void ColorWheel::setHarmony(Harmony harmony)
|
||||
|
||||
int ColorWheel::getHarmonies() const
|
||||
{
|
||||
int i = MID(0, (int)m_harmony, (int)Harmony::LAST);
|
||||
int i = base::clamp((int)m_harmony, 0, (int)Harmony::LAST);
|
||||
return harmonies[i].n;
|
||||
}
|
||||
|
||||
app::Color ColorWheel::getColorInHarmony(int j) const
|
||||
{
|
||||
int i = MID(0, (int)m_harmony, (int)Harmony::LAST);
|
||||
j = MID(0, j, harmonies[i].n-1);
|
||||
int i = base::clamp((int)m_harmony, 0, (int)Harmony::LAST);
|
||||
j = base::clamp(j, 0, harmonies[i].n-1);
|
||||
double hue = convertHueAngle(int(m_color.getHsvHue()), -1) + harmonies[i].hues[j];
|
||||
double sat = m_color.getHsvSaturation() * harmonies[i].sats[j] / 100.0;
|
||||
return app::Color::fromHsv(std::fmod(hue, 360),
|
||||
MID(0.0, sat, 1.0),
|
||||
base::clamp(sat, 0.0, 1.0),
|
||||
m_color.getHsvValue());
|
||||
}
|
||||
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "app/ui_context.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/fs.h"
|
||||
#include "base/scoped_value.h"
|
||||
#include "doc/brush.h"
|
||||
@ -643,7 +644,7 @@ private:
|
||||
|
||||
char buf[32];
|
||||
int n = get_config_int("shades", "count", 0);
|
||||
n = MID(0, n, 256);
|
||||
n = base::clamp(n, 0, 256);
|
||||
for (int i=0; i<n; ++i) {
|
||||
sprintf(buf, "shade%d", i);
|
||||
Shade shade = shade_from_string(get_config_string("shades", buf, ""));
|
||||
|
@ -574,8 +574,8 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
||||
|
||||
const int maxw = std::max(0, m_sprite->width()-expose.x);
|
||||
const int maxh = std::max(0, m_sprite->height()-expose.y);
|
||||
expose.w = MID(0, expose.w, maxw);
|
||||
expose.h = MID(0, expose.h, maxh);
|
||||
expose.w = base::clamp(expose.w, 0, maxw);
|
||||
expose.h = base::clamp(expose.h, 0, maxh);
|
||||
if (expose.isEmpty())
|
||||
return;
|
||||
|
||||
@ -735,7 +735,7 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
||||
|
||||
if (m_docPref.pixelGrid.autoOpacity()) {
|
||||
alpha = int(alpha * (m_proj.zoom().scale()-2.) / (16.-2.));
|
||||
alpha = MID(0, alpha, 255);
|
||||
alpha = base::clamp(alpha, 0, 255);
|
||||
}
|
||||
|
||||
drawGrid(g, enclosingRect, Rect(0, 0, 1, 1),
|
||||
@ -757,7 +757,7 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
||||
double len = (m_proj.applyX(gridrc.w) +
|
||||
m_proj.applyY(gridrc.h)) / 2.;
|
||||
alpha = int(alpha * len / 32.);
|
||||
alpha = MID(0, alpha, 255);
|
||||
alpha = base::clamp(alpha, 0, 255);
|
||||
}
|
||||
|
||||
if (alpha > 8) {
|
||||
@ -1345,8 +1345,8 @@ gfx::Point Editor::autoScroll(MouseMessage* msg, AutoScroll dir)
|
||||
|
||||
m_oldPos = mousePos;
|
||||
mousePos = gfx::Point(
|
||||
MID(vp.x, mousePos.x, vp.x+vp.w-1),
|
||||
MID(vp.y, mousePos.y, vp.y+vp.h-1));
|
||||
base::clamp(mousePos.x, vp.x, vp.x2()-1),
|
||||
base::clamp(mousePos.y, vp.y, vp.y2()-1));
|
||||
}
|
||||
else
|
||||
m_oldPos = mousePos;
|
||||
@ -2430,7 +2430,7 @@ void Editor::pasteImage(const Image* image, const Mask* mask)
|
||||
// In other case, if the center is visible, we put the pasted
|
||||
// image in its original location.
|
||||
else {
|
||||
x = MID(visibleBounds.x-image->width(), x, visibleBounds.x+visibleBounds.w-1);
|
||||
x = base::clamp(x, visibleBounds.x-image->width(), visibleBounds.x2()-1);
|
||||
}
|
||||
|
||||
if (maskCenter.y < visibleBounds.y ||
|
||||
@ -2438,19 +2438,21 @@ void Editor::pasteImage(const Image* image, const Mask* mask)
|
||||
y = visibleBounds.y + visibleBounds.h/2 - image->height()/2;
|
||||
}
|
||||
else {
|
||||
y = MID(visibleBounds.y-image->height(), y, visibleBounds.y+visibleBounds.h-1);
|
||||
y = base::clamp(y, visibleBounds.y-image->height(), visibleBounds.y2()-1);
|
||||
}
|
||||
|
||||
// Limit the image inside the sprite's bounds.
|
||||
if (sprite->width() <= image->width() ||
|
||||
sprite->height() <= image->height()) {
|
||||
x = MID(0, x, sprite->width() - image->width());
|
||||
y = MID(0, y, sprite->height() - image->height());
|
||||
// TODO review this (I think limits are wrong and high limit can
|
||||
// be negative here)
|
||||
x = base::clamp(x, 0, sprite->width() - image->width());
|
||||
y = base::clamp(y, 0, sprite->height() - image->height());
|
||||
}
|
||||
else {
|
||||
// Also we always limit the 1 image pixel inside the sprite's bounds.
|
||||
x = MID(-image->width()+1, x, sprite->width()-1);
|
||||
y = MID(-image->height()+1, y, sprite->height()-1);
|
||||
x = base::clamp(x, -image->width()+1, sprite->width()-1);
|
||||
y = base::clamp(y, -image->height()+1, sprite->height()-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2020 Igara Studio S.A.
|
||||
// Copyright (C) 2015-2016 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -12,6 +13,7 @@
|
||||
|
||||
#include "app/ui/editor/editor.h"
|
||||
#include "app/ui/status_bar.h"
|
||||
#include "base/clamp.h"
|
||||
#include "ui/message.h"
|
||||
|
||||
#include <cmath>
|
||||
@ -48,12 +50,12 @@ bool MovingSymmetryState::onMouseMove(Editor* editor, MouseMessage* msg)
|
||||
case app::gen::SymmetryMode::HORIZONTAL:
|
||||
pos = m_symmetryAxisStart + delta.x;
|
||||
pos = std::round(pos*2.0)/2.0;
|
||||
pos = MID(1.0, pos, editor->sprite()->width()-1.0);
|
||||
pos = base::clamp(pos, 1.0, editor->sprite()->width()-1.0);
|
||||
break;
|
||||
case app::gen::SymmetryMode::VERTICAL:
|
||||
pos = m_symmetryAxisStart + delta.y;
|
||||
pos = std::round(pos*2.0)/2.0;
|
||||
pos = MID(1.0, pos, editor->sprite()->height()-1.0);
|
||||
pos = base::clamp(pos, 1.0, editor->sprite()->height()-1.0);
|
||||
break;
|
||||
}
|
||||
m_symmetryAxis(pos);
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2017 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -23,6 +24,7 @@
|
||||
#include "app/ui/keyboard_shortcuts.h"
|
||||
#include "app/ui/toolbar.h"
|
||||
#include "app/ui_context.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/string.h"
|
||||
#include "doc/layer.h"
|
||||
#include "doc/palette.h"
|
||||
@ -114,7 +116,7 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
case WheelAction::FgColor: {
|
||||
int lastIndex = get_current_palette()->size()-1;
|
||||
int newIndex = ColorBar::instance()->getFgColor().getIndex() + int(dz);
|
||||
newIndex = MID(0, newIndex, lastIndex);
|
||||
newIndex = base::clamp(newIndex, 0, lastIndex);
|
||||
ColorBar::instance()->setFgColor(app::Color::fromIndex(newIndex));
|
||||
break;
|
||||
}
|
||||
@ -122,7 +124,7 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
case WheelAction::BgColor: {
|
||||
int lastIndex = get_current_palette()->size()-1;
|
||||
int newIndex = ColorBar::instance()->getBgColor().getIndex() + int(dz);
|
||||
newIndex = MID(0, newIndex, lastIndex);
|
||||
newIndex = base::clamp(newIndex, 0, lastIndex);
|
||||
ColorBar::instance()->setBgColor(app::Color::fromIndex(newIndex));
|
||||
break;
|
||||
}
|
||||
@ -187,9 +189,9 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
ToolPreferences::Brush& brush =
|
||||
Preferences::instance().tool(tool).brush;
|
||||
|
||||
brush.size(MID(doc::Brush::kMinBrushSize,
|
||||
brush.size()+dz,
|
||||
doc::Brush::kMaxBrushSize));
|
||||
brush.size(base::clamp(int(brush.size()+dz),
|
||||
doc::Brush::kMinBrushSize,
|
||||
doc::Brush::kMaxBrushSize));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -203,7 +205,7 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
angle += 180;
|
||||
angle %= 181;
|
||||
|
||||
brush.angle(MID(0, angle, 180));
|
||||
brush.angle(base::clamp(angle, 0, 180));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -274,7 +276,7 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
tools::Tool* tool = getActiveTool();
|
||||
auto& toolPref = Preferences::instance().tool(tool);
|
||||
int opacity = toolPref.opacity();
|
||||
opacity = MID(0, opacity+dz*255/10, 255);
|
||||
opacity = base::clamp(int(opacity+dz*255/10), 0, 255);
|
||||
toolPref.opacity(opacity);
|
||||
break;
|
||||
}
|
||||
@ -287,7 +289,7 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
Command* command = Commands::instance()->byId(CommandId::LayerOpacity());
|
||||
if (command) {
|
||||
int opacity = static_cast<doc::LayerImage*>(site.layer())->opacity();
|
||||
opacity = MID(0, opacity+dz*255/10, 255);
|
||||
opacity = base::clamp(int(opacity+dz*255/10), 0, 255);
|
||||
|
||||
Params params;
|
||||
params.set("opacity",
|
||||
@ -307,7 +309,7 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
Command* command = Commands::instance()->byId(CommandId::CelOpacity());
|
||||
if (command) {
|
||||
int opacity = site.cel()->opacity();
|
||||
opacity = MID(0, opacity+dz*255/10, 255);
|
||||
opacity = base::clamp(int(opacity+dz*255/10), 0, 255);
|
||||
Params params;
|
||||
params.set("opacity",
|
||||
base::convert_to<std::string>(opacity).c_str());
|
||||
@ -323,7 +325,7 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
ColorBar* colorBar = ColorBar::instance();
|
||||
Color c = colorBar->getFgColor();
|
||||
int a = c.getAlpha();
|
||||
a = MID(0, a+dz*255/10, 255);
|
||||
a = base::clamp(int(a+dz*255/10), 0, 255);
|
||||
c.setAlpha(a);
|
||||
colorBar->setFgColor(c);
|
||||
break;
|
||||
@ -345,9 +347,9 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
case WheelAction::HslSaturation: s = s+dz/10.0; break;
|
||||
case WheelAction::HslLightness: l = l+dz/10.0; break;
|
||||
}
|
||||
colorBar->setFgColor(Color::fromHsl(MID(0.0, h, 360.0),
|
||||
MID(0.0, s, 1.0),
|
||||
MID(0.0, l, 1.0)));
|
||||
colorBar->setFgColor(Color::fromHsl(base::clamp(h, 0.0, 360.0),
|
||||
base::clamp(s, 0.0, 1.0),
|
||||
base::clamp(l, 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -367,9 +369,9 @@ bool StateWithWheelBehavior::onMouseWheel(Editor* editor, MouseMessage* msg)
|
||||
case WheelAction::HsvSaturation: s = s+dz/10.0; break;
|
||||
case WheelAction::HsvValue: v = v+dz/10.0; break;
|
||||
}
|
||||
colorBar->setFgColor(Color::fromHsv(MID(0.0, h, 360.0),
|
||||
MID(0.0, s, 1.0),
|
||||
MID(0.0, v, 1.0)));
|
||||
colorBar->setFgColor(Color::fromHsv(base::clamp(h, 0.0, 360.0),
|
||||
base::clamp(s, 0.0, 1.0),
|
||||
base::clamp(v, 0.0, 1.0)));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -358,7 +358,7 @@ bool FileList::onProcessMessage(Message* msg)
|
||||
}
|
||||
|
||||
if (bottom > 0)
|
||||
selectIndex(MID(0, select, bottom-1));
|
||||
selectIndex(base::clamp(select, 0, bottom-1));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -221,7 +221,7 @@ int PaletteView::getBoxSize() const
|
||||
|
||||
void PaletteView::setBoxSize(double boxsize)
|
||||
{
|
||||
m_boxsize = MID(4.0, boxsize, 32.0);
|
||||
m_boxsize = base::clamp(boxsize, 4.0, 32.0);
|
||||
|
||||
if (m_delegate)
|
||||
m_delegate->onPaletteViewChangeSize(int(m_boxsize));
|
||||
@ -784,7 +784,8 @@ PaletteView::Hit PaletteView::hitTest(const gfx::Point& pos)
|
||||
int colsLimit = m_columns;
|
||||
if (m_state == State::DRAGGING_OUTLINE)
|
||||
--colsLimit;
|
||||
int i = MID(0, (pos.x-vp.x)/box.w, colsLimit) + MAX(0, pos.y/box.h)*m_columns;
|
||||
int i = base::clamp((pos.x-vp.x)/box.w, 0, colsLimit)
|
||||
+ std::max(0, pos.y/box.h)*m_columns;
|
||||
return Hit(Hit::POSSIBLE_COLOR, i);
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "app/xml_document.h"
|
||||
#include "app/xml_exception.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/fs.h"
|
||||
#include "base/log.h"
|
||||
#include "base/string.h"
|
||||
@ -1634,7 +1635,7 @@ void SkinTheme::paintProgressBar(ui::Graphics* g, const gfx::Rect& rc0, double p
|
||||
rc.shrink(1);
|
||||
|
||||
int u = (int)((double)rc.w*progress);
|
||||
u = MID(0, u, rc.w);
|
||||
u = base::clamp(u, 0, rc.w);
|
||||
|
||||
if (u > 0)
|
||||
g->fillRect(colors.selected(), gfx::Rect(rc.x, rc.y, u, rc.h));
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2020 Igara Studio S.A.
|
||||
// Copyright (C) 2017 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -12,6 +13,7 @@
|
||||
|
||||
#include "app/ui/skin/skin_property.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/clamp.h"
|
||||
#include "ui/manager.h"
|
||||
#include "ui/message.h"
|
||||
|
||||
@ -55,7 +57,7 @@ bool Slider2::Slider2Entry::onProcessMessage(ui::Message* msg)
|
||||
else
|
||||
++value;
|
||||
|
||||
setTextf("%d", MID(minValue(), value, maxValue()));
|
||||
setTextf("%d", base::clamp(value, minValue(), maxValue()));
|
||||
selectAllText();
|
||||
|
||||
onChange();
|
||||
@ -118,7 +120,7 @@ void Slider2::onSliderChange()
|
||||
void Slider2::onEntryChange()
|
||||
{
|
||||
int v = m_entry.textInt();
|
||||
v = MID(m_slider.getMinValue(), v, m_slider.getMaxValue());
|
||||
v = base::clamp(v, m_slider.getMinValue(), m_slider.getMaxValue());
|
||||
m_slider.setValue(v);
|
||||
|
||||
onChange();
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "app/modules/gui.h"
|
||||
#include "app/ui/editor/editor_view.h"
|
||||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "base/clamp.h"
|
||||
#include "os/font.h"
|
||||
#include "os/surface.h"
|
||||
#include "os/system.h"
|
||||
@ -258,7 +259,7 @@ void Tabs::setDropViewPreview(const gfx::Point& pos, TabView* view)
|
||||
|
||||
if (!m_list.empty()) {
|
||||
newIndex = (pos.x - bounds().x) / m_list[0]->width;
|
||||
newIndex = MID(0, newIndex, (int)m_list.size());
|
||||
newIndex = base::clamp(newIndex, 0, (int)m_list.size());
|
||||
}
|
||||
else
|
||||
newIndex = 0;
|
||||
@ -429,7 +430,7 @@ bool Tabs::onProcessMessage(Message* msg)
|
||||
if (it != m_list.end()) {
|
||||
int index = (it - m_list.begin());
|
||||
int newIndex = index + dz;
|
||||
newIndex = MID(0, newIndex, int(m_list.size())-1);
|
||||
newIndex = base::clamp(newIndex, 0, int(m_list.size())-1);
|
||||
if (newIndex != index) {
|
||||
selectTabInternal(m_list[newIndex]);
|
||||
}
|
||||
@ -992,14 +993,14 @@ void Tabs::updateDragTabIndexes(int mouseX, bool startAni)
|
||||
int i = (mouseX - m_border*guiscale() - bounds().x) / m_dragTab->width;
|
||||
|
||||
if (m_dragCopy) {
|
||||
i = MID(0, i, int(m_list.size()));
|
||||
i = base::clamp(i, 0, int(m_list.size()));
|
||||
if (i != m_dragCopyIndex) {
|
||||
m_dragCopyIndex = i;
|
||||
startAni = true;
|
||||
}
|
||||
}
|
||||
else if (hasMouseOver()) {
|
||||
i = MID(0, i, int(m_list.size())-1);
|
||||
i = base::clamp(i, 0, int(m_list.size())-1);
|
||||
if (i != m_dragTabIndex) {
|
||||
m_list.erase(m_list.begin()+m_dragTabIndex);
|
||||
m_list.insert(m_list.begin()+i, m_selected);
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -14,6 +14,7 @@
|
||||
#include "app/doc.h"
|
||||
#include "app/pref/preferences.h"
|
||||
#include "app/ui/layer_frame_comboboxes.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/sprite.h"
|
||||
#include "doc/tag.h"
|
||||
|
||||
@ -53,8 +54,8 @@ void TagWindow::rangeValue(doc::frame_t& from, doc::frame_t& to)
|
||||
|
||||
from = this->from()->textInt()-m_base;
|
||||
to = this->to()->textInt()-m_base;
|
||||
from = MID(first, from, last);
|
||||
to = MID(from, to, last);
|
||||
from = base::clamp(from, first, last);
|
||||
to = base::clamp(to, from, last);
|
||||
}
|
||||
|
||||
doc::color_t TagWindow::colorValue()
|
||||
|
@ -284,7 +284,7 @@ Timeline::~Timeline()
|
||||
|
||||
void Timeline::setZoom(const double zoom)
|
||||
{
|
||||
m_zoom = MID(1.0, zoom, 10.0);
|
||||
m_zoom = base::clamp(zoom, 1.0, 10.0);
|
||||
m_thumbnailsOverlayDirection = gfx::Point(int(frameBoxWidth()*1.0), int(frameBoxWidth()*0.5));
|
||||
m_thumbnailsOverlayVisible = false;
|
||||
}
|
||||
@ -944,7 +944,7 @@ bool Timeline::onProcessMessage(Message* msg)
|
||||
if (selectedLayersBounds(selectedLayers(),
|
||||
&layerFirst, &layerLast)) {
|
||||
layer_t layerIdx = m_clk.layer;
|
||||
layerIdx = MID(layerFirst, layerIdx, layerLast);
|
||||
layerIdx = base::clamp(layerIdx, layerFirst, layerLast);
|
||||
m_clk.layer = layerIdx;
|
||||
}
|
||||
}
|
||||
@ -1885,20 +1885,21 @@ void Timeline::setCursor(ui::Message* msg, const Hit& hit)
|
||||
}
|
||||
}
|
||||
|
||||
void Timeline::getDrawableLayers(layer_t* firstLayer, layer_t* lastLayer)
|
||||
void Timeline::getDrawableLayers(layer_t* firstDrawableLayer,
|
||||
layer_t* lastDrawableLayer)
|
||||
{
|
||||
layer_t i = this->lastLayer()
|
||||
layer_t i = lastLayer()
|
||||
- ((viewScroll().y + getCelsBounds().h) / layerBoxHeight());
|
||||
i = MID(this->firstLayer(), i, this->lastLayer());
|
||||
i = base::clamp(i, firstLayer(), lastLayer());
|
||||
|
||||
layer_t j = this->lastLayer() - viewScroll().y / layerBoxHeight();;
|
||||
layer_t j = lastLayer() - viewScroll().y / layerBoxHeight();;
|
||||
if (!m_rows.empty())
|
||||
j = MID(this->firstLayer(), j, this->lastLayer());
|
||||
j = base::clamp(j, firstLayer(), lastLayer());
|
||||
else
|
||||
j = -1;
|
||||
|
||||
*firstLayer = i;
|
||||
*lastLayer = j;
|
||||
*firstDrawableLayer = i;
|
||||
*lastDrawableLayer = j;
|
||||
}
|
||||
|
||||
void Timeline::getDrawableFrames(frame_t* firstFrame, frame_t* lastFrame)
|
||||
@ -2476,9 +2477,9 @@ void Timeline::drawTags(ui::Graphics* g)
|
||||
r = gfx::getr(bg)+32;
|
||||
g = gfx::getg(bg)+32;
|
||||
b = gfx::getb(bg)+32;
|
||||
r = MID(0, r, 255);
|
||||
g = MID(0, g, 255);
|
||||
b = MID(0, b, 255);
|
||||
r = base::clamp(r, 0, 255);
|
||||
g = base::clamp(g, 0, 255);
|
||||
b = base::clamp(b, 0, 255);
|
||||
bg = gfx::rgba(r, g, b, gfx::geta(bg));
|
||||
}
|
||||
g->fillRect(bg, bounds);
|
||||
@ -3049,11 +3050,11 @@ Timeline::Hit Timeline::hitTest(ui::Message* msg, const gfx::Point& mousePos)
|
||||
hit.veryBottom = true;
|
||||
|
||||
if (hasCapture()) {
|
||||
hit.layer = MID(firstLayer(), hit.layer, lastLayer());
|
||||
hit.layer = base::clamp(hit.layer, firstLayer(), lastLayer());
|
||||
if (isMovingCel())
|
||||
hit.frame = MAX(firstFrame(), hit.frame);
|
||||
hit.frame = std::max(firstFrame(), hit.frame);
|
||||
else
|
||||
hit.frame = MID(firstFrame(), hit.frame, lastFrame());
|
||||
hit.frame = base::clamp(hit.frame, firstFrame(), lastFrame());
|
||||
}
|
||||
else {
|
||||
if (hit.layer > lastLayer()) hit.layer = -1;
|
||||
@ -3227,8 +3228,8 @@ Timeline::Hit Timeline::hitTestCel(const gfx::Point& mousePos)
|
||||
- m_separator_w
|
||||
+ scroll.x) / frameBoxWidth());
|
||||
|
||||
hit.layer = MID(firstLayer(), hit.layer, lastLayer());
|
||||
hit.frame = MAX(firstFrame(), hit.frame);
|
||||
hit.layer = base::clamp(hit.layer, firstLayer(), lastLayer());
|
||||
hit.frame = std::max(firstFrame(), hit.frame);
|
||||
|
||||
return hit;
|
||||
}
|
||||
@ -3736,8 +3737,8 @@ void Timeline::setViewScroll(const gfx::Point& pt)
|
||||
const gfx::Point oldScroll = viewScroll();
|
||||
const gfx::Point maxPos = getMaxScrollablePos();
|
||||
gfx::Point newScroll = pt;
|
||||
newScroll.x = MID(0, newScroll.x, maxPos.x);
|
||||
newScroll.y = MID(0, newScroll.y, maxPos.y);
|
||||
newScroll.x = base::clamp(newScroll.x, 0, maxPos.x);
|
||||
newScroll.y = base::clamp(newScroll.y, 0, maxPos.y);
|
||||
|
||||
if (newScroll.y != oldScroll.y) {
|
||||
gfx::Rect rc;
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (C) 2018 Igara Studio S.A.
|
||||
// Copyright (c) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (c) 2001-2018 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "doc/algo.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/debug.h"
|
||||
|
||||
#include <algorithm>
|
||||
@ -249,7 +249,7 @@ static void draw_rotated_ellipse_rect(int x0, int y0, int x1, int y1, double zd,
|
||||
if (w != 0.0)
|
||||
w = (w-zd) / (w+w); // squared weight of P1
|
||||
|
||||
w = MID(0.0, w, 1.0);
|
||||
w = base::clamp(w, 0.0, 1.0);
|
||||
|
||||
xd = std::floor(w*xd + 0.5);
|
||||
yd = std::floor(w*yd + 0.5);
|
||||
@ -285,7 +285,7 @@ void fill_rotated_ellipse(int cx, int cy, int a, int b, double angle, void* data
|
||||
Rows(int y0, int nrows)
|
||||
: y0(y0), row(nrows, std::make_pair(1, -1)) { }
|
||||
void update(int x, int y) {
|
||||
int i = MID(0, y-y0, row.size()-1);
|
||||
int i = base::clamp(y-y0, 0, int(row.size()-1));
|
||||
auto& r = row[i];
|
||||
if (r.first > r.second) {
|
||||
r.first = r.second = x;
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (c) 2019 Igara Studio S.A.
|
||||
// Copyright (c) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (c) 2001-2017 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -396,8 +396,14 @@ static void set_lum(double& r, double& g, double& b, double l)
|
||||
clip_color(r, g, b);
|
||||
}
|
||||
|
||||
// TODO replace this with a better impl (and test this, not sure if it's correct)
|
||||
static void set_sat(double& r, double& g, double& b, double s)
|
||||
{
|
||||
#undef MID
|
||||
#define MID(x,y,z) ((x) > (y) ? ((y) > (z) ? (y) : ((x) > (z) ? \
|
||||
(z) : (x))) : ((y) > (z) ? ((z) > (x) ? (z) : \
|
||||
(x)): (y)))
|
||||
|
||||
double& min = MIN(r, MIN(g, b));
|
||||
double& mid = MID(r, g, b);
|
||||
double& max = MAX(r, MAX(g, b));
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "doc/handle_anidir.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/frame.h"
|
||||
#include "doc/sprite.h"
|
||||
#include "doc/tag.h"
|
||||
@ -37,8 +37,8 @@ frame_t calculate_next_frame(
|
||||
|
||||
loopFrom = tag->fromFrame();
|
||||
loopTo = tag->toFrame();
|
||||
loopFrom = MID(first, loopFrom, last);
|
||||
loopTo = MID(first, loopTo, last);
|
||||
loopFrom = base::clamp(loopFrom, first, last);
|
||||
loopTo = base::clamp(loopTo, first, last);
|
||||
|
||||
first = loopFrom;
|
||||
last = loopTo;
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "doc/mask.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/memory.h"
|
||||
#include "doc/image_impl.h"
|
||||
|
||||
@ -386,10 +386,10 @@ void Mask::crop(const Image *image)
|
||||
beg_x2 = beg_x1 + m_bounds.w - 1;
|
||||
beg_y2 = beg_y1 + m_bounds.h - 1;
|
||||
|
||||
beg_x1 = MID(0, beg_x1, m_bounds.w-1);
|
||||
beg_y1 = MID(0, beg_y1, m_bounds.h-1);
|
||||
beg_x2 = MID(beg_x1, beg_x2, m_bounds.w-1);
|
||||
beg_y2 = MID(beg_y1, beg_y2, m_bounds.h-1);
|
||||
beg_x1 = base::clamp(beg_x1, 0, m_bounds.w-1);
|
||||
beg_y1 = base::clamp(beg_y1, 0, m_bounds.h-1);
|
||||
beg_x2 = base::clamp(beg_x2, beg_x1, m_bounds.w-1);
|
||||
beg_y2 = base::clamp(beg_y2, beg_y1, m_bounds.h-1);
|
||||
|
||||
/* left */
|
||||
ADVANCE(x1, x2, y2, <=, ++,
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite Document Library
|
||||
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||
// Copyright (C) 2018-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "doc/sprite.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/memory.h"
|
||||
#include "base/remove_from_container.h"
|
||||
#include "doc/cel.h"
|
||||
@ -77,7 +77,7 @@ Sprite::Sprite(const ImageSpec& spec,
|
||||
case ColorMode::BITMAP:
|
||||
for (int c=0; c<ncolors; c++) {
|
||||
int g = 255 * c / (ncolors-1);
|
||||
g = MID(0, g, 255);
|
||||
g = base::clamp(g, 0, 255);
|
||||
pal.setEntry(c, rgba(g, g, g, 255));
|
||||
}
|
||||
break;
|
||||
@ -424,19 +424,19 @@ int Sprite::totalAnimationDuration() const
|
||||
void Sprite::setFrameDuration(frame_t frame, int msecs)
|
||||
{
|
||||
if (frame >= 0 && frame < m_frames)
|
||||
m_frlens[frame] = MID(1, msecs, 65535);
|
||||
m_frlens[frame] = base::clamp(msecs, 1, 65535);
|
||||
}
|
||||
|
||||
void Sprite::setFrameRangeDuration(frame_t from, frame_t to, int msecs)
|
||||
{
|
||||
std::fill(
|
||||
m_frlens.begin()+(std::size_t)from,
|
||||
m_frlens.begin()+(std::size_t)to+1, MID(1, msecs, 65535));
|
||||
m_frlens.begin()+(std::size_t)to+1, base::clamp(msecs, 1, 65535));
|
||||
}
|
||||
|
||||
void Sprite::setDurationForAllFrames(int msecs)
|
||||
{
|
||||
std::fill(m_frlens.begin(), m_frlens.end(), MID(1, msecs, 65535));
|
||||
std::fill(m_frlens.begin(), m_frlens.end(), base::clamp(msecs, 1, 65535));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2017 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -11,6 +11,7 @@
|
||||
|
||||
#include "filters/brightness_contrast_filter.h"
|
||||
|
||||
#include "base/clamp.h"
|
||||
#include "doc/image.h"
|
||||
#include "doc/palette.h"
|
||||
#include "doc/rgbmap.h"
|
||||
@ -188,7 +189,7 @@ void BrightnessContrastFilter::updateMap()
|
||||
double x = double(u) / double(max-1);
|
||||
double y = (m_contrast+1.0) * (x - 0.5) + 0.5;
|
||||
y = y*(1.0+m_brightness);
|
||||
y = MID(0.0, y, 1.0);
|
||||
y = base::clamp(y, 0.0, 1.0);
|
||||
m_cmap[u] = int(255.5 * y);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "filters/color_curve_filter.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "filters/color_curve.h"
|
||||
#include "filters/filter_indexed_data.h"
|
||||
#include "filters/filter_manager.h"
|
||||
@ -42,7 +42,7 @@ void ColorCurveFilter::generateMap()
|
||||
// Generate the color convertion map
|
||||
m_curve.getValues(0, 255, m_cmap);
|
||||
for (int c=0; c<256; c++)
|
||||
m_cmap[c] = MID(0, m_cmap[c], 255);
|
||||
m_cmap[c] = base::clamp(m_cmap[c], 0, 255);
|
||||
}
|
||||
|
||||
const char* ColorCurveFilter::getName()
|
||||
@ -145,7 +145,7 @@ void ColorCurveFilter::applyToIndexed(FilterManager* filterMgr)
|
||||
c = rgbmap->mapColor(r, g, b, a);
|
||||
}
|
||||
|
||||
*(dst_address++) = MID(0, c, pal->size()-1);
|
||||
*(dst_address++) = base::clamp(c, 0, pal->size()-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "filters/convolution_matrix_filter.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "filters/convolution_matrix.h"
|
||||
#include "filters/filter_indexed_data.h"
|
||||
#include "filters/filter_manager.h"
|
||||
@ -168,28 +168,28 @@ void ConvolutionMatrixFilter::applyToRgba(FilterManager* filterMgr)
|
||||
|
||||
if (target & TARGET_RED_CHANNEL) {
|
||||
delegate.r = delegate.r / delegate.div + m_matrix->getBias();
|
||||
delegate.r = MID(0, delegate.r, 255);
|
||||
delegate.r = base::clamp(delegate.r, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.r = rgba_getr(color);
|
||||
|
||||
if (target & TARGET_GREEN_CHANNEL) {
|
||||
delegate.g = delegate.g / delegate.div + m_matrix->getBias();
|
||||
delegate.g = MID(0, delegate.g, 255);
|
||||
delegate.g = base::clamp(delegate.g, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.g = rgba_getg(color);
|
||||
|
||||
if (target & TARGET_BLUE_CHANNEL) {
|
||||
delegate.b = delegate.b / delegate.div + m_matrix->getBias();
|
||||
delegate.b = MID(0, delegate.b, 255);
|
||||
delegate.b = base::clamp(delegate.b, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.b = rgba_getb(color);
|
||||
|
||||
if (target & TARGET_ALPHA_CHANNEL) {
|
||||
delegate.a = delegate.a / m_matrix->getDiv() + m_matrix->getBias();
|
||||
delegate.a = MID(0, delegate.a, 255);
|
||||
delegate.a = base::clamp(delegate.a, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.a = rgba_geta(color);
|
||||
@ -235,14 +235,14 @@ void ConvolutionMatrixFilter::applyToGrayscale(FilterManager* filterMgr)
|
||||
|
||||
if (target & TARGET_GRAY_CHANNEL) {
|
||||
delegate.v = delegate.v / delegate.div + m_matrix->getBias();
|
||||
delegate.v = MID(0, delegate.v, 255);
|
||||
delegate.v = base::clamp(delegate.v, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.v = graya_getv(color);
|
||||
|
||||
if (target & TARGET_ALPHA_CHANNEL) {
|
||||
delegate.a = delegate.a / m_matrix->getDiv() + m_matrix->getBias();
|
||||
delegate.a = MID(0, delegate.a, 255);
|
||||
delegate.a = base::clamp(delegate.a, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.a = graya_geta(color);
|
||||
@ -290,7 +290,7 @@ void ConvolutionMatrixFilter::applyToIndexed(FilterManager* filterMgr)
|
||||
|
||||
if (target & TARGET_INDEX_CHANNEL) {
|
||||
delegate.index = delegate.index / m_matrix->getDiv() + m_matrix->getBias();
|
||||
delegate.index = MID(0, delegate.index, 255);
|
||||
delegate.index = base::clamp(delegate.index, 0, 255);
|
||||
|
||||
*(dst_address++) = delegate.index;
|
||||
}
|
||||
@ -299,28 +299,28 @@ void ConvolutionMatrixFilter::applyToIndexed(FilterManager* filterMgr)
|
||||
|
||||
if (target & TARGET_RED_CHANNEL) {
|
||||
delegate.r = delegate.r / delegate.div + m_matrix->getBias();
|
||||
delegate.r = MID(0, delegate.r, 255);
|
||||
delegate.r = base::clamp(delegate.r, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.r = rgba_getr(color);
|
||||
|
||||
if (target & TARGET_GREEN_CHANNEL) {
|
||||
delegate.g = delegate.g / delegate.div + m_matrix->getBias();
|
||||
delegate.g = MID(0, delegate.g, 255);
|
||||
delegate.g = base::clamp(delegate.g, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.g = rgba_getg(color);
|
||||
|
||||
if (target & TARGET_BLUE_CHANNEL) {
|
||||
delegate.b = delegate.b / delegate.div + m_matrix->getBias();
|
||||
delegate.b = MID(0, delegate.b, 255);
|
||||
delegate.b = base::clamp(delegate.b, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.b = rgba_getb(color);
|
||||
|
||||
if (target & TARGET_ALPHA_CHANNEL) {
|
||||
delegate.a = delegate.a / delegate.div + m_matrix->getBias();
|
||||
delegate.a = MID(0, delegate.a, 255);
|
||||
delegate.a = base::clamp(delegate.a, 0, 255);
|
||||
}
|
||||
else
|
||||
delegate.a = rgba_geta(color);
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2017-2018 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -11,6 +11,7 @@
|
||||
|
||||
#include "filters/hue_saturation_filter.h"
|
||||
|
||||
#include "base/clamp.h"
|
||||
#include "doc/image.h"
|
||||
#include "doc/palette.h"
|
||||
#include "doc/palette_picks.h"
|
||||
@ -124,7 +125,7 @@ void HueSaturationFilter::applyToGrayscale(FilterManager* filterMgr)
|
||||
gfx::Hsl hsl(gfx::Rgb(k, k, k));
|
||||
|
||||
double l = hsl.lightness()*(1.0+m_l);
|
||||
l = MID(0.0, l, 1.0);
|
||||
l = base::clamp(l, 0.0, 1.0);
|
||||
|
||||
hsl.lightness(l);
|
||||
gfx::Rgb rgb(hsl);
|
||||
@ -133,7 +134,7 @@ void HueSaturationFilter::applyToGrayscale(FilterManager* filterMgr)
|
||||
|
||||
if (a && (target & TARGET_ALPHA_CHANNEL)) {
|
||||
a = a*(1.0+m_a);
|
||||
a = MID(0, a, 255);
|
||||
a = base::clamp(a, 0, 255);
|
||||
}
|
||||
}
|
||||
|
||||
@ -213,10 +214,10 @@ void HueSaturationFilter::applyFilterToRgbT(const Target target, doc::color_t& c
|
||||
h = std::fmod(h, 360.0);
|
||||
|
||||
double s = hsl.saturation()*(1.0+m_s);
|
||||
s = MID(0.0, s, 1.0);
|
||||
s = base::clamp(s, 0.0, 1.0);
|
||||
|
||||
double l = (hsl.*get_lightness)()*(1.0+m_l);
|
||||
l = MID(0.0, l, 1.0);
|
||||
l = base::clamp(l, 0.0, 1.0);
|
||||
|
||||
hsl.hue(h);
|
||||
hsl.saturation(s);
|
||||
@ -228,7 +229,7 @@ void HueSaturationFilter::applyFilterToRgbT(const Target target, doc::color_t& c
|
||||
if (target & TARGET_BLUE_CHANNEL ) b = rgb.blue();
|
||||
if (a && (target & TARGET_ALPHA_CHANNEL)) {
|
||||
a = a*(1.0+m_a);
|
||||
a = MID(0, a, 255);
|
||||
a = base::clamp(a, 0, 255);
|
||||
}
|
||||
|
||||
c = rgba(r, g, b, a);
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This program is distributed under the terms of
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "filters/replace_color_filter.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/image.h"
|
||||
#include "doc/palette.h"
|
||||
#include "doc/rgbmap.h"
|
||||
@ -40,7 +40,7 @@ void ReplaceColorFilter::setTo(const color_t to)
|
||||
|
||||
void ReplaceColorFilter::setTolerance(int tolerance)
|
||||
{
|
||||
m_tolerance = MID(0, tolerance, 255);
|
||||
m_tolerance = base::clamp(tolerance, 0, 255);
|
||||
}
|
||||
|
||||
const char* ReplaceColorFilter::getName()
|
||||
|
@ -1,5 +1,5 @@
|
||||
Copyright (c) 2019 Igara Studio S.A.
|
||||
Copyright (c) 2001-2018 David Capello
|
||||
Copyright (c) 2019-2020 Igara Studio S.A.
|
||||
Copyright (c) 2001-2018 David Capello
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite Render Library
|
||||
// Copyright (c) 2019 Igara Studio S.A
|
||||
// Copyright (c) 2019-2020 Igara Studio S.A
|
||||
// Copyright (c) 2017 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -68,7 +68,7 @@ doc::color_t ErrorDiffusionDither::ditherRgbToIndex2D(
|
||||
};
|
||||
for (int i=0; i<kChannels; ++i) {
|
||||
v[i] += m_err[i][x+1];
|
||||
v[i] = MID(0, v[i], 255);
|
||||
v[i] = base::clamp(v[i], 0, 255);
|
||||
}
|
||||
|
||||
const doc::color_t index =
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite Render Library
|
||||
// Copyright (c) 2019 Igara Studio S.A.
|
||||
// Copyright (c) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (c) 2017 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "render/ordered_dither.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "render/dithering.h"
|
||||
#include "render/dithering_matrix.h"
|
||||
|
||||
@ -83,10 +83,10 @@ doc::color_t OrderedDither::ditherRgbPixelToIndex(
|
||||
int g2 = g - (g1-g);
|
||||
int b2 = b - (b1-b);
|
||||
int a2 = a - (a1-a);
|
||||
r2 = MID(0, r2, 255);
|
||||
g2 = MID(0, g2, 255);
|
||||
b2 = MID(0, b2, 255);
|
||||
a2 = MID(0, a2, 255);
|
||||
r2 = base::clamp(r2, 0, 255);
|
||||
g2 = base::clamp(g2, 0, 255);
|
||||
b2 = base::clamp(b2, 0, 255);
|
||||
a2 = base::clamp(a2, 0, 255);
|
||||
doc::color_t nearest2idx =
|
||||
(rgbmap ? rgbmap->mapColor(r2, g2, b2, a2):
|
||||
palette->findBestfit(r2, g2, b2, a2, m_transparentIndex));
|
||||
@ -201,7 +201,7 @@ doc::color_t OrderedDither2::ditherRgbPixelToIndex(
|
||||
if (mix) {
|
||||
if (div)
|
||||
mix /= div;
|
||||
mix = MID(0, mix, maxMixValue);
|
||||
mix = base::clamp(mix, 0, maxMixValue);
|
||||
}
|
||||
|
||||
const int rM = r0 + (r1-r0) * mix / maxMixValue;
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Aseprite Render Library
|
||||
// Copyright (C) 2019 Igara Studio S.A.
|
||||
// Copyright (C) 2019-2020 Igara Studio S.A.
|
||||
// Copyright (C) 2001-2018 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#include "render/render.h"
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "doc/blend_internals.h"
|
||||
#include "doc/blend_mode.h"
|
||||
#include "doc/doc.h"
|
||||
@ -881,7 +881,7 @@ void Render::renderOnionskin(
|
||||
m_globalOpacity = m_onionskin.opacityBase() - m_onionskin.opacityStep() * ((frameOut - frame)-1);
|
||||
}
|
||||
|
||||
m_globalOpacity = MID(0, m_globalOpacity, 255);
|
||||
m_globalOpacity = base::clamp(m_globalOpacity, 0, 255);
|
||||
if (m_globalOpacity > 0) {
|
||||
BlendMode blendMode = BlendMode::UNSPECIFIED;
|
||||
if (m_onionskin.type() == OnionskinType::MERGE)
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Aseprite Render Library
|
||||
// Copyright (c) 2020 Igara Studio S.A.
|
||||
// Copyright (c) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
@ -8,7 +9,7 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "base/base.h"
|
||||
#include "base/clamp.h"
|
||||
#include "base/debug.h"
|
||||
#include "render/zoom.h"
|
||||
|
||||
@ -104,7 +105,7 @@ Zoom Zoom::fromScale(double scale)
|
||||
// static
|
||||
Zoom Zoom::fromLinearScale(int i)
|
||||
{
|
||||
i = MID(0, i, scales_size-1);
|
||||
i = base::clamp(i, 0, scales_size-1);
|
||||
return Zoom(scales[i][0], scales[i][1]);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user