Okay,

It appears there is an issue with the default font in Control.cs. In  libgdiplus, in file font.c, in the function GdipGetFontHeightGivenDPI(...), the calls to GdipGetEmHeight(...) and GdipGetLineSpacing(...) both give 0 as returns, from which the font height is set to 0/0... OOOPS. This is the source of the bad values in the ScrollBar code... The following source will give the erroneous value in a MessageBox.

Emery

------------------------------------------

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

public class Test : Form
{
       private Test()
       {
               MessageBox.Show("Font.Height=" + Font.Height);
       }

       public static void Main(String[] args)
       {
               Test form = new Test();
               Application.Run(form);
       }
}

On 4/18/06, Emery Conrad <[EMAIL PROTECTED]> wrote:
All, it appears the issue comes through ScrollBar.set_SmallChange = Font.Height, which eventually goes back through Font.Height <-- Graphics.systemDpiY <-- Graphics.FromImage(new Bitmap(1,1)).DpiY <-- GDIPlus.GetImageGraphicsContext.. . I'm trying to find the bottom of the rabbit hole...

Who knows this code best... I'll keep trying to uncover it, but a pointer would be nice! (I'm having fun hacking though...)

Emery



On 4/18/06, Emery Conrad <[EMAIL PROTECTED]> wrote:
I've run into the same issue repeatedly over the last several iterations of releases... in 1.1.9.2 , this bug wasn't there. When I change the code to give the values of max and min for the scroll bar, they are both set to -214783648. Somewhere, one of the calculations (maybe thumb_area?) is off.

I've just starting my digging into the ScrollBar code... probably someone else will figure this out before me!!

Emery



On 4/18/06, PFJ <[EMAIL PROTECTED]> wrote:
Hi,

I have a small image viewer which has been working for quite a while
now. However, I've just come to run it and it throws up an error after
loading a jpeg

Unhandled Exception: System.ArgumentException : '-214783648' not a valid
value for 'Value'. 'Value' should be between 'Minimum' and 'Maximum'
<in 0x00163> System.Windows.Forms.ScrollBar:set_Value(Int32 value)

The jpeg is a valid jpeg (displays in eye of gnome)

Any ideas what is happening? Source code and throwback is attached.

As always, I'm happy to BZ this and admit now that the problem could
either be in my head, on my machine, or not be anything at all because
I'm a twit at times.

mono compiled from source (svn) at about 10.30 British Summer Time

TTFN

Paul

8-->
/*
* ImageViewer.cs - Simple MDI-based image viewer.
*
* Copyright (C) 2003  Southern Storm Software, Pty Ltd.
*
* This program is free software, you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY, without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program, if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
USA
*/

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

public class ImageViewer : Form
{
        private ImageViewer()
        {
                MenuItem openMenuItem = new MenuItem("Open");
                MenuItem quitMenuItem = new MenuItem("Quit");
                MenuItem fileMenuItem =
                        new MenuItem("File", new MenuItem[]
                                {openMenuItem, quitMenuItem});
                MainMenu mainMenu = new MainMenu(new MenuItem[] { fileMenuItem });
                Menu = mainMenu;

                Size = new Size(600, 500);
                Text = "DotGNU Image Viewer";
                IsMdiContainer = true;

                openMenuItem.Click += new EventHandler(OpenClicked);
                quitMenuItem.Click += new EventHandler(QuitClicked);
        }

        private void OpenClicked(Object sender, EventArgs e)
        {
                OpenFileDialog dialog = new OpenFileDialog();
                dialog.Filter =
                        "All image files (*.bmp, *.jpg, *.png, *.gif, *.ico, *.cur)" +
                        "|*.bmp;*.jpg;*.png;*.gif;*.ico;*.cur" +
                        "|BMP files (*.bmp)|*.bmp" +
                        "|JPEG files (*.jpg)|*.jpg" +
                        "|PNG files (*.png)|*.png" +
                        "|GIF files (*.gif)|*.gif" +
                        "|Icon files (*.ico)|*.ico" +
                        "|Cursor files (*.cur)|*.cur" +
                        "|All files (*.*)|*.*";
                if(dialog.ShowDialog(this) == DialogResult.OK)
                {
                        Bitmap image;
                        try
                        {
                                image = new Bitmap( dialog.FileName);
                        }
                        catch(Exception)
                        {
                                MessageBox.Show
                                        (String.Format ("Unknown image format for \"{0}\"",
                                                                   dialog.FileName),
                                         "Error", MessageBoxButtons.OK , MessageBoxIcon.Hand);
                                image = null;
                        }
                        if(image != null)
                        {
                                ImageWindow window = new ImageWindow
                                        (dialog.FileName, image);
                                window.MdiParent = this;
                                window.Visible = true;
                        }
                }
        }

        private void QuitClicked(Object sender, EventArgs e)
        {
                Close();
        }

        protected override bool ProcessDialogKey(Keys keyData)
        {
                if(keyData == (Keys.Control | Keys.O))
                {
                        OpenClicked(this, EventArgs.Empty);
                        return true;
                }
                return base.ProcessDialogKey(keyData);
        }

        public static void Main(String[] args)
        {
                ImageViewer form = new ImageViewer();
                Application.Run(form);
        }

}

internal class ImageWindow : Form
{
        private Image image;

        public ImageWindow(String filename, Image image)
        {
                this.image = image;
                ClientSize = image.Size;
                Text = Path.GetFileName(filename);
        }

        protected override void OnPaint(PaintEventArgs args)
        {
                args.Graphics.DrawImage(image, 0, 0);
        }

}


Unhandled Exception: System.ArgumentException: '-2147483648' is not a
valid value for 'Value'. 'Value' should be between 'Minimum' and
'Maximum'
in <0x00163> System.Windows.Forms.ScrollBar:set_Value (Int32 value)
in (wrapper remoting-invoke-with-check)
System.Windows.Forms.ScrollBar:set_Value (int)
in <0x00131> System.Windows.Forms.MdiClient:CalcHBar (Int32 left, Int32
right, Int32 right_edge, Boolean vert_vis)
in <0x007d7> System.Windows.Forms.MdiClient:SizeScrollBars ()
in <0x0000a> System.Windows.Forms.MdiClient:FormLocationChanged
(System.Object sender, System.EventArgs e)
in (wrapper delegate-invoke)
System.MulticastDelegate:invoke_void_object_EventArgs
(object,System.EventArgs)
in <0x0002e> System.Windows.Forms.Control:OnLocationChanged
(System.EventArgs e)
in <0x0016a> System.Windows.Forms.Control:UpdateBounds (Int32 x, Int32
y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
in <0x00149> System.Windows.Forms.Control:UpdateBounds ()
in <0x00375> System.Windows.Forms.Control:WndProc
(System.Windows.Forms.Message m)
in <0x0000d> System.Windows.Forms.ScrollableControl:WndProc
(System.Windows.Forms.Message m)
in <0x0000d> System.Windows.Forms.ContainerControl:WndProc
(System.Windows.Forms.Message m)
in <0x00370> System.Windows.Forms.Form:WndProc
(System.Windows.Forms.Message m)
in <0x00014> System.Windows.Forms.Control+ControlNativeWindow:WndProc
(System.Windows.Forms.Message m)
in <0x0011e> System.Windows.Forms.NativeWindow:WndProc (IntPtr hWnd, Msg
msg, IntPtr wParam, IntPtr lParam)
in <0x00013> System.Windows.Forms.XplatUIX11:SendMessage (IntPtr hwnd,
Msg message, IntPtr wParam, IntPtr lParam)
in <0x0024e> System.Windows.Forms.XplatUIX11:SetVisible (IntPtr handle,
Boolean visible)
in <0x0001a> System.Windows.Forms.XplatUI:SetVisible (IntPtr handle,
Boolean visible)
in <0x0007d> System.Windows.Forms.Control:SetVisibleCore (Boolean value)
in <0x0000f> System.Windows.Forms.Form:SetVisibleCore (Boolean value)
in <0x00013> System.Windows.Forms.Control:set_Visible (Boolean value)
in (wrapper remoting-invoke-with-check)
System.Windows.Forms.Control:set_Visible (bool)
in <0x00144> ImageViewer:OpenClicked (System.Object sender,
System.EventArgs e)
in (wrapper delegate-invoke)
System.MulticastDelegate:invoke_void_object_EventArgs
(object,System.EventArgs)
in <0x0001d> System.Windows.Forms.MenuItem:OnClick (System.EventArgs e)
in <0x00010> System.Windows.Forms.MenuItem:PerformClick ()
in (wrapper remoting-invoke-with-check)
System.Windows.Forms.MenuItem:PerformClick ()
in <0x00377> System.Windows.Forms.MenuTracker:OnClick
(System.Windows.Forms.MouseEventArgs args)
in <0x00e61> System.Windows.Forms.Form:WndProc
(System.Windows.Forms.Message m)
in <0x00014> System.Windows.Forms.Control+ControlNativeWindow:WndProc
(System.Windows.Forms.Message m)
in <0x0011e> System.Windows.Forms.NativeWindow:WndProc (IntPtr hWnd, Msg
msg, IntPtr wParam, IntPtr lParam)
in <0x00016> System.Windows.Forms.XplatUIX11:DispatchMessage
(System.Windows.Forms.MSG msg)
in <0x00015> System.Windows.Forms.XplatUI:DispatchMessage
(System.Windows.Forms.MSG msg)
in <0x005fe> System.Windows.Forms.Application:RunLoop (Boolean Modal,
System.Windows.Forms.ApplicationContext context)
in <0x00024> System.Windows.Forms.Application:Run
(System.Windows.Forms.Form mainForm)
in <0x00024> ImageViewer:Main (System.String [] args)
<--8

--
"Logic, my dear Zoe, is merely the ability to be wrong with authority" -
Dr Who

_______________________________________________
Mono-winforms-list maillist  -   [email protected]
http://lists.ximian.com/mailman/listinfo/mono-winforms-list



--
Emery Conrad
Department of Mathematics
Virginia Tech
5076 Derring Hall
Blacksburg, VA 24061-0406
(540) 231-3324



--
Emery Conrad
Department of Mathematics
Virginia Tech
5076 Derring Hall
Blacksburg, VA 24061-0406
(540) 231-3324



--
Emery Conrad
Department of Mathematics
Virginia Tech
5076 Derring Hall
Blacksburg, VA 24061-0406
(540) 231-3324
_______________________________________________
Mono-winforms-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-winforms-list

Reply via email to