Add readme
This commit is contained in:
216
README.md
Normal file
216
README.md
Normal file
@@ -0,0 +1,216 @@
|
||||
# LibFreeMedia
|
||||
|
||||
LibFreeMedia is a small library to facilitate the sharing of media resources
|
||||
between different World of Warcraft addons. It was developed to provide a free
|
||||
software alternative to the proprietary LibSharedMedia.
|
||||
|
||||
Sharing media works best for both users as well as addon developers if everyone
|
||||
can access the shared media pool equally, and this includes authors that want
|
||||
to release their addons as free software. Therefore this library interoperates
|
||||
with LibShareMedia. Media registered using one library can be retrieved with
|
||||
the other and vice versa. See [Interopability](#interopability) for the
|
||||
limitations of this interopability.
|
||||
|
||||
# API
|
||||
|
||||
LibFreeMedia registers as a library using LibStub. Use LibStub to acquire a
|
||||
handle to the libary:
|
||||
```lua
|
||||
local lib = LibStub:GetLibrary("LibFreeMedia")
|
||||
```
|
||||
|
||||
## Registering Media
|
||||
|
||||
```lua
|
||||
lib:Register(kind, identifier, data)
|
||||
```
|
||||
|
||||
### Arguments
|
||||
|
||||
* *kind* (string): the kind of media you are registering. Some examples are
|
||||
"font", "background" or "statusbar"
|
||||
* *identifier* (string): The (unique among its kind) name to identify the
|
||||
media. Users will often see this name, so use a descriptive name.
|
||||
* *data* (any): The data that represents the media. After it is registered
|
||||
the library takes ownership of the data and it _must not_ be changed.
|
||||
|
||||
### Return value
|
||||
|
||||
The return value is a boolean indicating whether the media was registered
|
||||
successfully. Failure may happen for a number of reasons, including registering
|
||||
invalid data or the identifier already has registered media for that kind.
|
||||
|
||||
### Example
|
||||
|
||||
```lua
|
||||
local libfm = LibStub:GetLibrary("LibFreeMedia")
|
||||
libfm:Register("font", "Roboto Regular", "Interface\\AddOn\\MyAddon\\Fonts\\Roboto Regular.ttf")
|
||||
libfm:Register("font", "Roboto Bold", "Interface\\AddOn\\MyAddon\\Fonts\\Roboto Bold.ttf")
|
||||
|
||||
if not libfm:Register("font", "Roboto Bold", "Interface\\AddOn\\MyAddon\\Fonts\\Roboto Bold.ttf") then
|
||||
error("The media registration failed")
|
||||
end
|
||||
```
|
||||
|
||||
## Getting individual media
|
||||
|
||||
```lua
|
||||
lib:Get(kind, identifier)
|
||||
```
|
||||
|
||||
### Arguments
|
||||
|
||||
* *kind* (string): the kind of media you want to retrieve. Some examples are
|
||||
"font", "background" or "statusbar".
|
||||
* *identifier* (string): The name of the media you want to retrieve.
|
||||
|
||||
### Return value
|
||||
|
||||
If the media exists, its data is returned. The type of this data depends on the
|
||||
kind of media. LibFreeMedia retains ownership of this data and you _must not_
|
||||
alter it in place.
|
||||
|
||||
If the media does not exist the function will return `nil`.
|
||||
|
||||
### Examples
|
||||
|
||||
```lua
|
||||
local libfm = LibStub:GetLibrary("LibFreeMedia")
|
||||
|
||||
local robotoRegular = libfm:Get("font", "Roboto Regular")
|
||||
if robotoRegular then
|
||||
print("Successfully got the font location:", robotoRegular)
|
||||
else
|
||||
print("The 'Roboto Regular' font could not be retrieved")
|
||||
end
|
||||
```
|
||||
|
||||
## Getting a list of media identifiers
|
||||
|
||||
```lua
|
||||
lib:GetList(kind)
|
||||
```
|
||||
|
||||
### Arguments
|
||||
|
||||
* *kind* (string): the kind of media you want to get a list of. Some examples
|
||||
are "font", "background" or "statusbar".
|
||||
|
||||
### Return value
|
||||
|
||||
If there is media registered for the requested kind it will be returned as a
|
||||
sorted sequence table of media identifiers for the requested kind. If there is
|
||||
no media of the requested kind then this function will return either `nil` or
|
||||
an empty table.
|
||||
|
||||
LibSharedMedia retains ownership of the returned tables and they should not be
|
||||
altered in place. These tables may be reused by LibSharedMedia and and media
|
||||
that is registered in the future could be added to these tables but this behavior
|
||||
_should not_ be relied on. If you require an up to date list, call the
|
||||
library to receive one. If you require a snapshot to remain static, make a deep
|
||||
copy.
|
||||
|
||||
### Examples
|
||||
|
||||
```lua
|
||||
local libfm = LibStub:GetLibrary("LibFreeMedia")
|
||||
|
||||
local fonts = libfm:GetList("font")
|
||||
if fonts == nil or #fonts == 0 then
|
||||
print("No registered fonts found")
|
||||
else
|
||||
print("Registered fonts", table.concat(fonts, ", "))
|
||||
end
|
||||
```
|
||||
|
||||
## Getting a table of media data
|
||||
|
||||
```lua
|
||||
lib:GetTable(kind)
|
||||
```
|
||||
|
||||
### Arguments
|
||||
|
||||
* *kind* (string): the kind of media you want to get a list of. Some examples
|
||||
are "font", "background" or "statusbar".
|
||||
|
||||
### Return value
|
||||
|
||||
If there is media registered for the requested kind it will be returned as a
|
||||
table with identifier:data pairs. If there is no media of the requested kind
|
||||
then this function will return either `nil` or an empty table.
|
||||
|
||||
LibSharedMedia retains ownership of the returned tables and they should not be
|
||||
altered in place. These tables may be reused by LibSharedMedia and and media
|
||||
that is registered in the future could be added to these tables but this behavior
|
||||
_should not_ be relied on. If you require an up to date list, call the
|
||||
library to receive one. If you require a snapshot to remain static, make a deep
|
||||
copy.
|
||||
|
||||
### Examples
|
||||
|
||||
```lua
|
||||
local libfm = LibStub:GetLibrary("LibFreeMedia")
|
||||
|
||||
local fonts = libfm:GetTable("font") or {}
|
||||
|
||||
for identifier, data in pairs(fonts) do
|
||||
print(identifier, data)
|
||||
end
|
||||
```
|
||||
|
||||
# Embedding LibFreeMedia
|
||||
|
||||
The recommended way to include LibFreeMedia in your addon is embedding it and
|
||||
getting a handle using LibStub. To do this you To do this simply grab one of
|
||||
the embed archives from the
|
||||
[releases](https://gitlab.com/omicron-oss/wow/libfreemedia/-/releases) and
|
||||
extract these files in your addon. Do the same with
|
||||
[LibStub](https://www.wowace.com/projects/libstub). This will get you a
|
||||
directory tree similar to the following:
|
||||
|
||||
```
|
||||
YourAddon/libs/LibFreeMedia/LibFreeMedia.lua
|
||||
YourAddon/libs/LibStub/LibStub.lua
|
||||
YourAddon/YourAddon.toc
|
||||
...
|
||||
```
|
||||
|
||||
Simply add `LibStub.lua` and `LibFreeMedia.lua` as the first few files in your
|
||||
`YourAddon.toc` as follows:
|
||||
|
||||
```
|
||||
## Interface: 100100
|
||||
## Title: YourAddon
|
||||
## Version: 4.20.69
|
||||
|
||||
# List LibStub and then LibFreeMedia
|
||||
libs/LibStub/LibStub.lua
|
||||
libs/LibStub/LibFreeMedia.lua
|
||||
|
||||
# List all your addon files as desired
|
||||
```
|
||||
|
||||
# Interopability
|
||||
|
||||
Since it is in the interested of both users and developers to not create
|
||||
additional pools for shared media, LibFreeMedia attempts to interoperate
|
||||
seamlessly with LibSharedMedia. However, there is no 100% parity between
|
||||
LibFreeMedia and LibSharedMedia. This section will list all the areas where
|
||||
LibFreeMedia differs from LibSharedMedia.
|
||||
|
||||
LibFreeMedia does not support making callbacks on media registration. Any addon
|
||||
that relies on these callbacks in LibSharedMedia will currently not receive
|
||||
notifications when media is registered using LibFreeMedia. This is likely
|
||||
temporary, see issue #1.
|
||||
|
||||
LibFreeMedia does not support default return values for missing media, nor does
|
||||
it allow you to register a particular piece of media as the default for a
|
||||
specific kind.
|
||||
|
||||
LibFreeMedia does not support language masks for font registration. This is not
|
||||
likely to change.
|
||||
|
||||
LibFreeMedia does not attempt to be a drop-in replacement for LibSharedMedia.
|
||||
The API behaves slightly different. If there is demand for a drop-in
|
||||
replacement then this could change.
|
Reference in New Issue
Block a user