Example #1
0
void
gimp_view_renderer_set_size (GimpViewRenderer *renderer,
                             gint              view_size,
                             gint              border_width)
{
  gint width;
  gint height;

  g_return_if_fail (GIMP_IS_VIEW_RENDERER (renderer));
  g_return_if_fail (view_size >  0 &&
                    view_size <= GIMP_VIEWABLE_MAX_PREVIEW_SIZE);
  g_return_if_fail (border_width >= 0 &&
                    border_width <= GIMP_VIEW_MAX_BORDER_WIDTH);

  renderer->size = view_size;

  if (renderer->viewable)
    {
      gimp_viewable_get_preview_size (renderer->viewable,
                                      view_size,
                                      renderer->is_popup,
                                      renderer->dot_for_dot,
                                      &width, &height);
    }
  else
    {
      width  = view_size;
      height = view_size;
    }

  gimp_view_renderer_set_size_full (renderer, width, height, border_width);
}
Example #2
0
static void
gimp_view_size_allocate (GtkWidget     *widget,
                         GtkAllocation *allocation)
{
    GimpView *view = GIMP_VIEW (widget);
    gint      width;
    gint      height;

    if (view->expand)
    {
        width  = MIN (GIMP_VIEWABLE_MAX_PREVIEW_SIZE,
                      allocation->width - 2 * view->renderer->border_width);
        height = MIN (GIMP_VIEWABLE_MAX_PREVIEW_SIZE,
                      allocation->height - 2 * view->renderer->border_width);

        if (view->renderer->width  != width ||
                view->renderer->height != height)
        {
            gint border_width = view->renderer->border_width;

            if (view->renderer->size != -1 && view->renderer->viewable)
            {
                gint view_width;
                gint view_height;
                gint scaled_width;
                gint scaled_height;

                gimp_viewable_get_preview_size (view->renderer->viewable,
                                                GIMP_VIEWABLE_MAX_PREVIEW_SIZE,
                                                view->renderer->is_popup,
                                                view->renderer->dot_for_dot,
                                                &view_width,
                                                &view_height);

                gimp_viewable_calc_preview_size (view_width, view_height,
                                                 width, height,
                                                 TRUE, 1.0, 1.0,
                                                 &scaled_width, &scaled_height,
                                                 NULL);

                if (scaled_width > width)
                {
                    scaled_height = scaled_height * width / scaled_width;
                    scaled_width  = scaled_width  * width / scaled_width;
                }
                else if (scaled_height > height)
                {
                    scaled_width  = scaled_width  * height / scaled_height;
                    scaled_height = scaled_height * height / scaled_height;
                }

                gimp_view_renderer_set_size (view->renderer,
                                             MAX (scaled_width, scaled_height),
                                             border_width);
            }
            else
            {
                gimp_view_renderer_set_size_full (view->renderer,
                                                  width, height,
                                                  border_width);
            }

            gimp_view_renderer_remove_idle (view->renderer);
        }
    }

    width  = (view->renderer->width +
              2 * view->renderer->border_width);
    height = (view->renderer->height +
              2 * view->renderer->border_width);

    if (allocation->width > width)
        allocation->x += (allocation->width - width) / 2;

    if (allocation->height > height)
        allocation->y += (allocation->height - height) / 2;

    allocation->width  = width;
    allocation->height = height;

    gtk_widget_set_allocation (widget, allocation);

    if (gtk_widget_get_realized (widget))
        gdk_window_move_resize (view->event_window,
                                allocation->x,
                                allocation->y,
                                allocation->width,
                                allocation->height);
}