Commit graph

5 commits

Author SHA1 Message Date
goat
371f1bfa18 comment out kizer hack for now, need to move to natives 2024-12-23 23:17:33 +01:00
srkizer
23a2bd6228
Fix ImDrawList::AddImageRounded (#1994)
The function makes an assumption that there exists 1 font atlas texture,
so that `ImDrawList._Data->TexIdCommon` ==
`ImDrawList._CmdHeader.TextureId`. Since we support multiple font atlas
textures, that assumption is no longer true and
`ImDrawList::AddConvexPolyFilled` will create a new draw command as
needed, giving `ImGui::ShadeVertsLinearUV` a clean draw command to work
with.

This workaround forcefully sets *the* font atlas texture to be the
texture the user is trying to draw for the duration of drawing polygons
and shading those vertices again, so that no draw command change
happens. Once the operation is done, font atlas texture is reverted back
to what it was.

This fix is done without thread safety concerns, but an `ImDrawList`
should not be touched from multiple threads at a single time, so this is
fine.
2024-08-03 09:51:34 -07:00
srkizer
87b9edb448
Add IInternal/PublicDisposableService (#1696)
* Add IInternal/PublicDisposableService

Plugins are exposed interfaces that are not inherited from
`IDisposable`, but services implementing plugin interfaces often
implement `IDisposable`. Some plugins may try to call
`IDisposable.Dispose` on everything provided, and it also is possible to
use `using` clause too eagerly while working on Dalamud itself, such as
writing `using var smth = await Service<SomeService>.GetAsync();`. Such
behaviors often lead to a difficult-to-debug errors, and making those
services either not an `IDisposable` or making `IDisposable.Dispose` do
nothing if the object has been loaded would prevent such errors. As
`ServiceManager` must be the only class dealing with construction and
disposal of services, `IInternalDisposableService` has been added to
limit who can dispose the object. `IPublicDisposableService` also has
been added to classes that can be constructed and accessed directly by
plugins; for those, `Dispose` will be ignored if the instance is a
service instance, and only `DisposeService` will respond.

In addition, `DalamudPluginInterface` and `UiBuilder` also have been
changed so that their `IDisposable.Dispose` no longer respond, and
instead, internal functions have been added to only allow disposal from
Dalamud.

* Cleanup

* Postmerge fixes

* More explanation on RunOnFrameworkThread(ClearHooks)

* Mark ReliableFileStorage public ctor obsolete

---------

Co-authored-by: goat <16760685+goaaats@users.noreply.github.com>
2024-03-16 15:58:05 +00:00
srkizer
7dc99c9307
Fix AddRectFilledDetour typo (#1667)
* Fix AddRectFilledDetour typo

* Skip drawing if zero opacity is specified for drawing
2024-02-18 07:03:51 +00:00
Soreepeong
2de9c8ed5b Fix insufficient ImDrawList implementation 2024-02-14 21:59:20 +09:00