mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-04 16:38:16 +02:00

Here is the run down of what it includes - -Vasily Volchenko's Updated Russian Localizations -improvements to GTK Styles/SysColors -initial GTK Palette code - (untested, and for now useless) -Hint Windows and Modal dialogs now try to stay transient to the main program form, aka they stay on top of the main form and usually minimize/maximize with it. -fixes to Form BorderStyle code(tool windows needed a border) -fixes DrawFrameControl DFCS_BUTTONPUSH to match Win32 better when flat -fixes DrawFrameControl DFCS_BUTTONCHECK to match Win32 better and to match GTK theme better. It works most of the time now, but some themes, noteably Default, don't work. -fixes bug in Bitmap code which broke compiling in NoGDKPixbuf mode. -misc other cleanups/ fixes in gtk interface -speedbutton's should now draw correctly when flat in Win32 -I have included an experimental new CheckBox(disabled by default) which has initial support for cbGrayed(Tri-State), and WordWrap, and misc other improvements. It is not done, it is mostly a quick hack to test DrawFrameControl DFCS_BUTTONCHECK, however it offers many improvements which can be seen in cbsCheck/cbsCrissCross (aka non-themed) state. -fixes Message Dialogs to more accurately determine button Spacing/Size, and Label Spacing/Size based on current System font. -fixes MessageDlgPos, & ShowMessagePos in Dialogs -adds InputQuery & InputBox to Dialogs -re-arranges & somewhat re-designs Control Tabbing, it now partially works - wrapping around doesn't work, and subcontrols(Panels & Children, etc) don't work. TabOrder now works to an extent. I am not sure what is wrong with my code, based on my other tests at least wrapping and TabOrder SHOULD work properly, but.. Anyone want to try and fix? -SynEdit(Code Editor) now changes mouse cursor to match position(aka over scrollbar/gutter vs over text edit) -adds a TRegion property to Graphics.pp, and Canvas. Once I figure out how to handle complex regions(aka polygons) data properly I will add Region functions to the canvas itself (SetClipRect, intersectClipRect etc.) -BitBtn now has a Stored flag on Glyph so it doesn't store to lfm/lrs if Glyph is Empty, or if Glyph is not bkCustom(aka bkOk, bkCancel, etc.) This should fix most crashes with older GDKPixbuf libs. git-svn-id: trunk@3373 -
122 lines
4.6 KiB
PHP
122 lines
4.6 KiB
PHP
// included by buttons.pp
|
|
|
|
{
|
|
*****************************************************************************
|
|
* *
|
|
* This file is part of the Lazarus Component Library (LCL) *
|
|
* *
|
|
* See the file COPYING.LCL, included in this distribution, *
|
|
* for details about the copyright. *
|
|
* *
|
|
* 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. *
|
|
* *
|
|
*****************************************************************************
|
|
}
|
|
|
|
{------------------------------------------------------------------------------}
|
|
{ TButtonGlyph Constructor }
|
|
{------------------------------------------------------------------------------}
|
|
constructor TButtonGlyph.Create;
|
|
begin
|
|
// Inherited Create;
|
|
FOriginal := TBitmap.Create;
|
|
FOriginal.Handle := 0;
|
|
FOriginal.OnChange := @GlyphChanged;
|
|
end;
|
|
|
|
{------------------------------------------------------------------------------}
|
|
{ TButtonGlyph destructor }
|
|
{------------------------------------------------------------------------------}
|
|
destructor TButtonGlyph.Destroy;
|
|
Begin
|
|
FOriginal.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
{------------------------------------------------------------------------------}
|
|
{ TButtonGlyph SetGlyph }
|
|
{------------------------------------------------------------------------------}
|
|
procedure TButtonGlyph.SetGlyph(Value : TBitmap);
|
|
var
|
|
GlyphCount : integer;
|
|
begin
|
|
if FOriginal = Value then exit;
|
|
// FOriginal.Assign(Value);
|
|
FOriginal.Free;
|
|
FOriginal:= Value;
|
|
FOriginal.OnChange := @GlyphChanged;
|
|
FNumGlyphs:=1;
|
|
if (FOriginal <> nil) and (FOriginal.Height > 0) then begin
|
|
if FOriginal.Width mod FOriginal.Height = 0 then begin
|
|
GlyphCount:= FOriginal.Width div FOriginal.Height;
|
|
if GlyphCount > 4 then GlyphCount:= 1;
|
|
FNumGlyphs:= GlyphCount;
|
|
end;
|
|
end;
|
|
GlyphChanged(FOriginal);
|
|
end;
|
|
|
|
procedure TButtonGlyph.GlyphChanged(Sender: TObject);
|
|
begin
|
|
if Sender = FOriginal then
|
|
if Assigned(FOnChange) then FOnChange(Self);
|
|
end;
|
|
|
|
{------------------------------------------------------------------------------}
|
|
{ TButtonGlyph Draw }
|
|
{------------------------------------------------------------------------------}
|
|
Function TButtonGlyph.Draw(Canvas: TCanvas; const Client: TRect;
|
|
const Offset: TPoint; State: TButtonState; Transparent: Boolean;
|
|
BiDiFlags: Longint): TRect;
|
|
var
|
|
gWidth : integer;
|
|
gHeight : integer;
|
|
DestRect: TRect;
|
|
ImgID: integer;
|
|
begin
|
|
if FOriginal = nil then Exit;
|
|
if (FOriginal.Width = 0) or (FOriginal.Height = 0) then Exit;
|
|
|
|
gWidth := TPixMap(FOriginal).Width;
|
|
gHeight := TPixMap(FOriginal).Height;
|
|
if NumGlyphs > 1 then
|
|
gWidth := gWidth div NumGlyphs;
|
|
|
|
ImgID:=0;
|
|
case State of
|
|
bsDisabled: if NumGlyphs>1 then ImgID:=1;
|
|
bsDown: if NumGlyphs>2 then ImgID:=2;
|
|
end;
|
|
|
|
Result := Rect((ImgID*gWidth), 0, ((ImgID+1)*gWidth), gHeight);
|
|
DestRect:=Client;
|
|
inc(DestRect.Left,Offset.X);
|
|
inc(DestRect.Top,Offset.Y);
|
|
If DestRect.Right > DestRect.Left + Result.Right - Result.Left then
|
|
DestRect.Right := DestRect.Left + Result.Right - Result.Left;
|
|
If DestRect.Bottom > DestRect.Top + gHeight then
|
|
DestRect.Bottom := DestRect.Top + gHeight;
|
|
If (Result.Right - Result.Left) <> (DestRect.Right - DestRect.Left) then
|
|
Result.Right := Result.Left + DestRect.Right - DestRect.Left;
|
|
If (Result.Bottom - Result.Top) <> (DestRect.Bottom - DestRect.Top) then
|
|
Result.Bottom := Result.Top + DestRect.Bottom - DestRect.Top;
|
|
Canvas.Copyrect(DestRect, TPixmap(FOriginal).Canvas, Result)
|
|
end;
|
|
|
|
|
|
{------------------------------------------------------------------------------}
|
|
{ TButtonGlyph SetNumGlyphs }
|
|
{------------------------------------------------------------------------------}
|
|
procedure TButtonGlyph.SetNumGlyphs(Value : TNumGlyphs);
|
|
begin
|
|
if Value <> FNumGlyphs then begin
|
|
FNumGlyphs := Value;
|
|
GlyphChanged(FOriginal);
|
|
end;
|
|
end;
|
|
|
|
// included by buttons.pp
|
|
|