diff options
author | Camil Staps | 2019-10-20 13:37:33 +0200 |
---|---|---|
committer | Camil Staps | 2019-10-20 13:37:33 +0200 |
commit | 182eac71699784d3e2a44437452546a4b0c2d995 (patch) | |
tree | a0c82a0eea2dd0e023e458ea3f56fcdc4ac43804 /src/Gtk | |
parent | Make GtkTextView not editable (diff) |
Move position of GtkFrame label; add framed helper combinator
Diffstat (limited to 'src/Gtk')
-rw-r--r-- | src/Gtk/Internal.dcl | 1 | ||||
-rw-r--r-- | src/Gtk/Internal.icl | 16 | ||||
-rw-r--r-- | src/Gtk/Widgets.dcl | 1 | ||||
-rw-r--r-- | src/Gtk/Widgets.icl | 10 |
4 files changed, 28 insertions, 0 deletions
diff --git a/src/Gtk/Internal.dcl b/src/Gtk/Internal.dcl index eda7f32..ba30123 100644 --- a/src/Gtk/Internal.dcl +++ b/src/Gtk/Internal.dcl @@ -20,6 +20,7 @@ gtk_box_pack_end :: !Pointer !Pointer !Bool !Bool !Int !.a -> .a gtk_container_add :: !Pointer !Pointer !.a -> .a gtk_frame_new :: !(Maybe String) !.a -> (!Pointer, !.a) +gtk_frame_set_label_align :: !Pointer !Real !Real !.a -> .a gtk_init :: !.a -> .a diff --git a/src/Gtk/Internal.icl b/src/Gtk/Internal.icl index 3321bf2..5b49160 100644 --- a/src/Gtk/Internal.icl +++ b/src/Gtk/Internal.icl @@ -69,6 +69,22 @@ where ccall gtk_frame_new "s:p:A" } +// TODO: convert double to float properly +gtk_frame_set_label_align :: !Pointer !Real !Real !.a -> .a +gtk_frame_set_label_align frame xalign yalign env = code { + | cvtsd2ss %xmm0,%xmm0 + instruction 242 + instruction 15 + instruction 90 + instruction 192 + | cvtsd2ss %xmm1,%xmm1 + instruction 242 + instruction 15 + instruction 90 + instruction 201 + ccall gtk_frame_set_label_align "pRR:V:A" +} + gtk_init :: !.a -> .a gtk_init env = init 0 0 env where diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl index b4a9849..03b56b7 100644 --- a/src/Gtk/Widgets.dcl +++ b/src/Gtk/Widgets.dcl @@ -38,6 +38,7 @@ instance gtkWidget GtkFrame instance gtkContainer GtkFrame newFrame :: !GtkLabel !w -> State GtkState GtkFrame | gtkWidget w +framed :: !GtkLabel !(State GtkState w) -> State GtkState (w, GtkFrame) | gtkWidget w :: GtkPaned instance gtkWidget GtkPaned diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl index 5413dd5..d9f7a59 100644 --- a/src/Gtk/Widgets.icl +++ b/src/Gtk/Widgets.icl @@ -6,6 +6,8 @@ import StdMaybe import Control.Monad import Control.Monad.Identity import Control.Monad.State +import Data.Functor +import Data.Tuple import System._Pointer import qualified Gtk.Internal as I @@ -52,9 +54,17 @@ instance gtkContainer GtkFrame where gtkContainer f = f newFrame :: !GtkLabel !w -> State GtkState GtkFrame | gtkWidget w newFrame label widget = toStateR ('I'.gtk_frame_new (case label of Label l -> Just l; _ -> Nothing)) >>= \frame -> + (case label of + Label _ -> toState ('I'.gtk_frame_set_label_align frame 0.02 0.5) + NoLabel -> pure ()) >>| addToContainer widget frame >>| show frame +framed :: !GtkLabel !(State GtkState w) -> State GtkState (w, GtkFrame) | gtkWidget w +framed label widgetf = + widgetf >>= \widget -> + tuple widget <$> newFrame label widget + :: GtkPaned :== Pointer instance gtkWidget GtkPaned where gtkWidget p = p |