DHMOControllook

Hey, I’ve been working a bit on a “new” Controllook based internally on haikudecorator.
This one would be a bit more in the skewmorphism side, where flat decorator is on the other side of. And haikudecorator in the middle.

Is there interest for me to release this?

(DHMO ~ DiHydrogenMonoxide, a chemical name for water and a very funny “fake” conspiracy theory about DHMO which acompanies it)
Here are some screenshots

In some parts this controllook just reuses/exposes functionality already in HaikuControlLook. I am planning to change the scrollbar knob and drawing itself aswell though.

7 Likes

Nice. It already looks quite interesting. I can’t wait to have fun with it.

1 Like

Nice, if you could just reduce the gradients a bit on the menus they will look much nicer, they are quite visible. are the buttons slightly rounded or is it just my eyes playing a tricks on me?

Yes, they are.

But the menus aren’t! for the consistency they should too in my opinion.

Let him time to work on it. It’s only the beginning and menus a tricky part.

The only visual change compared to haikucontrollook yet is the rounded buttons and scrollbar aswell as the arrow color in the scrollbar.

I don’t see any menus in the screenshot?
anyhow the gradient currently matches HaikucontrolLook (bottom screenshot)
I will work on those a bit later, first I want to redo the scrollbar thumb.

I’ve been trying a bit to draw scrollbars and have hit a bit of a wall, my code doesn’t draw anything… and I am not sure why, I suppose I am doing something wrong : )

maybe someone could take a look?

void
DHMOControlLook::DrawScrollBarThumb(BView* view, BRect& rect,
	const BRect& updateRect, const rgb_color& base, uint32 flags,
	orientation orientation, uint32 knobStyle)
{
	if (!rect.IsValid() || !rect.Intersects(updateRect))
		return;

	BPoint points[3];
	float cornerInset = 2.0f;

	BShape shape;
	shape.MoveTo(BPoint(rect.RightTop().x - cornerInset, rect.RightTop().y));
	points[0].x = rect.top - cornerInset / 2;
	points[0].y = rect.right;
	points[1].x = rect.top;
	points[1].y = rect.right + cornerInset / 2;
	points[2].x = rect.top;
	points[2].y = rect.right + cornerInset;
	shape.BezierTo(points);
	shape.LineTo(BPoint(rect.RightBottom().x + cornerInset, rect.RightBottom().y));
	points[0].x = rect.bottom + cornerInset / 2;
	points[0].y = rect.right;
	points[1].x = rect.bottom;
	points[1].y = rect.right - cornerInset / 2;
	points[2].x = rect.bottom;
	points[2].y = rect.right - cornerInset;
	shape.BezierTo(points);
	shape.Close();

    view->SetHighColor(ui_color(B_SCROLL_BAR_THUMB_COLOR));
    view->MovePenTo(B_ORIGIN);
    view->FillShape(&shape);
}

I expect it to draw the right part of the scrollbar segment, but instead nothing is drawn at all. the area keeps the color of whatever was on screen before.

edit: this is my current understanding of the drawing system, and what i think my code should draw. perhaps it is wrong entirely

1 Like

all the ‘yes’ please :slight_smile:

2 Likes

Nice to see your progress on this. Now, arrow widgets are looking really squared in comparison but I don’t see how to make that better… I guess that next you want to make the thumb centred and perhaps a bit bigger?

Hmm, what do you mean by center the thumb?

Something like that… Sans titre

Ah, that wasn’t supposed to be a thum but a radial glow.
It’s going from a lightened color to transparent… So I have no idea where the black outline is coming from, this may be a bug

You may want to SetDrawingMode(B_OP_ALPHA) and have a look at different options for SetBlendingMode, if you haven’t already done so.

The default B_OP_COPY mode just puts the pixels in the destination, so when you are drawing a transparent pixel that’s what you get, and what you “see through it” is not what you already had drawn, but I guess the background colour or maybe whatever is under that view. B_OP_ALPHA does blend what you are drawing with what is already drawn.

Citing the Be Book for copy mode:

If the source image contains transparent pixels, their transparency will be retained in the result; the transparent value is copied just like any other color. However, the appearance of a transparent pixel when shown on-screen is indeterminate.

1 Like

Thanks, I’d not considered it. Sadly B_OP_ALPHA and SetBlendingMode don’t seem to be documented, but i’m used to sailing unfamiliar territory :smiley:

I think this already looks much nicer

1 Like

I’ve uploaded an early version for comments: https://review.haiku-os.org/c/haiku/+/6211

They are documented in the Be Book and I think also in the BeOS R5 or R4.5 release notes (included in some versions of the bebook, but not in the one we got from Access)

I can’t find B_OP_ALPHA or SetBlendingMode and the associated arguments in the BeBook, I can find the other Drawing modes though.
I had assumed this is a Haiku addition, but I don’t know that for sure.

https://www.haiku-os.org/legacy-docs/bebook/BView.html#BView_SetBlendingMode

1 Like