Private
Public Access
1
0

implement bubble view

This commit is contained in:
2025-04-30 19:12:00 -07:00
parent e976b3db4c
commit 4c7c31ab8d
6 changed files with 368 additions and 51 deletions

View File

@@ -1,5 +1,6 @@
using Adw;
using Gtk;
using Gee;
public class MessageListView : Adw.Bin
{
@@ -19,55 +20,14 @@ public class MessageListView : Adw.Bin
var header_bar = new Adw.HeaderBar();
header_bar.set_title_widget(new Label("Messages"));
container.add_top_bar(header_bar);
// Create test message set
var messages = new TreeSet<Message>();
messages.add(new Message("Hello, world!", 1, "user"));
messages.add(new Message("How, are you?", 2, null));
messages.add(new Message("I'm fine, thank you!", 3, "user"));
messages.add(new Message("GTK also supports color expressions, which allow colors to be transformed to new ones and can be nested, providing a rich language to define colors. Color expressions resemble functions, taking 1 or more colors and in some cases a number as arguments.", 4, "user"));
message_drawing_area.set_messages(messages);
}
}
private class MessageDrawingArea : Widget {
public MessageDrawingArea() {
}
public override SizeRequestMode get_request_mode() {
return SizeRequestMode.HEIGHT_FOR_WIDTH;
}
public override void measure(Orientation orientation, int for_size, out int minimum, out int natural, out int minimum_baseline, out int natural_baseline) {
GLib.message("Measure orientation: %s, for_size: %d", orientation.to_string(), for_size);
if (orientation == Orientation.HORIZONTAL) {
// Horizontal, so we take up the full width provided
minimum = 0;
natural = for_size;
} else {
GLib.message("Vertical measure for width: %d", for_size);
minimum = 1500;
natural = 1500;
}
minimum_baseline = -1;
natural_baseline = -1;
}
public override void snapshot(Snapshot snapshot) {
var width = get_width();
var height = get_height();
GLib.message("Snapshot width: %d, height: %d", width, height);
var rect = Graphene.Rect().init(0, 0, width, height);
snapshot.append_color({1.0f, 0.0f, 0.0f, 1.0f}, rect);
// Create a text layout
var layout = create_pango_layout("Hello World!");
layout.set_width(width * Pango.SCALE);
// Set text attributes
var font_desc = Pango.FontDescription.from_string("Sans 14");
layout.set_font_description(font_desc);
// Draw the text in white
snapshot.append_layout(layout, Gdk.RGBA() { red = 1.0f, green = 1.0f, blue = 1.0f, alpha = 1.0f });
}
}