Mercurial > love-experiments
diff src/modules/image/ImageData.cpp @ 1086:73f4863ee5b7
Applied the new style guidelines.
Well, sort of. Lot's more to be done, but this is a start.
| author | rude |
|---|---|
| date | Thu, 28 Jun 2012 23:52:33 +0200 |
| parents | cfb46ab478a0 |
| children | 86a44f2bc38f |
line wrap: on
line diff
--- a/src/modules/image/ImageData.cpp Mon Jun 11 17:06:57 2012 +0200 +++ b/src/modules/image/ImageData.cpp Thu Jun 28 23:52:33 2012 +0200 @@ -1,134 +1,167 @@ -/** -* Copyright (c) 2006-2012 LOVE Development Team -* -* This software is provided 'as-is', without any express or implied -* warranty. In no event will the authors be held liable for any damages -* arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software -* in a product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* 3. This notice may not be removed or altered from any source distribution. -**/ - -#include "ImageData.h" - -using love::thread::Lock; - -namespace love -{ -namespace image -{ - void * ImageData::getData() const - { - return data; - } - - int ImageData::getSize() const - { - return getWidth()*getHeight()*sizeof(pixel); - } - - int ImageData::getWidth() const - { - return width; - } - - int ImageData::getHeight() const - { - return height; - } - - bool ImageData::inside(int x, int y) const - { - return x >= 0 && x < getWidth() && y >= 0 && y < getHeight(); - } - - void ImageData::setPixel(int x, int y, pixel c) - { - if (!inside(x, y)) - throw love::Exception("Attempt to set out-of-range pixel!"); - - Lock lock(mutex); - - pixel * pixels = (pixel *)getData(); - pixels[y*getWidth()+x] = c; - } - - pixel ImageData::getPixel(int x, int y) - { - if (!inside(x, y)) - throw love::Exception("Attempt to get out-of-range pixel!"); - - Lock lock(mutex); - - pixel * pixels = (pixel *)getData(); - return pixels[y*getWidth()+x]; - } - - void ImageData::paste(ImageData * src, int dx, int dy, int sx, int sy, int sw, int sh) - { - Lock lock2(src->mutex); - Lock lock1(mutex); - - pixel * s = (pixel *)src->getData(); - pixel * d = (pixel *)getData(); - - // Check bounds; if the data ends up completely out of bounds, get out early. - if (sx >= src->getWidth() || sx + sw < 0 || sy >= src->getHeight() || sy + sh < 0 - || dx >= getWidth() || dx + sw < 0 || dy >= getHeight() || dy + sh < 0) - return; - - // Normalize values to the inside of both images. - if (dx < 0) { sw += dx; sx -= dx; dx = 0; } - if (dy < 0) { sh += dy; sy -= dy; dy = 0; } - if (sx < 0) { sw += sx; dx -= sx; sx = 0; } - if (sy < 0) { sh += sy; dy -= sy; sy = 0; } - if (dx + sw > getWidth()) { sw = getWidth() - dx; } - if (dy + sh > getHeight()) { sh = getHeight() - dy; } - if (sx + sw > src->getWidth()) { sw = src->getWidth() - sx; } - if (sy + sh > src->getHeight()) { sh = src->getHeight() - sy; } - - // If the dimensions match up, copy the entire memory stream in one go - if (sw == getWidth() && getWidth() == src->getWidth() - && sh == getHeight() && getHeight() == src->getHeight()) - memcpy(d, s, sizeof(pixel) * sw * sh); - else if (sw > 0 && sh > 0) // Otherwise, copy each row individually - { - for (int i = 0; i < sh; i++) - { - memcpy(d + dx + (i + dy) * getWidth(), s + sx + (i + sy) * src->getWidth(), sizeof(pixel) * sw); - } - } - } - - bool ImageData::getConstant(const char * in, ImageData::Format & out) - { - return formats.find(in, out); - } - - bool ImageData::getConstant(ImageData::Format in, const char *& out) - { - return formats.find(in, out); - } - - StringMap<ImageData::Format, ImageData::FORMAT_MAX_ENUM>::Entry ImageData::formatEntries[] = - { - {"tga", ImageData::FORMAT_TGA}, - {"bmp", ImageData::FORMAT_BMP}, - {"gif", ImageData::FORMAT_GIF}, - {"jpg", ImageData::FORMAT_JPG}, - {"png", ImageData::FORMAT_PNG}, - }; - - StringMap<ImageData::Format, ImageData::FORMAT_MAX_ENUM> ImageData::formats(ImageData::formatEntries, sizeof(ImageData::formatEntries)); - -} // image -} // love +/** + * Copyright (c) 2006-2012 LOVE Development Team + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + **/ + +#include "ImageData.h" + +using love::thread::Lock; + +namespace love +{ +namespace image +{ + +void *ImageData::getData() const +{ + return data; +} + +int ImageData::getSize() const +{ + return getWidth()*getHeight()*sizeof(pixel); +} + +int ImageData::getWidth() const +{ + return width; +} + +int ImageData::getHeight() const +{ + return height; +} + +bool ImageData::inside(int x, int y) const +{ + return x >= 0 && x < getWidth() && y >= 0 && y < getHeight(); +} + +void ImageData::setPixel(int x, int y, pixel c) +{ + if (!inside(x, y)) + throw love::Exception("Attempt to set out-of-range pixel!"); + + Lock lock(mutex); + + pixel *pixels = (pixel *)getData(); + pixels[y*getWidth()+x] = c; +} + +pixel ImageData::getPixel(int x, int y) +{ + if (!inside(x, y)) + throw love::Exception("Attempt to get out-of-range pixel!"); + + Lock lock(mutex); + + pixel *pixels = (pixel *)getData(); + return pixels[y*getWidth()+x]; +} + +void ImageData::paste(ImageData *src, int dx, int dy, int sx, int sy, int sw, int sh) +{ + Lock lock2(src->mutex); + Lock lock1(mutex); + + pixel *s = (pixel *)src->getData(); + pixel *d = (pixel *)getData(); + + // Check bounds; if the data ends up completely out of bounds, get out early. + if (sx >= src->getWidth() || sx + sw < 0 || sy >= src->getHeight() || sy + sh < 0 + || dx >= getWidth() || dx + sw < 0 || dy >= getHeight() || dy + sh < 0) + return; + + // Normalize values to the inside of both images. + if (dx < 0) + { + sw += dx; + sx -= dx; + dx = 0; + } + if (dy < 0) + { + sh += dy; + sy -= dy; + dy = 0; + } + if (sx < 0) + { + sw += sx; + dx -= sx; + sx = 0; + } + if (sy < 0) + { + sh += sy; + dy -= sy; + sy = 0; + } + if (dx + sw > getWidth()) + { + sw = getWidth() - dx; + } + if (dy + sh > getHeight()) + { + sh = getHeight() - dy; + } + if (sx + sw > src->getWidth()) + { + sw = src->getWidth() - sx; + } + if (sy + sh > src->getHeight()) + { + sh = src->getHeight() - sy; + } + + // If the dimensions match up, copy the entire memory stream in one go + if (sw == getWidth() && getWidth() == src->getWidth() + && sh == getHeight() && getHeight() == src->getHeight()) + memcpy(d, s, sizeof(pixel) * sw * sh); + else if (sw > 0 && sh > 0) // Otherwise, copy each row individually + { + for (int i = 0; i < sh; i++) + { + memcpy(d + dx + (i + dy) * getWidth(), s + sx + (i + sy) * src->getWidth(), sizeof(pixel) * sw); + } + } +} + +bool ImageData::getConstant(const char *in, ImageData::Format &out) +{ + return formats.find(in, out); +} + +bool ImageData::getConstant(ImageData::Format in, const char *&out) +{ + return formats.find(in, out); +} + +StringMap<ImageData::Format, ImageData::FORMAT_MAX_ENUM>::Entry ImageData::formatEntries[] = +{ + {"tga", ImageData::FORMAT_TGA}, + {"bmp", ImageData::FORMAT_BMP}, + {"gif", ImageData::FORMAT_GIF}, + {"jpg", ImageData::FORMAT_JPG}, + {"png", ImageData::FORMAT_PNG}, +}; + +StringMap<ImageData::Format, ImageData::FORMAT_MAX_ENUM> ImageData::formats(ImageData::formatEntries, sizeof(ImageData::formatEntries)); + +} // image +} // love
