Version 1.0
14
README.md
@ -15,6 +15,20 @@ For more information, see the [forum topic](https://forum.minetest.net/viewtopic
|
||||
|
||||
## Changelog
|
||||
|
||||
### 2018-01-13 (Version 1.0)
|
||||
|
||||
- Switch to Epilepsy font by KREATIVE SOFTWARE
|
||||
|
||||
- Add settings "default_font"
|
||||
|
||||
- Add horizontal alignment
|
||||
|
||||
- Add tool for creating font textures from .ttf font files
|
||||
|
||||
- Fix UTF 8 to Unicode decoding
|
||||
|
||||
- Updated forum thread link in README.md
|
||||
|
||||
### 2017-12-19
|
||||
|
||||
This change is a preparation to merge Andrzej Pieńkowski fork (apienk) : new font and support of UTF chars.
|
||||
|
@ -10,5 +10,5 @@ This library's purpose is to ease creation of nodes with one or more displays on
|
||||
|
||||
**API**: See [API.md](https://github.com/pyrollo/display_modpack/blob/master/display_lib/API.md) document please.
|
||||
|
||||
For more information, see the [forum topic](https://forum.minetest.net/viewtopic.php?f=11&t=13563) at the Minetest forums.
|
||||
For more information, see the [forum topic](https://forum.minetest.net/viewtopic.php?t=19365) at the Minetest forums.
|
||||
|
||||
|
@ -1,6 +1,11 @@
|
||||
# Font Lib API
|
||||
This document describes Font Lib API. Font Lib creates textures for font display on entities.
|
||||
|
||||
## Settings
|
||||
### default_font
|
||||
Name of the font to be used when no font is given. The font should be registered.
|
||||
If no default\_font given or if default\_font given but not registered, the first registered font will be used as default.
|
||||
|
||||
## Provided methods
|
||||
### get\_text\_size
|
||||
**font\_lib.get\_text\_size(font\_name, text)**
|
||||
@ -8,9 +13,7 @@ This document describes Font Lib API. Font Lib creates textures for font display
|
||||
Computes size for a given font and text
|
||||
|
||||
**font\_name**: Font name of registered font to use
|
||||
|
||||
**text**: Text to be rendered
|
||||
|
||||
**Returns**: rendered text width, height
|
||||
|
||||
### make\_line\_texture
|
||||
@ -19,36 +22,25 @@ Computes size for a given font and text
|
||||
Builds texture part for a text line
|
||||
|
||||
**font\_name**: Font name of registered font to use
|
||||
|
||||
**text**: Text to be rendered
|
||||
|
||||
**texturew**: Width of the texture (extra text is not rendered)
|
||||
|
||||
**x**: Starting x position in texture
|
||||
|
||||
**y**: Vertical position of the line in texture
|
||||
|
||||
**Returns**: Texture string
|
||||
|
||||
### make\_multiline\_texture
|
||||
**font\_lib.make\_multiline\_texture(font\_name, text, width, height, maxlines, valign, color)**
|
||||
**font\_lib.make\_multiline\_texture(font\_name, text, width, height, maxlines, halign, valign, color)**
|
||||
|
||||
Builds texture for a multiline colored text
|
||||
|
||||
**font\_name**: Font name of registered font to use
|
||||
|
||||
**text**: Text to be rendered
|
||||
|
||||
**texturew**: Width of the texture (extra text will be truncated)
|
||||
|
||||
**textureh**: Height of the texture
|
||||
|
||||
**maxlines**: Maximum number of lines
|
||||
|
||||
**valign**: Vertical text align ("top", "bottom" or "center")
|
||||
|
||||
**color**: Color of the text
|
||||
|
||||
**halign**: Horizontal text align ("left", "right" or "center") (optional)
|
||||
**valign**: Vertical text align ("top", "bottom" or "center") (optional)
|
||||
**color**: Color of the text (optional)
|
||||
**Returns**: Texture string
|
||||
|
||||
### register\_font
|
||||
@ -57,34 +49,62 @@ Builds texture for a multiline colored text
|
||||
Registers a new font in font_lib.
|
||||
|
||||
**font\_name**: Name of the font to register (this name will be used to address the font later)
|
||||
If registering different sizes of the same font, add size in the font name (e.g. times\_10, times\_12...).
|
||||
**height**: Font height in pixels (all font textures should have the same height)
|
||||
**widths** : Array of character widths in pixels, indexed by UTF codepoints
|
||||
|
||||
**height**: Height of the font in pixels (all font textures should have the same height)
|
||||
|
||||
**widths** : An array containing the width of each font texture, indexed by its UTF code
|
||||
Font must have a char 0 which will be used to display any unknown char.
|
||||
|
||||
All textures corresponding to the indexes in **widths** array should be present in textures directory with a name matching the pattern :
|
||||
|
||||
**font\_<font\_name>_<utf\_code>.png**
|
||||
|
||||
<font\_name>: Name of the font as given in the first argument
|
||||
|
||||
<utf\_code>: UTF code of the char in 4 hexadecimal digits
|
||||
**<font\_name>**: Name of the font as given in the first argument
|
||||
**<utf\_code>**: UTF code of the char in 4 hexadecimal digits
|
||||
|
||||
To ease that declaration, a shell is provided to build a <font\_name>.lua file from the texture files (see provided tools).
|
||||
|
||||
### set\_fallback\_font
|
||||
**function font\_lib.set\_fallback\_font(font\_name)**
|
||||
|
||||
Defines the fallback font to be used instead of given font if not registered.
|
||||
|
||||
**font\_name**: Name of the font to be used as fallback font (has to be registered)
|
||||
|
||||
## Provided tools
|
||||
|
||||
Still in early stage of development, these tools are helpers to create font mods.
|
||||
|
||||
### make_font_texture.sh
|
||||
|
||||
This scripts takes a .ttf file as input and create one .png file per char, that can be used as font texture. Launch it from your future font mod directory.
|
||||
|
||||
__Advice__
|
||||
|
||||
This script works much better with pixels font, providing the correct height. There is no antialiasing at all, vector fonts and bad heights gives very ugly results.
|
||||
|
||||
__Syntax__
|
||||
|
||||
**make\_font\_texture.sh <fontfile> <fontname> <fontsize>**
|
||||
|
||||
**<fontfile>**: A TTF font file to use to create textures.
|
||||
**<fontname>**: The font name to be used in font_lib (should be simple, with no spaces).
|
||||
**<fontsize>**: Font height to be rendered.
|
||||
|
||||
### make_font_lua.sh
|
||||
|
||||
Still in early stage of development.
|
||||
This script analyses textures in textures directory and creates a font\_<font\_name>.lua files with a call to register_font with images information. Launch it from your future font mod directory.
|
||||
|
||||
Once the font\_<font\_name>.lua created, it can be included by a init.lua file or directly renamed to init.lua if you are creating a simple font mod.
|
||||
|
||||
__Syntax__
|
||||
|
||||
**make\_font_lua.sh <fontname>**
|
||||
|
||||
**<fontname>**: The font name to be used in font_lib (same as given to make\_font\_texture.sh)
|
||||
|
||||
### An exemple generating a font mod
|
||||
|
||||
mkdir font_myfont
|
||||
cd font_myfont
|
||||
/<path_to_font_lib>/tools/make_font_texture.sh myfont.ttf myfont 12
|
||||
/<path_to_font_lib>/tools/make_font_lua.sh myfont
|
||||
mv font_myfont.lua init.lua
|
||||
|
||||
|
||||
|
||||
This script analyses textures in textures directory and creates a font\_<font\_name>.lua files with a call to register_font with images information.
|
||||
|
||||
|
||||
|
@ -1,12 +0,0 @@
|
||||
--[[
|
||||
|
||||
generated by tools/make_font_lua.sh Thu Dec 21 21:45:53 CET 2017
|
||||
|
||||
--]]
|
||||
|
||||
font_lib.register_font(
|
||||
'default',
|
||||
12,
|
||||
{ [0]=6, [32]=4, [33]=3, [34]=4, [35]=7, [36]=6, [37]=8, [38]=8, [39]=3, [40]=4, [41]=4, [42]=4, [43]=7, [44]=3, [45]=5, [46]=3, [47]=5, [48]=6, [49]=4, [50]=6, [51]=6, [52]=7, [53]=6, [54]=6, [55]=6, [56]=6, [57]=6, [58]=3, [59]=3, [60]=5, [61]=6, [62]=5, [63]=6, [64]=11, [65]=8, [66]=7, [67]=8, [68]=7, [69]=6, [70]=6, [71]=8, [72]=7, [73]=3, [74]=6, [75]=8, [76]=6, [77]=10, [78]=8, [79]=8, [80]=7, [81]=8, [82]=7, [83]=7, [84]=7, [85]=7, [86]=8, [87]=11, [88]=8, [89]=9, [90]=7, [91]=4, [92]=5, [93]=4, [94]=5, [95]=7, [96]=3, [97]=7, [98]=6, [99]=5, [100]=6, [101]=6, [102]=5, [103]=6, [104]=6, [105]=3, [106]=3, [107]=7, [108]=3, [109]=9, [110]=6, [111]=6, [112]=6, [113]=6, [114]=5, [115]=6, [116]=4, [117]=6, [118]=6, [119]=8, [120]=7, [121]=6, [122]=6, [123]=5, [124]=3, [125]=5, [126]=6, [138]=6, [141]=3, [161]=3, [177]=6, [191]=6, [192]=8, [193]=8, [194]=8, [195]=8, [196]=8, [197]=8, [198]=10, [199]=8, [200]=6, [201]=6, [202]=6, [203]=6, [204]=3, [205]=3, [206]=3, [207]=3, [208]=8, [209]=8, [210]=8, [211]=8, [212]=8, [213]=8, [214]=8, [215]=6, [216]=8, [217]=7, [218]=7, [219]=7, [220]=7, [221]=9, [224]=7, [225]=7, [226]=7, [227]=7, [228]=7, [229]=7, [230]=9, [231]=5, [232]=6, [233]=6, [234]=6, [235]=6, [236]=3, [237]=3, [238]=3, [239]=3, [242]=6, [244]=6, [245]=6, [246]=6, [247]=6, [249]=6, [250]=6, [251]=6, [252]=6, [253]=6, [255]=6 }
|
||||
);
|
||||
|
@ -18,11 +18,18 @@
|
||||
--]]
|
||||
|
||||
-- Global variables
|
||||
-------------------
|
||||
|
||||
font_lib = {}
|
||||
font_lib.path = minetest.get_modpath("font_lib")
|
||||
font_lib.name = minetest.get_current_modname()
|
||||
font_lib.path = minetest.get_modpath(font_lib.name)
|
||||
font_lib.registered_fonts = {}
|
||||
|
||||
-- Local variables
|
||||
------------------
|
||||
|
||||
local default_font = false
|
||||
|
||||
-- Local functions
|
||||
------------------
|
||||
|
||||
@ -41,38 +48,41 @@ local function split_lines(text, maxlines)
|
||||
end
|
||||
end
|
||||
|
||||
-- Returns next char, managing ascii and unicode plane 0 (0000-FFFF).
|
||||
-- Gets a default (settings or fist font)
|
||||
|
||||
local function get_next_char(text, pos)
|
||||
pos = pos + 1
|
||||
local char = text:sub(pos, pos):byte()
|
||||
local function get_default_font()
|
||||
-- First call
|
||||
if default_font == false then
|
||||
default_font = nil
|
||||
|
||||
-- 1 byte char
|
||||
if char < 0x80 then
|
||||
return char, pos
|
||||
end
|
||||
-- First, try with settings
|
||||
local settings_font = minetest.settings:get("default_font")
|
||||
|
||||
-- 4 bytes char not managed
|
||||
if char >= 0xF0 then
|
||||
pos = pos + 3
|
||||
return 0, pos
|
||||
end
|
||||
|
||||
-- 3 bytes char not managed
|
||||
if char >= 0xE0 then
|
||||
pos = pos + 2
|
||||
return 0, pos
|
||||
end
|
||||
|
||||
-- 2 bytes char (little endian)
|
||||
if char >= 0xC2 then
|
||||
pos = pos + 1
|
||||
return (char - 0xC2) * 0x40 + text:sub(pos, pos):byte(), pos
|
||||
if settings_font ~= nil and settings_font ~= "" then
|
||||
default_font = font_lib.registered_fonts[settings_font]
|
||||
|
||||
if default_font == nil then
|
||||
minetest.log("warning", "Default font in settings (\""..
|
||||
settings_font.."\") is not registered.")
|
||||
end
|
||||
end
|
||||
|
||||
-- If failed, choose first font
|
||||
if default_font == nil then
|
||||
for _, font in pairs(font_lib.registered_fonts) do
|
||||
default_font = font
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Error, no font registered
|
||||
if default_font == nil then
|
||||
minetest.log("error",
|
||||
"No font registred, unable to choose a default font.")
|
||||
end
|
||||
end
|
||||
|
||||
-- Not an UTF char
|
||||
return 0, pos
|
||||
|
||||
return default_font
|
||||
end
|
||||
|
||||
-- Returns font properties to be used according to font_name
|
||||
@ -81,7 +91,7 @@ local function get_font(font_name)
|
||||
local font = font_lib.registered_fonts[font_name]
|
||||
|
||||
if font == nil then
|
||||
local message
|
||||
local message
|
||||
|
||||
if font_name == nil then
|
||||
message = "No font given"
|
||||
@ -89,17 +99,49 @@ local function get_font(font_name)
|
||||
message = "Font \""..font_name.."\" unregistered"
|
||||
end
|
||||
|
||||
if font_lib.fallback_font == nil then
|
||||
minetest.log("error", message.." and no other font registered.")
|
||||
else
|
||||
minetest.log("info", message..", using font \""..font_lib.fallback_font.."\".")
|
||||
font = font_lib.registered_fonts[font_lib.fallback_font]
|
||||
font = get_default_font()
|
||||
|
||||
if font ~= nil then
|
||||
minetest.log("info", message..", using font \""..font.name.."\".")
|
||||
end
|
||||
end
|
||||
|
||||
return font
|
||||
end
|
||||
|
||||
-- Returns next char, managing ascii and unicode plane 0 (0000-FFFF).
|
||||
|
||||
local function get_next_char(text, pos)
|
||||
|
||||
local msb = text:byte(pos)
|
||||
-- 1 byte char, ascii equivalent codepoints
|
||||
if msb < 0x80 then
|
||||
return msb, pos + 1
|
||||
end
|
||||
|
||||
-- 4 bytes char not managed (Only 16 bits codepoints are managed)
|
||||
if msb >= 0xF0 then
|
||||
return 0, pos + 4
|
||||
end
|
||||
|
||||
-- 3 bytes char
|
||||
if msb >= 0xE0 then
|
||||
return (msb - 0xE0) * 0x1000
|
||||
+ text:byte(pos + 1) % 0x40 * 0x40
|
||||
+ text:byte(pos + 2) % 0x40,
|
||||
pos + 3
|
||||
end
|
||||
|
||||
-- 2 bytes char (little endian)
|
||||
if msb >= 0xC2 then
|
||||
return (msb - 0xC2) * 0x40 + text:byte(pos + 1),
|
||||
pos + 2
|
||||
end
|
||||
|
||||
-- Not an UTF char
|
||||
return 0, pos + 1
|
||||
end
|
||||
|
||||
-- API functions
|
||||
----------------
|
||||
|
||||
@ -111,21 +153,23 @@ end
|
||||
function font_lib.get_text_size(font_name, text)
|
||||
local char
|
||||
local width = 0
|
||||
local pos = 0
|
||||
local pos = 1
|
||||
local font = get_font(font_name)
|
||||
|
||||
if font == nil then
|
||||
return 0, 0
|
||||
else
|
||||
while pos < #text do
|
||||
while pos <= #text do
|
||||
char, pos = get_next_char(text, pos)
|
||||
-- Ignore chars with no texture
|
||||
-- Replace chars with no texture by the NULL(0) char
|
||||
if font.widths[char] ~= nil then
|
||||
width = width + font.widths[char]
|
||||
else
|
||||
width = width + font.widths[0]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
return width, font.height
|
||||
end
|
||||
|
||||
@ -137,32 +181,33 @@ end
|
||||
-- @param y Vertical position of the line in texture
|
||||
-- @return Texture string
|
||||
|
||||
--> ADD ALIGN
|
||||
function font_lib.make_line_texture(font_name, text, width, x, y)
|
||||
local texture = ""
|
||||
local char
|
||||
local pos = 0
|
||||
local pos = 1
|
||||
local font = get_font(font_name)
|
||||
|
||||
if font ~= nil then
|
||||
while pos < #text do
|
||||
while pos <= #text do
|
||||
char, pos = get_next_char(text, pos)
|
||||
|
||||
-- Ignore chars with no texture
|
||||
if font.widths[char] ~= nil then
|
||||
-- Add image only if it is visible (at least partly)
|
||||
if x + font.widths[char] >= 0 and x <= width then
|
||||
texture = texture..
|
||||
string.format(":%d,%d=font_%s_%04x.png",
|
||||
x, y, font.name, char)
|
||||
end
|
||||
x = x + font.widths[char]
|
||||
else
|
||||
print(string.format("Missing char %d (%04x)",char,char))
|
||||
|
||||
-- Replace chars with no texture by the NULL(0) char
|
||||
if font.widths[char] == nil then
|
||||
print(string.format("["..font_lib.name
|
||||
.."] Missing char %d (%04x)",char,char))
|
||||
char = 0
|
||||
end
|
||||
|
||||
-- Add image only if it is visible (at least partly)
|
||||
if x + font.widths[char] >= 0 and x <= width then
|
||||
texture = texture..
|
||||
string.format(":%d,%d=font_%s_%04x.png",
|
||||
x, y, font.name, char)
|
||||
end
|
||||
x = x + font.widths[char]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
return texture
|
||||
end
|
||||
|
||||
@ -172,43 +217,53 @@ end
|
||||
-- @param texturew Width of the texture (extra text will be truncated)
|
||||
-- @param textureh Height of the texture
|
||||
-- @param maxlines Maximum number of lines
|
||||
-- @param valign Vertical text align ("top" or "center")
|
||||
-- @param color Color of the text
|
||||
-- @param halign Horizontal text align ("left"/"center"/"right") (optional)
|
||||
-- @param valign Vertical text align ("top"/"center"/"bottom") (optional)
|
||||
-- @param color Color of the text (optional)
|
||||
-- @return Texture string
|
||||
|
||||
function font_lib.make_multiline_texture(font_name, text, width, height,
|
||||
maxlines, valign, color)
|
||||
maxlines, halign, valign, color)
|
||||
local texture = ""
|
||||
local lines = {}
|
||||
local textheight = 0
|
||||
local y, w, h
|
||||
|
||||
|
||||
for num, line in pairs(split_lines(text, maxlines)) do
|
||||
w, h = font_lib.get_text_size(font_name, line)
|
||||
lines[num] = { text = line, width = w, height = h, }
|
||||
textheight = textheight + h
|
||||
end
|
||||
|
||||
|
||||
if #lines then
|
||||
if valign == "top" then
|
||||
y = 0
|
||||
elseif valign == "bottom" then
|
||||
y = height - textheight
|
||||
else
|
||||
else
|
||||
y = (height - textheight) / 2
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
for _, line in pairs(lines) do
|
||||
texture = texture..
|
||||
font_lib.make_line_texture(font_name, line.text, width,
|
||||
(width - line.width) / 2, y)
|
||||
if halign == "left" then
|
||||
texture = texture..
|
||||
font_lib.make_line_texture(font_name, line.text, width,
|
||||
0, y)
|
||||
elseif halign == "right" then
|
||||
texture = texture..
|
||||
font_lib.make_line_texture(font_name, line.text, width,
|
||||
width - line.width, y)
|
||||
else
|
||||
texture = texture..
|
||||
font_lib.make_line_texture(font_name, line.text, width,
|
||||
(width - line.width) / 2, y)
|
||||
end
|
||||
y = y + line.height
|
||||
end
|
||||
|
||||
texture = string.format("[combine:%dx%d", width, height)..texture
|
||||
if color then texture = texture.."^[colorize:"..color end
|
||||
|
||||
return texture
|
||||
end
|
||||
|
||||
@ -217,40 +272,48 @@ end
|
||||
-- font_<name>_<code>.png
|
||||
-- <name> : name of the font
|
||||
-- <code> : 4 digit hexadecimal unicode of the char
|
||||
-- If registering different sizes, add size in the font name (e.g. times_10, times_12...)
|
||||
-- @param font_name Name of the font to register
|
||||
-- If registering different sizes of the same font, add size in the font name
|
||||
-- (e.g. times_10, times_12...).
|
||||
-- @param height Font height in pixels
|
||||
-- @param widths Array of character widths in pixel, indexed by unicode number.
|
||||
-- @param widths Array of character widths in pixels, indexed by UTF codepoints
|
||||
|
||||
function font_lib.register_font(font_name, height, widths)
|
||||
|
||||
if font_lib.registered_fonts[font_name] ~= nil then
|
||||
minetest.log("error", "Font \""..font_name.."\" already registered.")
|
||||
return
|
||||
end
|
||||
|
||||
font_lib.registered_fonts[font_name] =
|
||||
{ name = font_name, height = height, widths = widths }
|
||||
|
||||
-- If no fallback font, set it (so, first font registered will be the default fallback font)
|
||||
if font_lib.fallback_font == nil then
|
||||
font_lib.fallback_font = font_name
|
||||
end
|
||||
end
|
||||
|
||||
--- Define the fallback font
|
||||
-- This font will be used instead of given font if not registered.
|
||||
-- @param font_name Name of the font to be used as fallback font (has to be registered).
|
||||
|
||||
function font_lib.set_fallback_font(font_name)
|
||||
if font_lib.registered_fonts[font_name] == nil then
|
||||
minetest.log("error", "Fallback font \""..font_name.."\" not registered.")
|
||||
else
|
||||
font_lib.fallback_font = font_name
|
||||
if height == nil or height <= 0 then
|
||||
minetest.log("error", "Font \""..font_name..
|
||||
"\" must have a positive height.")
|
||||
return
|
||||
end
|
||||
|
||||
if type(widths) ~= "table" then
|
||||
minetest.log("error", "Font \""..font_name..
|
||||
"\" must have a widths array.")
|
||||
return
|
||||
end
|
||||
|
||||
if widths[0] == nil then
|
||||
minetest.log("error", "Font \""..font_name..
|
||||
"\" must have a char with codepoint 0 (=unknown char).")
|
||||
return
|
||||
end
|
||||
|
||||
font_lib.registered_fonts[font_name] =
|
||||
{ name = font_name, height = height, widths = widths }
|
||||
|
||||
-- Force to choose again default font
|
||||
-- (allows use of fonts registered after start)
|
||||
default_font = false
|
||||
end
|
||||
|
||||
--- Standard on_display_update entity callback.
|
||||
-- Node should have a corresponding display_entity with size, resolution and maxlines fields and
|
||||
-- optionally valign and color fields
|
||||
-- Node should have a corresponding display_entity with size, resolution and
|
||||
-- maxlines fields and optionally halign, valign and color fields
|
||||
-- @param pos Node position
|
||||
-- @param objref Object reference of entity
|
||||
|
||||
@ -262,15 +325,16 @@ function font_lib.on_display_update(pos, objref)
|
||||
|
||||
if entity and ndef.display_entities[entity.name] then
|
||||
local def = ndef.display_entities[entity.name]
|
||||
local font = get_font(def.font_name)
|
||||
|
||||
objref:set_properties({
|
||||
textures={font_lib.make_multiline_texture(
|
||||
def.font_name, text, def.size.x*def.resolution.x, def.size.y*def.resolution.y,
|
||||
def.maxlines, def.valign, def.color)},
|
||||
def.font_name, text,
|
||||
def.size.x * def.resolution.x * font.height,
|
||||
def.size.y * def.resolution.y * font.height,
|
||||
def.maxlines, def.halign, def.valign, def.color)},
|
||||
visual_size = def.size
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
dofile(font_lib.path.."/font_default.lua")
|
||||
|
||||
|
Before Width: | Height: | Size: 145 B |
Before Width: | Height: | Size: 281 B |
Before Width: | Height: | Size: 299 B |
Before Width: | Height: | Size: 290 B |
Before Width: | Height: | Size: 304 B |
Before Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 312 B |
Before Width: | Height: | Size: 319 B |
Before Width: | Height: | Size: 290 B |
Before Width: | Height: | Size: 303 B |
Before Width: | Height: | Size: 301 B |
Before Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 290 B |
Before Width: | Height: | Size: 287 B |
Before Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 299 B |
Before Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 300 B |
Before Width: | Height: | Size: 312 B |
Before Width: | Height: | Size: 313 B |
Before Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 317 B |
Before Width: | Height: | Size: 312 B |
Before Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 300 B |
Before Width: | Height: | Size: 315 B |
Before Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 292 B |
Before Width: | Height: | Size: 290 B |
Before Width: | Height: | Size: 290 B |
Before Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 310 B |
Before Width: | Height: | Size: 323 B |
Before Width: | Height: | Size: 313 B |
Before Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 320 B |
Before Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 305 B |
Before Width: | Height: | Size: 327 B |
Before Width: | Height: | Size: 304 B |
Before Width: | Height: | Size: 292 B |
Before Width: | Height: | Size: 304 B |
Before Width: | Height: | Size: 320 B |
Before Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 317 B |
Before Width: | Height: | Size: 315 B |
Before Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 309 B |
Before Width: | Height: | Size: 322 B |
Before Width: | Height: | Size: 303 B |
Before Width: | Height: | Size: 316 B |
Before Width: | Height: | Size: 301 B |
Before Width: | Height: | Size: 299 B |
Before Width: | Height: | Size: 306 B |
Before Width: | Height: | Size: 313 B |
Before Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 306 B |
Before Width: | Height: | Size: 307 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 303 B |
Before Width: | Height: | Size: 286 B |
Before Width: | Height: | Size: 284 B |
Before Width: | Height: | Size: 316 B |
Before Width: | Height: | Size: 307 B |
Before Width: | Height: | Size: 307 B |
Before Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 313 B |
Before Width: | Height: | Size: 306 B |
Before Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 305 B |
Before Width: | Height: | Size: 292 B |
Before Width: | Height: | Size: 293 B |
Before Width: | Height: | Size: 311 B |
Before Width: | Height: | Size: 292 B |
Before Width: | Height: | Size: 306 B |
Before Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 315 B |
Before Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 303 B |
Before Width: | Height: | Size: 306 B |
Before Width: | Height: | Size: 304 B |
Before Width: | Height: | Size: 295 B |
Before Width: | Height: | Size: 300 B |
Before Width: | Height: | Size: 304 B |
Before Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 306 B |
Before Width: | Height: | Size: 296 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 134 B |
Before Width: | Height: | Size: 297 B |