From 2b3fa980eef95851707b1838f7f374eaf3ec888b Mon Sep 17 00:00:00 2001 From: Misha Mikhasenko Date: Thu, 25 Mar 2021 14:34:52 +0100 Subject: [PATCH] alighment --- src/backends/gr.jl | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/backends/gr.jl b/src/backends/gr.jl index 9dc305f9..12bebe41 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -568,6 +568,27 @@ end gr_view_xcenter(viewport_plotarea) = 0.5 * (viewport_plotarea[1] + viewport_plotarea[2]) gr_view_ycenter(viewport_plotarea) = 0.5 * (viewport_plotarea[3] + viewport_plotarea[4]) +gr_view_xposition(viewport_plotarea, position) = viewport_plotarea[1] + position * (viewport_plotarea[2] - viewport_plotarea[1]) +gr_view_yposition(viewport_plotarea, position) = viewport_plotarea[3] + position * (viewport_plotarea[4] - viewport_plotarea[3]) + +function position(symb) + if symb == :top || symb == :right + return 0.95 + elseif symb == :left || symb == :bottom + return 0.05 + end + return 0.5 +end + +function alignment(symb) + if symb == :top || symb == :right + return GR.TEXT_HALIGN_RIGHT + elseif symb == :left || symb == :bottom + return GR.TEXT_HALIGN_LEFT + end + return GR.TEXT_HALIGN_CENTER +end + function gr_legend_pos(sp::Subplot, w, h, viewport_plotarea) legend_leftw, legend_rightw, legend_textw, x_legend_offset = w legend_dy, legendh, y_legend_offset = h @@ -1564,12 +1585,14 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) if xaxis[:guide] != "" h = 0.01 + gr_axis_height(sp, xaxis) gr_set_font(guidefont(xaxis), sp) + xposition = gr_view_xposition(viewport_plotarea, position(xaxis[:guidefonthalign])) + xalign = alignment(xaxis[:guidefonthalign]) if xaxis[:guide_position] == :top || (xaxis[:guide_position] == :auto && xaxis[:mirror] == true) - GR.settextalign(GR.TEXT_HALIGN_CENTER, GR.TEXT_VALIGN_TOP) - gr_text(gr_view_xcenter(viewport_plotarea), viewport_plotarea[4] + h, xaxis[:guide]) + GR.settextalign(xalign, GR.TEXT_VALIGN_TOP) + gr_text(xposition, viewport_plotarea[4] + h, xaxis[:guide]) else - GR.settextalign(GR.TEXT_HALIGN_CENTER, GR.TEXT_VALIGN_BOTTOM) - gr_text(gr_view_xcenter(viewport_plotarea), viewport_plotarea[3] - h, xaxis[:guide]) + GR.settextalign(xalign, GR.TEXT_VALIGN_BOTTOM) + gr_text(xposition, viewport_plotarea[3] - h, xaxis[:guide]) end end @@ -1577,12 +1600,14 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) w = 0.02 + gr_axis_width(sp, yaxis) gr_set_font(guidefont(yaxis), sp) GR.setcharup(-1, 0) + yposition = gr_view_yposition(viewport_plotarea, position(yaxis[:guidefontvalign])) + yalign = alignment(yaxis[:guidefontvalign]) if yaxis[:guide_position] == :right || (yaxis[:guide_position] == :auto && yaxis[:mirror] == true) - GR.settextalign(GR.TEXT_HALIGN_CENTER, GR.TEXT_VALIGN_BOTTOM) - gr_text(viewport_plotarea[2] + w, gr_view_ycenter(viewport_plotarea), yaxis[:guide]) + GR.settextalign(yalign, GR.TEXT_VALIGN_BOTTOM) + gr_text(viewport_plotarea[2] + w, yposition, yaxis[:guide]) else - GR.settextalign(GR.TEXT_HALIGN_CENTER, GR.TEXT_VALIGN_TOP) - gr_text(viewport_plotarea[1] - w, gr_view_ycenter(viewport_plotarea), yaxis[:guide]) + GR.settextalign(yalign, GR.TEXT_VALIGN_TOP) + gr_text(viewport_plotarea[1] - w, yposition, yaxis[:guide]) end end end