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

Extend button resizing to include height #8562

Open
wants to merge 25 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
f9d11d8
Button height
zenseii Mar 18, 2024
0f0bef9
Initial draft of the extended button resize function
zenseii Apr 9, 2024
11d22de
Address clang analyzer
zenseii Apr 9, 2024
3fe0be0
Add heightening and widening buttons
zenseii Aug 27, 2024
fb493be
Code style
zenseii Aug 27, 2024
073e742
Typo
zenseii Aug 27, 2024
66a8407
Merge remote-tracking branch 'upstream/master' into button-height-resize
zenseii Aug 27, 2024
b2a0691
first run of fine-tuning button properties
zenseii Aug 28, 2024
568bfd5
Paraphrase comment
zenseii Aug 28, 2024
3abeeef
Add last button specific values
zenseii Aug 28, 2024
14c15d8
Increase max button size
zenseii Aug 28, 2024
8c5069e
Reduce the vertical empty button by 1px
zenseii Aug 28, 2024
a0c0051
Small adjustments to unify good and evil
zenseii Aug 28, 2024
66d734a
Code style
zenseii Aug 28, 2024
09d18b6
Remove Todos, add assertions
zenseii Aug 28, 2024
e2742cd
Get button background color from central point
zenseii Aug 30, 2024
95cc0da
Avoid widening of vertical buttons
zenseii Aug 30, 2024
7ae834a
Fine tune vertical button height
zenseii Aug 31, 2024
93c5c1b
Automatic center alignment of vertical buttons
zenseii Aug 31, 2024
e527353
Readd empty line
zenseii Sep 1, 2024
29b53b9
new height and width assertion
zenseii Sep 1, 2024
e843381
Use cached original width and height
zenseii Sep 5, 2024
849f702
Actually rename centralPlace to centralPosition
zenseii Sep 5, 2024
7a4e255
move resize and reset calls
zenseii Sep 5, 2024
d3d39ae
Cache released state buttons
zenseii Sep 5, 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
40 changes: 21 additions & 19 deletions src/fheroes2/agg/agg_image.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4743,22 +4743,27 @@ namespace
fheroes2::Sprite & pressed = _icnVsSprite[id][1];

if ( originalReleased.width() > 2 && originalReleased.height() > 2 && originalPressed.width() > 2 && originalPressed.height() > 2 ) {
released.resize( originalReleased.width() + 1, originalReleased.height() + 1 );
pressed.resize( originalPressed.width() + 1, originalPressed.height() + 1 );
released.resize( originalReleased.width() + 1, originalReleased.height() );
pressed.resize( originalPressed.width() + 1, originalPressed.height() );
released.reset();
pressed.reset();

Copy( originalReleased, 0, 0, released, 1, 0, originalReleased.width(), originalReleased.height() );
Copy( originalPressed, 0, 0, pressed, 1, 0, originalPressed.width(), originalPressed.height() );
// Shorten the button by 1 pixel in the height so that it is evenly divided by 5 in resizeButton() in ui_button.cpp
Copy( originalReleased, 0, 0, released, 1, 0, originalReleased.width(), originalReleased.height() - 7 );
Copy( originalPressed, 0, 0, pressed, 1, 0, originalPressed.width(), originalPressed.height() - 7 );
Copy( originalReleased, 0, originalReleased.height() - 7, released, 1, originalReleased.height() - 8, originalReleased.width(),
originalReleased.height() - 7 );
Copy( originalPressed, 0, originalPressed.height() - 7, pressed, 1, originalPressed.height() - 8, originalPressed.width(), originalPressed.height() - 7 );

FillTransform( released, 1, 4, 1, released.height() - 4, 1 );

// Fix the carried over broken transform layer of the original vertical button that is being used.
fheroes2::Image exitCommonMask = fheroes2::ExtractCommonPattern( { &released, &pressed } );
// Fix wrong non-transparent pixels of the transform layer that ExtractCommonPattern() missed.
FillTransform( exitCommonMask, 4, 2, 1, 115, 1 );
FillTransform( exitCommonMask, 5, 116, 1, 1, 1 );
FillTransform( exitCommonMask, 5, 117, 18, 1, 1 );
FillTransform( exitCommonMask, exitCommonMask.width() - 4, 114, 1, 2, 1 );
FillTransform( exitCommonMask, 4, 2, 1, 114, 1 );
FillTransform( exitCommonMask, 5, 115, 1, 2, 1 );
FillTransform( exitCommonMask, 6, 116, 17, 1, 1 );
FillTransform( exitCommonMask, exitCommonMask.width() - 4, 113, 1, 2, 1 );

invertTransparency( exitCommonMask );
// Make the extended width and height lines transparent.
Expand All @@ -4771,23 +4776,20 @@ namespace
// Restore dark-brown lines on the left and bottom borders of the button backgrounds.
const fheroes2::Sprite & originalDismiss = fheroes2::AGG::GetICN( ICN::HSBTNS, 0 );

Copy( originalReleased, 0, 4, released, 1, 4, 1, released.height() - 4 );
Copy( originalDismiss, 6, originalDismiss.height() - 7, released, 2, released.height() - 1, 22, 1 );
Copy( originalDismiss, 6, originalDismiss.height() - 7, released, 1, released.height() - 1, 1, 1 );

Copy( originalPressed, 0, 4, pressed, 1, 4, 1, pressed.height() - 4 );
Copy( originalDismiss, 6, originalDismiss.height() - 7, pressed, 2, pressed.height() - 1, 22, 1 );
Copy( originalDismiss, 6, originalDismiss.height() - 7, pressed, 1, pressed.height() - 1, 1, 1 );
Copy( originalReleased, 0, 4, released, 1, 4, 1, originalReleased.height() - 4 );
Copy( originalDismiss, 6, originalDismiss.height() - 7, released, 2, originalReleased.height() - 1, 22, 1 );
Copy( originalPressed, 0, 4, pressed, 1, 4, 1, originalPressed.height() - 4 );
Copy( originalDismiss, 6, originalDismiss.height() - 7, pressed, 2, originalPressed.height() - 1, 22, 1 );

// Clean the button states' text areas.
Fill( released, 6, 4, 18, 111, getButtonFillingColor( true ) );
Fill( pressed, 5, 5, 18, 111, getButtonFillingColor( false ) );
Fill( released, 6, 4, 18, 110, getButtonFillingColor( true ) );
Fill( pressed, 5, 5, 18, 110, getButtonFillingColor( false ) );

// Make the background transparent by removing remaining red background pieces.
// Make the pressed background transparent by removing remaining red parts.
FillTransform( pressed, 5, 0, 21, 1, 1 );
FillTransform( pressed, pressed.width() - 3, 1, 2, 1, 1 );
FillTransform( pressed, pressed.width() - 2, 2, 2, 1, 1 );
FillTransform( pressed, pressed.width() - 1, 3, 1, pressed.height() - 6, 1 );
FillTransform( pressed, pressed.width() - 1, 3, 1, originalPressed.height() - 5, 1 );
}

return true;
Expand Down
Loading
Loading