Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Patch visualizer redesign #883

Merged
merged 32 commits into from
Apr 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
eb173a3
Update patch visualizer with new design
boatbomber Feb 29, 2024
2b4f63b
Build tree correctly
boatbomber Feb 29, 2024
ba4e6f5
Merge branch 'fix/patch-tree-build-ancestry' of https://github.com/bo…
boatbomber Feb 29, 2024
94d593e
Improve tree guide lines
boatbomber Feb 29, 2024
a813816
Remove padding from patch vis in confirming page
boatbomber Feb 29, 2024
2e13696
Tree guidelines don't extend past child center
boatbomber Feb 29, 2024
8c90e03
Dial in light theme colors
boatbomber Feb 29, 2024
2a8a8b4
Use new guideline style and move icon handling into components
boatbomber Feb 29, 2024
e446940
Remove rojo version heading from confirming page
boatbomber Feb 29, 2024
95b80ed
Use default theme colors from scroller
boatbomber Feb 29, 2024
a423fa8
Use bordered container again
boatbomber Feb 29, 2024
7314e9b
Better require paths
boatbomber Feb 29, 2024
d26ad1d
Padding and positioning
boatbomber Feb 29, 2024
afbbf05
Update patch viz for connected page
boatbomber Feb 29, 2024
73aa242
Remove unused vars
boatbomber Feb 29, 2024
8dca479
Better connected info
boatbomber Feb 29, 2024
2b775ff
Merge branch 'master' of https://github.com/boatbomber/rojo into patc…
boatbomber Feb 29, 2024
fbb32e7
Improve info in changes heading
boatbomber Feb 29, 2024
ffbed99
Better popout sizing
boatbomber Feb 29, 2024
161f5bd
Better padding
boatbomber Feb 29, 2024
db7f066
Add tooltip to info heading
boatbomber Feb 29, 2024
f69c8e0
Fix terminated guideline overshooting when expanded
boatbomber Feb 29, 2024
55b20a5
Fix unapplied being additional
boatbomber Mar 1, 2024
edcbfa1
Add changeinfo to domlabels
boatbomber Mar 1, 2024
36c5031
Just numbers
boatbomber Mar 2, 2024
fe164d2
Update changelog
boatbomber Mar 2, 2024
a9eb52f
Padding back to page wide since we went with the container style
boatbomber Mar 2, 2024
51e3339
Simplify changeInfo handling to fit latest design
boatbomber Mar 2, 2024
275dac7
Merge branch 'master' into patch-vis-redesign
boatbomber Mar 24, 2024
138acb1
Remove hack
boatbomber Mar 26, 2024
a62ba54
Cache classicon image data to avoid duplicate assetservice calls
boatbomber Mar 26, 2024
8f8f7f6
Remove lastaccess since we dont invalidate cache
boatbomber Mar 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* Added Never option to Confirmation ([#893])
* Added popout diff visualizer for table properties like Attributes and Tags ([#834])
* Updated Theme to use Studio colors ([#838])
* Improved patch visualizer UX ([#883])
* Added experimental setting for Auto Connect in playtests ([#840])
* Projects may now specify rules for syncing files as if they had a different file extension. ([#813])
This is specified via a new field on project files, `syncRules`:
Expand Down Expand Up @@ -56,6 +57,7 @@
[#834]: https://github.com/rojo-rbx/rojo/pull/834
[#838]: https://github.com/rojo-rbx/rojo/pull/838
[#840]: https://github.com/rojo-rbx/rojo/pull/840
[#883]: https://github.com/rojo-rbx/rojo/pull/883
[#893]: https://github.com/rojo-rbx/rojo/pull/893

## [7.4.1] - February 20, 2024
Expand Down
Binary file added assets/images/syncsuccess.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/syncwarning.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
126 changes: 126 additions & 0 deletions plugin/src/App/Components/ClassIcon.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
local StudioService = game:GetService("StudioService")
local AssetService = game:GetService("AssetService")

local Rojo = script:FindFirstAncestor("Rojo")
local Plugin = Rojo.Plugin
local Packages = Rojo.Packages

local Roact = require(Packages.Roact)

local e = Roact.createElement

local EditableImage = require(Plugin.App.Components.EditableImage)

local imageCache = {}
local function getImageSizeAndPixels(image)
if not imageCache[image] then
local editableImage = AssetService:CreateEditableImageAsync(image)
imageCache[image] = {
Size = editableImage.Size,
Pixels = editableImage:ReadPixels(Vector2.zero, editableImage.Size),
}
end

return imageCache[image].Size, table.clone(imageCache[image].Pixels)
end

local function getRecoloredClassIcon(className, color)
local iconProps = StudioService:GetClassIcon(className)

if iconProps and color then
local success, editableImageSize, editableImagePixels = pcall(function()
local size, pixels = getImageSizeAndPixels(iconProps.Image)

local minVal, maxVal = math.huge, -math.huge
for i = 1, #pixels, 4 do
if pixels[i + 3] == 0 then
continue
end
local pixelVal = math.max(pixels[i], pixels[i + 1], pixels[i + 2])

minVal = math.min(minVal, pixelVal)
maxVal = math.max(maxVal, pixelVal)
end

local hue, sat, val = color:ToHSV()
for i = 1, #pixels, 4 do
if pixels[i + 3] == 0 then
continue
end

local pixelVal = math.max(pixels[i], pixels[i + 1], pixels[i + 2])
local newVal = val
if minVal < maxVal then
-- Remap minVal - maxVal to val*0.9 - val
newVal = val * (0.9 + 0.1 * (pixelVal - minVal) / (maxVal - minVal))
end

local newPixelColor = Color3.fromHSV(hue, sat, newVal)
pixels[i], pixels[i + 1], pixels[i + 2] = newPixelColor.R, newPixelColor.G, newPixelColor.B
end
return size, pixels
end)
if success then
iconProps.EditableImagePixels = editableImagePixels
iconProps.EditableImageSize = editableImageSize
end
end

return iconProps
end

local ClassIcon = Roact.PureComponent:extend("ClassIcon")

function ClassIcon:init()
self.state = {
iconProps = nil,
}
end

function ClassIcon:updateIcon()
local props = self.props
local iconProps = getRecoloredClassIcon(props.className, props.color)
self:setState({
iconProps = iconProps,
})
end

function ClassIcon:didMount()
self:updateIcon()
end

function ClassIcon:didUpdate(lastProps)
if lastProps.className ~= self.props.className or lastProps.color ~= self.props.color then
self:updateIcon()
end
end

function ClassIcon:render()
local iconProps = self.state.iconProps
if not iconProps then
return nil
end

return e(
"ImageLabel",
{
Size = self.props.size,
Position = self.props.position,
LayoutOrder = self.props.layoutOrder,
AnchorPoint = self.props.anchorPoint,
ImageTransparency = self.props.transparency,
Image = iconProps.Image,
ImageRectOffset = iconProps.ImageRectOffset,
ImageRectSize = iconProps.ImageRectSize,
BackgroundTransparency = 1,
},
if iconProps.EditableImagePixels
then e(EditableImage, {
size = iconProps.EditableImageSize,
pixels = iconProps.EditableImagePixels,
})
else nil
)
end

return ClassIcon
41 changes: 41 additions & 0 deletions plugin/src/App/Components/EditableImage.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
local Rojo = script:FindFirstAncestor("Rojo")
local Packages = Rojo.Packages

local Roact = require(Packages.Roact)

local e = Roact.createElement

local EditableImage = Roact.PureComponent:extend("EditableImage")

function EditableImage:init()
self.ref = Roact.createRef()
end

function EditableImage:writePixels()
local image = self.ref.current
if not image then
return
end
if not self.props.pixels then
return
end

image:WritePixels(Vector2.zero, self.props.size, self.props.pixels)
end

function EditableImage:render()
return e("EditableImage", {
Size = self.props.size,
[Roact.Ref] = self.ref,
})
end

function EditableImage:didMount()
self:writePixels()
end

function EditableImage:didUpdate()
self:writePixels()
end

return EditableImage
8 changes: 4 additions & 4 deletions plugin/src/App/Components/PatchVisualizer/ChangeList.lua
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ function ChangeList:render()

local headerRow = changes[1]
local headers = e("Frame", {
Size = UDim2.new(1, 0, 0, 30),
Size = UDim2.new(1, 0, 0, 24),
BackgroundTransparency = rowTransparency,
BackgroundColor3 = theme.Diff.Row,
LayoutOrder = 0,
Expand Down Expand Up @@ -214,7 +214,7 @@ function ChangeList:render()
local isWarning = metadata.isWarning

rows[row] = e("Frame", {
Size = UDim2.new(1, 0, 0, 30),
Size = UDim2.new(1, 0, 0, 24),
BackgroundTransparency = row % 2 ~= 0 and rowTransparency or 1,
BackgroundColor3 = theme.Diff.Row,
BorderSizePixel = 0,
Expand Down Expand Up @@ -269,8 +269,8 @@ function ChangeList:render()
}, {
Headers = headers,
Values = e(ScrollingFrame, {
size = UDim2.new(1, 0, 1, -30),
position = UDim2.new(0, 0, 0, 30),
size = UDim2.new(1, 0, 1, -24),
position = UDim2.new(0, 0, 0, 24),
contentSize = self.contentSize,
transparency = props.transparency,
}, rows),
Expand Down
Loading
Loading