Files
love/src/modules/font/Rasterizer.h
T
Alex Szpakowski d26002f5cc Revamped and streamlined retina / high-DPI support (resolves issue #1122).
With the highdpi window flag enabled on a retina-capable display and OS, content should now appear to the user at the same size and in the same positions as with the flag disabled.

As a result, mouse and touch coordinates, Texture and graphics dimensions, and the graphics coordinate system now use pixel density-scaled units instead of pixels. Raw pixel units should generally only be used for things such as shader algorithms which execute per-pixel and rely on accurate pixel dimensions. love.window.fromPixels and friends typically don’t need to be used anymore.

Images, Canvases, and Fonts can have an optional explicit ‘pixel density’ set when creating them. This allows for easily loading high pixel density content which displays at the same size as regular or low pixel density content.

API changes:

- Added Texture:getPixelWidth/getPixelHeight/getPixelDimensions and Texture:getPixelDensity. Texture:getWidth/getHeight return the pixel density-scaled width and height (as it will appear on the screen when drawn) rather than the number of pixels on each texture dimension.

- Added love.graphics.getPixelWidth/getPixelHeight/getPixelDimensions.

- Added optional ‘pixeldensity’ field to the settings table parameter of love.graphics.newImage. It defaults to 1, or if the file the Image was loaded from has “@2x”, “@3x”, etc. at the end of its name, it uses that number as the pixel density scale by default.

- love.graphics.newCanvas now takes a table as its third parameter, with fields “format”, “msaa”, and “pixeldensity”. pixeldensity defaults to the main screen’s pixel density. The width and height parameters specify the visual size that the Canvas will be drawn at / can be drawn to (pixel density-scaled units).

- love.graphics.newVideo accepts a table as its second parameter, with optional fields “audio” and “pixeldensity”. pixeldensity defaults to 1.

- love.graphics.newFont variants have an optional pixeldensity parameter at the end of the argument list. For TrueType fonts this defaults to the current pixel density scale of the screen, and for BMFonts and ImageFonts this defaults to 1.

- Added Font:getPixelDensity.

- Renamed love.window.getPixelScale to love.window.getPixelDensity.

--HG--
branch : minor
2016-12-29 23:55:51 -04:00

136 lines
2.9 KiB
C++

/**
* Copyright (c) 2006-2016 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.
**/
#ifndef LOVE_FONT_RASTERIZER_H
#define LOVE_FONT_RASTERIZER_H
// LOVE
#include "common/Object.h"
#include "common/int.h"
#include "GlyphData.h"
namespace love
{
namespace font
{
/**
* Holds the specific font metrics.
**/
struct FontMetrics
{
int advance;
int ascent;
int descent;
int height;
};
/**
* Holds data for a font object.
**/
class Rasterizer : public Object
{
public:
enum DataType
{
DATA_TRUETYPE,
DATA_IMAGE,
};
static love::Type type;
virtual ~Rasterizer();
/**
* Gets the max height of the glyphs.
**/
virtual int getHeight() const;
/**
* Gets the max advance of the glyphs.
**/
virtual int getAdvance() const;
/**
* Gets the max ascent (height above baseline) for the font.
**/
virtual int getAscent() const;
/**
* Gets the max descent (height below baseline) for the font.
**/
virtual int getDescent() const;
/**
* Gets the line height of the font.
**/
virtual int getLineHeight() const = 0;
/**
* Gets a specific glyph.
* @param glyph The (UNICODE) glyph codepoint to get data for.
**/
virtual GlyphData *getGlyphData(uint32 glyph) const = 0;
/**
* Gets a specific glyph.
* @param text The (UNICODE) glyph character to get the data for.
**/
virtual GlyphData *getGlyphData(const std::string &text) const;
/**
* Gets the number of glyphs the rasterizer has data for.
**/
virtual int getGlyphCount() const = 0;
/**
* Gets whether this Rasterizer has a specific glyph.
* @param glyph The (UNICODE) glyph codepoint.
**/
virtual bool hasGlyph(uint32 glyph) const = 0;
/**
* Gets whether this Rasterizer has all the glyphs in a string.
* @param text The (UTF-8) string.
**/
virtual bool hasGlyphs(const std::string &text) const;
/**
* Gets the amount of horizontal kerning between two glyphs.
**/
virtual float getKerning(uint32 leftglyph, uint32 rightglyph) const;
virtual DataType getDataType() const = 0;
float getPixelDensity() const;
protected:
FontMetrics metrics;
float pixelDensity;
}; // Rasterizer
} // font
} // love
#endif // LOVE_FONT_RASTERIZER_H