aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2019-04-07 12:20:58 +1000
committerNeil <nyamatongwe@gmail.com>2019-04-07 12:20:58 +1000
commitd2bb3203067343b51bf3c543b331741f6fa4ad21 (patch)
tree84ca5bf493addc9912999858ce778562d20eb105 /src
parent33ca7ad72f783b2b9a9eef0b5d0dc8cd0629be69 (diff)
downloadscintilla-mirror-d2bb3203067343b51bf3c543b331741f6fa4ad21.tar.gz
Make XPM, RGBAImage, and LineMarker copyable and noexcept moveable.
This simplifies and optimizes their use in other classes and containers.
Diffstat (limited to 'src')
-rw-r--r--src/LineMarker.cxx58
-rw-r--r--src/LineMarker.h24
-rw-r--r--src/XPM.h17
3 files changed, 51 insertions, 48 deletions
diff --git a/src/LineMarker.cxx b/src/LineMarker.cxx
index 92dd775ca..1c03f0baf 100644
--- a/src/LineMarker.cxx
+++ b/src/LineMarker.cxx
@@ -26,41 +26,41 @@
using namespace Scintilla;
-LineMarker::~LineMarker() {
-}
-
-LineMarker::LineMarker() {
- markType = SC_MARK_CIRCLE;
- fore = ColourDesired(0, 0, 0);
- back = ColourDesired(0xff, 0xff, 0xff);
- backSelected = ColourDesired(0xff, 0x00, 0x00);
- alpha = SC_ALPHA_NOALPHA;
- customDraw = nullptr;
-}
-
-LineMarker::LineMarker(const LineMarker &) {
+LineMarker::LineMarker(const LineMarker &other) {
// Defined to avoid pxpm and image being blindly copied, not as a complete copy constructor.
- markType = SC_MARK_CIRCLE;
- fore = ColourDesired(0, 0, 0);
- back = ColourDesired(0xff, 0xff, 0xff);
- backSelected = ColourDesired(0xff, 0x00, 0x00);
- alpha = SC_ALPHA_NOALPHA;
- pxpm.reset();
- image.reset();
- customDraw = nullptr;
+ markType = other.markType;
+ fore = other.fore;
+ back = other.back;
+ backSelected = other.backSelected;
+ alpha = other.alpha;
+ if (other.pxpm)
+ pxpm = std::make_unique<XPM>(*other.pxpm);
+ else
+ pxpm = nullptr;
+ if (other.image)
+ image = std::make_unique<RGBAImage>(*other.image);
+ else
+ image = nullptr;
+ customDraw = other.customDraw;
}
LineMarker &LineMarker::operator=(const LineMarker &other) {
// Defined to avoid pxpm and image being blindly copied, not as a complete assignment operator.
if (this != &other) {
- markType = SC_MARK_CIRCLE;
- fore = ColourDesired(0, 0, 0);
- back = ColourDesired(0xff, 0xff, 0xff);
- backSelected = ColourDesired(0xff, 0x00, 0x00);
- alpha = SC_ALPHA_NOALPHA;
- pxpm.reset();
- image.reset();
- customDraw = nullptr;
+ markType = other.markType;
+ fore = other.fore;
+ back = other.back;
+ backSelected = other.backSelected;
+ alpha = other.alpha;
+ if (other.pxpm)
+ pxpm = std::make_unique<XPM>(*other.pxpm);
+ else
+ pxpm = nullptr;
+ if (other.image)
+ image = std::make_unique<RGBAImage>(*other.image);
+ else
+ image = nullptr;
+ customDraw = other.customDraw;
}
return *this;
}
diff --git a/src/LineMarker.h b/src/LineMarker.h
index 28a63cd3b..8a15327d2 100644
--- a/src/LineMarker.h
+++ b/src/LineMarker.h
@@ -21,22 +21,26 @@ class LineMarker {
public:
enum typeOfFold { undefined, head, body, tail, headWithTail };
- int markType;
- ColourDesired fore;
- ColourDesired back;
- ColourDesired backSelected;
- int alpha;
+ int markType = SC_MARK_CIRCLE;
+ ColourDesired fore = ColourDesired(0, 0, 0);
+ ColourDesired back = ColourDesired(0xff, 0xff, 0xff);
+ ColourDesired backSelected = ColourDesired(0xff, 0x00, 0x00);
+ int alpha = SC_ALPHA_NOALPHA;
std::unique_ptr<XPM> pxpm;
std::unique_ptr<RGBAImage> image;
/** Some platforms, notably PLAT_CURSES, do not support Scintilla's native
* Draw function for drawing line markers. Allow those platforms to override
* it instead of creating a new method(s) in the Surface class that existing
* platforms must implement as empty. */
- DrawLineMarkerFn customDraw;
- LineMarker();
- LineMarker(const LineMarker &);
- virtual ~LineMarker();
- LineMarker &operator=(const LineMarker &other);
+ DrawLineMarkerFn customDraw = nullptr;
+
+ LineMarker() noexcept = default;
+ LineMarker(const LineMarker &other);
+ LineMarker(LineMarker &&) noexcept = default;
+ LineMarker &operator=(const LineMarker& other);
+ LineMarker &operator=(LineMarker&&) noexcept = default;
+ virtual ~LineMarker() = default;
+
void SetXPM(const char *textForm);
void SetXPM(const char *const *linesForm);
void SetRGBAImage(Point sizeRGBAImage, float scale, const unsigned char *pixelsRGBAImage);
diff --git a/src/XPM.h b/src/XPM.h
index c3c1fc3b3..b7b895cdd 100644
--- a/src/XPM.h
+++ b/src/XPM.h
@@ -25,10 +25,10 @@ class XPM {
public:
explicit XPM(const char *textForm);
explicit XPM(const char *const *linesForm);
- XPM(const XPM &) = delete;
- XPM(XPM &&) = delete;
- XPM &operator=(const XPM &) = delete;
- XPM &operator=(XPM &&) = delete;
+ XPM(const XPM &) = default;
+ XPM(XPM &&) noexcept = default;
+ XPM &operator=(const XPM &) = default;
+ XPM &operator=(XPM &&) noexcept = default;
~XPM();
void Init(const char *textForm);
void Init(const char *const *linesForm);
@@ -52,11 +52,10 @@ class RGBAImage {
public:
RGBAImage(int width_, int height_, float scale_, const unsigned char *pixels_);
explicit RGBAImage(const XPM &xpm);
- // Deleted so RGBAImage objects can not be copied.
- RGBAImage(const RGBAImage &) = delete;
- RGBAImage(RGBAImage &&) = delete;
- RGBAImage &operator=(const RGBAImage &) = delete;
- RGBAImage &operator=(RGBAImage &&) = delete;
+ RGBAImage(const RGBAImage &) = default;
+ RGBAImage(RGBAImage &&) noexcept = default;
+ RGBAImage &operator=(const RGBAImage &) = default;
+ RGBAImage &operator=(RGBAImage &&) noexcept = default;
virtual ~RGBAImage();
int GetHeight() const { return height; }
int GetWidth() const { return width; }